Skip to content

Commit 91cd68e

Browse files
committed
[styledock] Handle stacked panels at a higher level
1 parent f8dccf8 commit 91cd68e

10 files changed

+239
-192
lines changed

src/gui/symbology-ng/qgscategorizedsymbolrendererv2widget.cpp

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -572,9 +572,10 @@ void QgsCategorizedSymbolRendererV2Widget::changeCategorizedSymbol()
572572
dlg->setMapCanvas( mMapCanvas );
573573

574574
QgsRendererWidgetContainer* container = new QgsRendererWidgetContainer( dlg, "Select Symbol", nullptr );
575-
connect( dlg, SIGNAL( symbolModified() ), this, SLOT( updateSymbolsFromWidget() ) );
576-
connect( container, SIGNAL( accepted() ), this, SLOT( cleanUpSymbolSelector() ) );
577-
this->showPanel( container );
575+
connect( dlg, SIGNAL( symbolModified() ), container, SLOT( emitWidgetChanged() ) );
576+
connect( container, SIGNAL( widgetChanged( QgsRendererWidgetContainer* ) ), this, SLOT( updateSymbolsFromWidget( QgsRendererWidgetContainer* ) ) );
577+
connect( container, SIGNAL( accepted( QgsRendererWidgetContainer* ) ), this, SLOT( cleanUpSymbolSelector( QgsRendererWidgetContainer* ) ) );
578+
emit panelOpened( container );
578579
}
579580

580581
void QgsCategorizedSymbolRendererV2Widget::updateCategorizedSymbolIcon()
@@ -616,10 +617,11 @@ void QgsCategorizedSymbolRendererV2Widget::changeCategorySymbol()
616617
QgsSymbolV2SelectorDialog* dlg = new QgsSymbolV2SelectorDialog( symbol, mStyle, mLayer, nullptr, true );
617618
dlg->setMapCanvas( mMapCanvas );
618619

619-
QgsRendererWidgetContainer* container = new QgsRendererWidgetContainer( dlg, "Select Symbol", nullptr );
620-
connect( dlg, SIGNAL( symbolModified() ), this, SLOT( updateSymbolsFromWidget() ) );
621-
connect( container, SIGNAL( accepted() ), this, SLOT( cleanUpSymbolSelector() ) );
622-
this->showPanel( container );
620+
QgsRendererWidgetContainer* container = new QgsRendererWidgetContainer( dlg, "Select Symbol", nullptr );
621+
connect( dlg, SIGNAL( symbolModified() ), container, SLOT( emitWidgetChanged() ) );
622+
connect( container, SIGNAL( widgetChanged( QgsRendererWidgetContainer* ) ), this, SLOT( updateSymbolsFromWidget( QgsRendererWidgetContainer* ) ) );
623+
connect( container, SIGNAL( accepted( QgsRendererWidgetContainer* ) ), this, SLOT( cleanUpSymbolSelector( QgsRendererWidgetContainer* ) ) );
624+
emit panelOpened( container );
623625
}
624626

625627
static void _createCategories( QgsCategoryList& cats, QList<QVariant>& values, QgsSymbolV2* symbol )
@@ -992,23 +994,18 @@ void QgsCategorizedSymbolRendererV2Widget::matchToSymbolsFromXml()
992994
}
993995
}
994996

995-
void QgsCategorizedSymbolRendererV2Widget::cleanUpSymbolSelector()
997+
void QgsCategorizedSymbolRendererV2Widget::cleanUpSymbolSelector( QgsRendererWidgetContainer *container )
996998
{
997-
QgsRendererWidgetContainer* container = qobject_cast<QgsRendererWidgetContainer*>( this->currentWidget() );
998999
if ( container )
9991000
{
1000-
this->removeWidget( container );
10011001
QgsSymbolV2SelectorDialog* dlg = qobject_cast<QgsSymbolV2SelectorDialog*>( container->widget() );
10021002
delete dlg->symbol();
1003-
container->deleteLater();
1004-
this->setCurrentIndex( 0 );
1005-
emit panelOpened( false );
10061003
}
10071004
}
10081005

