Skip to content

Commit

Permalink
Added test for QgsJsonEditWidget
Browse files Browse the repository at this point in the history
  • Loading branch information
domi4484 committed May 10, 2021
1 parent bfc8d5e commit 9fdcda4
Show file tree
Hide file tree
Showing 11 changed files with 212 additions and 90 deletions.
12 changes: 12 additions & 0 deletions python/gui/auto_additions/qgsjsoneditwidget.py
@@ -0,0 +1,12 @@
# The following has been generated automatically from src/gui/editorwidgets/qgsjsoneditwidget.h
# monkey patching scoped based enum
QgsJsonEditWidget.View.Text.__doc__ = "JSON data displayed as text."
QgsJsonEditWidget.View.Tree.__doc__ = "JSON data displayed as tree. Tree view is disabled for invalid JSON data."
QgsJsonEditWidget.View.__doc__ = 'View mode, text or tree.\n\n' + '* ``Text``: ' + QgsJsonEditWidget.View.Text.__doc__ + '\n' + '* ``Tree``: ' + QgsJsonEditWidget.View.Tree.__doc__
# --
# monkey patching scoped based enum
QgsJsonEditWidget.FormatJson.Indented.__doc__ = "JSON data formatted with regular indentation"
QgsJsonEditWidget.FormatJson.Compact.__doc__ = "JSON data formatted as a compact one line string"
QgsJsonEditWidget.FormatJson.Disabled.__doc__ = "JSON data is not formatted"
QgsJsonEditWidget.FormatJson.__doc__ = 'Format mode in the text view\n\n' + '* ``Indented``: ' + QgsJsonEditWidget.FormatJson.Indented.__doc__ + '\n' + '* ``Compact``: ' + QgsJsonEditWidget.FormatJson.Compact.__doc__ + '\n' + '* ``Disabled``: ' + QgsJsonEditWidget.FormatJson.Disabled.__doc__
# --
44 changes: 44 additions & 0 deletions python/gui/auto_generated/codeeditors/qgscodeeditorjson.sip.in
@@ -0,0 +1,44 @@
/************************************************************************
* This file has been generated automatically from *
* *
* src/gui/codeeditors/qgscodeeditorjson.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/





class QgsCodeEditorJson : QgsCodeEditor
{
%Docstring(signature="appended")
A JSON editor based on QScintilla2. Adds syntax highlighting and
code autocompletion.

.. versionadded:: 3.14
%End

%TypeHeaderCode
#include "qgscodeeditorjson.h"
%End
public:

QgsCodeEditorJson( QWidget *parent /TransferThis/ = 0 );
%Docstring
Constructor for QgsCodeEditorJson
%End

protected:
virtual void initializeLexer();


};

/************************************************************************
* This file has been generated automatically from *
* *
* src/gui/codeeditors/qgscodeeditorjson.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/
77 changes: 77 additions & 0 deletions python/gui/auto_generated/editorwidgets/qgsjsoneditwidget.sip.in
@@ -0,0 +1,77 @@
/************************************************************************
* This file has been generated automatically from *
* *
* src/gui/editorwidgets/qgsjsoneditwidget.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/




class QgsJsonEditWidget : QWidget
{
%Docstring(signature="appended")
The :py:class:`QgsJsonEditWidget` is a widget to display JSON data in a code highlighted text or tree form.

.. versionadded:: 3.20
%End

%TypeHeaderCode
#include "qgsjsoneditwidget.h"
%End
public:

enum class View
{
Text,
Tree
};

enum class FormatJson
{
Indented,
Compact,
Disabled
};

explicit QgsJsonEditWidget( QWidget *parent /TransferThis/ = 0 );
%Docstring
Constructor for QgsJsonEditWidget.

:param parent: parent widget
%End

void setJsonText( const QString &jsonText );
%Docstring
Set the JSON text in the widget to ``jsonText``.
%End

QString jsonText() const;
%Docstring
Returns the JSON text.
%End

void setView( View view ) const;
%Docstring
Set the ``view`` mode.

.. seealso:: View
%End

void setFormatJsonMode( FormatJson formatJson );
%Docstring
Set the ``formatJson`` mode.

.. seealso:: FormatJson
%End

};

/************************************************************************
* This file has been generated automatically from *
* *
* src/gui/editorwidgets/qgsjsoneditwidget.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/
4 changes: 4 additions & 0 deletions python/gui/gui_auto.sip
Expand Up @@ -270,6 +270,9 @@
%Include auto_generated/codeeditors/qgscodeeditorjs.sip
%End
%If ( HAVE_QSCI_SIP )
%Include auto_generated/codeeditors/qgscodeeditorjson.sip
%End
%If ( HAVE_QSCI_SIP )
%Include auto_generated/codeeditors/qgscodeeditorpython.sip
%End
%If ( HAVE_QSCI_SIP )
Expand All @@ -290,6 +293,7 @@
%Include auto_generated/editorwidgets/qgsdefaultsearchwidgetwrapper.sip
%Include auto_generated/editorwidgets/qgsdoublespinbox.sip
%Include auto_generated/editorwidgets/qgshtmlwidgetwrapper.sip
%Include auto_generated/editorwidgets/qgsjsoneditwidget.sip
%Include auto_generated/editorwidgets/qgsmultiedittoolbutton.sip
%Include auto_generated/editorwidgets/qgsrelationaggregatesearchwidgetwrapper.sip
%Include auto_generated/editorwidgets/qgsrelationreferencesearchwidgetwrapper.sip
Expand Down
36 changes: 0 additions & 36 deletions src/gui/codeeditors/qgscodeeditorjson.cpp
Expand Up @@ -31,26 +31,6 @@ QgsCodeEditorJson::QgsCodeEditorJson( QWidget *parent )
}
setFoldingVisible( true );
QgsCodeEditorJson::initializeLexer();

connect( this, &QsciScintillaBase::SCN_INDICATORRELEASE, this, &QgsCodeEditorJson::scintillaIndicatorRelease );
connect( this, &QsciScintillaBase::SCN_INDICATORCLICK, this, &QgsCodeEditorJson::scintillaIndicatorClick );
}

#include <QDebug>
void QgsCodeEditorJson::addIndicator( int startPos, int size, const QVariant &value )
{
qDebug() << "addIndicator at" << startPos << "size" << size;

indicatorDefine( SquiggleIndicator, 42 );

SendScintilla( SCI_SETINDICATORCURRENT, 42 );
SendScintilla( SCI_SETINDICATORVALUE, 43 );

SendScintilla( SCI_INDICATORFILLRANGE, startPos, size );

connect( this, &QsciScintillaBase::SCN_INDICATORRELEASE, this, &QgsCodeEditorJson::scintillaIndicatorRelease );
connect( this, &QsciScintillaBase::SCN_INDICATORCLICK, this, &QgsCodeEditorJson::scintillaIndicatorClick );

}

void QgsCodeEditorJson::initializeLexer()
Expand Down Expand Up @@ -84,19 +64,3 @@ void QgsCodeEditorJson::initializeLexer()
setLineNumbersVisible( true );
runPostLexerConfigurationTasks();
}

void QgsCodeEditorJson::scintillaIndicatorRelease( int position, int modifiers )
{
int value = SendScintilla( QsciScintilla::SCI_INDICATORVALUEAT,
position );

qDebug() << "scintillaIndicatorRelease value:" << value;
}

void QgsCodeEditorJson::scintillaIndicatorClick( int position, int modifiers )
{
int value = SendScintilla( QsciScintilla::SCI_INDICATORVALUEAT,
position );

qDebug() << "scintillaIndicatorClick value:" << value;
}
6 changes: 0 additions & 6 deletions src/gui/codeeditors/qgscodeeditorjson.h
Expand Up @@ -38,15 +38,9 @@ class GUI_EXPORT QgsCodeEditorJson : public QgsCodeEditor
//! Constructor for QgsCodeEditorJson
QgsCodeEditorJson( QWidget *parent SIP_TRANSFERTHIS = nullptr );

void addIndicator( int startPos, int size, const QVariant &value = QVariant() );

protected:
void initializeLexer() override;

private slots:

void scintillaIndicatorRelease( int position, int modifiers );
void scintillaIndicatorClick( int position, int modifiers );
};

#endif // QGSCODEEDITORJSON_H
42 changes: 10 additions & 32 deletions src/gui/editorwidgets/qgsjsoneditwidget.cpp
Expand Up @@ -33,19 +33,16 @@ QgsJsonEditWidget::QgsJsonEditWidget( QWidget *parent )
connect( mCodeEditorJson, &QgsCodeEditorJson::textChanged, this, &QgsJsonEditWidget::codeEditorJsonTextChanged );
}

QgsJsonEditWidget::~QgsJsonEditWidget()
{

}

void QgsJsonEditWidget::setJsonText( const QString &jsonText )
{
const QJsonDocument jsonDocument = QJsonDocument::fromJson( jsonText.toUtf8() );
mJsonText = jsonText;

const QJsonDocument jsonDocument = QJsonDocument::fromJson( mJsonText.toUtf8() );

mCodeEditorJson->blockSignals( true );
if ( jsonDocument.isNull() )
{
mCodeEditorJson->setText( jsonText );
mCodeEditorJson->setText( mJsonText );
}
else
{
Expand All @@ -58,7 +55,7 @@ void QgsJsonEditWidget::setJsonText( const QString &jsonText )
mCodeEditorJson->setText( jsonDocument.toJson( QJsonDocument::Compact ) );
break;
case FormatJson::Disabled:
mCodeEditorJson->setText( jsonText );
mCodeEditorJson->setText( mJsonText );
break;
}
}
Expand All @@ -69,12 +66,7 @@ void QgsJsonEditWidget::setJsonText( const QString &jsonText )

QString QgsJsonEditWidget::jsonText() const
{
return mCodeEditorJson->text();
}

bool QgsJsonEditWidget::validJson() const
{
return true;
return mJsonText;
}

void QgsJsonEditWidget::setView( QgsJsonEditWidget::View view ) const
Expand Down Expand Up @@ -121,7 +113,8 @@ void QgsJsonEditWidget::treeToolButtonClicked( bool checked )

void QgsJsonEditWidget::codeEditorJsonTextChanged()
{
const QJsonDocument jsonDocument = QJsonDocument::fromJson( mCodeEditorJson->text().toUtf8() );
mJsonText = mCodeEditorJson->text();
const QJsonDocument jsonDocument = QJsonDocument::fromJson( mJsonText.toUtf8() );
refreshTreeView( jsonDocument );
}

Expand Down Expand Up @@ -180,15 +173,8 @@ void QgsJsonEditWidget::refreshTreeViewItemValue( const QJsonValue &jsonValue, Q
treeWidgetItemParent->setText( ( int )TreeWidgetColumn::Value, QString::number( jsonValue.toDouble() ) );
break;
case QJsonValue::String:
{
const QString jsonValueString = jsonValue.toString();
treeWidgetItemParent->setText( ( int )TreeWidgetColumn::Value, jsonValueString );

QUrl url( jsonValueString, QUrl::StrictMode );
if ( !url.scheme().isEmpty() )
setClickableUrl( jsonValueString );
}
break;
treeWidgetItemParent->setText( ( int )TreeWidgetColumn::Value, jsonValue.toString() );
break;
case QJsonValue::Array:
{
const QJsonArray jsonArray = jsonValue.toArray();
Expand Down Expand Up @@ -217,11 +203,3 @@ void QgsJsonEditWidget::refreshTreeViewItemValue( const QJsonValue &jsonValue, Q
break;
}
}

void QgsJsonEditWidget::setClickableUrl( const QString &url )
{
mCodeEditorJson->addIndicator( mCodeEditorJson->text().indexOf( url ),
url.size(),
QUrl( url ) );
}

45 changes: 30 additions & 15 deletions src/gui/editorwidgets/qgsjsoneditwidget.h
Expand Up @@ -19,47 +19,62 @@
#include "ui_qgsjsoneditwidget.h"

#include "qgseditorconfigwidget.h"
#include "qgis_sip.h"
#include "qgis_gui.h"

SIP_NO_FILE

/**
* \ingroup gui
* \class QgsJsonEditWidget
* \brief The QgsJsonEditWidget is a widget to display JSON data in a code highlighted text or tree form.
* \since QGIS 3.20
*/

