Skip to content

Commit

Permalink
Json links wip
Browse files Browse the repository at this point in the history
  • Loading branch information
domi4484 committed May 10, 2021
1 parent 1dda4d5 commit bfc8d5e
Show file tree
Hide file tree
Showing 8 changed files with 78 additions and 15 deletions.
35 changes: 31 additions & 4 deletions src/gui/codeeditors/qgscodeeditorjson.cpp
Expand Up @@ -32,7 +32,25 @@ QgsCodeEditorJson::QgsCodeEditorJson( QWidget *parent )
setFoldingVisible( true );
QgsCodeEditorJson::initializeLexer();

connect( this, &QsciScintillaBase::SCN_HOTSPOTCLICK, this, &QgsCodeEditorJson::scintillaHotspotClick );
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 All @@ -58,18 +76,27 @@ void QgsCodeEditorJson::initializeLexer()
lexer->setColor( lexerColor( QgsCodeEditorColorScheme::ColorRole::CommentBlock ), QsciLexerJSON::CommentBlock );
lexer->setColor( lexerColor( QgsCodeEditorColorScheme::ColorRole::CommentLine ), QsciLexerJSON::CommentLine );
lexer->setColor( lexerColor( QgsCodeEditorColorScheme::ColorRole::DoubleQuote ), QsciLexerJSON::String );
lexer->setColor( lexerColor( QgsCodeEditorColorScheme::ColorRole::DoubleQuote ), QsciLexerJSON::IRI );
lexer->setColor( lexerColor( QgsCodeEditorColorScheme::ColorRole::SingleQuote ), QsciLexerJSON::UnclosedString );
lexer->setColor( lexerColor( QgsCodeEditorColorScheme::ColorRole::Error ), QsciLexerJSON::Error );

setLexer( lexer );
setLineNumbersVisible( true );
runPostLexerConfigurationTasks();
}

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

SendScintilla( SCI_STYLESETHOTSPOT, ( int )QsciLexerJSON::IRI, true );
setHotspotUnderline( true );
qDebug() << "scintillaIndicatorRelease value:" << value;
}

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

qDebug() << "scintillaIndicatorClick value:" << value;
}
5 changes: 4 additions & 1 deletion src/gui/codeeditors/qgscodeeditorjson.h
Expand Up @@ -38,12 +38,15 @@ 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 scintillaHotspotClick( int position, int modifiers );
void scintillaIndicatorRelease( int position, int modifiers );
void scintillaIndicatorClick( int position, int modifiers );
};

#endif // QGSCODEEDITORJSON_H
20 changes: 18 additions & 2 deletions src/gui/editorwidgets/qgsjsoneditwidget.cpp
Expand Up @@ -25,6 +25,8 @@ QgsJsonEditWidget::QgsJsonEditWidget( QWidget *parent )

setView( View::Text );

mCodeEditorJson->setReadOnly( true );

connect( mTextToolButton, &QToolButton::clicked, this, &QgsJsonEditWidget::textToolButtonClicked );
connect( mTreeToolButton, &QToolButton::clicked, this, &QgsJsonEditWidget::treeToolButtonClicked );

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

QUrl url( jsonValueString, QUrl::StrictMode );
if ( !url.scheme().isEmpty() )
setClickableUrl( jsonValueString );
}
break;
case QJsonValue::Array:
{
const QJsonArray jsonArray = jsonValue.toArray();
Expand Down Expand Up @@ -209,3 +218,10 @@ void QgsJsonEditWidget::refreshTreeViewItemValue( const QJsonValue &jsonValue, Q
}
}

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

2 changes: 2 additions & 0 deletions src/gui/editorwidgets/qgsjsoneditwidget.h
Expand Up @@ -80,6 +80,8 @@ 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 );

FormatJson mFormatJsonMode = FormatJson::Indented;
};

Expand Down
17 changes: 14 additions & 3 deletions src/gui/editorwidgets/qgsjsoneditwidgetfactory.cpp
Expand Up @@ -35,7 +35,18 @@ QgsEditorConfigWidget *QgsJsonEditWidgetFactory::configWidget( QgsVectorLayer *v

unsigned int QgsJsonEditWidgetFactory::fieldScore( const QgsVectorLayer *vl, int fieldIdx ) const
{
Q_UNUSED( vl )
Q_UNUSED( fieldIdx )
return 10;
const QVariant::Type type = vl->fields().field( fieldIdx ).type();

switch ( type )
{
case QVariant::Map:
return 15;
break;
case QVariant::List:
return 10;
break;
default:
return 5;
break;
}
}
7 changes: 3 additions & 4 deletions src/gui/editorwidgets/qgsjsoneditwrapper.cpp
Expand Up @@ -27,7 +27,7 @@ QVariant QgsJsonEditWrapper::value() const
if ( !mJsonEditWidget )
return QVariant();

return QVariant( mJsonEditWidget->jsonText() );
return mJsonEditWidget->property( RAW_VALUE_PROPERTY.toUtf8().data() );
}

QWidget *QgsJsonEditWrapper::createWidget( QWidget *parent )
Expand Down Expand Up @@ -58,8 +58,7 @@ void QgsJsonEditWrapper::showIndeterminateState()
return;

mJsonEditWidget->blockSignals( true );
//note - this is deliberately a zero length string, not a null string!
mJsonEditWidget->setJsonText( QStringLiteral( "" ) );
mJsonEditWidget->setJsonText( QStringLiteral( "<mixed values>" ) );
mJsonEditWidget->blockSignals( false );
}

Expand All @@ -74,7 +73,7 @@ void QgsJsonEditWrapper::updateValues( const QVariant &value, const QVariantList
if ( !mJsonEditWidget )
return;

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

Expand Down
2 changes: 2 additions & 0 deletions src/gui/editorwidgets/qgsjsoneditwrapper.h
Expand Up @@ -69,6 +69,8 @@ class GUI_EXPORT QgsJsonEditWrapper : public QgsEditorWidgetWrapper

private:

inline static const QString RAW_VALUE_PROPERTY = "RawValue";

void updateValues( const QVariant &val, const QVariantList & = QVariantList() ) override;

QgsJsonEditWidget *mJsonEditWidget = nullptr;
Expand Down
5 changes: 4 additions & 1 deletion src/ui/editorwidgets/qgsjsoneditwidget.ui
Expand Up @@ -17,7 +17,7 @@
<item row="1" column="0">
<widget class="QStackedWidget" name="mStackedWidget">
<property name="currentIndex">
<number>0</number>
<number>1</number>
</property>
<widget class="QWidget" name="mStackedWidgetPageText">
<layout class="QGridLayout" name="gridLayout_2">
Expand All @@ -30,6 +30,9 @@
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<widget class="QTreeWidget" name="mTreeWidget">
<attribute name="headerVisible">
<bool>false</bool>
</attribute>
<column>
<property name="text">
<string notr="true">Key</string>
Expand Down

0 comments on commit bfc8d5e

Please sign in to comment.