Skip to content

Commit

Permalink
[styledock] Handle stacked panels at a higher level
Browse files Browse the repository at this point in the history
  • Loading branch information
NathanW2 committed Jun 6, 2016
1 parent f8dccf8 commit 91cd68e
Show file tree
Hide file tree
Showing 10 changed files with 239 additions and 192 deletions.
27 changes: 12 additions & 15 deletions src/gui/symbology-ng/qgscategorizedsymbolrendererv2widget.cpp
Expand Up @@ -572,9 +572,10 @@ void QgsCategorizedSymbolRendererV2Widget::changeCategorizedSymbol()
dlg->setMapCanvas( mMapCanvas );

QgsRendererWidgetContainer* container = new QgsRendererWidgetContainer( dlg, "Select Symbol", nullptr );
connect( dlg, SIGNAL( symbolModified() ), this, SLOT( updateSymbolsFromWidget() ) );
connect( container, SIGNAL( accepted() ), this, SLOT( cleanUpSymbolSelector() ) );
this->showPanel( container );
connect( dlg, SIGNAL( symbolModified() ), container, SLOT( emitWidgetChanged() ) );
connect( container, SIGNAL( widgetChanged( QgsRendererWidgetContainer* ) ), this, SLOT( updateSymbolsFromWidget( QgsRendererWidgetContainer* ) ) );
connect( container, SIGNAL( accepted( QgsRendererWidgetContainer* ) ), this, SLOT( cleanUpSymbolSelector( QgsRendererWidgetContainer* ) ) );
emit panelOpened( container );
}

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

QgsRendererWidgetContainer* container = new QgsRendererWidgetContainer( dlg, "Select Symbol", nullptr );
connect( dlg, SIGNAL( symbolModified() ), this, SLOT( updateSymbolsFromWidget() ) );
connect( container, SIGNAL( accepted() ), this, SLOT( cleanUpSymbolSelector() ) );
this->showPanel( container );
QgsRendererWidgetContainer* container = new QgsRendererWidgetContainer( dlg, "Select Symbol", nullptr );
connect( dlg, SIGNAL( symbolModified() ), container, SLOT( emitWidgetChanged() ) );
connect( container, SIGNAL( widgetChanged( QgsRendererWidgetContainer* ) ), this, SLOT( updateSymbolsFromWidget( QgsRendererWidgetContainer* ) ) );
connect( container, SIGNAL( accepted( QgsRendererWidgetContainer* ) ), this, SLOT( cleanUpSymbolSelector( QgsRendererWidgetContainer* ) ) );
emit panelOpened( container );
}

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

void QgsCategorizedSymbolRendererV2Widget::cleanUpSymbolSelector()
void QgsCategorizedSymbolRendererV2Widget::cleanUpSymbolSelector( QgsRendererWidgetContainer *container )
{
QgsRendererWidgetContainer* container = qobject_cast<QgsRendererWidgetContainer*>( this->currentWidget() );
if ( container )
{
this->removeWidget( container );
QgsSymbolV2SelectorDialog* dlg = qobject_cast<QgsSymbolV2SelectorDialog*>( container->widget() );
delete dlg->symbol();
container->deleteLater();
this->setCurrentIndex( 0 );
emit panelOpened( false );
}
}

void QgsCategorizedSymbolRendererV2Widget::updateSymbolsFromWidget()
void QgsCategorizedSymbolRendererV2Widget::updateSymbolsFromWidget( QgsRendererWidgetContainer* container )
{
QgsRendererWidgetContainer* container = qobject_cast<QgsRendererWidgetContainer*>( this->currentWidget() );
QgsDebugMsg( "UPDATE SYMBOL!!!" );
QgsSymbolV2SelectorDialog* dlg = qobject_cast<QgsSymbolV2SelectorDialog*>( container->widget() );
delete mCategorizedSymbol;
mCategorizedSymbol = dlg->symbol()->clone();
Expand Down
4 changes: 2 additions & 2 deletions src/gui/symbology-ng/qgscategorizedsymbolrendererv2widget.h
Expand Up @@ -131,8 +131,8 @@ class GUI_EXPORT QgsCategorizedSymbolRendererV2Widget : public QgsRendererV2Widg

private slots:

void cleanUpSymbolSelector();
void updateSymbolsFromWidget();
void cleanUpSymbolSelector( QgsRendererWidgetContainer* container );
void updateSymbolsFromWidget( QgsRendererWidgetContainer *container );

protected:

Expand Down
7 changes: 2 additions & 5 deletions src/gui/symbology-ng/qgsgraduatedsymbolrendererv2widget.cpp
Expand Up @@ -699,7 +699,6 @@ void QgsGraduatedSymbolRendererV2Widget::cleanUpSymbolSelector()
delete dlg->symbol();
container->deleteLater();
this->setCurrentIndex( 0 );
emit panelOpened( false );
}
}

Expand Down Expand Up @@ -841,9 +840,7 @@ void QgsGraduatedSymbolRendererV2Widget::changeGraduatedSymbol()
QgsRendererWidgetContainer* container = new QgsRendererWidgetContainer( dlg, "Select Symbol", nullptr );
connect( dlg, SIGNAL( symbolModified() ), this, SLOT( updateSymbolsFromWidget() ) );
connect( container, SIGNAL( accepted() ), this, SLOT( cleanUpSymbolSelector() ) );
int page = this->addWidget( container );
this->setCurrentIndex( page );
emit panelOpened( true );
emit panelOpened( container );
}

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

void QgsGraduatedSymbolRendererV2Widget::changeRange( int rangeIdx )
Expand Down
17 changes: 17 additions & 0 deletions src/gui/symbology-ng/qgsrendererv2propertiesdialog.cpp
Expand Up @@ -27,6 +27,7 @@
#include "qgsheatmaprendererwidget.h"
#include "qgs25drendererwidget.h"
#include "qgsnullsymbolrendererwidget.h"
#include "qgsrendererwidgetcontainer.h"