class GUI_EXPORT QgsJsonEditWidget : public QWidget, private Ui::QgsJsonEditWidget
{
Q_OBJECT

public:

//! View mode, text or tree.
enum class View : int
{
Text = 0,
Tree = 1
Text = 0, //!< JSON data displayed as text.
Tree = 1 //!< JSON data displayed as tree. Tree view is disabled for invalid JSON data.
};

//! Format mode in the text view
enum class FormatJson : int
{
Indented = 0,
Compact = 1,
Disabled = 2
Indented = 0, //!< JSON data formatted with regular indentation
Compact = 1, //!< JSON data formatted as a compact one line string
Disabled = 2 //!< JSON data is not formatted
};

explicit QgsJsonEditWidget( QWidget *parent SIP_TRANSFERTHIS );

~QgsJsonEditWidget() override;

/**
* Constructor for QgsJsonEditWidget.
* \param parent parent widget
*/
explicit QgsJsonEditWidget( QWidget *parent SIP_TRANSFERTHIS = nullptr );

/**
* \brief Set the JSON text in the widget to \a jsonText.
*/
void setJsonText( const QString &jsonText );

/**
* \brief Returns the JSON text.
*/
QString jsonText() const;

bool validJson() const;

/**
* \brief Set the \a view mode.
* \see View
*/
void setView( View view ) const;

/**
* \brief Set the \a formatJson mode.
* \see FormatJson
*/
void setFormatJsonMode( FormatJson formatJson );

private slots:
Expand All @@ -80,7 +95,7 @@ class GUI_EXPORT QgsJsonEditWidget : public QWidget, private Ui::QgsJsonEditWidg
void refreshTreeView( const QJsonDocument &jsonDocument );
void refreshTreeViewItemValue( const QJsonValue &jsonValue, QTreeWidgetItem *treeWidgetItemParent );

void setClickableUrl( const QString &url );
QString mJsonText;

FormatJson mFormatJsonMode = FormatJson::Indented;
};
Expand Down
2 changes: 1 addition & 1 deletion src/gui/editorwidgets/qgsjsoneditwrapper.cpp
Expand Up @@ -49,7 +49,7 @@ void QgsJsonEditWrapper::initWidget( QWidget *editor )

bool QgsJsonEditWrapper::valid() const
{
return ( mJsonEditWidget && mJsonEditWidget->validJson() );
return ( mJsonEditWidget );
}

void QgsJsonEditWrapper::showIndeterminateState()
Expand Down

0 comments on commit 9fdcda4

Please sign in to comment.