Skip to content

Commit a555f91

Browse files
committed
Clean up showPanel API. Open dialog if not in dock mode
1 parent 15efc31 commit a555f91

19 files changed

+153
-162
lines changed

python/gui/effects/qgseffectstackpropertieswidget.sip

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -182,13 +182,6 @@ class QgsEffectStackCompactWidget : QgsPanelWidget
182182
*/
183183
void setPreviewPicture( const QPicture& picture );
184184

185-
/**
186-
* Set the widget in dock mode. In dock mode the widget will emit a signal
187-
* to show the effects selector instead of opening a dialog.
188-
* @param dockMode True to enable dock mode.
189-
*/
190-
void setDockMode( bool dockMode );
191-
192185
signals:
193186

194187
/** Emitted when the paint effect properties change

python/gui/qgspanelwidget.sip

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,27 @@ class QgsPanelWidget : public QWidget
4949
* @param dockMode True to enable dock mode.
5050
*/
5151
virtual void setDockMode( bool dockMode );
52+
53+
/**
54+
* Return the dock mode state.
55+
* @return True if in dock mode. If in dock mode the widget
56+
* will emit the showPanel signal to handle panel opening
57+
* If false it will open dialogs when openPanel is called.
58+
*/
59+
bool dockMode();
60+
61+
/**
62+
* Open a panel or dialog depending on dock mode setting
63+
* If dock mode is true this method will emit the showPanel signal
64+
* for connected slots to handle the open event.
65+
*
66+
* If dock mode is false this method will open a dialog
67+
* and block the user.
68+
*
69+
* @param panel The panel widget to open.
70+
*/
71+
void openPanel( QgsPanelWidget* panel );
72+
5273
signals:
5374

5475
/**

python/gui/symbology-ng/qgsrendererv2propertiesdialog.sip

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ class QgsRendererV2PropertiesDialog : QDialog
2424
*/
2525
void setMapCanvas( QgsMapCanvas* canvas );
2626

27+
/**
28+
* Set the widget in dock mode which tells the widget to emit panel
29+
* widgets and not open dialogs
30+
* @param dockMode True to enable dock mode.
31+
*/
2732
void setDockMode( bool dockMode );
2833

2934
signals:

python/gui/symbology-ng/qgsrendererv2widget.sip

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,6 @@ class QgsRendererV2Widget : QgsPanelWidget
3939
*/
4040
void applyChanges();
4141

42-
/**
43-
* Set the widget in dock mode which tells the widget to emit panel
44-
* widgets and not open dialogs
45-
* @param dockMode True to enable dock mode.
46-
*/
47-
virtual void setDockMode( bool dockMode);
48-
4942
signals:
5043
/**
5144
* Emitted when expression context variables on the associated

python/gui/symbology-ng/qgssymbolv2selectordialog.sip

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,6 @@ class QgsSymbolV2SelectorWidget : QgsPanelWidget
4040
*/
4141
QgsSymbolV2* symbol();
4242

43-
/**
44-
* Set the widget in dock mode which will emit showPanel when a sub widget requests
45-
* to show a widget.
46-
* @param dockMode True to enable dock mode.
47-
*/
48-
void setDockMode( bool dockMode );
4943
protected:
5044
//! Reimplements dialog keyPress event so we can ignore it
5145
void keyPressEvent( QKeyEvent * event );

src/gui/effects/qgseffectstackpropertieswidget.cpp

Lines changed: 6 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,6 @@ void QgsEffectStackPropertiesDialog::setPreviewPicture( const QPicture &picture
382382

383383
QgsEffectStackCompactWidget::QgsEffectStackCompactWidget( QWidget *parent , QgsPaintEffect *effect )
384384
: QgsPanelWidget( parent )
385-
, mDockMode( false )
386385
, mEnabledCheckBox( nullptr )
387386
, mButton( nullptr )
388387
, mPreviewPicture( nullptr )
@@ -452,32 +451,14 @@ void QgsEffectStackCompactWidget::showDialog()
452451
return;
453452

454453
QgsEffectStack* clone = static_cast<QgsEffectStack*>( mStack->clone() );
455-
if ( mDockMode )
456-
{
457-
QgsEffectStackPropertiesWidget* widget = new QgsEffectStackPropertiesWidget( clone, nullptr );
458-
if ( mPreviewPicture )
459-
{
460-
widget->setPreviewPicture( *mPreviewPicture );
461-
}
462-
connect( widget, SIGNAL( widgetChanged() ), this, SLOT( updateEffectLive() ) );
463-
connect( widget, SIGNAL( panelAccepted( QgsPanelWidget* ) ), this, SLOT( updateAcceptWidget( QgsPanelWidget* ) ) );
464-
emit showPanel( widget );
465-
}
466-
else
454+
QgsEffectStackPropertiesWidget* widget = new QgsEffectStackPropertiesWidget( clone, nullptr );
455+
if ( mPreviewPicture )
467456
{
468-
QgsEffectStackPropertiesDialog dialog( clone, this );
469-
if ( mPreviewPicture )
470-
{
471-
dialog.setPreviewPicture( *mPreviewPicture );
472-
}
473-
if ( dialog.exec() == QDialog::Accepted )
474-
{
475-
*mStack = *clone;
476-
emit changed();
477-
}
478-
479-
delete clone;
457+
widget->setPreviewPicture( *mPreviewPicture );
480458
}
459+
connect( widget, SIGNAL( widgetChanged() ), this, SLOT( updateEffectLive() ) );
460+
connect( widget, SIGNAL( panelAccepted( QgsPanelWidget* ) ), this, SLOT( updateAcceptWidget( QgsPanelWidget* ) ) );
461+
openPanel( widget );
481462
}
482463

