[style dock] Add better API for panels

This commit is contained in:
Nathan Woodrow 2016-06-13 18:07:39 +10:00
parent 16eb1e14d0
commit e926e2d0aa
48 changed files with 1032 additions and 836 deletions

View File

@ -9,7 +9,7 @@
* \see QgsEffectStackCompactWidget
*/
class QgsEffectStackPropertiesWidget : QWidget
class QgsEffectStackPropertiesWidget : QgsPanelWidget
{
%TypeHeaderCode
#include <qgseffectstackpropertieswidget.h>
@ -66,18 +66,6 @@ class QgsEffectStackPropertiesWidget : QWidget
*/
void changeEffect( QgsPaintEffect* newEffect );
signals:
/**
* Emitted when something in the widget changes.
*/
void widgetChanged();
/** Emitted when a panel is shown in the widget.
* @param widget widget panel which was shown
* @note added in QGIS 2.16
*/
void showPanel( QgsRendererWidgetContainer* widget );
protected:
/** Refreshes the widget to reflect the current state of the stack.
@ -159,7 +147,7 @@ class QgsEffectStackPropertiesDialog : QgsDialog
* \see QgsEffectStackPropertiesDialog
*/
class QgsEffectStackCompactWidget : QWidget
class QgsEffectStackCompactWidget : QgsPanelWidget
{
%TypeHeaderCode
#include <qgseffectstackpropertieswidget.h>
@ -206,11 +194,4 @@ class QgsEffectStackCompactWidget : QWidget
/** Emitted when the paint effect properties change
*/
void changed();
/** Emitted when a panel is shown in the widget.
* @param widget widget panel which was shown
* @note added in QGIS 2.16
*/
void showPanel( QgsRendererWidgetContainer* widget );
};

View File

@ -135,6 +135,7 @@
%Include qgsoptionsdialogbase.sip
%Include qgsorderbydialog.sip
%Include qgsowssourceselect.sip
%Include qgspanelwidget.sip
%Include qgspixmaplabel.sip
%Include qgspluginmanagerinterface.sip
%Include qgsprevieweffect.sip
@ -252,7 +253,6 @@
%Include symbology-ng/qgsvectorfieldsymbollayerwidget.sip
%Include symbology-ng/qgsvectorgradientcolorrampv2dialog.sip
%Include symbology-ng/qgsvectorrandomcolorrampv2dialog.sip
%Include symbology-ng/qgsrendererwidgetcontainer.sip
%Include effects/qgseffectdrawmodecombobox.sip
%Include effects/qgseffectstackpropertieswidget.sip

View File

@ -293,10 +293,10 @@ class QgisInterface : QObject
virtual void unregisterMapLayerPropertiesFactory( QgsMapLayerPropertiesFactory* factory ) = 0;
/** Register a new tab in the layer properties dialog */
virtual void registerMapStylePanelFactory( QgsMapStylePanelFactory* factory ) = 0;
virtual void registerMapStylePanelFactory( QgsMapStylingPanelFactory* factory ) = 0;
/** Unregister a previously registered tab in the layer properties dialog */
virtual void unregisterMapStylePanelFactory( QgsMapStylePanelFactory* factory ) = 0;
virtual void unregisterMapStylePanelFactory( QgsMapStylingPanelFactory* factory ) = 0;
// @todo is this deprecated in favour of QgsContextHelp?
/** Open a url in the users browser. By default the QGIS doc directory is used

View File

@ -2,7 +2,7 @@
* @brief The QgsMapLayerStyleManagerWidget class which is used to visually manage
* the layer styles.
*/
class QgsMapLayerStyleManagerWidget : QgsMapStylePanel
class QgsMapLayerStyleManagerWidget : QgsMapStylingPanel
{
%TypeHeaderCode
#include "qgsmaplayerstylemanagerwidget.h"

View File

@ -2,7 +2,7 @@
* \class A panel widget that can be shown in the map style dock
* \note added in QGIS 2.16
*/
class QgsMapStylePanel : public QWidget
class QgsMapStylingPanel : public QgsPanelWidget
{
%TypeHeaderCode
#include <qgsmapstylepanel.h>
@ -16,7 +16,7 @@ public:
* @note The widget is created each time the panel is selected in the dock.
* Keep the loading light as possible for speed in the UI.
*/
QgsMapStylePanel(QgsMapLayer* layer, QgsMapCanvas *canvas, QWidget *parent = 0);
QgsMapStylingPanel(QgsMapLayer* layer, QgsMapCanvas *canvas, QWidget *parent = 0);
signals:
/**
@ -41,7 +41,7 @@ public slots:
* \class QgsMapStylePanelFactory
* \note added in QGIS 2.16
*/
class QgsMapStylePanelFactory
class QgsMapStylingPanelFactory
{
%TypeHeaderCode
#include <qgsmapstylepanel.h>
@ -50,10 +50,10 @@ class QgsMapStylePanelFactory
typedef QFlags<QgsMapLayer::LayerType> LayerTypesFlags;
/** Constructor */
QgsMapStylePanelFactory();
QgsMapStylingPanelFactory();
/** Destructor */
virtual ~QgsMapStylePanelFactory();
virtual ~QgsMapStylingPanelFactory();
/**
* @brief The icon that will be shown in the UI for the panel.
@ -82,5 +82,5 @@ class QgsMapStylePanelFactory
* @param parent The parent of the widget.
* @return A new QgsMapStylePanel which is shown in the map style dock.
*/
virtual QgsMapStylePanel* createPanel( QgsMapLayer* layer, QgsMapCanvas *canvas, QWidget* parent /TransferThis/ ) = 0 /Factory/;
virtual QgsMapStylingPanel* createPanel( QgsMapLayer* layer, QgsMapCanvas *canvas, QWidget* parent /TransferThis/ ) = 0 /Factory/;
};

View File

@ -1,4 +1,4 @@
class QgsRendererRasterPropertiesWidget : QgsMapStylePanel
class QgsRendererRasterPropertiesWidget : QgsMapStylingPanel
{
%TypeHeaderCode
#include <qgsrendererrasterpropertieswidget.h>

View File

@ -1,4 +1,4 @@
class QgsLayerPropertiesWidget : QWidget
class QgsLayerPropertiesWidget : QgsPanelWidget
{
%TypeHeaderCode
#include <qgslayerpropertieswidget.h>

View File

@ -24,6 +24,8 @@ class QgsRendererV2PropertiesDialog : QDialog
*/
void setMapCanvas( QgsMapCanvas* canvas );
void setDockMode( bool dockMode );
signals:
/**
* Emitted when expression context variables on the associated
@ -48,18 +50,6 @@ class QgsRendererV2PropertiesDialog : QDialog
//! 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 );
/**
* Closes the given panel in the stack of panels.
* @param container The container widget to close.
*/
void closePanel( QgsRendererWidgetContainer *container );
protected:
/**
* Connect the given slot to the value changed event for the set of widgets

View File

@ -1,4 +1,4 @@
class QgsRendererV2Widget : QWidget
class QgsRendererV2Widget : QgsPanelWidget
{
%TypeHeaderCode
#include <qgsrendererv2widget.h>
@ -39,6 +39,13 @@ class QgsRendererV2Widget : QWidget
*/
void applyChanges();
/**
* Set the widget in dock mode which tells the widget to emit panel
* widgets and not open dialogs
* @param dockMode True to enable dock mode.
*/
virtual void setDockMode( bool dockMode);
signals:
/**
* Emitted when expression context variables on the associated
@ -47,18 +54,6 @@ class QgsRendererV2Widget : QWidget
*/
void layerVariablesChanged();
/**
* Emitted when something on the widget has changed.
* All widgets will fire this event to notify of an internal change.
*/
void widgetChanged();
/** Shows a panel widget inside the renderer widget.
* @param widget widget panel to show
* @note added in QGIS 2.16
*/
void showPanel( QgsRendererWidgetContainer* widget );
protected:
/** Subclasses may provide the capability of changing multiple symbols at once by implementing the following two methods
and by connecting the slot contextMenuViewCategories(const QPoint&)*/

View File

@ -1,55 +0,0 @@
/**
* @brief A container widget that can be used to show a renderer widget with a title and close button.
* @note Mainly used for the style dock panels at the moment.
*/
class QgsRendererWidgetContainer : QWidget
{
%TypeHeaderCode
#include "qgsrendererwidgetcontainer.h"
%End
public:
/**
* @brief A container widget that can be used to show a renderer widget with a title and close button.
* @param widget The internal widget to be shown to the user.
* @param title The title to show on the widget.
* @param parent The parent of the widget.
*/
QgsRendererWidgetContainer( QWidget* widget, const QString &title, QWidget *parent = 0 );
/**
* @brief Returns the current internal widget.
* @return The internal widget.
*/
QWidget* widget();
signals:
/**
* @brief Emitted when the container is accpeted and closed.
* Listen to this to clean up the callers state.
*/
void accepted( QgsRendererWidgetContainer* container );
/**
* Emiited when the internal widget changes state.
* @param conatiner The container holding the widget that changed state.
*/
void widgetChanged( QgsRendererWidgetContainer* conatiner );
public slots:
/**
* Accept the container. Causes accepted to be emiited.
*/
void accept();
/**
* Fire the widgetChanged event on the container. Connect your widgets dirty signal to
* this slot to fire the and listen to widgetChanged to handle the event.
*/
void emitWidgetChanged();
protected:
void keyPressEvent( QKeyEvent* event );
};

View File

@ -13,6 +13,8 @@ class QgsSingleSymbolRendererV2Widget : QgsRendererV2Widget
virtual void setMapCanvas( QgsMapCanvas* canvas );
virtual void setDockMode( bool dockMode );
public slots:
void changeSingleSymbol();

View File

@ -1,3 +1,101 @@
class QgsSymbolV2SelectorWidget : QgsPanelWidget
{
%TypeHeaderCode
#include <qgssymbolv2selectordialog.h>
%End
public:
QgsSymbolV2SelectorWidget( QgsSymbolV2* symbol, QgsStyleV2* style, const QgsVectorLayer* vl, QWidget* parent /TransferThis/ = 0);
//! return menu for "advanced" button - create it if doesn't exist and show the advanced button
QMenu* advancedMenu();
/** Sets the optional expression context used for the widget. This expression context is used for
* evaluating data defined symbol properties and for populating based expression widgets in
* the layer widget.
* @param context expression context pointer. Ownership is transferred to the dialog.
* @note added in QGIS 2.12
* @see expressionContext()
*/
void setExpressionContext( QgsExpressionContext* context /Transfer/ );
/** Returns the expression context used for the dialog, if set. This expression context is used for
* evaluating data defined symbol properties and for populating based expression widgets in
* the dialog.
* @note added in QGIS 2.12
* @see setExpressionContext()
*/
QgsExpressionContext* expressionContext() const;
/** Sets the map canvas associated with the dialog. This allows the widget to retrieve the current
* map scale and other properties from the canvas.
* @param canvas map canvas
* @note added in QGIS 2.12
*/
void setMapCanvas( QgsMapCanvas* canvas );
/**
* @brief Return the symbol that is currently active in the widget. Can be null.
* @return The active symbol.
*/
QgsSymbolV2* symbol();
/**
* Set the widget in dock mode which will emit showPanel when a sub widget requests
* to show a widget.
* @param dockMode True to enable dock mode.
*/
void setDockMode( bool dockMode );
protected:
//! Reimplements dialog keyPress event so we can ignore it
void keyPressEvent( QKeyEvent * event );
void loadSymbol();
//! @note not available in python bindings
// void loadSymbol( QgsSymbolV2* symbol, SymbolLayerItem* parent );
void updateUi();
void updateLockButton();
//! @note not available in python bindings
// SymbolLayerItem* currentLayerItem();
QgsSymbolLayerV2* currentLayer();
void moveLayerByOffset( int offset );
void setWidget( QWidget* widget );
signals:
void symbolModified();
public slots:
void moveLayerDown();
void moveLayerUp();
void addLayer();
void removeLayer();
void lockLayer();
void saveSymbol() /Deprecated/;
//! Duplicates the current symbol layer and places the duplicated layer above the current symbol layer
//! @note added in QGIS 2.14
void duplicateLayer();
void layerChanged();
void updateLayerPreview();
void updatePreview();
//! Slot to update tree when a new symbol from style
void symbolChanged();
//! alters tree and sets proper widget when Layer Type is changed
//! @note: The layer is received from the LayerPropertiesWidget
void changeLayer( QgsSymbolLayerV2* layer );
};
class QgsSymbolV2SelectorDialog : QDialog
{
%TypeHeaderCode

View File

@ -9063,12 +9063,12 @@ void QgisApp::unregisterMapLayerPropertiesFactory( QgsMapLayerPropertiesFactory*
mMapLayerPropertiesFactories.removeAll( factory );
}
void QgisApp::registerMapStylePanelFactory( QgsMapStylePanelFactory *factory )
void QgisApp::registerMapStylePanelFactory( QgsMapStylingPanelFactory *factory )
{
mMapStylePanelFactories << factory;
}
void QgisApp::unregisterMapStylePanelFactory( QgsMapStylePanelFactory *factory )
void QgisApp::unregisterMapStylePanelFactory( QgsMapStylingPanelFactory *factory )
{
mMapStylePanelFactories.removeAll( factory );
}

View File

@ -58,7 +58,7 @@ class QgsLayerTreeView;
class QgsMapCanvas;
class QgsMapLayer;
class QgsMapLayerPropertiesFactory;
class QgsMapStylePanelFactory;
class QgsMapStylingPanelFactory;
class QgsMapTip;
class QgsMapTool;
class QgsMapToolAdvancedDigitizing;
@ -514,10 +514,10 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow
void unregisterMapLayerPropertiesFactory( QgsMapLayerPropertiesFactory* factory );
/** Register a new tab in the layer properties dialog */
void registerMapStylePanelFactory( QgsMapStylePanelFactory* factory );
void registerMapStylePanelFactory( QgsMapStylingPanelFactory* factory );
/** Unregister a previously registered tab in the layer properties dialog */
void unregisterMapStylePanelFactory( QgsMapStylePanelFactory* factory );
void unregisterMapStylePanelFactory( QgsMapStylingPanelFactory* factory );
public slots:
void layerTreeViewDoubleClicked( const QModelIndex& index );
@ -1781,7 +1781,7 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow
QgsSnappingUtils* mSnappingUtils;
QList<QgsMapLayerPropertiesFactory*> mMapLayerPropertiesFactories;
QList<QgsMapStylePanelFactory*> mMapStylePanelFactories;
QList<QgsMapStylingPanelFactory*> mMapStylePanelFactories;
QDateTime mProjectLastModified;

View File

@ -485,12 +485,12 @@ void QgisAppInterface::unregisterMapLayerPropertiesFactory( QgsMapLayerPropertie
qgis->unregisterMapLayerPropertiesFactory( factory );
}
void QgisAppInterface::registerMapStylePanelFactory( QgsMapStylePanelFactory *factory )
void QgisAppInterface::registerMapStylePanelFactory( QgsMapStylingPanelFactory *factory )
{
qgis->registerMapStylePanelFactory( factory );
}
void QgisAppInterface::unregisterMapStylePanelFactory( QgsMapStylePanelFactory *factory )
void QgisAppInterface::unregisterMapStylePanelFactory( QgsMapStylingPanelFactory *factory )
{
qgis->unregisterMapStylePanelFactory( factory );
}

View File

@ -302,10 +302,10 @@ class APP_EXPORT QgisAppInterface : public QgisInterface
virtual void unregisterMapLayerPropertiesFactory( QgsMapLayerPropertiesFactory* factory ) override;
/** Register a new tab in the layer properties dialog */
virtual void registerMapStylePanelFactory( QgsMapStylePanelFactory* factory ) override;
virtual void registerMapStylePanelFactory( QgsMapStylingPanelFactory* factory ) override;
/** Unregister a previously registered tab in the layer properties dialog */
virtual void unregisterMapStylePanelFactory( QgsMapStylePanelFactory* factory ) override;
virtual void unregisterMapStylePanelFactory( QgsMapStylingPanelFactory* factory ) override;
/** Accessors for inserting items into menus and toolbars.
* An item can be inserted before any existing action.

View File

@ -41,7 +41,7 @@
#include "qgsmapstylepanel.h"
#include "qgsmaplayerstylemanagerwidget.h"
QgsMapStylingWidget::QgsMapStylingWidget( QgsMapCanvas* canvas, QList<QgsMapStylePanelFactory*> pages, QWidget *parent )
QgsMapStylingWidget::QgsMapStylingWidget( QgsMapCanvas* canvas, QList<QgsMapStylingPanelFactory*> pages, QWidget *parent )
: QWidget( parent )
, mNotSupportedPage( 0 )
, mLayerPage( 1 )
@ -87,7 +87,7 @@ QgsMapStylingWidget::~QgsMapStylingWidget()
delete mStyleManagerFactory;
}
void QgsMapStylingWidget::setPageFactories( QList<QgsMapStylePanelFactory *> factories )
void QgsMapStylingWidget::setPageFactories( QList<QgsMapStylingPanelFactory *> factories )
{
mPageFactories = factories;
// Always append the style manager factory at the bottom of the list
@ -127,7 +127,7 @@ void QgsMapStylingWidget::setLayer( QgsMapLayer *layer )
mOptionsListWidget->addItem( new QListWidgetItem( QgsApplication::getThemeIcon( "propertyicons/histogram.png" ), "" ) );
}
Q_FOREACH ( QgsMapStylePanelFactory* factory, mPageFactories )
Q_FOREACH ( QgsMapStylingPanelFactory* factory, mPageFactories )
{
if ( factory->supportsLayer( layer ) )
{
@ -162,7 +162,7 @@ void QgsMapStylingWidget::apply()
QWidget* current = mWidgetArea->widget();
bool styleWasChanged = false;
if ( QgsMapStylePanel* widget = qobject_cast<QgsMapStylePanel*>( current ) )
if ( QgsMapStylingPanel* widget = qobject_cast<QgsMapStylingPanel*>( current ) )
{
widget->apply();
styleWasChanged = true;
@ -256,12 +256,13 @@ void QgsMapStylingWidget::updateCurrentWidgetLayer()
// TODO Make all widgets use this method.
if ( mUserPages.contains( row ) )
{
QgsMapStylePanel* panel = mUserPages[row]->createPanel( layer, mMapCanvas, this );
QgsMapStylingPanel* panel = mUserPages[row]->createPanel( layer, mMapCanvas, this );
if ( panel )
{
QgsDebugMsg( "Made me a widget!!" );
connect( panel, SIGNAL( widgetChanged() ), this, SLOT( autoApply() ) );
mWidgetArea->setWidget( panel );
connect( panel, SIGNAL( widgetChanged( QgsPanelWidget* ) ), this, SLOT( autoApply() ) );
QgsPanelWidgetStackWidget* stack = new QgsPanelWidgetStackWidget( mWidgetArea );
mWidgetArea->setWidget( stack );
stack->addMainPanel( panel );
}
}
@ -280,6 +281,7 @@ void QgsMapStylingWidget::updateCurrentWidgetLayer()
{
mVectorStyleWidget->deleteLater();
mVectorStyleWidget = new QgsRendererV2PropertiesDialog( vlayer, QgsStyleV2::defaultStyle(), true, mWidgetArea );
mVectorStyleWidget->setDockMode( true );
connect( mVectorStyleWidget, SIGNAL( widgetChanged() ), this, SLOT( autoApply() ) );
mWidgetArea->setWidget( mVectorStyleWidget );
break;
@ -419,7 +421,7 @@ QString QgsMapLayerStyleManagerWidgetFactory::title()
return QString();
}
QgsMapStylePanel *QgsMapLayerStyleManagerWidgetFactory::createPanel( QgsMapLayer *layer, QgsMapCanvas *canvas, QWidget *parent )
QgsMapStylingPanel *QgsMapLayerStyleManagerWidgetFactory::createPanel( QgsMapLayer *layer, QgsMapCanvas *canvas, QWidget *parent )
{
return new QgsMapLayerStyleManagerWidget( layer, canvas, parent );

View File

@ -36,15 +36,15 @@ class QgsRendererV2PropertiesDialog;
class QgsRendererRasterPropertiesWidget;
class QgsUndoWidget;
class QgsRasterHistogramWidget;
class QgsMapStylePanelFactory;
class QgsMapStylingPanelFactory;
class QgsMapLayerStyleManagerWidget;
class APP_EXPORT QgsMapLayerStyleManagerWidgetFactory : public QgsMapStylePanelFactory
class APP_EXPORT QgsMapLayerStyleManagerWidgetFactory : public QgsMapStylingPanelFactory
{
public:
QIcon icon() override;
QString title() override;
QgsMapStylePanel *createPanel( QgsMapLayer *layer, QgsMapCanvas *canvas, QWidget *parent ) override;
QgsMapStylingPanel *createPanel( QgsMapLayer *layer, QgsMapCanvas *canvas, QWidget *parent ) override;
bool supportsLayer( QgsMapLayer *layer ) override;
};
@ -66,11 +66,11 @@ class APP_EXPORT QgsMapStylingWidget : public QWidget, private Ui::QgsMapStyling
{
Q_OBJECT
public:
QgsMapStylingWidget( QgsMapCanvas *canvas, QList<QgsMapStylePanelFactory *> pages, QWidget *parent = 0 );
QgsMapStylingWidget( QgsMapCanvas *canvas, QList<QgsMapStylingPanelFactory *> pages, QWidget *parent = 0 );
~QgsMapStylingWidget();
QgsMapLayer* layer() { return mCurrentLayer; }
void setPageFactories( QList<QgsMapStylePanelFactory*> factories );
void setPageFactories( QList<QgsMapStylingPanelFactory*> factories );
signals:
void styleChanged( QgsMapLayer* layer );
@ -100,8 +100,8 @@ class APP_EXPORT QgsMapStylingWidget : public QWidget, private Ui::QgsMapStyling
QgsLabelingWidget *mLabelingWidget;
QgsRendererV2PropertiesDialog* mVectorStyleWidget;
QgsRendererRasterPropertiesWidget* mRasterStyleWidget;
QList<QgsMapStylePanelFactory*> mPageFactories;
QMap<int, QgsMapStylePanelFactory*> mUserPages;
QList<QgsMapStylingPanelFactory*> mPageFactories;
QMap<int, QgsMapStylingPanelFactory*> mUserPages;
QgsMapLayerStyleManagerWidgetFactory* mStyleManagerFactory;
};

View File

@ -1306,6 +1306,7 @@ void QgsVectorLayerProperties::updateSymbologyPage()
if ( mLayer->rendererV2() )
{
mRendererDialog = new QgsRendererV2PropertiesDialog( mLayer, QgsStyleV2::defaultStyle(), true, this );
mRendererDialog->setDockMode( true );
mRendererDialog->setMapCanvas( QgisApp::instance()->mapCanvas() );
connect( mRendererDialog, SIGNAL( layerVariablesChanged() ), this, SLOT( updateVariableEditor() ) );

View File

@ -31,7 +31,6 @@ SET(QGIS_GUI_SRCS
symbology-ng/qgspointdisplacementrendererwidget.cpp
symbology-ng/qgsrendererv2propertiesdialog.cpp
symbology-ng/qgsrendererv2widget.cpp
symbology-ng/qgsrendererwidgetcontainer.cpp
symbology-ng/qgsrulebasedrendererv2widget.cpp
symbology-ng/qgssinglesymbolrendererv2widget.cpp
symbology-ng/qgssizescalewidget.cpp
@ -275,6 +274,7 @@ SET(QGIS_GUI_SRCS
qgsorderbydialog.cpp
qgsowssourceselect.cpp
qgssourceselectdialog.cpp
qgspanelwidget.cpp
qgspixmaplabel.cpp
qgspluginmanagerinterface.cpp
qgsprevieweffect.cpp
@ -424,6 +424,7 @@ SET(QGIS_GUI_MOC_HDRS
qgsorderbydialog.h
qgsowssourceselect.h
qgssourceselectdialog.h
qgspanelwidget.h
qgspixmaplabel.h
qgspluginmanagerinterface.h
qgsprevieweffect.h
@ -480,7 +481,6 @@ SET(QGIS_GUI_MOC_HDRS
symbology-ng/qgspointdisplacementrendererwidget.h
symbology-ng/qgsrendererv2propertiesdialog.h
symbology-ng/qgsrendererv2widget.h
symbology-ng/qgsrendererwidgetcontainer.h
symbology-ng/qgsrulebasedrendererv2widget.h
symbology-ng/qgssinglesymbolrendererv2widget.h
symbology-ng/qgssizescalewidget.h

View File

@ -21,7 +21,7 @@
#include "qgspainteffectwidget.h"
#include "qgsapplication.h"
#include "qgssymbollayerv2utils.h"
#include "qgsrendererwidgetcontainer.h"
#include "qgspanelwidget.h"
#include <QPicture>
#include <QPainter>
@ -94,7 +94,7 @@ class EffectItem : public QStandardItem
//
QgsEffectStackPropertiesWidget::QgsEffectStackPropertiesWidget( QgsEffectStack *stack, QWidget *parent )
: QWidget( parent )
: QgsPanelWidget( parent )
, mStack( stack )
, mPreviewPicture( nullptr )
{
@ -133,6 +133,8 @@ QgsEffectStackPropertiesWidget::QgsEffectStackPropertiesWidget( QgsEffectStack *
// set effect as active item in the tree
QModelIndex newIndex = mEffectsList->model()->index( 0, 0 );
mEffectsList->setCurrentIndex( newIndex );
setPanelTitle( tr( "Effects Properties" ) );
}
QgsEffectStackPropertiesWidget::~QgsEffectStackPropertiesWidget()
@ -379,7 +381,7 @@ void QgsEffectStackPropertiesDialog::setPreviewPicture( const QPicture &picture
//
QgsEffectStackCompactWidget::QgsEffectStackCompactWidget( QWidget *parent , QgsPaintEffect *effect )
: QWidget( parent )
: QgsPanelWidget( parent )
, mDockMode( false )
, mEnabledCheckBox( nullptr )
, mButton( nullptr )
@ -457,11 +459,9 @@ void QgsEffectStackCompactWidget::showDialog()
{
widget->setPreviewPicture( *mPreviewPicture );
}
QgsRendererWidgetContainer* container = new QgsRendererWidgetContainer( widget, tr( "Effects Properties" ), nullptr );
connect( widget, SIGNAL( widgetChanged() ), container, SLOT( emitWidgetChanged() ) );
connect( container, SIGNAL( widgetChanged( QgsRendererWidgetContainer* ) ), this, SLOT( updateFromContainer( QgsRendererWidgetContainer* ) ) );
connect( container, SIGNAL( accepted( QgsRendererWidgetContainer* ) ), this, SLOT( cleanUpContainer( QgsRendererWidgetContainer* ) ) );
emit showPanel( container );
connect( widget, SIGNAL( widgetChanged() ), this, SLOT( updateEffectLive() ) );
connect( widget, SIGNAL( panelAccepted( QgsPanelWidget* ) ), this, SLOT( updateAcceptWidget( QgsPanelWidget* ) ) );
emit showPanel( widget );
}
else
{
@ -492,17 +492,17 @@ void QgsEffectStackCompactWidget::enableToggled( bool checked )
emit changed();
}
void QgsEffectStackCompactWidget::cleanUpContainer( QgsRendererWidgetContainer *container )
void QgsEffectStackCompactWidget::updateAcceptWidget( QgsPanelWidget *panel )
{
QgsEffectStackPropertiesWidget* widget = qobject_cast<QgsEffectStackPropertiesWidget*>( container->widget() );
QgsEffectStackPropertiesWidget* widget = qobject_cast<QgsEffectStackPropertiesWidget*>( panel );
*mStack = *widget->stack();
emit changed();
// delete widget->stack();
}
void QgsEffectStackCompactWidget::updateFromContainer( QgsRendererWidgetContainer *container )
void QgsEffectStackCompactWidget::updateEffectLive()
{
QgsEffectStackPropertiesWidget* widget = qobject_cast<QgsEffectStackPropertiesWidget*>( container->widget() );
QgsEffectStackPropertiesWidget* widget = qobject_cast<QgsEffectStackPropertiesWidget*>( sender() );
*mStack = *widget->stack();
emit changed();
}

View File

@ -20,6 +20,7 @@
#include "effects/qgseffectstack.h"
#include <QWidget>
#include <QStandardItemModel>
#include <qgspanelwidget.h>
#include "ui_qgseffectstackpropertieswidgetbase.h"
@ -27,7 +28,7 @@ class EffectItem;
class QgsPaintEffect;
class QCheckBox;
class QToolButton;
class QgsRendererWidgetContainer;
class QgsPanelWidget;
/** \ingroup gui
* \class QgsEffectStackPropertiesWidget
@ -40,7 +41,7 @@ class QgsRendererWidgetContainer;
* \see QgsEffectStackCompactWidget
*/
class GUI_EXPORT QgsEffectStackPropertiesWidget : public QWidget, private Ui::QgsEffectStackPropertiesWidgetBase
class GUI_EXPORT QgsEffectStackPropertiesWidget : public QgsPanelWidget, private Ui::QgsEffectStackPropertiesWidgetBase
{
Q_OBJECT
@ -64,12 +65,6 @@ class GUI_EXPORT QgsEffectStackPropertiesWidget : public QWidget, private Ui::Qg
*/
void setPreviewPicture( const QPicture& picture );
signals:
/**
* Emiited when something in the widget changes.
*/
void widgetChanged();
public slots:
/** Moves the currently selected effect down in the stack.
@ -190,7 +185,7 @@ class GUI_EXPORT QgsEffectStackPropertiesDialog: public QgsDialog
* \see QgsEffectStackPropertiesDialog
*/
class GUI_EXPORT QgsEffectStackCompactWidget: public QWidget
class GUI_EXPORT QgsEffectStackCompactWidget: public QgsPanelWidget
{
Q_OBJECT
@ -237,20 +232,14 @@ class GUI_EXPORT QgsEffectStackCompactWidget: public QWidget
*/
void changed();
/** Emitted when a panel is shown in the widget.
* @param widget widget panel which was shown
* @note added in QGIS 2.16
*/
void showPanel( QgsRendererWidgetContainer* widget );
private slots:
void showDialog();
void enableToggled( bool checked );
void cleanUpContainer( QgsRendererWidgetContainer* container );
void updateFromContainer( QgsRendererWidgetContainer *container );
void updateAcceptWidget( QgsPanelWidget* panel );
void updateEffectLive();
private:
bool mDockMode;

View File

@ -35,7 +35,7 @@ class QgsLegendInterface;
class QgsMapCanvas;
class QgsMapLayer;
class QgsMapLayerPropertiesFactory;
class QgsMapStylePanelFactory;
class QgsMapStylingPanelFactory;
class QgsMessageBar;
class QgsPluginManagerInterface;
class QgsRasterLayer;
@ -344,10 +344,10 @@ class GUI_EXPORT QgisInterface : public QObject
virtual void unregisterMapLayerPropertiesFactory( QgsMapLayerPropertiesFactory* factory ) = 0;
/** Register a new tab in the layer properties dialog */
virtual void registerMapStylePanelFactory( QgsMapStylePanelFactory* factory ) = 0;
virtual void registerMapStylePanelFactory( QgsMapStylingPanelFactory* factory ) = 0;
/** Unregister a previously registered tab in the layer properties dialog */
virtual void unregisterMapStylePanelFactory( QgsMapStylePanelFactory* factory ) = 0;
virtual void unregisterMapStylePanelFactory( QgsMapStylingPanelFactory* factory ) = 0;
// @todo is this deprecated in favour of QgsContextHelp?
/** Open a url in the users browser. By default the QGIS doc directory is used

View File

@ -33,7 +33,7 @@
QgsMapLayerStyleManagerWidget::QgsMapLayerStyleManagerWidget( QgsMapLayer* layer, QgsMapCanvas *canvas, QWidget *parent )
: QgsMapStylePanel( layer, canvas, parent )
: QgsMapStylingPanel( layer, canvas, parent )
{
mModel = new QStandardItemModel( this );
mStyleList = new QListView( this );

View File

@ -29,7 +29,7 @@ class QgsMapCanvas;
* @brief The QgsMapLayerStyleManagerWidget class which is used to visually manage
* the layer styles.
*/
class GUI_EXPORT QgsMapLayerStyleManagerWidget : public QgsMapStylePanel
class GUI_EXPORT QgsMapLayerStyleManagerWidget : public QgsMapStylingPanel
{
Q_OBJECT
public:

View File

@ -13,21 +13,22 @@
* *
***************************************************************************/
#include "qgsmapstylepanel.h"
#include "qgspanelwidget.h"
QgsMapStylePanel::QgsMapStylePanel( QgsMapLayer *layer, QgsMapCanvas *canvas, QWidget *parent )
: QWidget( parent )
QgsMapStylingPanel::QgsMapStylingPanel( QgsMapLayer *layer, QgsMapCanvas *canvas, QWidget *parent )
: QgsPanelWidget( parent )
, mLayer( layer )
, mMapCanvas( canvas )
{
}
QgsMapStylePanelFactory::QgsMapStylePanelFactory()
QgsMapStylingPanelFactory::QgsMapStylingPanelFactory()
{
}
QgsMapStylePanelFactory::~QgsMapStylePanelFactory()
QgsMapStylingPanelFactory::~QgsMapStylingPanelFactory()
{
}

View File

@ -19,6 +19,7 @@
#include <QIcon>
#include "qgsmaplayer.h"
#include "qgspanelwidget.h"
class QgsMapCanvas;
@ -27,7 +28,7 @@ class QgsMapCanvas;
* \brief A panel widget that can be shown in the map style dock
* \note added in QGIS 2.16
*/
class GUI_EXPORT QgsMapStylePanel : public QWidget
class GUI_EXPORT QgsMapStylingPanel : public QgsPanelWidget
{
Q_OBJECT
public:
@ -40,16 +41,7 @@ class GUI_EXPORT QgsMapStylePanel : public QWidget
* @note The widget is created each time the panel is selected in the dock.
* Keep the loading light as possible for speed in the UI.
*/
QgsMapStylePanel( QgsMapLayer* layer, QgsMapCanvas *canvas, QWidget *parent = 0 );
signals:
/**
* @brief Nofity the map style dock that something has changed and
* we need to update the map.
* You should emit this when any of the widgets are changed if live
* update is enabled apply() will get called to apply the changes to the layer.
*/
void widgetChanged();
QgsMapStylingPanel( QgsMapLayer* layer, QgsMapCanvas *canvas, QWidget *parent = 0 );
public slots:
/**
@ -68,16 +60,16 @@ class GUI_EXPORT QgsMapStylePanel : public QWidget
* \class QgsMapStylePanelFactory
* \note added in QGIS 2.16
*/
class GUI_EXPORT QgsMapStylePanelFactory
class GUI_EXPORT QgsMapStylingPanelFactory
{
public:
Q_DECLARE_FLAGS( LayerTypesFlags, QgsMapLayer::LayerType )
/** Constructor */
QgsMapStylePanelFactory();
QgsMapStylingPanelFactory();
/** Destructor */
virtual ~QgsMapStylePanelFactory();
virtual ~QgsMapStylingPanelFactory();
/**
* @brief The icon that will be shown in the UI for the panel.
@ -106,7 +98,7 @@ class GUI_EXPORT QgsMapStylePanelFactory
* @param parent The parent of the widget.
* @return A new QgsMapStylePanel which is shown in the map style dock.
*/
virtual QgsMapStylePanel* createPanel( QgsMapLayer* layer, QgsMapCanvas *canvas, QWidget* parent ) = 0;
virtual QgsMapStylingPanel* createPanel( QgsMapLayer* layer, QgsMapCanvas *canvas, QWidget* parent ) = 0;
};

View File

@ -47,7 +47,7 @@ static void _initRendererWidgetFunctions()
QgsRendererRasterPropertiesWidget::QgsRendererRasterPropertiesWidget( QgsMapLayer *layer, QgsMapCanvas* canvas, QWidget *parent )
: QgsMapStylePanel( layer, canvas, parent )
: QgsMapStylingPanel( layer, canvas, parent )
, mRendererWidget( nullptr )
{
mRasterLayer = qobject_cast<QgsRasterLayer*>( layer );

View File

@ -27,7 +27,7 @@ class QgsRasterLayer;
class QgsMapCanvas;
class QgsRasterRendererWidget;
class GUI_EXPORT QgsRendererRasterPropertiesWidget : public QgsMapStylePanel, private Ui::QgsRendererRasterPropsWidgetBase
class GUI_EXPORT QgsRendererRasterPropertiesWidget : public QgsMapStylingPanel, private Ui::QgsRendererRasterPropsWidgetBase
{
Q_OBJECT

View File

@ -14,7 +14,7 @@
***************************************************************************/
#include "qgscategorizedsymbolrendererv2widget.h"
#include "qgsrendererwidgetcontainer.h"
#include "qgspanelwidget.h"
#include "qgscategorizedsymbolrendererv2.h"
@ -571,14 +571,13 @@ void QgsCategorizedSymbolRendererV2Widget::changeSelectedSymbols()
void QgsCategorizedSymbolRendererV2Widget::changeCategorizedSymbol()
{
QgsSymbolV2* newSymbol = mCategorizedSymbol->clone();
QgsSymbolV2SelectorDialog* dlg = new QgsSymbolV2SelectorDialog( newSymbol, mStyle, mLayer, nullptr, true );
QgsSymbolV2SelectorWidget* dlg = new QgsSymbolV2SelectorWidget( newSymbol, mStyle, mLayer, nullptr );
dlg->setDockMode( true );
dlg->setMapCanvas( mMapCanvas );
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 showPanel( container );
connect( dlg, SIGNAL( widgetChanged() ), this, SLOT( updateSymbolsFromWidget() ) );
connect( dlg, SIGNAL( accepted( QgsPanelWidget* ) ), this, SLOT( cleanUpSymbolSelector( QgsPanelWidget* ) ) );
emit showPanel( dlg );
}
void QgsCategorizedSymbolRendererV2Widget::updateCategorizedSymbolIcon()
@ -617,14 +616,12 @@ void QgsCategorizedSymbolRendererV2Widget::changeCategorySymbol()
symbol = QgsSymbolV2::defaultSymbol( mLayer->geometryType() );
}
QgsSymbolV2SelectorDialog* dlg = new QgsSymbolV2SelectorDialog( symbol, mStyle, mLayer, nullptr, true );
QgsSymbolV2SelectorWidget* dlg = new QgsSymbolV2SelectorWidget( symbol, mStyle, mLayer, nullptr );
dlg->setDockMode( true );
dlg->setMapCanvas( mMapCanvas );
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 showPanel( container );
connect( dlg, SIGNAL( widgetChanged() ), this, SLOT( updateSymbolsFromWidget() ) );
connect( dlg, SIGNAL( accepted( QgsPanelWidget* ) ), this, SLOT( cleanUpSymbolSelector( QgsPanelWidget* ) ) );
emit showPanel( dlg );
}
static void _createCategories( QgsCategoryList& cats, QList<QVariant>& values, QgsSymbolV2* symbol )
@ -1002,18 +999,18 @@ void QgsCategorizedSymbolRendererV2Widget::matchToSymbolsFromXml()
}
}
void QgsCategorizedSymbolRendererV2Widget::cleanUpSymbolSelector( QgsRendererWidgetContainer *container )
void QgsCategorizedSymbolRendererV2Widget::cleanUpSymbolSelector( QgsPanelWidget *container )
{
if ( container )
{
QgsSymbolV2SelectorDialog* dlg = qobject_cast<QgsSymbolV2SelectorDialog*>( container->widget() );
QgsSymbolV2SelectorWidget* dlg = qobject_cast<QgsSymbolV2SelectorWidget*>( container );
delete dlg->symbol();
}
}
void QgsCategorizedSymbolRendererV2Widget::updateSymbolsFromWidget( QgsRendererWidgetContainer* container )
void QgsCategorizedSymbolRendererV2Widget::updateSymbolsFromWidget()
{
QgsSymbolV2SelectorDialog* dlg = qobject_cast<QgsSymbolV2SelectorDialog*>( container->widget() );
QgsSymbolV2SelectorWidget* dlg = qobject_cast<QgsSymbolV2SelectorWidget*>( sender() );
delete mCategorizedSymbol;
mCategorizedSymbol = dlg->symbol()->clone();

View File

@ -131,8 +131,8 @@ class GUI_EXPORT QgsCategorizedSymbolRendererV2Widget : public QgsRendererV2Widg
private slots:
void cleanUpSymbolSelector( QgsRendererWidgetContainer* container );
void updateSymbolsFromWidget( QgsRendererWidgetContainer *container );
void cleanUpSymbolSelector( QgsPanelWidget* container );
void updateSymbolsFromWidget();
protected:

View File

@ -13,7 +13,7 @@
* *
***************************************************************************/
#include "qgsgraduatedsymbolrendererv2widget.h"
#include "qgsrendererwidgetcontainer.h"
#include "qgspanelwidget.h"
#include "qgssymbolv2.h"
#include "qgssymbollayerv2utils.h"
@ -687,18 +687,18 @@ void QgsGraduatedSymbolRendererV2Widget::refreshRanges( bool reset )
emit widgetChanged();
}
void QgsGraduatedSymbolRendererV2Widget::cleanUpSymbolSelector( QgsRendererWidgetContainer *container )
void QgsGraduatedSymbolRendererV2Widget::cleanUpSymbolSelector( QgsPanelWidget *container )
{
if ( container )
{
QgsSymbolV2SelectorDialog* dlg = qobject_cast<QgsSymbolV2SelectorDialog*>( container->widget() );
QgsSymbolV2SelectorWidget* dlg = qobject_cast<QgsSymbolV2SelectorWidget*>( container );
delete dlg->symbol();
}
}
void QgsGraduatedSymbolRendererV2Widget::updateSymbolsFromWidget( QgsRendererWidgetContainer *container )
void QgsGraduatedSymbolRendererV2Widget::updateSymbolsFromWidget()
{
QgsSymbolV2SelectorDialog* dlg = qobject_cast<QgsSymbolV2SelectorDialog*>( container->widget() );
QgsSymbolV2SelectorWidget* dlg = qobject_cast<QgsSymbolV2SelectorWidget*>( sender() );
delete mGraduatedSymbol;
mGraduatedSymbol = dlg->symbol()->clone();
@ -827,14 +827,12 @@ void QgsGraduatedSymbolRendererV2Widget::reapplySizes()
void QgsGraduatedSymbolRendererV2Widget::changeGraduatedSymbol()
{
QgsSymbolV2* newSymbol = mGraduatedSymbol->clone();
QgsSymbolV2SelectorDialog* dlg = new QgsSymbolV2SelectorDialog( newSymbol, mStyle, mLayer, nullptr, true );
QgsSymbolV2SelectorWidget* dlg = new QgsSymbolV2SelectorWidget( newSymbol, mStyle, mLayer, nullptr );
dlg->setMapCanvas( mMapCanvas );
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 showPanel( container );
connect( dlg, SIGNAL( widgetChanged() ), this, SLOT( updateSymbolsFromWidget() ) );
connect( dlg, SIGNAL( accepted( QgsPanelWidget* ) ), this, SLOT( cleanUpSymbolSelector( QgsPanelWidget* ) ) );
emit showPanel( dlg );
}
void QgsGraduatedSymbolRendererV2Widget::updateGraduatedSymbolIcon()
@ -907,14 +905,13 @@ void QgsGraduatedSymbolRendererV2Widget::changeSelectedSymbols()
void QgsGraduatedSymbolRendererV2Widget::changeRangeSymbol( int rangeIdx )
{
QgsSymbolV2* newSymbol = mRenderer->ranges()[rangeIdx].symbol()->clone();
QgsSymbolV2SelectorDialog* dlg = new QgsSymbolV2SelectorDialog( newSymbol, mStyle, mLayer, nullptr, true );
QgsSymbolV2SelectorWidget* dlg = new QgsSymbolV2SelectorWidget( newSymbol, mStyle, mLayer, nullptr );
dlg->setDockMode( true );
dlg->setMapCanvas( mMapCanvas );
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 showPanel( container );
connect( dlg, SIGNAL( widgetChanged() ), this, SLOT( updateSymbolsFromWidget() ) );
connect( dlg, SIGNAL( accepted( QgsPanelWidget* ) ), this, SLOT( cleanUpSymbolSelector( QgsPanelWidget* ) ) );
emit showPanel( dlg );
}
void QgsGraduatedSymbolRendererV2Widget::changeRange( int rangeIdx )

View File

@ -119,8 +119,8 @@ class GUI_EXPORT QgsGraduatedSymbolRendererV2Widget : public QgsRendererV2Widget
void refreshRanges( bool reset = false );
private slots:
void cleanUpSymbolSelector( QgsRendererWidgetContainer* container );
void updateSymbolsFromWidget( QgsRendererWidgetContainer *container );
void cleanUpSymbolSelector( QgsPanelWidget* container );
void updateSymbolsFromWidget();
protected:
void updateUiFromRenderer( bool updateCount = true );

View File

@ -32,6 +32,7 @@
#include "qgsellipsesymbollayerv2widget.h"
#include "qgsvectorfieldsymbollayerwidget.h"
#include "qgssymbolv2.h" //for the unit
#include "qgspanelwidget.h"
static bool _initWidgetFunction( const QString& name, QgsSymbolLayerV2WidgetFunc f )
{
@ -86,7 +87,7 @@ static void _initWidgetFunctions()
QgsLayerPropertiesWidget::QgsLayerPropertiesWidget( QgsSymbolLayerV2* layer, const QgsSymbolV2* symbol, const QgsVectorLayer* vl, QWidget* parent )
: QWidget( parent )
: QgsPanelWidget( parent )
, mPresetExpressionContext( nullptr )
, mMapCanvas( nullptr )
{
@ -119,6 +120,9 @@ QgsLayerPropertiesWidget::QgsLayerPropertiesWidget( QgsSymbolLayerV2* layer, con
connect( cboLayerType, SIGNAL( currentIndexChanged( int ) ), this, SLOT( layerTypeChanged() ) );
connect( mEffectWidget, SIGNAL( changed() ), this, SLOT( emitSignalChanged() ) );
this->connectChildPanel( mEffectWidget );
mEffectWidget->setPaintEffect( mLayer->paintEffect() );
}
@ -130,6 +134,15 @@ void QgsLayerPropertiesWidget::setMapCanvas( QgsMapCanvas *canvas )
w->setMapCanvas( mMapCanvas );
}
void QgsLayerPropertiesWidget::setDockMode( bool dockMode )
{
mDockMode = dockMode;
if ( dockMode )
{
mEffectWidget->setDockMode( dockMode );
}
}
void QgsLayerPropertiesWidget::setExpressionContext( QgsExpressionContext *context )
{
mPresetExpressionContext = context;
@ -227,6 +240,7 @@ void QgsLayerPropertiesWidget::emitSignalChanged()
// also update paint effect preview
mEffectWidget->setPreviewPicture( QgsSymbolLayerV2Utils::symbolLayerPreviewPicture( mLayer, QgsSymbolV2::MM, QSize( 80, 80 ) ) );
emit widgetChanged();
}
void QgsLayerPropertiesWidget::reloadLayer()

View File

@ -23,6 +23,7 @@ class QgsSymbolLayerV2;
class QgsSymbolLayerV2Widget;
class QgsVectorLayer;
class QgsMapCanvas;
class QgsPanelWidget;
class SymbolLayerItem;
@ -30,7 +31,7 @@ class SymbolLayerItem;
#include <QStandardItemModel>
class GUI_EXPORT QgsLayerPropertiesWidget : public QWidget, private Ui::LayerPropertiesWidget
class GUI_EXPORT QgsLayerPropertiesWidget : public QgsPanelWidget, private Ui::LayerPropertiesWidget
{
Q_OBJECT
@ -52,6 +53,13 @@ class GUI_EXPORT QgsLayerPropertiesWidget : public QWidget, private Ui::LayerPro
*/
virtual void setMapCanvas( QgsMapCanvas* canvas );
/**
* Set the widget in dock mode which tells the widget to emit panel
* widgets and not open dialogs
* @param dockMode True to enable dock mode.
*/
void setDockMode( bool dockMode );
public slots:
void layerTypeChanged();
void emitSignalChanged();
@ -84,6 +92,7 @@ class GUI_EXPORT QgsLayerPropertiesWidget : public QWidget, private Ui::LayerPro
void reloadLayer();
private:
bool mDockMode;
QgsExpressionContext* mPresetExpressionContext;
QgsMapCanvas* mMapCanvas;

View File

@ -27,7 +27,7 @@
#include "qgsheatmaprendererwidget.h"
#include "qgs25drendererwidget.h"
#include "qgsnullsymbolrendererwidget.h"
#include "qgsrendererwidgetcontainer.h"
#include "qgspanelwidget.h"
#include "qgsorderbydialog.h"
#include "qgsapplication.h"
@ -97,6 +97,7 @@ QgsRendererV2PropertiesDialog::QgsRendererV2PropertiesDialog( QgsVectorLayer* la
layout()->setContentsMargins( 0, 0, 0, 0 );
}
this->setDockMode( embedded );
// initialize registry's widget functions
_initRendererWidgetFunctions();
@ -121,9 +122,10 @@ QgsRendererV2PropertiesDialog::QgsRendererV2PropertiesDialog( QgsVectorLayer* la
connect( checkboxEnableOrderBy, SIGNAL( toggled( bool ) ), btnOrderBy, SLOT( setEnabled( bool ) ) );
connect( checkboxEnableOrderBy, SIGNAL( toggled( bool ) ), lineEditOrderBy, SLOT( setEnabled( bool ) ) );
connect( btnOrderBy, SIGNAL( clicked( bool ) ), this, SLOT( showOrderByDialog() ) );
connect( mEffectWidget, SIGNAL( showPanel( QgsRendererWidgetContainer* ) ), this, SLOT( showPanel( QgsRendererWidgetContainer* ) ) );
mEffectWidget->setDockMode( true );
QList<QgsPanelWidget*> panels;
panels << mEffectWidget;
mainStack->connectPanels( panels );
syncToLayer();
@ -197,6 +199,12 @@ void QgsRendererV2PropertiesDialog::setMapCanvas( QgsMapCanvas* canvas )
mActiveWidget->setMapCanvas( mMapCanvas );
}
void QgsRendererV2PropertiesDialog::setDockMode( bool dockMode )
{
mDockMode = dockMode;
mEffectWidget->setDockMode( dockMode );
}
void QgsRendererV2PropertiesDialog::rendererChanged()
{
@ -250,7 +258,8 @@ void QgsRendererV2PropertiesDialog::rendererChanged()
connect( mActiveWidget, SIGNAL( layerVariablesChanged() ), this, SIGNAL( layerVariablesChanged() ) );
}
connect( mActiveWidget, SIGNAL( widgetChanged() ), this, SIGNAL( widgetChanged() ) );
connect( mActiveWidget, SIGNAL( showPanel( QgsRendererWidgetContainer* ) ), this, SLOT( showPanel( QgsRendererWidgetContainer* ) ) );
mainStack->connectPanel( mActiveWidget );
w->setDockMode( mDockMode );
}
else
{
@ -293,20 +302,6 @@ 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()
{

View File

@ -31,7 +31,6 @@ class QgsSymbolV2;
class QgsPaintEffect;
class QgsRendererV2Widget;
class QgsMapCanvas;
class QgsRendererWidgetContainer;
class GUI_EXPORT QgsRendererV2PropertiesDialog : public QDialog, private Ui::QgsRendererV2PropsDialogBase
@ -57,6 +56,13 @@ class GUI_EXPORT QgsRendererV2PropertiesDialog : public QDialog, private Ui::Qgs
*/
void setMapCanvas( QgsMapCanvas* canvas );
/**
* Set the widget in dock mode which tells the widget to emit panel
* widgets and not open dialogs
* @param dockMode True to enable dock mode.
*/
void setDockMode( bool dockMode );
signals:
/**
* Emitted when expression context variables on the associated
@ -81,18 +87,6 @@ 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 );
/**
* Closes the given panel in the stack of panels.
* @param container The container widget to close.
*/
void closePanel( QgsRendererWidgetContainer *container );
private slots:
void showOrderByDialog();
@ -126,6 +120,9 @@ class GUI_EXPORT QgsRendererV2PropertiesDialog : public QDialog, private Ui::Qgs
QgsMapCanvas* mMapCanvas;
QgsFeatureRequest::OrderBy mOrderBy;
private:
bool mDockMode;
};

View File

@ -19,13 +19,14 @@
#include "qgssymbollevelsv2dialog.h"
#include "qgsexpressionbuilderdialog.h"
#include "qgsmapcanvas.h"
#include "qgspanelwidget.h"
#include <QMessageBox>
#include <QInputDialog>
#include <QMenu>
QgsRendererV2Widget::QgsRendererV2Widget( QgsVectorLayer* layer, QgsStyleV2* style )
: QWidget()
: QgsPanelWidget()
, mLayer( layer )
, mStyle( style )
, mMapCanvas( nullptr )
@ -272,6 +273,11 @@ void QgsRendererV2Widget::applyChanges()
apply();
}
void QgsRendererV2Widget::setDockMode( bool dockMode )
{
mDockMode = dockMode;
}
////////////

View File

@ -20,14 +20,13 @@
#include <QStackedWidget>
#include "qgssymbolv2.h"
#include "qgsdatadefined.h"
#include "qgspanelwidget.h"
class QgsVectorLayer;
class QgsStyleV2;
class QgsFeatureRendererV2;
class QgsSymbolV2SelectorDialog;
class QgsMapCanvas;
class QgsRendererWidgetContainer;
/**
Base class for renderer settings widgets
@ -39,7 +38,7 @@ WORKFLOW:
- on any change of renderer type, create some default (dummy?) version and change the stacked widget
- when clicked ok/apply, get the renderer from active widget and clone it for the layer
*/
class GUI_EXPORT QgsRendererV2Widget : public QWidget
class GUI_EXPORT QgsRendererV2Widget : public QgsPanelWidget
{
Q_OBJECT
public:
@ -77,6 +76,13 @@ class GUI_EXPORT QgsRendererV2Widget : public QWidget
*/
void applyChanges();
/**
* Set the widget in dock mode which tells the widget to emit panel
* widgets and not open dialogs
* @param dockMode True to enable dock mode.
*/
virtual void setDockMode( bool dockMode ) override;
signals:
/**
@ -86,19 +92,8 @@ class GUI_EXPORT QgsRendererV2Widget : public QWidget
*/
void layerVariablesChanged();
/**
* Emitted when something on the widget has changed.
* All widgets will fire this event to notify of an internal change.
*/
void widgetChanged();
/** Shows a panel widget inside the renderer widget.
* @param widget widget panel to show
* @note added in QGIS 2.16
*/
void showPanel( QgsRendererWidgetContainer* widget );
protected:
bool mDockMode;
QgsVectorLayer* mLayer;
QgsStyleV2* mStyle;
QMenu* contextMenu;

View File

@ -1,54 +0,0 @@
/***************************************************************************
qgsrendererwidgetcontainer.cpp
---------------------
begin : June 2016
copyright : (C) 2016 by Nathan Woodrow
email :
***************************************************************************
* *
* 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 <QDialogButtonBox>
#include <QPushButton>
#include "qgsrendererwidgetcontainer.h"
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, SLOT( accept() ) );
}
QWidget *QgsRendererWidgetContainer::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 )
{
accept();
}
}

View File

@ -1,84 +0,0 @@
/***************************************************************************
qgsrendererwidgetcontainer.h
---------------------
begin : June 2016
copyright : (C) 2016 by Nathan Woodrow
email :
***************************************************************************
* *
* 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 QGSRENDERERWIDGETCONTAINER_H
#define QGSRENDERERWIDGETCONTAINER_H
#include <QWidget>
#include <QKeyEvent>
#include "ui_qgsrenderercontainerbase.h"
/**
* @brief A container widget that can be used to show a renderer widget with a title and close button.
* @note Mainly used for the style dock panels at the moment.
*/
class GUI_EXPORT QgsRendererWidgetContainer : public QWidget, private Ui::QgsRendererWidgetContainerBase
{
Q_OBJECT
public:
/**
* @brief A container widget that can be used to show a renderer widget with a title and close button.
* @param widget The internal widget to be shown to the user.
* @param title The title to show on the widget.
* @param parent The parent of the widget.
*/
QgsRendererWidgetContainer( QWidget* widget, const QString &title, QWidget *parent = 0 );
/**
* @brief Returns the current internal widget.
* @return The internal widget.
*/
QWidget* widget();
signals:
/**
* @brief Emitted when the container is accpeted and closed.
* Listen to this to clean up the callers state.
*/
void accepted( QgsRendererWidgetContainer* container );
/**
* Emiited when the internal widget changes state.
* @param conatiner The container holding the widget that changed state.
*/
void widgetChanged( QgsRendererWidgetContainer* conatiner );
public slots:
/**
* Accept the container. Causes accepted to be emiited.
*/
void accept();
/**
* Fire the widgetChanged event on the container. Connect your widgets dirty signal to
* this slot to fire the and listen to widgetChanged to handle the event.
*/
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

View File

@ -51,8 +51,9 @@ QgsSingleSymbolRendererV2Widget::QgsSingleSymbolRendererV2Widget( QgsVectorLayer
mSingleSymbol = mRenderer->symbol()->clone();
// setup ui
mSelector = new QgsSymbolV2SelectorDialog( mSingleSymbol, mStyle, mLayer, nullptr, true );
mSelector = new QgsSymbolV2SelectorWidget( mSingleSymbol, mStyle, mLayer, nullptr );
connect( mSelector, SIGNAL( symbolModified() ), this, SLOT( changeSingleSymbol() ) );
connect( mSelector, SIGNAL( showPanel( QgsPanelWidget* ) ), this, SIGNAL( showPanel( QgsPanelWidget* ) ) );
QVBoxLayout* layout = new QVBoxLayout( this );
layout->setContentsMargins( 0, 0, 0, 0 );
@ -86,6 +87,14 @@ void QgsSingleSymbolRendererV2Widget::setMapCanvas( QgsMapCanvas* canvas )
mSelector->setMapCanvas( canvas );
}
void QgsSingleSymbolRendererV2Widget::setDockMode( bool dockMode )
{
QgsRendererV2Widget::setDockMode( dockMode );
mDockMode = dockMode;
if ( mSelector )
mSelector->setDockMode( dockMode );
}
void QgsSingleSymbolRendererV2Widget::changeSingleSymbol()
{
// update symbol from the GUI

View File

@ -18,7 +18,7 @@
#include "qgsrendererv2widget.h"
class QgsSingleSymbolRendererV2;
class QgsSymbolV2SelectorDialog;
class QgsSymbolV2SelectorWidget;
class QMenu;
@ -36,6 +36,13 @@ class GUI_EXPORT QgsSingleSymbolRendererV2Widget : public QgsRendererV2Widget
virtual void setMapCanvas( QgsMapCanvas* canvas ) override;
/**
* Set the widget in dock mode which tells the widget to emit panel
* widgets and not open dialogs
* @param dockMode True to enable dock mode.
*/
virtual void setDockMode( bool dockMode ) override;
public slots:
void changeSingleSymbol();
@ -47,7 +54,7 @@ class GUI_EXPORT QgsSingleSymbolRendererV2Widget : public QgsRendererV2Widget
protected:
QgsSingleSymbolRendererV2* mRenderer;
QgsSymbolV2SelectorDialog* mSelector;
QgsSymbolV2SelectorWidget* mSelector;
QgsSymbolV2* mSingleSymbol;
};

View File

@ -208,8 +208,8 @@ class SymbolLayerItem : public QStandardItem
//////////
QgsSymbolV2SelectorDialog::QgsSymbolV2SelectorDialog( QgsSymbolV2* symbol, QgsStyleV2* style, const QgsVectorLayer* vl, QWidget* parent, bool embedded )
: QDialog( parent )
QgsSymbolV2SelectorWidget::QgsSymbolV2SelectorWidget( QgsSymbolV2* symbol, QgsStyleV2* style, const QgsVectorLayer* vl, QWidget* parent )
: QgsPanelWidget( parent )
, mAdvancedMenu( nullptr )
, mVectorLayer( vl )
, mMapCanvas( nullptr )
@ -223,15 +223,6 @@ QgsSymbolV2SelectorDialog::QgsSymbolV2SelectorDialog( QgsSymbolV2* symbol, QgsSt
setupUi( this );
QSettings settings;
restoreGeometry( settings.value( "/Windows/SymbolSelectorDialog/geometry" ).toByteArray() );
// can be embedded in renderer properties dialog
if ( embedded )
{
buttonBox->hide();
layout()->setContentsMargins( 0, 0, 0, 0 );
}
// setup icons
btnAddLayer->setIcon( QIcon( QgsApplication::iconPath( "symbologyAdd.svg" ) ) );
btnRemoveLayer->setIcon( QIcon( QgsApplication::iconPath( "symbologyRemove.svg" ) ) );
@ -262,34 +253,22 @@ QgsSymbolV2SelectorDialog::QgsSymbolV2SelectorDialog( QgsSymbolV2* symbol, QgsSt
connect( btnRemoveLayer, SIGNAL( clicked() ), this, SLOT( removeLayer() ) );
connect( btnLock, SIGNAL( clicked() ), this, SLOT( lockLayer() ) );
connect( btnDuplicate, SIGNAL( clicked() ), this, SLOT( duplicateLayer() ) );
connect( this, SIGNAL( symbolModified() ), this, SIGNAL( widgetChanged() ) );
updateUi();
// set symbol as active item in the tree
QModelIndex newIndex = layersTree->model()->index( 0, 0 );
layersTree->setCurrentIndex( newIndex );
setPanelTitle( tr( "Symbol selector" ) );
}
QgsSymbolV2SelectorDialog::~QgsSymbolV2SelectorDialog()
QgsSymbolV2SelectorWidget::~QgsSymbolV2SelectorWidget()
{
QSettings settings;
settings.setValue( "/Windows/SymbolSelectorDialog/geometry", saveGeometry() );
}
void QgsSymbolV2SelectorDialog::keyPressEvent( QKeyEvent * e )
{
// Ignore the ESC key to avoid close the dialog without the properties window
if ( !isWindow() && e->key() == Qt::Key_Escape )
{
e->ignore();
}
else
{
QDialog::keyPressEvent( e );
}
}
QMenu* QgsSymbolV2SelectorDialog::advancedMenu()
QMenu* QgsSymbolV2SelectorWidget::advancedMenu()
{
if ( !mAdvancedMenu )
{
@ -300,14 +279,14 @@ QMenu* QgsSymbolV2SelectorDialog::advancedMenu()
return mAdvancedMenu;
}
void QgsSymbolV2SelectorDialog::setExpressionContext( QgsExpressionContext *context )
void QgsSymbolV2SelectorWidget::setExpressionContext( QgsExpressionContext *context )
{
mPresetExpressionContext.reset( context );
layerChanged();
updatePreview();
}
void QgsSymbolV2SelectorDialog::setMapCanvas( QgsMapCanvas *canvas )
void QgsSymbolV2SelectorWidget::setMapCanvas( QgsMapCanvas *canvas )
{
mMapCanvas = canvas;
@ -321,7 +300,12 @@ void QgsSymbolV2SelectorDialog::setMapCanvas( QgsMapCanvas *canvas )
listWidget->setMapCanvas( canvas );
}
void QgsSymbolV2SelectorDialog::loadSymbol( QgsSymbolV2* symbol, SymbolLayerItem* parent )
void QgsSymbolV2SelectorWidget::setDockMode( bool dockMode )
{
mDockMode = dockMode;
}
void QgsSymbolV2SelectorWidget::loadSymbol( QgsSymbolV2* symbol, SymbolLayerItem* parent )
{
SymbolLayerItem* symbolItem = new SymbolLayerItem( symbol );
QFont boldFont = symbolItem->font();
@ -345,13 +329,13 @@ void QgsSymbolV2SelectorDialog::loadSymbol( QgsSymbolV2* symbol, SymbolLayerItem
}
void QgsSymbolV2SelectorDialog::loadSymbol()
void QgsSymbolV2SelectorWidget::loadSymbol()
{
model->clear();
loadSymbol( mSymbol, static_cast<SymbolLayerItem*>( model->invisibleRootItem() ) );
}
void QgsSymbolV2SelectorDialog::updateUi()
void QgsSymbolV2SelectorWidget::updateUi()
{
QModelIndex currentIdx = layersTree->currentIndex();
if ( !currentIdx.isValid() )
@ -378,7 +362,7 @@ void QgsSymbolV2SelectorDialog::updateUi()
btnDuplicate->setEnabled( true );
}
void QgsSymbolV2SelectorDialog::updatePreview()
void QgsSymbolV2SelectorWidget::updatePreview()
{
QImage preview = mSymbol->bigSymbolPreviewImage( mPresetExpressionContext.data() );
lblPreview->setPixmap( QPixmap::fromImage( preview ) );
@ -386,7 +370,7 @@ void QgsSymbolV2SelectorDialog::updatePreview()
emit symbolModified();
}
void QgsSymbolV2SelectorDialog::updateLayerPreview()
void QgsSymbolV2SelectorWidget::updateLayerPreview()
{
// get current layer item and update its icon
SymbolLayerItem* item = currentLayerItem();
@ -396,7 +380,7 @@ void QgsSymbolV2SelectorDialog::updateLayerPreview()
updatePreview();
}
SymbolLayerItem* QgsSymbolV2SelectorDialog::currentLayerItem()
SymbolLayerItem* QgsSymbolV2SelectorWidget::currentLayerItem()
{
QModelIndex idx = layersTree->currentIndex();
if ( !idx.isValid() )
@ -409,7 +393,7 @@ SymbolLayerItem* QgsSymbolV2SelectorDialog::currentLayerItem()
return item;
}
QgsSymbolLayerV2* QgsSymbolV2SelectorDialog::currentLayer()
QgsSymbolLayerV2* QgsSymbolV2SelectorWidget::currentLayer()
{
QModelIndex idx = layersTree->currentIndex();
if ( !idx.isValid() )
@ -422,7 +406,7 @@ QgsSymbolLayerV2* QgsSymbolV2SelectorDialog::currentLayer()
return nullptr;
}
void QgsSymbolV2SelectorDialog::layerChanged()
void QgsSymbolV2SelectorWidget::layerChanged()
{
updateUi();
@ -435,6 +419,7 @@ void QgsSymbolV2SelectorDialog::layerChanged()
SymbolLayerItem *parent = static_cast<SymbolLayerItem*>( currentItem->parent() );
mDataDefineRestorer.reset( new DataDefinedRestorer( parent->symbol(), currentItem->layer() ) );
QgsLayerPropertiesWidget *layerProp = new QgsLayerPropertiesWidget( currentItem->layer(), parent->symbol(), mVectorLayer );
layerProp->setDockMode( mDockMode );
layerProp->setExpressionContext( mPresetExpressionContext.data() );
layerProp->setMapCanvas( mMapCanvas );
setWidget( layerProp );
@ -442,6 +427,8 @@ void QgsSymbolV2SelectorDialog::layerChanged()
connect( layerProp, SIGNAL( changed() ), this, SLOT( updateLayerPreview() ) );
// This connection when layer type is changed
connect( layerProp, SIGNAL( changeLayer( QgsSymbolLayerV2* ) ), this, SLOT( changeLayer( QgsSymbolLayerV2* ) ) );
connectChildPanel( layerProp );
}
else
{
@ -459,7 +446,7 @@ void QgsSymbolV2SelectorDialog::layerChanged()
updateLockButton();
}
void QgsSymbolV2SelectorDialog::symbolChanged()
void QgsSymbolV2SelectorWidget::symbolChanged()
{
SymbolLayerItem *currentItem = static_cast<SymbolLayerItem*>( model->itemFromIndex( layersTree->currentIndex() ) );
if ( !currentItem || currentItem->isLayer() )
@ -488,7 +475,7 @@ void QgsSymbolV2SelectorDialog::symbolChanged()
connect( layersTree->selectionModel(), SIGNAL( currentChanged( const QModelIndex&, const QModelIndex& ) ), this, SLOT( layerChanged() ) );
}
void QgsSymbolV2SelectorDialog::setWidget( QWidget* widget )
void QgsSymbolV2SelectorWidget::setWidget( QWidget* widget )
{
int index = stackedWidget->addWidget( widget );
stackedWidget->setCurrentIndex( index );
@ -497,7 +484,7 @@ void QgsSymbolV2SelectorDialog::setWidget( QWidget* widget )
mPresentWidget = widget;
}
void QgsSymbolV2SelectorDialog::updateLockButton()
void QgsSymbolV2SelectorWidget::updateLockButton()
{
QgsSymbolLayerV2* layer = currentLayer();
if ( !layer )
@ -505,7 +492,7 @@ void QgsSymbolV2SelectorDialog::updateLockButton()
btnLock->setChecked( layer->isLocked() );
}
void QgsSymbolV2SelectorDialog::addLayer()
void QgsSymbolV2SelectorWidget::addLayer()
{
QModelIndex idx = layersTree->currentIndex();
if ( !idx.isValid() )
@ -555,7 +542,7 @@ void QgsSymbolV2SelectorDialog::addLayer()
updatePreview();
}
void QgsSymbolV2SelectorDialog::removeLayer()
void QgsSymbolV2SelectorWidget::removeLayer()
{
SymbolLayerItem *item = currentLayerItem();
int row = item->row();
@ -577,17 +564,17 @@ void QgsSymbolV2SelectorDialog::removeLayer()
delete tmpLayer;
}
void QgsSymbolV2SelectorDialog::moveLayerDown()
void QgsSymbolV2SelectorWidget::moveLayerDown()
{
moveLayerByOffset( + 1 );
}
void QgsSymbolV2SelectorDialog::moveLayerUp()
void QgsSymbolV2SelectorWidget::moveLayerUp()
{
moveLayerByOffset( -1 );
}
void QgsSymbolV2SelectorDialog::moveLayerByOffset( int offset )
void QgsSymbolV2SelectorWidget::moveLayerByOffset( int offset )
{
SymbolLayerItem *item = currentLayerItem();
if ( !item )
@ -613,7 +600,7 @@ void QgsSymbolV2SelectorDialog::moveLayerByOffset( int offset )
updateUi();
}
void QgsSymbolV2SelectorDialog::lockLayer()
void QgsSymbolV2SelectorWidget::lockLayer()
{
QgsSymbolLayerV2* layer = currentLayer();
if ( !layer )
@ -621,7 +608,7 @@ void QgsSymbolV2SelectorDialog::lockLayer()
layer->setLocked( btnLock->isChecked() );
}
void QgsSymbolV2SelectorDialog::duplicateLayer()
void QgsSymbolV2SelectorWidget::duplicateLayer()
{
QModelIndex idx = layersTree->currentIndex();
if ( !idx.isValid() )
@ -658,7 +645,7 @@ void QgsSymbolV2SelectorDialog::duplicateLayer()
updatePreview();
}
void QgsSymbolV2SelectorDialog::saveSymbol()
void QgsSymbolV2SelectorWidget::saveSymbol()
{
bool ok;
QString name = QInputDialog::getText( this, tr( "Symbol name" ),
@ -686,7 +673,7 @@ void QgsSymbolV2SelectorDialog::saveSymbol()
mStyle->saveSymbol( name, mSymbol->clone(), 0, QStringList() );
}
void QgsSymbolV2SelectorDialog::changeLayer( QgsSymbolLayerV2* newLayer )
void QgsSymbolV2SelectorWidget::changeLayer( QgsSymbolLayerV2* newLayer )
{
SymbolLayerItem* item = currentLayerItem();
QgsSymbolLayerV2* layer = item->layer();
@ -714,3 +701,172 @@ void QgsSymbolV2SelectorDialog::changeLayer( QgsSymbolLayerV2* newLayer )
// Important: This lets the layer have its own layer properties widget
layerChanged();
}
QgsSymbolV2SelectorDialog::QgsSymbolV2SelectorDialog( QgsSymbolV2 *symbol, QgsStyleV2 *style, const QgsVectorLayer *vl, QWidget *parent, bool embedded )
: QDialog( parent )
{
setLayout( new QVBoxLayout() );
mSelectorWidget = new QgsSymbolV2SelectorWidget( symbol, style, vl, this );
mButtonBox = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel );
connect( mButtonBox, SIGNAL( accepted() ), this, SLOT( accept() ) );
connect( mButtonBox, SIGNAL( rejected() ), this, SLOT( reject() ) );
layout()->addWidget( mSelectorWidget );
layout()->addWidget( mButtonBox );
QSettings settings;
restoreGeometry( settings.value( "/Windows/SymbolSelectorWidget/geometry" ).toByteArray() );
// can be embedded in renderer properties dialog
if ( embedded )
{
mButtonBox->hide();
layout()->setContentsMargins( 0, 0, 0, 0 );
}
mSelectorWidget->setDockMode( embedded );
}
QgsSymbolV2SelectorDialog::~QgsSymbolV2SelectorDialog()
{
QSettings settings;
settings.setValue( "/Windows/SymbolSelectorWidget/geometry", saveGeometry() );
}
QMenu *QgsSymbolV2SelectorDialog::advancedMenu()
{
return mSelectorWidget->advancedMenu();
}
void QgsSymbolV2SelectorDialog::setExpressionContext( QgsExpressionContext *context )
{
mSelectorWidget->setExpressionContext( context );
}
QgsExpressionContext *QgsSymbolV2SelectorDialog::expressionContext() const
{
return mSelectorWidget->expressionContext();
}
void QgsSymbolV2SelectorDialog::setMapCanvas( QgsMapCanvas *canvas )
{
mSelectorWidget->setMapCanvas( canvas );
}
QgsSymbolV2 *QgsSymbolV2SelectorDialog::symbol()
{
return mSelectorWidget->symbol();
}
void QgsSymbolV2SelectorDialog::keyPressEvent( QKeyEvent *e )
{
// Ignore the ESC key to avoid close the dialog without the properties window
if ( !isWindow() && e->key() == Qt::Key_Escape )
{
e->ignore();
}
else
{
QDialog::keyPressEvent( e );
}
}
void QgsSymbolV2SelectorDialog::loadSymbol()
{
mSelectorWidget->loadSymbol();
}
void QgsSymbolV2SelectorDialog::loadSymbol( QgsSymbolV2 *symbol, SymbolLayerItem *parent )
{
mSelectorWidget->loadSymbol( symbol, parent );
}
void QgsSymbolV2SelectorDialog::updateUi()
{
mSelectorWidget->updateUi();
}
void QgsSymbolV2SelectorDialog::updateLockButton()
{
mSelectorWidget->updateLockButton();
}
SymbolLayerItem *QgsSymbolV2SelectorDialog::currentLayerItem()
{
return mSelectorWidget->currentLayerItem();
}
QgsSymbolLayerV2 *QgsSymbolV2SelectorDialog::currentLayer()
{
return mSelectorWidget->currentLayer();
}
void QgsSymbolV2SelectorDialog::moveLayerByOffset( int offset )
{
mSelectorWidget->moveLayerByOffset( offset );
}
void QgsSymbolV2SelectorDialog::setWidget( QWidget *widget )
{
mSelectorWidget->setWidget( widget );
}
void QgsSymbolV2SelectorDialog::moveLayerDown()
{
mSelectorWidget->moveLayerDown();
}
void QgsSymbolV2SelectorDialog::moveLayerUp()
{
mSelectorWidget->moveLayerUp();
}
void QgsSymbolV2SelectorDialog::addLayer()
{
mSelectorWidget->addLayer();
}
void QgsSymbolV2SelectorDialog::removeLayer()
{
mSelectorWidget->removeLayer();
}
void QgsSymbolV2SelectorDialog::lockLayer()
{
mSelectorWidget->lockLayer();
}
void QgsSymbolV2SelectorDialog::saveSymbol()
{
mSelectorWidget->saveSymbol();
}
void QgsSymbolV2SelectorDialog::duplicateLayer()
{
mSelectorWidget->duplicateLayer();
}
void QgsSymbolV2SelectorDialog::layerChanged()
{
mSelectorWidget->layerChanged();
}
void QgsSymbolV2SelectorDialog::updateLayerPreview()
{
mSelectorWidget->updateLayerPreview();
}
void QgsSymbolV2SelectorDialog::updatePreview()
{
mSelectorWidget->updatePreview();
}
void QgsSymbolV2SelectorDialog::symbolChanged()
{
mSelectorWidget->symbolChanged();
}
void QgsSymbolV2SelectorDialog::changeLayer( QgsSymbolLayerV2 *layer )
{
mSelectorWidget->changeLayer( layer );
}

View File

@ -21,9 +21,11 @@
#include "ui_qgssymbolv2selectordialogbase.h"
#include "qgsdatadefined.h"
#include "qgspanelwidget.h"
#include <QStandardItemModel>
#include <QScopedPointer>
#include <QDialogButtonBox>
class QgsStyleV2;
class QgsSymbolV2;
@ -71,13 +73,27 @@ class DataDefinedRestorer: public QObject
};
///@endcond
class GUI_EXPORT QgsSymbolV2SelectorDialog : public QDialog, private Ui::QgsSymbolV2SelectorDialogBase
class QgsSymbolV2SelectorDialog;
/**
* Symbol selector widget that cna be used to select and build a symbol
*/
class GUI_EXPORT QgsSymbolV2SelectorWidget: public QgsPanelWidget, private Ui::QgsSymbolV2SelectorDialogBase
{
Q_OBJECT
/// Too allow for non API break access from the dialog.
friend class QgsSymbolV2SelectorDialog;
public:
QgsSymbolV2SelectorDialog( QgsSymbolV2* symbol, QgsStyleV2* style, const QgsVectorLayer* vl, QWidget* parent = nullptr, bool embedded = false );
~QgsSymbolV2SelectorDialog();
/**
* Symbol selector widget that cna be used to select and build a symbol
* @param symbol The symbol to load into the widget as a start point.
* @param style The style used by the widget.
* @param vl The vector layer for the symbol.
* @param parent
*/
QgsSymbolV2SelectorWidget( QgsSymbolV2* symbol, QgsStyleV2* style, const QgsVectorLayer* vl, QWidget* parent = nullptr );
~QgsSymbolV2SelectorWidget();
//! return menu for "advanced" button - create it if doesn't exist and show the advanced button
QMenu* advancedMenu();
@ -112,9 +128,185 @@ class GUI_EXPORT QgsSymbolV2SelectorDialog : public QDialog, private Ui::QgsSymb
*/
QgsSymbolV2* symbol() { return mSymbol; }
/**
* Set the widget in dock mode which will emit showPanel when a sub widget requests
* to show a widget.
* @param dockMode True to enable dock mode.
*/
void setDockMode( bool dockMode );
protected:
/**
* Reload the current symbol in the view.
*/
void loadSymbol();
//! @note not available in python bindings
/**
* Load the given symbol into the widget..
* @param symbol The symbol to load.
* @param parent The parent symbol layer item.
*/
void loadSymbol( QgsSymbolV2* symbol, SymbolLayerItem* parent );
/**
* Update the state of the UI based on the currently set symbol layer.
*/
void updateUi();
/**
* Update the lock button states based on the current symbol layer.
*/
void updateLockButton();
//! @note not available in python bindings
SymbolLayerItem* currentLayerItem();
/**
* The current symbol layer that is active in the interface.
* @return The active symbol layer.
*/
QgsSymbolLayerV2* currentLayer();
/**
* Move the current active layer by a set offset in the list.
* @param offset The offset to move the layer by
*/
void moveLayerByOffset( int offset );
/**
* Set the properties widget for the active symbol layer.
* @param widget The widget to set to configure the active symbol layer.
*/
void setWidget( QWidget* widget );
signals:
/**
* Emiited when a symbol is modified in the widget.
*/
void symbolModified();
public slots:
/**
* Move the active symbol layer down.
*/
void moveLayerDown();
/**
* Move the active symbol layer up.
*/
void moveLayerUp();
/**
* Add a symobl layer to the bottom of the stack.
*/
void addLayer();
/**
* Remove the current active symbol layer.
*/
void removeLayer();
/**
* Lock the current active symbol layer.
*/
void lockLayer();
/**
* Save the current active symbol layer into the users saved styles.
*/
Q_DECL_DEPRECATED void saveSymbol();
//! Duplicates the current symbol layer and places the duplicated layer above the current symbol layer
//! @note added in QGIS 2.14
void duplicateLayer();
/**
* Called when the layer changes in the widget. Updates the active properties for
* active symbol layer.
*/
void layerChanged();
/**
* Update the single symbol layer preview in the widget.
*/
void updateLayerPreview();
/**
* Update the preivew of the whole symbol in the iterface.
*/
void updatePreview();
//! Slot to update tree when a new symbol from style
void symbolChanged();
//! alters tree and sets proper widget when Layer Type is changed
//! @note: The layer is received from the LayerPropertiesWidget
void changeLayer( QgsSymbolLayerV2* layer );
protected: // data
QgsStyleV2* mStyle;
QgsSymbolV2* mSymbol;
QMenu* mAdvancedMenu;
const QgsVectorLayer* mVectorLayer;
QStandardItemModel* model;
QWidget *mPresentWidget;
private:
bool mDockMode;
QScopedPointer<DataDefinedRestorer> mDataDefineRestorer;
QScopedPointer< QgsExpressionContext > mPresetExpressionContext;
QgsMapCanvas* mMapCanvas;
};
class GUI_EXPORT QgsSymbolV2SelectorDialog : public QDialog
{
Q_OBJECT
public:
QgsSymbolV2SelectorDialog( QgsSymbolV2* symbol, QgsStyleV2* style, const QgsVectorLayer* vl, QWidget* parent = nullptr, bool embedded = false );
~QgsSymbolV2SelectorDialog();
//! return menu for "advanced" button - create it if doesn't exist and show the advanced button
QMenu* advancedMenu();
/** Sets the optional expression context used for the widget. This expression context is used for
* evaluating data defined symbol properties and for populating based expression widgets in
* the layer widget.
* @param context expression context pointer. Ownership is transferred to the dialog.
* @note added in QGIS 2.12
* @see expressionContext()
*/
void setExpressionContext( QgsExpressionContext* context );
/** Returns the expression context used for the dialog, if set. This expression context is used for
* evaluating data defined symbol properties and for populating based expression widgets in
* the dialog.
* @note added in QGIS 2.12
* @see setExpressionContext()
*/
QgsExpressionContext* expressionContext() const;
/** Sets the map canvas associated with the dialog. This allows the widget to retrieve the current
* map scale and other properties from the canvas.
* @param canvas map canvas
* @note added in QGIS 2.12
*/
void setMapCanvas( QgsMapCanvas* canvas );
/**
* @brief Return the symbol that is currently active in the widget. Can be null.
* @return The active symbol.
*/
QgsSymbolV2* symbol();
protected:
//! Reimplements dialog keyPress event so we can ignore it
void keyPressEvent( QKeyEvent * event ) override;
void keyPressEvent( QKeyEvent * e ) override;
void loadSymbol();
//! @note not available in python bindings
@ -161,21 +353,9 @@ class GUI_EXPORT QgsSymbolV2SelectorDialog : public QDialog, private Ui::QgsSymb
//! @note: The layer is received from the LayerPropertiesWidget
void changeLayer( QgsSymbolLayerV2* layer );
protected: // data
QgsStyleV2* mStyle;
QgsSymbolV2* mSymbol;
QMenu* mAdvancedMenu;
const QgsVectorLayer* mVectorLayer;
QStandardItemModel* model;
QWidget *mPresentWidget;
private:
QScopedPointer<DataDefinedRestorer> mDataDefineRestorer;
QScopedPointer< QgsExpressionContext > mPresetExpressionContext;
QgsMapCanvas* mMapCanvas;
QgsSymbolV2SelectorWidget* mSelectorWidget;
QDialogButtonBox* mButtonBox;
};
#endif

View File

@ -27,7 +27,7 @@
<number>0</number>
</property>
<item>
<widget class="QStackedWidget" name="mainStack">
<widget class="QgsPanelWidgetStackWidget" name="mainStack">
<widget class="QWidget" name="page">
<layout class="QVBoxLayout" name="verticalLayout_4">
<property name="leftMargin">
@ -218,7 +218,6 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="page_2"/>
</widget>
</item>
</layout>
@ -241,6 +240,12 @@
<header>effects/qgseffectstackpropertieswidget.h</header>
<container>1</container>
</customwidget>
<customwidget>
<class>QgsPanelWidgetStackWidget</class>
<extends>QStackedWidget</extends>
<header>qgspanelwidget.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>cboRenderers</tabstop>

View File

@ -1,297 +1,249 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QgsSymbolV2SelectorDialogBase</class>
<widget class="QDialog" name="QgsSymbolV2SelectorDialogBase">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>364</width>
<height>594</height>
</rect>
</property>
<property name="windowTitle">
<string>Symbol selector</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<item>
<widget class="QScrollArea" name="scrollArea">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>364</width>
<height>552</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="margin">
<number>0</number>
</property>
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QTreeView" name="layersTree">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>100</height>
</size>
</property>
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="lblPreview">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>100</width>
<height>100</height>
</size>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
<property name="text">
<string/>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<layout class="QHBoxLayout" name="pushBtnBox">
<property name="spacing">
<number>6</number>
</property>
<item>
<widget class="QPushButton" name="btnAddLayer">
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Add symbol layer</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnRemoveLayer">
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Remove symbol layer</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnLock">
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Lock layer's color</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnDuplicate">
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Duplicates the current layer</string>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnUp">
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Move up</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnDown">
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Move down</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="2" column="0">
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QFrame" name="frame">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>4</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="spacing">
<number>0</number>
</property>
<property name="margin">
<number>0</number>
</property>
<item>
<widget class="QStackedWidget" name="stackedWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>2</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<widget class="QWidget" name="page_2"/>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
<zorder>frame</zorder>
<zorder>line</zorder>
</widget>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>QgsSymbolV2SelectorDialogBase</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>257</x>
<y>406</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>QgsSymbolV2SelectorDialogBase</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>325</x>
<y>406</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QgsSymbolV2SelectorDialogBase</class>
<widget class="QWidget" name="QgsSymbolV2SelectorDialogBase">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>341</width>
<height>616</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="margin">
<number>0</number>
</property>
<item>
<widget class="QScrollArea" name="scrollArea">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>341</width>
<height>616</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="margin">
<number>0</number>
</property>
<item row="1" column="0">
<layout class="QHBoxLayout" name="pushBtnBox">
<property name="spacing">
<number>6</number>
</property>
<item>
<widget class="QPushButton" name="btnAddLayer">
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Add symbol layer</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnRemoveLayer">
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Remove symbol layer</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnLock">
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Lock layer's color</string>
</property>
<property name="checkable">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnDuplicate">
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Duplicates the current layer</string>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnUp">
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Move up</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnDown">
<property name="maximumSize">
<size>
<width>50</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Move down</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="2" column="0">
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QFrame" name="frame">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>4</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="spacing">
<number>0</number>
</property>
<property name="margin">
<number>0</number>
</property>
<item>
<widget class="QStackedWidget" name="stackedWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>2</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<widget class="QWidget" name="page_2"/>
</widget>
</item>
</layout>
</widget>
</item>
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QTreeView" name="layersTree">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>100</height>
</size>
</property>
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="lblPreview">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>100</width>
<height>100</height>
</size>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
<property name="text">
<string/>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</item>
</layout>
<zorder>frame</zorder>
<zorder>line</zorder>
<zorder></zorder>
</widget>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -1,44 +1,63 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QgsRendererWidgetContainerBase</class>
<widget class="QWidget" name="QgsRendererWidgetContainerBase">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>375</width>
<height>628</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QLabel" name="mTitleText">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="mWidgetLayout"/>
</item>
<item>
<widget class="QDialogButtonBox" name="mButtonBox">
<property name="standardButtons">
<set>QDialogButtonBox::Close</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>QgsRendererWidgetContainerBase</class>
<widget class="QWidget" name="QgsRendererWidgetContainerBase">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>375</width>
<height>628</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QToolButton" name="mBackButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Back</string>
</property>
<property name="icon">
<iconset resource="../../../images/images.qrc">
<normaloff>:/images/themes/default/mActionArrowLeft.png</normaloff>:/images/themes/default/mActionArrowLeft.png</iconset>
</property>
<property name="toolButtonStyle">
<enum>Qt::ToolButtonTextBesideIcon</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="mTitleText">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="mWidgetLayout"/>
</item>
</layout>
</widget>
<resources>
<include location="../../../images/images.qrc"/>
</resources>
<connections/>
</ui>