Skip to content

Commit

Permalink
Json edit widget configuration
Browse files Browse the repository at this point in the history
  • Loading branch information
domi4484 committed May 6, 2021
1 parent 9491370 commit 6fdb0a7
Show file tree
Hide file tree
Showing 8 changed files with 73 additions and 51 deletions.
9 changes: 8 additions & 1 deletion src/gui/codeeditors/qgscodeeditorjson.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
qgscodeeditorjson.cpp - A Json editor based on QScintilla
qgscodeeditorjson.cpp - A JSON editor based on QScintilla
--------------------------------------
Date : 4.5.2021
Copyright : (C) 2021 Damiano Lombardi
Expand Down Expand Up @@ -31,6 +31,8 @@ QgsCodeEditorJson::QgsCodeEditorJson( QWidget *parent )
}
setFoldingVisible( true );
QgsCodeEditorJson::initializeLexer();

connect( this, &QsciScintillaBase::SCN_HOTSPOTCLICK, this, &QgsCodeEditorJson::scintillaHotspotClick );
}

void QgsCodeEditorJson::initializeLexer()
Expand Down Expand Up @@ -66,3 +68,8 @@ void QgsCodeEditorJson::initializeLexer()
SendScintilla( SCI_STYLESETHOTSPOT, ( int )QsciLexerJSON::IRI, true );
setHotspotUnderline( true );
}

void QgsCodeEditorJson::scintillaHotspotClick( int position, int modifiers )
{

}
4 changes: 4 additions & 0 deletions src/gui/codeeditors/qgscodeeditorjson.h
Expand Up @@ -40,6 +40,10 @@ class GUI_EXPORT QgsCodeEditorJson : public QgsCodeEditor

protected:
void initializeLexer() override;

private slots:

void scintillaHotspotClick( int position, int modifiers );
};

#endif // QGSCODEEDITORJSON_H
9 changes: 3 additions & 6 deletions src/gui/editorwidgets/qgsjsoneditconfigdlg.cpp
Expand Up @@ -19,23 +19,20 @@ QgsJsonEditConfigDlg::QgsJsonEditConfigDlg( QgsVectorLayer *vl, int fieldIdx, QW
: QgsEditorConfigWidget( vl, fieldIdx, parent )
{
setupUi( this );
connect( mIsMultiline, &QGroupBox::toggled, this, &QgsEditorConfigWidget::changed );
connect( mUseHtml, &QAbstractButton::toggled, this, &QgsEditorConfigWidget::changed );
connect( mDefaultViewComboBox, QOverload<int>::of( &QComboBox::currentIndexChanged ), this, &QgsEditorConfigWidget::changed );
}


QVariantMap QgsJsonEditConfigDlg::config()
{
QVariantMap cfg;

cfg.insert( QStringLiteral( "IsMultiline" ), mIsMultiline->isChecked() );
cfg.insert( QStringLiteral( "UseHtml" ), mUseHtml->isChecked() );
cfg.insert( QStringLiteral( "DefaultView" ), mDefaultViewComboBox->currentIndex() );

return cfg;
}

void QgsJsonEditConfigDlg::setConfig( const QVariantMap &config )
{
mIsMultiline->setChecked( config.value( QStringLiteral( "IsMultiline" ) ).toBool() );
mUseHtml->setChecked( config.value( QStringLiteral( "UseHtml" ) ).toBool() );
mDefaultViewComboBox->setCurrentIndex( config.value( QStringLiteral( "DefaultView" ) ).toInt() );
}
47 changes: 27 additions & 20 deletions src/gui/editorwidgets/qgsjsoneditwidget.cpp
Expand Up @@ -23,7 +23,7 @@ QgsJsonEditWidget::QgsJsonEditWidget( QWidget *parent )
{
setupUi( this );

showText();
setView( View::Text );

connect( mTextToolButton, &QToolButton::clicked, this, &QgsJsonEditWidget::textToolButtonClicked );
connect( mTreeToolButton, &QToolButton::clicked, this, &QgsJsonEditWidget::treeToolButtonClicked );
Expand Down Expand Up @@ -56,34 +56,41 @@ bool QgsJsonEditWidget::validJson() const
return true;
}

void QgsJsonEditWidget::setView( QgsJsonEditWidget::View view ) const
{
switch ( view )
{
case View::Text:
{
mStackedWidget->setCurrentWidget( mStackedWidgetPageText );
mTextToolButton->setChecked( true );
mTreeToolButton->setChecked( false );
}
break;
case View::Tree:
{
mStackedWidget->setCurrentWidget( mStackedWidgetPageTree );
mTreeToolButton->setChecked( true );
mTextToolButton->setChecked( false );
}
break;
}
}

void QgsJsonEditWidget::textToolButtonClicked( bool checked )
{
if ( checked )
showText();
setView( View::Text );
else
showTree();
setView( View::Tree );
}

void QgsJsonEditWidget::treeToolButtonClicked( bool checked )
{
if ( checked )
showTree();
setView( View::Tree );
else
showText();
}

void QgsJsonEditWidget::showText()
{
mStackedWidget->setCurrentWidget( mStackedWidgetPageText );
mTextToolButton->setChecked( true );
mTreeToolButton->setChecked( false );
}

void QgsJsonEditWidget::showTree()
{
mStackedWidget->setCurrentWidget( mStackedWidgetPageTree );
mTreeToolButton->setChecked( true );
mTextToolButton->setChecked( false );
setView( View::Text );
}

void QgsJsonEditWidget::refreshTreeView()
Expand All @@ -97,7 +104,7 @@ void QgsJsonEditWidget::refreshTreeView()

if ( jsonDocument.isNull() )
{
showText();
setView( View::Text );
mTextToolButton->setDisabled( true );
mTreeToolButton->setDisabled( true );
mTreeToolButton->setToolTip( tr( "Invalid JSON, tree view not available" ) );
Expand Down
14 changes: 9 additions & 5 deletions src/gui/editorwidgets/qgsjsoneditwidget.h
Expand Up @@ -33,6 +33,13 @@ class GUI_EXPORT QgsJsonEditWidget : public QWidget, private Ui::QgsJsonEditWidg
Q_OBJECT

public:

enum class View : int
{
Text = 0,
Tree = 1
};

explicit QgsJsonEditWidget( QWidget *parent SIP_TRANSFERTHIS );

~QgsJsonEditWidget() override;
Expand All @@ -44,6 +51,8 @@ class GUI_EXPORT QgsJsonEditWidget : public QWidget, private Ui::QgsJsonEditWidg

bool validJson() const;

void setView( View view ) const;

private slots:

void textToolButtonClicked( bool checked );
Expand All @@ -59,11 +68,6 @@ class GUI_EXPORT QgsJsonEditWidget : public QWidget, private Ui::QgsJsonEditWidg
Value = 1
};

void showText();
void showTree();

void refreshTreeViewObject( const QJsonObject &jsonObject, QTreeWidgetItem *treeWidgetItemParent );
void refreshTreeViewArray( const QJsonArray &jsonArray, QTreeWidgetItem *treeWidgetItemParent );
void refreshTreeViewItemValue( const QJsonValue &jsonValue, QTreeWidgetItem *treeWidgetItemParent );
};