483464
void QgsEffectStackCompactWidget::enableToggled( bool checked )

src/gui/effects/qgseffectstackpropertieswidget.h

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -219,13 +219,6 @@ class GUI_EXPORT QgsEffectStackCompactWidget: public QgsPanelWidget
219219
*/
220220
void setPreviewPicture( const QPicture &picture );
221221

222-
/**
223-
* Set the widget in dock mode. In dock mode the widget will emit a signal
224-
* to show the effects selector instead of opening a dialog.
225-
* @param dockMode True to enable dock mode.
226-
*/
227-
void setDockMode( bool dockMode ) { mDockMode = dockMode; }
228-
229222
signals:
230223

231224
/** Emitted when the paint effect properties change
@@ -242,8 +235,6 @@ class GUI_EXPORT QgsEffectStackCompactWidget: public QgsPanelWidget
242235
void updateEffectLive();
243236

244237
private:
245-
bool mDockMode;
246-
247238
QgsEffectStack* mStack;
248239
QCheckBox* mEnabledCheckBox;
249240
QToolButton* mButton;

src/gui/qgspanelwidget.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
***************************************************************************/
1515
#include <QDialogButtonBox>
1616
#include <QPushButton>
17+
#include <QDialog>
1718

1819
#include "qgspanelwidget.h"
1920
#include "qgslogger.h"
@@ -42,6 +43,27 @@ void QgsPanelWidget::setDockMode( bool dockMode )
4243
mDockMode = dockMode;
4344
}
4445

