From 614ce76156867d8f7cebf7d2dd743d2d7bd96cf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Germ=C3=A1n=20Carrillo?= Date: Fri, 23 Aug 2024 14:09:51 -0500 Subject: [PATCH] [gui] Introduce StackedDiagramProperties and use it as dialog and as vector properties page. For the moment, it works with single diagrams, hiding controls for stacked diagrams --- .../core/auto_additions/qgsdiagramrenderer.py | 2 + .../core/auto_additions/qgsstackeddiagram.py | 9 + .../diagram/qgsstackeddiagram.sip.in | 4 +- .../auto_generated/qgsdiagramrenderer.sip.in | 6 + .../core/auto_additions/qgsstackeddiagram.py | 9 + .../diagram/qgsstackeddiagram.sip.in | 4 +- .../auto_generated/qgsdiagramrenderer.sip.in | 6 + scripts/old_sipify.pl | 1 + scripts/sipify.py | 2 + src/app/qgisapp.cpp | 6 +- src/app/qgisapp.h | 2 +- src/core/diagram/qgsstackeddiagram.h | 2 - src/core/qgsdiagramrenderer.h | 10 + src/gui/CMakeLists.txt | 3 + .../vector/qgsstackeddiagramproperties.cpp | 88 +++++++ src/gui/vector/qgsstackeddiagramproperties.h | 67 +++++ src/gui/vector/qgsvectorlayerproperties.cpp | 6 +- src/gui/vector/qgsvectorlayerproperties.h | 6 +- src/ui/qgsstackeddiagrampropertiesbase.ui | 228 ++++++++++++++++++ tests/code_layout/acceptable_missing_doc.py | 1 + 20 files changed, 445 insertions(+), 17 deletions(-) create mode 100644 python/PyQt6/core/auto_additions/qgsstackeddiagram.py create mode 100644 python/core/auto_additions/qgsstackeddiagram.py create mode 100644 src/gui/vector/qgsstackeddiagramproperties.cpp create mode 100644 src/gui/vector/qgsstackeddiagramproperties.h create mode 100644 src/ui/qgsstackeddiagrampropertiesbase.ui diff --git a/python/PyQt6/core/auto_additions/qgsdiagramrenderer.py b/python/PyQt6/core/auto_additions/qgsdiagramrenderer.py index da329e10e2c..3b55d63a121 100644 --- a/python/PyQt6/core/auto_additions/qgsdiagramrenderer.py +++ b/python/PyQt6/core/auto_additions/qgsdiagramrenderer.py @@ -64,6 +64,8 @@ QgsDiagramLayerSettings.Property.__doc__ = """Data definable properties. """ # -- +QgsDiagramLayerSettings.Single = QgsDiagramLayerSettings.DiagramType.Single +QgsDiagramLayerSettings.Stacked = QgsDiagramLayerSettings.DiagramType.Stacked QgsDiagramSettings.Height = QgsDiagramSettings.LabelPlacementMethod.Height QgsDiagramSettings.XHeight = QgsDiagramSettings.LabelPlacementMethod.XHeight QgsDiagramSettings.Up = QgsDiagramSettings.DiagramOrientation.Up diff --git a/python/PyQt6/core/auto_additions/qgsstackeddiagram.py b/python/PyQt6/core/auto_additions/qgsstackeddiagram.py new file mode 100644 index 00000000000..350b840310e --- /dev/null +++ b/python/PyQt6/core/auto_additions/qgsstackeddiagram.py @@ -0,0 +1,9 @@ +# The following has been generated automatically from src/core/diagram/qgsstackeddiagram.h +try: + QgsStackedDiagram.__group__ = ['diagram'] +except NameError: + pass +try: + QgsStackedDiagram.DiagramData.__group__ = ['diagram'] +except NameError: + pass diff --git a/python/PyQt6/core/auto_generated/diagram/qgsstackeddiagram.sip.in b/python/PyQt6/core/auto_generated/diagram/qgsstackeddiagram.sip.in index 1bd55e57d8e..b107482c0a7 100644 --- a/python/PyQt6/core/auto_generated/diagram/qgsstackeddiagram.sip.in +++ b/python/PyQt6/core/auto_generated/diagram/qgsstackeddiagram.sip.in @@ -3,7 +3,7 @@ * * * src/core/diagram/qgsstackeddiagram.h * * * - * Do not edit manually ! Edit header and run scripts/sipify.pl again * + * Do not edit manually ! Edit header and run scripts/sipify.py again * ************************************************************************/ @@ -88,5 +88,5 @@ Calculates the position for the next subdiagram, updating the ``newPos`` object. * * * src/core/diagram/qgsstackeddiagram.h * * * - * Do not edit manually ! Edit header and run scripts/sipify.pl again * + * Do not edit manually ! Edit header and run scripts/sipify.py again * ************************************************************************/ diff --git a/python/PyQt6/core/auto_generated/qgsdiagramrenderer.sip.in b/python/PyQt6/core/auto_generated/qgsdiagramrenderer.sip.in index 51a95716010..e2f22be7ac4 100644 --- a/python/PyQt6/core/auto_generated/qgsdiagramrenderer.sip.in +++ b/python/PyQt6/core/auto_generated/qgsdiagramrenderer.sip.in @@ -63,6 +63,12 @@ Stores the settings for rendering of all diagrams for a layer. StartAngle, }; + enum DiagramType /BaseType=IntEnum/ + { + Single, + Stacked + }; + static const QgsPropertiesDefinition &propertyDefinitions(); %Docstring Returns the diagram property definitions. diff --git a/python/core/auto_additions/qgsstackeddiagram.py b/python/core/auto_additions/qgsstackeddiagram.py new file mode 100644 index 00000000000..350b840310e --- /dev/null +++ b/python/core/auto_additions/qgsstackeddiagram.py @@ -0,0 +1,9 @@ +# The following has been generated automatically from src/core/diagram/qgsstackeddiagram.h +try: + QgsStackedDiagram.__group__ = ['diagram'] +except NameError: + pass +try: + QgsStackedDiagram.DiagramData.__group__ = ['diagram'] +except NameError: + pass diff --git a/python/core/auto_generated/diagram/qgsstackeddiagram.sip.in b/python/core/auto_generated/diagram/qgsstackeddiagram.sip.in index 1bd55e57d8e..b107482c0a7 100644 --- a/python/core/auto_generated/diagram/qgsstackeddiagram.sip.in +++ b/python/core/auto_generated/diagram/qgsstackeddiagram.sip.in @@ -3,7 +3,7 @@ * * * src/core/diagram/qgsstackeddiagram.h * * * - * Do not edit manually ! Edit header and run scripts/sipify.pl again * + * Do not edit manually ! Edit header and run scripts/sipify.py again * ************************************************************************/ @@ -88,5 +88,5 @@ Calculates the position for the next subdiagram, updating the ``newPos`` object. * * * src/core/diagram/qgsstackeddiagram.h * * * - * Do not edit manually ! Edit header and run scripts/sipify.pl again * + * Do not edit manually ! Edit header and run scripts/sipify.py again * ************************************************************************/ diff --git a/python/core/auto_generated/qgsdiagramrenderer.sip.in b/python/core/auto_generated/qgsdiagramrenderer.sip.in index 43acecd9831..e0526ae8c7a 100644 --- a/python/core/auto_generated/qgsdiagramrenderer.sip.in +++ b/python/core/auto_generated/qgsdiagramrenderer.sip.in @@ -63,6 +63,12 @@ Stores the settings for rendering of all diagrams for a layer. StartAngle, }; + enum DiagramType + { + Single, + Stacked + }; + static const QgsPropertiesDefinition &propertyDefinitions(); %Docstring Returns the diagram property definitions. diff --git a/scripts/old_sipify.pl b/scripts/old_sipify.pl index 5c29f892648..492e4ae0c9c 100755 --- a/scripts/old_sipify.pl +++ b/scripts/old_sipify.pl @@ -182,6 +182,7 @@ my @ALLOWED_NON_CLASS_ENUMS = ( "QgsDataSourceUri::SslMode", "QgsDiagramLayerSettings::LinePlacementFlag", "QgsDiagramLayerSettings::Placement", + "QgsDiagramLayerSettings::DiagramType", "QgsDiagramSettings::DiagramOrientation", "QgsDiagramSettings::Direction", "QgsDiagramSettings::LabelPlacementMethod", diff --git a/scripts/sipify.py b/scripts/sipify.py index f2bdafd6889..9367fd5bc19 100755 --- a/scripts/sipify.py +++ b/scripts/sipify.py @@ -230,9 +230,11 @@ ALLOWED_NON_CLASS_ENUMS = [ "QgsDataSourceUri::SslMode", "QgsDiagramLayerSettings::LinePlacementFlag", "QgsDiagramLayerSettings::Placement", + "QgsDiagramLayerSettings::DiagramType", "QgsDiagramSettings::DiagramOrientation", "QgsDiagramSettings::Direction", "QgsDiagramSettings::LabelPlacementMethod", + "QgsDiagramSettings::StackedDiagramMode", "QgsDoubleSpinBox::ClearValueMode", "QgsDualView::FeatureListBrowsingAction", "QgsDualView::ViewMode", diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp index 560761d2e50..7aa546f9353 100644 --- a/src/app/qgisapp.cpp +++ b/src/app/qgisapp.cpp @@ -269,7 +269,6 @@ #include "qgsgpstoolbar.h" #include "qgsgpscanvasbridge.h" #include "qgsguivectorlayertools.h" -#include "qgsdiagramproperties.h" #include "qgslayerdefinition.h" #include "qgslayertree.h" #include "qgslayertreefiltersettings.h" @@ -384,6 +383,7 @@ #include "qgselevationshadingrenderersettingswidget.h" #include "qgsshortcutsmanager.h" #include "qgssnappingwidget.h" +#include "qgsstackeddiagramproperties.h" #include "qgsstatisticalsummarydockwidget.h" #include "qgsstatusbar.h" #include "qgsstatusbarcoordinateswidget.h" @@ -8051,7 +8051,7 @@ void QgisApp::diagramProperties() QDialog dlg; dlg.setWindowTitle( tr( "Layer Diagram Properties" ) ); - QgsDiagramProperties *gui = new QgsDiagramProperties( vlayer, &dlg, mMapCanvas ); + QgsStackedDiagramProperties *gui = new QgsStackedDiagramProperties( vlayer, &dlg, mMapCanvas ); gui->layout()->setContentsMargins( 0, 0, 0, 0 ); QVBoxLayout *layout = new QVBoxLayout( &dlg ); layout->addWidget( gui ); @@ -8068,7 +8068,7 @@ void QgisApp::diagramProperties() connect( buttonBox->button( QDialogButtonBox::Cancel ), &QAbstractButton::clicked, &dlg, &QDialog::reject ); connect( buttonBox->button( QDialogButtonBox::Apply ), &QAbstractButton::clicked, - gui, &QgsDiagramProperties::apply ); + gui, &QgsStackedDiagramProperties::apply ); connect( buttonBox->button( QDialogButtonBox::Help ), &QAbstractButton::clicked, gui, [ = ] { QgsHelp::openHelp( QStringLiteral( "working_with_vector/vector_properties.html#diagrams-properties" ) ); diff --git a/src/app/qgisapp.h b/src/app/qgisapp.h index c2bd2c5b914..7dc8bd6ef2e 100644 --- a/src/app/qgisapp.h +++ b/src/app/qgisapp.h @@ -138,7 +138,7 @@ class QgsDataItem; class QgsTileScaleWidget; class QgsLabelingWidget; class QgsLayerStylingWidget; -class QgsDiagramProperties; +class QgsStackedDiagramProperties; class QgsLocatorWidget; class QgsNominatimGeocoder; class QgsDataSourceManagerDialog; diff --git a/src/core/diagram/qgsstackeddiagram.h b/src/core/diagram/qgsstackeddiagram.h index 7c80a29f099..7faa1902210 100644 --- a/src/core/diagram/qgsstackeddiagram.h +++ b/src/core/diagram/qgsstackeddiagram.h @@ -18,8 +18,6 @@ #define DIAGRAM_NAME_STACKED "Stacked" -//#include "qgis_core.h" -//#include "qgis.h" #include "qgsdiagram.h" #include #include diff --git a/src/core/qgsdiagramrenderer.h b/src/core/qgsdiagramrenderer.h index 985ffa22599..36731015aa3 100644 --- a/src/core/qgsdiagramrenderer.h +++ b/src/core/qgsdiagramrenderer.h @@ -103,6 +103,16 @@ class CORE_EXPORT QgsDiagramLayerSettings }; // *INDENT-ON* + /** + * Diagram type + * \since QGIS 3.40 + */ + enum DiagramType + { + Single, + Stacked + }; + /** * Returns the diagram property definitions. */ diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 017f978a590..6cd6e064edc 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -38,6 +38,7 @@ set(QGIS_GUI_SRCS vector/qgsfieldcalculator.cpp vector/qgsjoindialog.cpp vector/qgssourcefieldsproperties.cpp + vector/qgsstackeddiagramproperties.cpp vector/qgsvectorlayerlegendwidget.cpp vector/qgsvectorlayerproperties.cpp vector/qgswmsdimensiondialog.cpp @@ -1499,6 +1500,7 @@ set(QGIS_GUI_HDRS vector/qgsfieldcalculator.h vector/qgsjoindialog.h vector/qgssourcefieldsproperties.h + vector/qgsstackeddiagramproperties.h vector/qgsvectorlayerlegendwidget.h vector/qgsvectorlayerproperties.h vector/qgswmsdimensiondialog.h @@ -1656,6 +1658,7 @@ endif() add_library(qgis_gui ${LIBRARY_TYPE} ${QGIS_GUI_SRCS} ${QGIS_GUI_HDRS} ${QGIS_GUI_PRIVATE_HDRS} + vector/qgsstackeddiagramproperties.h vector/qgsstackeddiagramproperties.cpp ) # require c++17 diff --git a/src/gui/vector/qgsstackeddiagramproperties.cpp b/src/gui/vector/qgsstackeddiagramproperties.cpp new file mode 100644 index 00000000000..a09b15186de --- /dev/null +++ b/src/gui/vector/qgsstackeddiagramproperties.cpp @@ -0,0 +1,88 @@ +/*************************************************************************** + qgsstackeddiagramproperties.h + Properties for stacked diagram layers + ------------------- + begin : August 2024 + copyright : (C) Germán Carrillo + email : german at opengis dot ch + + *************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include "qgsstackeddiagramproperties.h" +#include "qgsdiagramproperties.h" + + +QgsStackedDiagramProperties::QgsStackedDiagramProperties( QgsVectorLayer *layer, QWidget *parent, QgsMapCanvas *canvas ) + : QWidget{parent} + , mMapCanvas( canvas ) +{ + mLayer = layer; + if ( !layer ) + { + return; + } + + setupUi( this ); + connect( mDiagramTypeComboBox, static_cast( &QComboBox::currentIndexChanged ), this, &QgsStackedDiagramProperties::mDiagramTypeComboBox_currentIndexChanged ); + + // Initialize stacked diagram controls + mDiagramTypeComboBox->addItem( tr( "Single diagram" ), QgsDiagramLayerSettings::Single ); + mDiagramTypeComboBox->addItem( tr( "Stacked diagrams" ), QgsDiagramLayerSettings::Stacked ); + mStackedDiagramModeComboBox->addItem( tr( "Horizontal" ), QgsDiagramSettings::Horizontal ); + mStackedDiagramModeComboBox->addItem( tr( "Vertical" ), QgsDiagramSettings::Vertical ); + + mStackedDiagramSpacingSpinBox->setClearValue( 0 ); + mStackedDiagramSpacingUnitComboBox->setUnits( { Qgis::RenderUnit::Millimeters, + Qgis::RenderUnit::MetersInMapUnits, + Qgis::RenderUnit::MapUnits, + Qgis::RenderUnit::Pixels, + Qgis::RenderUnit::Points, + Qgis::RenderUnit::Inches } ); + + // Add default subdiagram tab + gui = new QgsDiagramProperties( layer, this, mMapCanvas ); + gui->layout()->setContentsMargins( 0, 0, 0, 0 ); + QVBoxLayout *vLayout = new QVBoxLayout(); + vLayout->addWidget( gui ); + QWidget *w = new QWidget(); + w->setLayout( vLayout ); + + connect( gui, &QgsDiagramProperties::auxiliaryFieldCreated, this, &QgsStackedDiagramProperties::auxiliaryFieldCreated ); + + mSubDiagramsTabWidget->addTab( w, tr( "Diagram 1" ) ); +} + +void QgsStackedDiagramProperties::apply() +{ + if ( mDiagramTypeComboBox->currentData( Qt::UserRole ) == QgsDiagramLayerSettings::Single ) + { + gui->apply(); + } +} + +void QgsStackedDiagramProperties::syncToLayer() +{ + if ( mDiagramTypeComboBox->currentData( Qt::UserRole ) == QgsDiagramLayerSettings::Single ) + { + gui->syncToLayer(); + } +} + +void QgsStackedDiagramProperties::mDiagramTypeComboBox_currentIndexChanged( int index ) +{ + if ( index == 0 ) + { + mStackedDiagramSettingsFrame->hide(); + } + else + { + mStackedDiagramSettingsFrame->show(); + } +} diff --git a/src/gui/vector/qgsstackeddiagramproperties.h b/src/gui/vector/qgsstackeddiagramproperties.h new file mode 100644 index 00000000000..f44f46ebf5c --- /dev/null +++ b/src/gui/vector/qgsstackeddiagramproperties.h @@ -0,0 +1,67 @@ +/*************************************************************************** + qgsstackeddiagramproperties.h + Properties for stacked diagram layers + ------------------- + begin : August 2024 + copyright : (C) Germán Carrillo + email : german at opengis dot ch + + *************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#ifndef QGSSTACKEDDIAGRAMPROPERTIES_H +#define QGSSTACKEDDIAGRAMPROPERTIES_H + +// We don't want to expose this in the public API +#define SIP_NO_FILE + +#include "qgis_gui.h" +#include "ui_qgsstackeddiagrampropertiesbase.h" + +#include +#include + +class QgsVectorLayer; +class QgsMapCanvas; +class QgsDiagramProperties; + + +/** + * \ingroup gui + * \class QgsStackedDiagramProperties + * + * \since QGIS 3.40 + */ +class GUI_EXPORT QgsStackedDiagramProperties : public QWidget, private Ui::QgsStackedDiagramPropertiesBase +{ + Q_OBJECT + + public: + explicit QgsStackedDiagramProperties( QgsVectorLayer *layer, QWidget *parent, QgsMapCanvas *canvas ); + + /** + * Updates the widget to reflect the layer's current diagram settings. + */ + void syncToLayer(); + + signals: + void auxiliaryFieldCreated(); + + public slots: + void apply(); + void mDiagramTypeComboBox_currentIndexChanged( int index ); + + private: + QgsVectorLayer *mLayer = nullptr; + QgsMapCanvas *mMapCanvas = nullptr; + QgsDiagramProperties *gui = nullptr; + +}; + +#endif // QGSSTACKEDDIAGRAMPROPERTIES_H diff --git a/src/gui/vector/qgsvectorlayerproperties.cpp b/src/gui/vector/qgsvectorlayerproperties.cpp index 2133b0083dc..6cfa361a87b 100644 --- a/src/gui/vector/qgsvectorlayerproperties.cpp +++ b/src/gui/vector/qgsvectorlayerproperties.cpp @@ -26,7 +26,7 @@ #include "qgsapplication.h" #include "qgsattributeactiondialog.h" #include "qgsdatumtransformdialog.h" -#include "qgsdiagramproperties.h" +#include "qgsstackeddiagramproperties.h" #include "qgssourcefieldsproperties.h" #include "qgsattributesformproperties.h" #include "qgslabelingwidget.h" @@ -335,9 +335,9 @@ QgsVectorLayerProperties::QgsVectorLayerProperties( QVBoxLayout *diagLayout = new QVBoxLayout( mDiagramFrame ); diagLayout->setContentsMargins( 0, 0, 0, 0 ); - diagramPropertiesDialog = new QgsDiagramProperties( mLayer, mDiagramFrame, mCanvas ); + diagramPropertiesDialog = new QgsStackedDiagramProperties( mLayer, mDiagramFrame, mCanvas ); diagramPropertiesDialog->layout()->setContentsMargins( 0, 0, 0, 0 ); - connect( diagramPropertiesDialog, &QgsDiagramProperties::auxiliaryFieldCreated, this, [ = ] { updateAuxiliaryStoragePage(); } ); + connect( diagramPropertiesDialog, &QgsStackedDiagramProperties::auxiliaryFieldCreated, this, [ = ] { updateAuxiliaryStoragePage(); } ); diagLayout->addWidget( diagramPropertiesDialog ); mDiagramFrame->setLayout( diagLayout ); diff --git a/src/gui/vector/qgsvectorlayerproperties.h b/src/gui/vector/qgsvectorlayerproperties.h index f3644cc73d6..1b8c8b1c50a 100644 --- a/src/gui/vector/qgsvectorlayerproperties.h +++ b/src/gui/vector/qgsvectorlayerproperties.h @@ -33,7 +33,7 @@ class QgsMapLayer; class QgsAttributeActionDialog; class QgsVectorLayer; class QgsLabelingWidget; -class QgsDiagramProperties; +class QgsStackedDiagramProperties; class QgsSourceFieldsProperties; class QgsAttributesFormProperties; class QgsRendererPropertiesDialog; @@ -172,7 +172,7 @@ class GUI_EXPORT QgsVectorLayerProperties : public QgsLayerPropertiesDialog, pri //! Actions dialog. If apply is pressed, the actions are stored for later use QgsAttributeActionDialog *mActionDialog = nullptr; //! Diagram dialog. If apply is pressed, options are applied to vector's diagrams - QgsDiagramProperties *diagramPropertiesDialog = nullptr; + QgsStackedDiagramProperties *diagramPropertiesDialog = nullptr; //! SourceFields dialog. If apply is pressed, options are applied to vector's diagrams QgsSourceFieldsProperties *mSourceFieldsPropertiesDialog = nullptr; //! AttributesForm dialog. If apply is pressed, options are applied to vector's diagrams @@ -181,8 +181,6 @@ class GUI_EXPORT QgsVectorLayerProperties : public QgsLayerPropertiesDialog, pri //! List of joins of a layer at the time of creation of the dialog. Used to return joins to previous state if dialog is canceled QList< QgsVectorLayerJoinInfo > mOldJoins; - void initDiagramTab(); - //! Adds a new join to mJoinTreeWidget void addJoinToTreeWidget( const QgsVectorLayerJoinInfo &join, int insertIndex = -1 ); diff --git a/src/ui/qgsstackeddiagrampropertiesbase.ui b/src/ui/qgsstackeddiagrampropertiesbase.ui new file mode 100644 index 00000000000..fe00f19be26 --- /dev/null +++ b/src/ui/qgsstackeddiagrampropertiesbase.ui @@ -0,0 +1,228 @@ + + + QgsStackedDiagramPropertiesBase + + + + 0 + 0 + 842 + 472 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + QFrame::Shape::StyledPanel + + + QFrame::Shadow::Raised + + + + + + + + + 0 + 0 + + + + Add subdiagram to the stacked diagram + + + + + + + :/images/themes/default/symbologyAdd.svg:/images/themes/default/symbologyAdd.svg + + + + + + + + 0 + 0 + + + + Remove subdiagram from the stacked diagram + + + + + + + :/images/themes/default/symbologyRemove.svg:/images/themes/default/symbologyRemove.svg + + + + + + + Qt::Orientation::Horizontal + + + QSizePolicy::Policy::Expanding + + + + 40 + 20 + + + + + + + + + + + + Stacked Diagram Mode + + + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Diagram spacing + + + + + + + + 70 + 0 + + + + + + + + + 120 + 0 + + + + + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + QFrame::Shape::NoFrame + + + QFrame::Shadow::Raised + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + -1 + + + + + + + + + + + QgsDoubleSpinBox + QDoubleSpinBox +
qgsdoublespinbox.h
+
+ + QgsUnitSelectionWidget + QWidget +
qgsunitselectionwidget.h
+ 1 +
+
+ + + + +
diff --git a/tests/code_layout/acceptable_missing_doc.py b/tests/code_layout/acceptable_missing_doc.py index 5b026a010e2..d34105005ad 100644 --- a/tests/code_layout/acceptable_missing_doc.py +++ b/tests/code_layout/acceptable_missing_doc.py @@ -285,6 +285,7 @@ ACCEPTABLE_MISSING_DOCS = { "QgsEffectStack": ["QgsEffectStack(const QgsEffectStack &other)"], "QgsRelationReferenceWidget": ["setRelation(const QgsRelation &relation, bool allowNullValue)", "CanvasExtent", "setOpenFormButtonVisible(bool openFormButtonVisible)", "QgsRelationReferenceWidget(QWidget *parent)", "setReadOnlySelector(bool readOnly)", "setRelationEditable(bool editable)", "init()", "setAllowMapIdentification(bool allowMapIdentification)", "setEmbedForm(bool display)"], "QgsDiagramProperties": ["mAttributesTreeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column)", "scalingTypeChanged()", "mAddCategoryPushButton_clicked()", "mEngineSettingsButton_clicked()", "apply()", "mRemoveCategoryPushButton_clicked()", "showSizeLegendDialog()", "QgsDiagramProperties(QgsVectorLayer *layer, QWidget *parent, QgsMapCanvas *canvas)", "mDiagramAttributesTreeWidget_itemDoubleClicked(QTreeWidgetItem *item, int column)", "mDiagramStackedWidget_currentChanged(int index)", "mDiagramTypeComboBox_currentIndexChanged(int index)", "mFindMaximumValueButton_clicked()", "showAddAttributeExpressionDialog()", "auxiliaryFieldCreated()", "updatePlacementWidgets()"], + "QgsStackedDiagramProperties": ["mDiagramTypeComboBox_currentIndexChanged(int index)", "apply()", "auxiliaryFieldCreated()", "QgsStackedDiagramProperties(QgsVectorLayer *layer, QWidget *parent, QgsMapCanvas *canvas)"], "QgsFeatureListView": ["repaintRequested()", "repaintRequested(const QModelIndexList &indexes)"], "QgsGradientFillSymbolLayerWidget": ["setGradientSpread(int index)", "setColor(const QColor &color)", "setCoordinateMode(int index)", "setColor2(const QColor &color)", "setGradientType(int index)"], "QgsFillSymbol": ["setAngle(double angle) const"],