#include "qgsorderbydialog.h"
#include "qgsapplication.h"
Expand Down Expand Up @@ -244,6 +245,7 @@ void QgsRendererV2PropertiesDialog::rendererChanged()
connect( mActiveWidget, SIGNAL( layerVariablesChanged() ), this, SIGNAL( layerVariablesChanged() ) );
}
connect( mActiveWidget, SIGNAL( widgetChanged() ), this, SIGNAL( widgetChanged() ) );
connect( mActiveWidget, SIGNAL( panelOpened( QgsRendererWidgetContainer* ) ), this, SLOT( showPanel( QgsRendererWidgetContainer* ) ) );
}
else
{
Expand Down Expand Up @@ -286,6 +288,21 @@ void QgsRendererV2PropertiesDialog::onOK()
accept();
}

void QgsRendererV2PropertiesDialog::showPanel( QgsRendererWidgetContainer *container )
{
connect( container, SIGNAL( accepted( QgsRendererWidgetContainer* ) ), this, SLOT( closePanel( QgsRendererWidgetContainer* ) ) );

int page = this->mainStack->addWidget( container );
this->mainStack->setCurrentIndex( page );
}

void QgsRendererV2PropertiesDialog::closePanel( QgsRendererWidgetContainer *container )
{
this->mainStack->removeWidget( container );
this->mainStack->setCurrentIndex( this->mainStack->currentIndex() - 1 );
container->deleteLater();
}

void QgsRendererV2PropertiesDialog::syncToLayer()
{
// Blend mode
Expand Down
9 changes: 9 additions & 0 deletions src/gui/symbology-ng/qgsrendererv2propertiesdialog.h
Expand Up @@ -31,6 +31,7 @@ class QgsSymbolV2;
class QgsPaintEffect;
class QgsRendererV2Widget;
class QgsMapCanvas;
class QgsRendererWidgetContainer;


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

/** Shows a panel widget inside the renderer widget.
* @param container widget panel to show
* @note added in QGIS 2.16
*/
void showPanel( QgsRendererWidgetContainer *container );

This comment has been minimized.


void closePanel( QgsRendererWidgetContainer *container );

private slots:
void showOrderByDialog();

Expand Down
6 changes: 0 additions & 6 deletions src/gui/symbology-ng/qgsrendererv2widget.cpp
Expand Up @@ -274,12 +274,6 @@ void QgsRendererV2Widget::applyChanges()
apply();
}

void QgsRendererV2Widget::showPanel( QWidget* container )
{
int page = this->addWidget( container );
this->setCurrentIndex( page );
emit panelOpened( true );
}


////////////
Expand Down
8 changes: 2 additions & 6 deletions src/gui/symbology-ng/qgsrendererv2widget.h
Expand Up @@ -26,6 +26,7 @@ class QgsStyleV2;
class QgsFeatureRendererV2;
class QgsSymbolV2SelectorDialog;
class QgsMapCanvas;
class QgsRendererWidgetContainer;


/**
Expand Down Expand Up @@ -76,11 +77,6 @@ class GUI_EXPORT QgsRendererV2Widget : public QStackedWidget
*/
void applyChanges();

/** Shows a panel widget inside the renderer widget.
* @param container widget panel to show
* @note added in QGIS 2.16
*/
void showPanel( QWidget *container );

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

protected:
QWidget* mWidgetPage;
Expand Down
17 changes: 14 additions & 3 deletions src/gui/symbology-ng/qgsrendererwidgetcontainer.cpp
Expand Up @@ -19,25 +19,36 @@

QgsRendererWidgetContainer::QgsRendererWidgetContainer( QWidget *widget, const QString& title, QWidget *parent )
: QWidget( parent )
, mWidget( widget )
{
setupUi( this );
mWidgetLayout->addWidget( widget );
mWidgetLayout->setContentsMargins( 0, 0, 0, 0 );
mTitleText->setText( title );
QPushButton* button = mButtonBox->button( QDialogButtonBox::Close );
button->setDefault( true );
connect( button, SIGNAL( pressed() ), this, SIGNAL( accepted() ) );
connect( button, SIGNAL( pressed() ), this, SLOT( accept() ) );
}

QWidget *QgsRendererWidgetContainer::widget()
{
return mWidgetLayout->itemAt( 0 )->widget() ;
return mWidget;
}

void QgsRendererWidgetContainer::accept()
{
emit accepted( this );
}

void QgsRendererWidgetContainer::emitWidgetChanged()
{
emit widgetChanged( this );
}

void QgsRendererWidgetContainer::keyPressEvent( QKeyEvent *event )
{
if ( event->key() == Qt::Key_Escape )
{
emit accepted();
accept();
}
}
9 changes: 8 additions & 1 deletion src/gui/symbology-ng/qgsrendererwidgetcontainer.h
Expand Up @@ -48,17 +48,24 @@ class GUI_EXPORT QgsRendererWidgetContainer : public QWidget, private Ui::QgsRen
* @brief Emitted when the container is accpeted and closed.
* Listen to this to clean up the callers state.
*/
void accepted();
void accepted( QgsRendererWidgetContainer* container );
void widgetChanged( QgsRendererWidgetContainer* conatiner );

public slots:

void accept();
void emitWidgetChanged();

protected:
/**
* @brief Overriden key press event to handle the esc event on the widget.
* @param event The key event
*/
void keyPressEvent( QKeyEvent* event );

private:
QWidget* mWidget;

};

#endif // QGSRENDERERWIDGETCONTAINER_H

0 comments on commit 91cd68e

Please sign in to comment.