46+
void QgsPanelWidget::openPanel( QgsPanelWidget* panel )
47+
{
48+
if ( mDockMode )
49+
{
50+
emit showPanel( panel );
51+
}
52+
else
53+
{
54+
// Show the dialog version if no one is connected
55+
QDialog* dlg = new QDialog();
56+
dlg->setWindowTitle( panel->panelTitle() );
57+
dlg->setLayout( new QVBoxLayout() );
58+
dlg->layout()->addWidget( panel );
59+
QDialogButtonBox* buttonBox = new QDialogButtonBox( QDialogButtonBox::Ok );
60+
connect( buttonBox, SIGNAL( accepted() ), dlg, SLOT( accept() ) );
61+
dlg->layout()->addWidget( buttonBox );
62+
dlg->exec();
63+
emit panelAccepted( panel );
64+
}
65+
}
66+
4567
void QgsPanelWidget::acceptPanel()
4668
{
4769
emit panelAccepted( this );

src/gui/qgspanelwidget.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,26 @@ class GUI_EXPORT QgsPanelWidget : public QWidget
7373
*/
7474
virtual void setDockMode( bool dockMode );
7575

76+
/**
77+
* Return the dock mode state.
78+
* @return True if in dock mode. If in dock mode the widget
79+
* will emit the showPanel signal to handle panel opening
80+
* If false it will open dialogs when openPanel is called.
81+
*/
82+
bool dockMode() { return mDockMode; }
83+
84+
/**
85+
* Open a panel or dialog depending on dock mode setting
86+
* If dock mode is true this method will emit the showPanel signal
87+
* for connected slots to handle the open event.
88+
*
89+
* If dock mode is false this method will open a dialog
90+
* and block the user.
91+
*
92+
* @param panel The panel widget to open.
93+
*/
94+
void openPanel( QgsPanelWidget* panel );
95+
7696
signals:
7797

7898
/**

src/gui/symbology-ng/qgscategorizedsymbolrendererv2widget.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -572,12 +572,12 @@ void QgsCategorizedSymbolRendererV2Widget::changeCategorizedSymbol()
572572
{
573573
QgsSymbolV2* newSymbol = mCategorizedSymbol->clone();
574574
QgsSymbolV2SelectorWidget* dlg = new QgsSymbolV2SelectorWidget( newSymbol, mStyle, mLayer, nullptr );
575-
dlg->setDockMode( true );
575+
dlg->setDockMode( this->dockMode() );
576576
dlg->setMapCanvas( mMapCanvas );
577577

578578
connect( dlg, SIGNAL( widgetChanged() ), this, SLOT( updateSymbolsFromWidget() ) );
579-
connect( dlg, SIGNAL( accepted( QgsPanelWidget* ) ), this, SLOT( cleanUpSymbolSelector( QgsPanelWidget* ) ) );
580-
emit showPanel( dlg );
579+
connect( dlg, SIGNAL( panelAccepted( QgsPanelWidget* ) ), this, SLOT( cleanUpSymbolSelector( QgsPanelWidget* ) ) );
580+
openPanel( dlg );
581581
}
582582

583583
void QgsCategorizedSymbolRendererV2Widget::updateCategorizedSymbolIcon()
@@ -617,11 +617,11 @@ void QgsCategorizedSymbolRendererV2Widget::changeCategorySymbol()
617617
}
618618

619619
QgsSymbolV2SelectorWidget* dlg = new QgsSymbolV2SelectorWidget( symbol, mStyle, mLayer, nullptr );
620-
dlg->setDockMode( true );
620+
dlg->setDockMode( this->dockMode() );
621621
dlg->setMapCanvas( mMapCanvas );
622622
connect( dlg, SIGNAL( widgetChanged() ), this, SLOT( updateSymbolsFromWidget() ) );
623-
connect( dlg, SIGNAL( accepted( QgsPanelWidget* ) ), this, SLOT( cleanUpSymbolSelector( QgsPanelWidget* ) ) );
624-
emit showPanel( dlg );
623+
connect( dlg, SIGNAL( panelAccepted( QgsPanelWidget* ) ), this, SLOT( cleanUpSymbolSelector( QgsPanelWidget* ) ) );
624+
openPanel( dlg );
625625
}
626626

627627
static void _createCategories( QgsCategoryList& cats, QList<QVariant>& values, QgsSymbolV2* symbol )

src/gui/symbology-ng/qgsgraduatedsymbolrendererv2widget.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -832,7 +832,7 @@ void QgsGraduatedSymbolRendererV2Widget::changeGraduatedSymbol()
832832

833833
connect( dlg, SIGNAL( widgetChanged() ), this, SLOT( updateSymbolsFromWidget() ) );
834834
connect( dlg, SIGNAL( accepted( QgsPanelWidget* ) ), this, SLOT( cleanUpSymbolSelector( QgsPanelWidget* ) ) );
835-
emit showPanel( dlg );
835+
openPanel( dlg );
836836
}
837837

838838
void QgsGraduatedSymbolRendererV2Widget::updateGraduatedSymbolIcon()
@@ -906,12 +906,12 @@ void QgsGraduatedSymbolRendererV2Widget::changeRangeSymbol( int rangeIdx )
906906
{
907907
QgsSymbolV2* newSymbol = mRenderer->ranges()[rangeIdx].symbol()->clone();
908908
QgsSymbolV2SelectorWidget* dlg = new QgsSymbolV2SelectorWidget( newSymbol, mStyle, mLayer, nullptr );
909-
dlg->setDockMode( true );
909+
dlg->setDockMode( this->dockMode() );
910910
dlg->setMapCanvas( mMapCanvas );
911911

912912
connect( dlg, SIGNAL( widgetChanged() ), this, SLOT( updateSymbolsFromWidget() ) );
913913
connect( dlg, SIGNAL( accepted( QgsPanelWidget* ) ), this, SLOT( cleanUpSymbolSelector( QgsPanelWidget* ) ) );
914-
emit showPanel( dlg );
914+
openPanel( dlg );
915915
}
916916

917917
void QgsGraduatedSymbolRendererV2Widget::changeRange( int rangeIdx )

src/gui/symbology-ng/qgslayerpropertieswidget.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -136,11 +136,8 @@ void QgsLayerPropertiesWidget::setMapCanvas( QgsMapCanvas *canvas )
136136

137137
void QgsLayerPropertiesWidget::setDockMode( bool dockMode )
138138
{
139-
mDockMode = dockMode;
140-
if ( dockMode )
141-
{
142-
mEffectWidget->setDockMode( dockMode );
143-
}
139+
QgsPanelWidget::setDockMode( dockMode );
140+
mEffectWidget->setDockMode( this->dockMode() );
144141
}
145142

146143
void QgsLayerPropertiesWidget::setExpressionContext( QgsExpressionContext *context )

src/gui/symbology-ng/qgslayerpropertieswidget.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class GUI_EXPORT QgsLayerPropertiesWidget : public QgsPanelWidget, private Ui::L
5858
* widgets and not open dialogs
5959
* @param dockMode True to enable dock mode.
6060
*/
61-
void setDockMode( bool dockMode );
61+
virtual void setDockMode( bool dockMode ) override;
6262

6363
public slots:
6464
void layerTypeChanged();
@@ -92,7 +92,6 @@ class GUI_EXPORT QgsLayerPropertiesWidget : public QgsPanelWidget, private Ui::L
9292
void reloadLayer();
9393

9494
private:
95-
bool mDockMode;
9695
QgsExpressionContext* mPresetExpressionContext;
9796
QgsMapCanvas* mMapCanvas;
9897

src/gui/symbology-ng/qgsrendererv2widget.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -273,11 +273,6 @@ void QgsRendererV2Widget::applyChanges()
273273
apply();
274274
}
275275