Expand Down
6 changes: 4 additions & 2 deletions src/gui/editorwidgets/qgsjsoneditwrapper.cpp
Expand Up @@ -42,7 +42,9 @@ QVariant QgsJsonEditWrapper::value() const

QWidget *QgsJsonEditWrapper::createWidget( QWidget *parent )
{
return new QgsJsonEditWidget( parent );
QgsJsonEditWidget *jsonEditWidget = new QgsJsonEditWidget( parent );
jsonEditWidget->setView( static_cast<QgsJsonEditWidget::View>( config( QStringLiteral( "DefaultView" ) ).toInt() ) );
return jsonEditWidget;
}

void QgsJsonEditWrapper::initWidget( QWidget *editor )
Expand Down Expand Up @@ -82,7 +84,7 @@ void QgsJsonEditWrapper::updateValues( const QVariant &value, const QVariantList
return;

//restore placeholder text, which may have been removed by showIndeterminateState()
mJsonEditWidget->setJsonText( value.toString() );
mJsonEditWidget->setJsonText( field().displayString( value ) );
}

void QgsJsonEditWrapper::setEnabled( bool enabled )
Expand Down
3 changes: 1 addition & 2 deletions src/gui/editorwidgets/qgsjsoneditwrapper.h
Expand Up @@ -31,8 +31,7 @@ SIP_NO_FILE
*
* Options:
* <ul>
* <li><b>IsMultiline</b> <i>If set to TRUE, a multiline widget will be used.</i></li>
* <li><b>UseHtml</b> <i>Will represent the content as HTML. Only available for multiline widgets.</i></li>
* <li><b>DefaultView</b> <i>Default view can be choosen between text or tree.</i></li>
* </ul>
* \note not available in Python bindings
*/
Expand Down
32 changes: 17 additions & 15 deletions src/ui/editorwidgets/qgsjsoneditconfigdlg.ui
Expand Up @@ -14,23 +14,25 @@
<string notr="true">Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="1">
<widget class="QComboBox" name="mDefaultViewComboBox">
<item>
<property name="text">
<string>Text</string>
</property>
</item>
<item>
<property name="text">
<string>Tree</string>
</property>
</item>
</widget>
</item>
<item row="0" column="0">
<widget class="QGroupBox" name="mIsMultiline">
<property name="title">
<string>Multiline</string>
</property>
<property name="checkable">
<bool>true</bool>
<widget class="QLabel" name="label">
<property name="text">
<string>Default view</string>
</property>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QCheckBox" name="mUseHtml">
<property name="text">
<string>HTML</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
Expand Down

0 comments on commit 6fdb0a7

Please sign in to comment.