QGIS API Documentation  3.20.0-Odense (decaadbb31)
qgslayoutpolygonwidget.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgslayoutpolygonwidget.cpp
3  begin : March 2016
4  copyright : (C) 2016 Paul Blottiere, Oslandia
5  email : paul dot blottiere at oslandia dot com
6  ***************************************************************************/
7 
8 /***************************************************************************
9  * *
10  * This program is free software; you can redistribute it and/or modify *
11  * it under the terms of the GNU General Public License as published by *
12  * the Free Software Foundation; either version 2 of the License, or *
13  * (at your option) any later version. *
14  * *
15  ***************************************************************************/
16 
17 #include "qgslayoutpolygonwidget.h"
19 #include "qgsstyle.h"
20 #include "qgslayout.h"
21 #include "qgssymbollayerutils.h"
22 #include "qgslayoutitemregistry.h"
23 #include "qgslayoutundostack.h"
24 #include "qgsvectorlayer.h"
25 #include "qgsfillsymbol.h"
26 
28  : QgsLayoutItemBaseWidget( nullptr, polygon )
29  , mPolygon( polygon )
30 {
31  setupUi( this );
32  setPanelTitle( tr( "Polygon Properties" ) );
33 
34  //add widget for general composer item properties
35  mItemPropertiesWidget = new QgsLayoutItemPropertiesWidget( this, polygon );
36  //shapes don't use background or frame, since the symbol style is set through a QgsSymbolSelectorWidget
37  mItemPropertiesWidget->showBackgroundGroup( false );
38  mItemPropertiesWidget->showFrameGroup( false );
39  mainLayout->addWidget( mItemPropertiesWidget );
40 
41  mPolygonStyleButton->setSymbolType( Qgis::SymbolType::Fill );
42  connect( mPolygonStyleButton, &QgsSymbolButton::changed, this, &QgsLayoutPolygonWidget::symbolChanged );
43 
44  if ( mPolygon )
45  {
46  connect( mPolygon, &QgsLayoutObject::changed, this, &QgsLayoutPolygonWidget::setGuiElementValues );
47  mPolygonStyleButton->registerExpressionContextGenerator( mPolygon );
48  }
49 
50  setGuiElementValues();
51 
52  mPolygonStyleButton->registerExpressionContextGenerator( mPolygon );
53  mPolygonStyleButton->setLayer( coverageLayer() );
54  if ( mPolygon->layout() )
55  {
56  connect( &mPolygon->layout()->reportContext(), &QgsLayoutReportContext::layerChanged, mPolygonStyleButton, &QgsSymbolButton::setLayer );
57  }
58 }
59 
61 {
62  if ( mItemPropertiesWidget )
63  mItemPropertiesWidget->setMasterLayout( masterLayout );
64 }
65 
67 {
69  return false;
70 
71  if ( mPolygon )
72  {
73  disconnect( mPolygon, &QgsLayoutObject::changed, this, &QgsLayoutPolygonWidget::setGuiElementValues );
74  }
75 
76  mPolygon = qobject_cast< QgsLayoutItemPolygon * >( item );
77  mItemPropertiesWidget->setItem( mPolygon );
78 
79  if ( mPolygon )
80  {
81  connect( mPolygon, &QgsLayoutObject::changed, this, &QgsLayoutPolygonWidget::setGuiElementValues );
82  mPolygonStyleButton->registerExpressionContextGenerator( mPolygon );
83  }
84  setGuiElementValues();
85 
86  return true;
87 }
88 
89 void QgsLayoutPolygonWidget::setGuiElementValues()
90 {
91  if ( !mPolygon )
92  {
93  return;
94  }
95 
96  whileBlocking( mPolygonStyleButton )->setSymbol( mPolygon->symbol()->clone() );
97 }
98 
99 void QgsLayoutPolygonWidget::symbolChanged()
100 {
101  if ( !mPolygon )
102  return;
103 
104  mPolygon->layout()->undoStack()->beginCommand( mPolygon, tr( "Change Shape Style" ), QgsLayoutItem::UndoShapeStyle );
105  mPolygon->setSymbol( mPolygonStyleButton->clonedSymbol<QgsFillSymbol>() );
106  mPolygon->layout()->undoStack()->endCommand();
107 }
@ Fill
Fill symbol.
A fill symbol type, for rendering Polygon and MultiPolygon geometries.
Definition: qgsfillsymbol.h:30
A base class for property widgets for layout items.
QgsVectorLayer * coverageLayer() const
Returns the current layout context coverage layer (if set).
Layout item for node based polygon shapes.
A widget for controlling the common properties of layout items (e.g.
void setMasterLayout(QgsMasterLayoutInterface *masterLayout)
Sets the master layout associated with the item.
void showFrameGroup(bool showGroup)
Determines if the frame of the group box shall be shown.
void setItem(QgsLayoutItem *item)
Sets the layout item.
void showBackgroundGroup(bool showGroup)
Determines if the background of the group box shall be shown.
@ LayoutPolygon
Polygon shape item.
Base class for graphical items within a QgsLayout.
@ UndoShapeStyle
Shape symbol style.
int type() const override
Returns a unique graphics item type identifier.
void changed()
Emitted when the object's properties change.
bool setNewItem(QgsLayoutItem *item) override
Attempts to update the widget to show the properties for the specified item.
void setMasterLayout(QgsMasterLayoutInterface *masterLayout) override
Sets the master layout associated with the item.
QgsLayoutPolygonWidget(QgsLayoutItemPolygon *polygon)
constructor
void layerChanged(QgsVectorLayer *layer)
Emitted when the context's layer is changed.
Interface for master layout type objects, such as print layouts and reports.
void setPanelTitle(const QString &panelTitle)
Set the title of the panel when shown in the interface.
void setLayer(QgsVectorLayer *layer)
Sets a layer to associate with the widget.
void changed()
Emitted when the symbol's settings are changed.
QgsSignalBlocker< Object > whileBlocking(Object *object)
Temporarily blocks signals from a QObject while calling a single method from the object.
Definition: qgis.h:537