1009-
void QgsCategorizedSymbolRendererV2Widget::updateSymbolsFromWidget()
1006+
void QgsCategorizedSymbolRendererV2Widget::updateSymbolsFromWidget( QgsRendererWidgetContainer* container )
10101007
{
1011-
QgsRendererWidgetContainer* container = qobject_cast<QgsRendererWidgetContainer*>( this->currentWidget() );
1008+
QgsDebugMsg( "UPDATE SYMBOL!!!" );
10121009
QgsSymbolV2SelectorDialog* dlg = qobject_cast<QgsSymbolV2SelectorDialog*>( container->widget() );
10131010
delete mCategorizedSymbol;
10141011
mCategorizedSymbol = dlg->symbol()->clone();

src/gui/symbology-ng/qgscategorizedsymbolrendererv2widget.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,8 @@ class GUI_EXPORT QgsCategorizedSymbolRendererV2Widget : public QgsRendererV2Widg
131131

132132
private slots:
133133

134-
void cleanUpSymbolSelector();
135-
void updateSymbolsFromWidget();
134+
void cleanUpSymbolSelector( QgsRendererWidgetContainer* container );
135+
void updateSymbolsFromWidget( QgsRendererWidgetContainer *container );
136136

137137
protected:
138138

src/gui/symbology-ng/qgsgraduatedsymbolrendererv2widget.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -699,7 +699,6 @@ void QgsGraduatedSymbolRendererV2Widget::cleanUpSymbolSelector()
699699
delete dlg->symbol();
700700
container->deleteLater();
701701
this->setCurrentIndex( 0 );
702-
emit panelOpened( false );
703702
}
704703
}
705704

@@ -841,9 +840,7 @@ void QgsGraduatedSymbolRendererV2Widget::changeGraduatedSymbol()
841840
QgsRendererWidgetContainer* container = new QgsRendererWidgetContainer( dlg, "Select Symbol", nullptr );
842841
connect( dlg, SIGNAL( symbolModified() ), this, SLOT( updateSymbolsFromWidget() ) );
843842
connect( container, SIGNAL( accepted() ), this, SLOT( cleanUpSymbolSelector() ) );
844-
int page = this->addWidget( container );
845-
this->setCurrentIndex( page );
846-
emit panelOpened( true );
843+
emit panelOpened( container );
847844
}
848845

849846
void QgsGraduatedSymbolRendererV2Widget::updateGraduatedSymbolIcon()
@@ -922,7 +919,7 @@ void QgsGraduatedSymbolRendererV2Widget::changeRangeSymbol( int rangeIdx )
922919
QgsRendererWidgetContainer* container = new QgsRendererWidgetContainer( dlg, "Select Symbol", nullptr );
923920
connect( dlg, SIGNAL( symbolModified() ), this, SLOT( updateSymbolsFromWidget() ) );
924921
connect( container, SIGNAL( accepted() ), this, SLOT( cleanUpSymbolSelector() ) );
925-
this->showPanel( container );
922+
emit panelOpened( container );
926923
}
927924

928925
void QgsGraduatedSymbolRendererV2Widget::changeRange( int rangeIdx )

src/gui/symbology-ng/qgsrendererv2propertiesdialog.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include "qgsheatmaprendererwidget.h"
2828
#include "qgs25drendererwidget.h"
2929
#include "qgsnullsymbolrendererwidget.h"
30+
#include "qgsrendererwidgetcontainer.h"
3031

3132
#include "qgsorderbydialog.h"
3233
#include "qgsapplication.h"
@@ -244,6 +245,7 @@ void QgsRendererV2PropertiesDialog::rendererChanged()
244245
connect( mActiveWidget, SIGNAL( layerVariablesChanged() ), this, SIGNAL( layerVariablesChanged() ) );
245246
}
246247
connect( mActiveWidget, SIGNAL( widgetChanged() ), this, SIGNAL( widgetChanged() ) );
248+
connect( mActiveWidget, SIGNAL( panelOpened( QgsRendererWidgetContainer* ) ), this, SLOT( showPanel( QgsRendererWidgetContainer* ) ) );
247249
}
248250
else
249251
{
@@ -286,6 +288,21 @@ void QgsRendererV2PropertiesDialog::onOK()
286288
accept();
287289
}
288290

291+
void QgsRendererV2PropertiesDialog::showPanel( QgsRendererWidgetContainer *container )
292+
{
293+
connect( container, SIGNAL( accepted( QgsRendererWidgetContainer* ) ), this, SLOT( closePanel( QgsRendererWidgetContainer* ) ) );
294+
295+
int page = this->mainStack->addWidget( container );
296+
this->mainStack->setCurrentIndex( page );
297+
}
298+
299+
void QgsRendererV2PropertiesDialog::closePanel( QgsRendererWidgetContainer *container )
300+
{
301+
this->mainStack->removeWidget( container );
302+
this->mainStack->setCurrentIndex( this->mainStack->currentIndex() - 1 );
303+
container->deleteLater();
304+
}
305+
289306
void QgsRendererV2PropertiesDialog::syncToLayer()
290307
{
291308
// Blend mode

src/gui/symbology-ng/qgsrendererv2propertiesdialog.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class QgsSymbolV2;
3131
class QgsPaintEffect;
3232
class QgsRendererV2Widget;
3333
class QgsMapCanvas;
34+
class QgsRendererWidgetContainer;
3435

3536

3637
class GUI_EXPORT QgsRendererV2PropertiesDialog : public QDialog, private Ui::QgsRendererV2PropsDialogBase
@@ -72,6 +73,14 @@ class GUI_EXPORT QgsRendererV2PropertiesDialog : public QDialog, private Ui::Qgs
7273
//! Apply and accept the changes for the dialog.
7374
void onOK();
7475

76+
/** Shows a panel widget inside the renderer widget.
77+
* @param container widget panel to show
78+
* @note added in QGIS 2.16
79+
*/
80+
void showPanel( QgsRendererWidgetContainer *container );
81+
82+
void closePanel( QgsRendererWidgetContainer *container );
83+
7584
private slots:
7685
void showOrderByDialog();
7786

src/gui/symbology-ng/qgsrendererv2widget.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -274,12 +274,6 @@ void QgsRendererV2Widget::applyChanges()
274274
apply();
275275
}
276276