276-
void QgsRendererV2Widget::setDockMode( bool dockMode )
277-
{
278-
mDockMode = dockMode;
279-
}
280-
281276

282277

283278
////////////

src/gui/symbology-ng/qgsrendererv2widget.h

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -76,14 +76,6 @@ class GUI_EXPORT QgsRendererV2Widget : public QgsPanelWidget
7676
*/
7777
void applyChanges();
7878

79-
/**
80-
* Set the widget in dock mode which tells the widget to emit panel
81-
* widgets and not open dialogs
82-
* @param dockMode True to enable dock mode.
83-
*/
84-
virtual void setDockMode( bool dockMode ) override;
85-
86-
8779
signals:
8880
/**
8981
* Emitted when expression context variables on the associated
@@ -93,7 +85,6 @@ class GUI_EXPORT QgsRendererV2Widget : public QgsPanelWidget
9385
void layerVariablesChanged();
9486

9587
protected:
96-
bool mDockMode;
9788
QgsVectorLayer* mLayer;
9889
QgsStyleV2* mStyle;
9990
QMenu* contextMenu;

src/gui/symbology-ng/qgssinglesymbolrendererv2widget.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,6 @@ void QgsSingleSymbolRendererV2Widget::setMapCanvas( QgsMapCanvas* canvas )
9090
void QgsSingleSymbolRendererV2Widget::setDockMode( bool dockMode )
9191
{
9292
QgsRendererV2Widget::setDockMode( dockMode );
93-
mDockMode = dockMode;
9493
if ( mSelector )
9594
mSelector->setDockMode( dockMode );
9695
}

src/gui/symbology-ng/qgssymbolv2selectordialog.cpp

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -300,11 +300,6 @@ void QgsSymbolV2SelectorWidget::setMapCanvas( QgsMapCanvas *canvas )
300300
listWidget->setMapCanvas( canvas );
301301
}
302302

303-
void QgsSymbolV2SelectorWidget::setDockMode( bool dockMode )
304-
{
305-
mDockMode = dockMode;
306-
}
307-
308303
void QgsSymbolV2SelectorWidget::loadSymbol( QgsSymbolV2* symbol, SymbolLayerItem* parent )
309304
{
310305
SymbolLayerItem* symbolItem = new SymbolLayerItem( symbol );
@@ -419,7 +414,7 @@ void QgsSymbolV2SelectorWidget::layerChanged()
419414
SymbolLayerItem *parent = static_cast<SymbolLayerItem*>( currentItem->parent() );
420415
mDataDefineRestorer.reset( new DataDefinedRestorer( parent->symbol(), currentItem->layer() ) );
421416
QgsLayerPropertiesWidget *layerProp = new QgsLayerPropertiesWidget( currentItem->layer(), parent->symbol(), mVectorLayer );
422-
layerProp->setDockMode( mDockMode );
417+
layerProp->setDockMode( this->dockMode() );
423418
layerProp->setExpressionContext( mPresetExpressionContext.data() );
424419
layerProp->setMapCanvas( mMapCanvas );
425420
setWidget( layerProp );

src/gui/symbology-ng/qgssymbolv2selectordialog.h

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -128,13 +128,6 @@ class GUI_EXPORT QgsSymbolV2SelectorWidget: public QgsPanelWidget, private Ui::Q
128128
*/
129129
QgsSymbolV2* symbol() { return mSymbol; }
130130

131-
/**
132-
* Set the widget in dock mode which will emit showPanel when a sub widget requests
133-
* to show a widget.
134-
* @param dockMode True to enable dock mode.
135-
*/
136-
void setDockMode( bool dockMode );
137-
138131
protected:
139132

140133
/**
@@ -255,7 +248,6 @@ class GUI_EXPORT QgsSymbolV2SelectorWidget: public QgsPanelWidget, private Ui::Q
255248
QWidget *mPresentWidget;
256249

257250
private:
258-
bool mDockMode;
259251
QScopedPointer<DataDefinedRestorer> mDataDefineRestorer;
260252
QScopedPointer< QgsExpressionContext > mPresetExpressionContext;
261253

0 commit comments

Comments
 (0)