IdentiyResults dialog show JSON data as a tree view

This commit is contained in:
Damiano 2021-05-14 15:02:17 +02:00
parent a57a8dcbb6
commit a570a10bd9
5 changed files with 107 additions and 62 deletions

View File

@ -64,6 +64,11 @@ Set the ``view`` mode.
Set the ``formatJson`` mode.
.. seealso:: FormatJson
%End
void setControlsVisible( bool visible );
%Docstring
Set the visibility of controls to ``visible``.
%End
};

View File

@ -87,6 +87,7 @@
#include "qgsexpressioncontextutils.h"
#include "qgsidentifymenu.h"
#include "qgsjsonutils.h"
#include "qgsjsoneditwidget.h"
#include "qgspointcloudlayer.h"
#include <nlohmann/json.hpp>
@ -697,7 +698,7 @@ QgsIdentifyResultsFeatureItem *QgsIdentifyResultsDialog::createFeatureItem( QgsV
break;
const QgsEditorWidgetSetup setup = QgsGui::editorWidgetRegistry()->findBest( vlayer, fields[i].name() );
if ( setup.type() == QLatin1String( "Hidden" ) )
if ( setup.type() == QStringLiteral( "Hidden" ) )
{
continue;
}
@ -720,6 +721,20 @@ QgsIdentifyResultsFeatureItem *QgsIdentifyResultsDialog::createFeatureItem( QgsV
value = representValue( vlayer, setup, fields.at( i ).name(), attrs.at( i ) );
attrItem->setSortData( 1, value );
attrItem->setToolTip( 1, value );
if ( setup.type() == QStringLiteral( "JsonEdit" ) )
{
QgsJsonEditWidget *jsonEditWidget = new QgsJsonEditWidget();
jsonEditWidget->setJsonText( value );
jsonEditWidget->setView( QgsJsonEditWidget::View::Tree );
jsonEditWidget->setFormatJsonMode( QgsJsonEditWidget::FormatJson::Indented );
jsonEditWidget->setControlsVisible( false );
attrItem->setData( 1, Qt::DisplayRole, QString() );
QTreeWidget *treeWidget = attrItem->treeWidget();
treeWidget->setItemWidget( attrItem, 1, jsonEditWidget );
}
else
{
bool foundLinks = false;
QString links = QgsStringUtils::insertLinks( value, &foundLinks );
if ( foundLinks )
@ -736,6 +751,7 @@ QgsIdentifyResultsFeatureItem *QgsIdentifyResultsDialog::createFeatureItem( QgsV
QTreeWidget *tw = attrItem->treeWidget();
tw->setItemWidget( attrItem, 1, nullptr );
}
}
if ( fields.at( i ).name() == vlayer->displayField() )
{

View File

@ -112,6 +112,11 @@ void QgsJsonEditWidget::setFormatJsonMode( QgsJsonEditWidget::FormatJson formatJ
mFormatJsonMode = formatJson;
}
void QgsJsonEditWidget::setControlsVisible( bool visible )
{
mControlsWidget->setVisible( visible );
}
void QgsJsonEditWidget::textToolButtonClicked( bool checked )
{
if ( checked )

View File

@ -77,6 +77,11 @@ class GUI_EXPORT QgsJsonEditWidget : public QWidget, private Ui::QgsJsonEditWidg
*/
void setFormatJsonMode( FormatJson formatJson );
/**
* \brief Set the visibility of controls to \a visible.
*/
void setControlsVisible( bool visible );
private slots:
void textToolButtonClicked( bool checked );

View File

@ -14,43 +14,21 @@
<string notr="true">Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0">
<widget class="QStackedWidget" name="mStackedWidget">
<property name="currentIndex">
<number>1</number>
</property>
<widget class="QWidget" name="mStackedWidgetPageText">
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QgsCodeEditorJson" name="mCodeEditorJson" native="true"/>
</item>
</layout>
</widget>
<widget class="QWidget" name="mStackedWidgetPageTree">
<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>
</property>
</column>
<column>
<property name="text">
<string>Value</string>
</property>
</column>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
<item row="0" column="0">
<widget class="QWidget" name="mControlsWidget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
@ -99,6 +77,42 @@
</widget>
</item>
</layout>
</widget>
</item>
<item row="1" column="0">
<widget class="QStackedWidget" name="mStackedWidget">
<property name="currentIndex">
<number>1</number>
</property>
<widget class="QWidget" name="mStackedWidgetPageText">
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QgsCodeEditorJson" name="mCodeEditorJson" native="true"/>
</item>
</layout>
</widget>
<widget class="QWidget" name="mStackedWidgetPageTree">
<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>
</property>
</column>
<column>
<property name="text">
<string>Value</string>
</property>
</column>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>