277-
void QgsRendererV2Widget::showPanel( QWidget* container )
278-
{
279-
int page = this->addWidget( container );
280-
this->setCurrentIndex( page );
281-
emit panelOpened( true );
282-
}
283277

284278

285279
////////////

src/gui/symbology-ng/qgsrendererv2widget.h

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ class QgsStyleV2;
2626
class QgsFeatureRendererV2;
2727
class QgsSymbolV2SelectorDialog;
2828
class QgsMapCanvas;
29+
class QgsRendererWidgetContainer;
2930

3031

3132
/**
@@ -76,11 +77,6 @@ class GUI_EXPORT QgsRendererV2Widget : public QStackedWidget
7677
*/
7778
void applyChanges();
7879

79-
/** Shows a panel widget inside the renderer widget.
80-
* @param container widget panel to show
81-
* @note added in QGIS 2.16
82-
*/
83-
void showPanel( QWidget *container );
8480

8581
signals:
8682
/**
@@ -101,7 +97,7 @@ class GUI_EXPORT QgsRendererV2Widget : public QStackedWidget
10197
* The renderer can open inline sub panels instead of dialogs.
10298
* @param opened True of the a sub panel is opened.
10399
*/
104-
void panelOpened( bool opened );
100+
void panelOpened( QgsRendererWidgetContainer* widget );
105101

106102
protected:
107103
QWidget* mWidgetPage;

src/gui/symbology-ng/qgsrendererwidgetcontainer.cpp

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,25 +19,36 @@
1919

2020
QgsRendererWidgetContainer::QgsRendererWidgetContainer( QWidget *widget, const QString& title, QWidget *parent )
2121
: QWidget( parent )
22+
, mWidget( widget )
2223
{
2324
setupUi( this );
2425
mWidgetLayout->addWidget( widget );
2526
mWidgetLayout->setContentsMargins( 0, 0, 0, 0 );
2627
mTitleText->setText( title );
2728
QPushButton* button = mButtonBox->button( QDialogButtonBox::Close );
2829
button->setDefault( true );
29-
connect( button, SIGNAL( pressed() ), this, SIGNAL( accepted() ) );
30+
connect( button, SIGNAL( pressed() ), this, SLOT( accept() ) );
3031
}
3132

3233
QWidget *QgsRendererWidgetContainer::widget()
3334
{
34-
return mWidgetLayout->itemAt( 0 )->widget() ;
35+
return mWidget;
36+
}
37+
38+
void QgsRendererWidgetContainer::accept()
39+
{
40+
emit accepted( this );
41+
}
42+
43+
void QgsRendererWidgetContainer::emitWidgetChanged()
44+
{
45+
emit widgetChanged( this );
3546
}
3647

3748
void QgsRendererWidgetContainer::keyPressEvent( QKeyEvent *event )
3849
{
3950
if ( event->key() == Qt::Key_Escape )
4051
{
41-
emit accepted();
52+
accept();
4253
}
4354
}

src/gui/symbology-ng/qgsrendererwidgetcontainer.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,17 +48,24 @@ class GUI_EXPORT QgsRendererWidgetContainer : public QWidget, private Ui::QgsRen
4848
* @brief Emitted when the container is accpeted and closed.
4949
* Listen to this to clean up the callers state.
5050
*/
51-
void accepted();
51+
void accepted( QgsRendererWidgetContainer* container );
52+
void widgetChanged( QgsRendererWidgetContainer* conatiner );
5253

5354
public slots:
5455

56+
void accept();
57+
void emitWidgetChanged();
58+
5559
protected:
5660
/**
5761
* @brief Overriden key press event to handle the esc event on the widget.
5862
* @param event The key event
5963
*/
6064
void keyPressEvent( QKeyEvent* event );
6165

66+
private:
67+
QWidget* mWidget;
68+
6269
};
6370

6471
#endif // QGSRENDERERWIDGETCONTAINER_H

0 commit comments

Comments
 (0)