mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-14 00:07:35 -04:00
Give symbol widgets optional access to a map canvas
This allows symbol widgets to fetch properties from the main map canvas, for instance fetching the current scale from the map.
This commit is contained in:
parent
60cce74913
commit
a62c6a917a
@ -15,6 +15,13 @@ class QgsLayerPropertiesWidget : QWidget
|
||||
*/
|
||||
QgsExpressionContext* expressionContext() const;
|
||||
|
||||
/** Sets the map canvas associated with the widget. 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
|
||||
*/
|
||||
virtual void setMapCanvas( QgsMapCanvas* canvas );
|
||||
|
||||
public slots:
|
||||
void layerTypeChanged();
|
||||
void emitSignalChanged();
|
||||
|
@ -9,4 +9,5 @@ class QgsPointDisplacementRendererWidget: QgsRendererV2Widget
|
||||
~QgsPointDisplacementRendererWidget();
|
||||
|
||||
QgsFeatureRendererV2* renderer();
|
||||
void setMapCanvas( QgsMapCanvas* canvas );
|
||||
};
|
||||
|
@ -6,6 +6,14 @@ class QgsRendererV2PropertiesDialog : QDialog
|
||||
|
||||
public:
|
||||
QgsRendererV2PropertiesDialog( QgsVectorLayer* layer, QgsStyleV2* style, bool embedded = false );
|
||||
~QgsRendererV2PropertiesDialog();
|
||||
|
||||
/** 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 );
|
||||
|
||||
public slots:
|
||||
//! called when user changes renderer type
|
||||
|
@ -15,6 +15,13 @@ class QgsRendererV2Widget : QWidget
|
||||
//! show a dialog with renderer's symbol level settings
|
||||
void showSymbolLevelsDialog( QgsFeatureRendererV2* r );
|
||||
|
||||
/** Sets the map canvas associated with the widget. 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
|
||||
*/
|
||||
virtual void setMapCanvas( QgsMapCanvas* canvas );
|
||||
|
||||
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&)*/
|
||||
|
@ -106,7 +106,7 @@ class QgsRendererRulePropsDialog : QDialog
|
||||
%End
|
||||
|
||||
public:
|
||||
QgsRendererRulePropsDialog( QgsRuleBasedRendererV2::Rule* rule, QgsVectorLayer* layer, QgsStyleV2* style, QWidget* parent /TransferThis/ = 0 );
|
||||
QgsRendererRulePropsDialog( QgsRuleBasedRendererV2::Rule* rule, QgsVectorLayer* layer, QgsStyleV2* style, QWidget* parent /TransferThis/ = 0, QgsMapCanvas* mapCanvas = 0 );
|
||||
~QgsRendererRulePropsDialog();
|
||||
|
||||
QgsRuleBasedRendererV2::Rule* rule();
|
||||
|
@ -11,6 +11,8 @@ class QgsSingleSymbolRendererV2Widget : QgsRendererV2Widget
|
||||
|
||||
virtual QgsFeatureRendererV2* renderer();
|
||||
|
||||
virtual void setMapCanvas( QgsMapCanvas* canvas );
|
||||
|
||||
public slots:
|
||||
void changeSingleSymbol();
|
||||
|
||||
|
@ -20,6 +20,13 @@ class QgsSymbolLayerV2Widget : QWidget
|
||||
*/
|
||||
QgsExpressionContext* expressionContext() const;
|
||||
|
||||
/** Sets the map canvas associated with the widget. 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
|
||||
*/
|
||||
virtual void setMapCanvas( QgsMapCanvas* canvas );
|
||||
|
||||
/** Returns the vector layer associated with the widget.
|
||||
* @note added in QGIS 2.12
|
||||
*/
|
||||
|
@ -14,6 +14,13 @@ class QgsSymbolsListWidget : QWidget
|
||||
*/
|
||||
QgsExpressionContext* expressionContext() const;
|
||||
|
||||
/** Sets the map canvas associated with the widget. 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
|
||||
*/
|
||||
virtual void setMapCanvas( QgsMapCanvas* canvas );
|
||||
|
||||
/** Returns the vector layer associated with the widget.
|
||||
* @note added in QGIS 2.12
|
||||
*/
|
||||
|
@ -27,6 +27,13 @@ class QgsSymbolV2SelectorDialog : QDialog
|
||||
*/
|
||||
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 );
|
||||
|
||||
protected:
|
||||
//! Reimplements dialog keyPress event so we can ignore it
|
||||
void keyPressEvent( QKeyEvent * event );
|
||||
|
@ -1237,6 +1237,7 @@ void QgsVectorLayerProperties::updateSymbologyPage()
|
||||
if ( layer->rendererV2() )
|
||||
{
|
||||
mRendererDialog = new QgsRendererV2PropertiesDialog( layer, QgsStyleV2::defaultStyle(), true );
|
||||
mRendererDialog->setMapCanvas( QgisApp::instance()->mapCanvas() );
|
||||
|
||||
// display the menu to choose the output format (fix #5136)
|
||||
mActionSaveStyleAs->setText( tr( "Save Style" ) );
|
||||
|
@ -40,6 +40,7 @@ class QgsVectorLayer;
|
||||
class QgsLabelingGui;
|
||||
class QgsDiagramProperties;
|
||||
class QgsFieldsProperties;
|
||||
class QgsRendererV2PropertiesDialog;
|
||||
|
||||
class APP_EXPORT QgsVectorLayerProperties : public QgsOptionsDialogBase, private Ui::QgsVectorLayerPropertiesBase
|
||||
{
|
||||
@ -164,7 +165,7 @@ class APP_EXPORT QgsVectorLayerProperties : public QgsOptionsDialogBase, private
|
||||
QAction* mActionSaveStyleAs;
|
||||
|
||||
/** Renderer dialog which is shown*/
|
||||
QDialog* mRendererDialog;
|
||||
QgsRendererV2PropertiesDialog* mRendererDialog;
|
||||
/** Labeling dialog. If apply is pressed, options are applied to vector's QgsLabel */
|
||||
QgsLabelingGui* labelingDialog;
|
||||
/** Label dialog. If apply is pressed, options are applied to vector's QgsLabel */
|
||||
|
@ -522,6 +522,7 @@ void QgsCategorizedSymbolRendererV2Widget::changeSelectedSymbols()
|
||||
{
|
||||
QgsSymbolV2* newSymbol = mCategorizedSymbol->clone();
|
||||
QgsSymbolV2SelectorDialog dlg( newSymbol, mStyle, mLayer, this );
|
||||
dlg.setMapCanvas( mMapCanvas );
|
||||
if ( !dlg.exec() )
|
||||
{
|
||||
delete newSymbol;
|
||||
@ -555,6 +556,7 @@ void QgsCategorizedSymbolRendererV2Widget::changeCategorizedSymbol()
|
||||
QgsSymbolV2* newSymbol = mCategorizedSymbol->clone();
|
||||
|
||||
QgsSymbolV2SelectorDialog dlg( newSymbol, mStyle, mLayer, this );
|
||||
dlg.setMapCanvas( mMapCanvas );
|
||||
if ( !dlg.exec() )
|
||||
{
|
||||
delete newSymbol;
|
||||
@ -605,6 +607,7 @@ void QgsCategorizedSymbolRendererV2Widget::changeCategorySymbol()
|
||||
}
|
||||
|
||||
QgsSymbolV2SelectorDialog dlg( symbol, mStyle, mLayer, this );
|
||||
dlg.setMapCanvas( mMapCanvas );
|
||||
if ( !dlg.exec() )
|
||||
{
|
||||
delete symbol;
|
||||
|
@ -773,6 +773,7 @@ void QgsGraduatedSymbolRendererV2Widget::changeGraduatedSymbol()
|
||||
QgsSymbolV2* newSymbol = mGraduatedSymbol->clone();
|
||||
|
||||
QgsSymbolV2SelectorDialog dlg( newSymbol, mStyle, mLayer, this );
|
||||
dlg.setMapCanvas( mMapCanvas );
|
||||
if ( !dlg.exec() )
|
||||
{
|
||||
delete newSymbol;
|
||||
@ -860,6 +861,7 @@ void QgsGraduatedSymbolRendererV2Widget::changeSelectedSymbols()
|
||||
{
|
||||
QgsSymbolV2* newSymbol = mGraduatedSymbol->clone();
|
||||
QgsSymbolV2SelectorDialog dlg( newSymbol, mStyle, mLayer, this );
|
||||
dlg.setMapCanvas( mMapCanvas );
|
||||
if ( !dlg.exec() )
|
||||
{
|
||||
delete newSymbol;
|
||||
@ -885,6 +887,7 @@ void QgsGraduatedSymbolRendererV2Widget::changeRangeSymbol( int rangeIdx )
|
||||
QgsSymbolV2* newSymbol = mRenderer->ranges()[rangeIdx].symbol()->clone();
|
||||
|
||||
QgsSymbolV2SelectorDialog dlg( newSymbol, mStyle, mLayer, this );
|
||||
dlg.setMapCanvas( mMapCanvas );
|
||||
if ( !dlg.exec() )
|
||||
{
|
||||
delete newSymbol;
|
||||
|
@ -120,6 +120,12 @@ QgsFeatureRendererV2* QgsHeatmapRendererWidget::renderer()
|
||||
return mRenderer;
|
||||
}
|
||||
|
||||
void QgsHeatmapRendererWidget::setMapCanvas( QgsMapCanvas* canvas )
|
||||
{
|
||||
QgsRendererV2Widget::setMapCanvas( canvas );
|
||||
mRadiusUnitWidget->setMapCanvas( canvas );
|
||||
}
|
||||
|
||||
void QgsHeatmapRendererWidget::applyColorRamp()
|
||||
{
|
||||
if ( !mRenderer )
|
||||
|
@ -43,6 +43,8 @@ class GUI_EXPORT QgsHeatmapRendererWidget : public QgsRendererV2Widget, private
|
||||
/** @returns the current feature renderer */
|
||||
virtual QgsFeatureRendererV2* renderer() override;
|
||||
|
||||
void setMapCanvas( QgsMapCanvas* canvas ) override;
|
||||
|
||||
protected:
|
||||
QgsHeatmapRenderer* mRenderer;
|
||||
|
||||
|
@ -111,6 +111,12 @@ QgsFeatureRendererV2* QgsInvertedPolygonRendererWidget::renderer()
|
||||
return mRenderer.data();
|
||||
}
|
||||
|
||||
void QgsInvertedPolygonRendererWidget::setMapCanvas( QgsMapCanvas* canvas )
|
||||
{
|
||||
QgsRendererV2Widget::setMapCanvas( canvas );
|
||||
mEmbeddedRendererWidget->setMapCanvas( canvas );
|
||||
}
|
||||
|
||||
void QgsInvertedPolygonRendererWidget::on_mRendererComboBox_currentIndexChanged( int index )
|
||||
{
|
||||
QString rendererId = mRendererComboBox->itemData( index ).toString();
|
||||
@ -118,6 +124,7 @@ void QgsInvertedPolygonRendererWidget::on_mRendererComboBox_currentIndexChanged(
|
||||
if ( m )
|
||||
{
|
||||
mEmbeddedRendererWidget.reset( m->createRendererWidget( mLayer, mStyle, const_cast<QgsFeatureRendererV2*>( mRenderer->embeddedRenderer() )->clone() ) );
|
||||
mEmbeddedRendererWidget->setMapCanvas( mMapCanvas );
|
||||
|
||||
if ( mLayout->count() > 2 )
|
||||
{
|
||||
|
@ -47,6 +47,7 @@ class GUI_EXPORT QgsInvertedPolygonRendererWidget : public QgsRendererV2Widget,
|
||||
|
||||
/** @returns the current feature renderer */
|
||||
virtual QgsFeatureRendererV2* renderer() override;
|
||||
void setMapCanvas( QgsMapCanvas* canvas ) override;
|
||||
|
||||
protected:
|
||||
/** The mask renderer */
|
||||
|
@ -83,6 +83,7 @@ static void _initWidgetFunctions()
|
||||
QgsLayerPropertiesWidget::QgsLayerPropertiesWidget( QgsSymbolLayerV2* layer, const QgsSymbolV2* symbol, const QgsVectorLayer* vl, QWidget* parent )
|
||||
: QWidget( parent )
|
||||
, mPresetExpressionContext( 0 )
|
||||
, mMapCanvas( 0 )
|
||||
{
|
||||
|
||||
mLayer = layer;
|
||||
@ -116,6 +117,14 @@ QgsLayerPropertiesWidget::QgsLayerPropertiesWidget( QgsSymbolLayerV2* layer, con
|
||||
mEffectWidget->setPaintEffect( mLayer->paintEffect() );
|
||||
}
|
||||
|
||||
void QgsLayerPropertiesWidget::setMapCanvas( QgsMapCanvas *canvas )
|
||||
{
|
||||
mMapCanvas = canvas;
|
||||
QgsSymbolLayerV2Widget* w = dynamic_cast< QgsSymbolLayerV2Widget* >( stackedWidget->currentWidget() );
|
||||
if ( w )
|
||||
w->setMapCanvas( mMapCanvas );
|
||||
}
|
||||
|
||||
void QgsLayerPropertiesWidget::setExpressionContext( QgsExpressionContext *context )
|
||||
{
|
||||
mPresetExpressionContext = context;
|
||||
@ -165,6 +174,8 @@ void QgsLayerPropertiesWidget::updateSymbolLayerWidget( QgsSymbolLayerV2* layer
|
||||
{
|
||||
w->setSymbolLayer( layer );
|
||||
w->setExpressionContext( mPresetExpressionContext );
|
||||
if ( mMapCanvas )
|
||||
w->setMapCanvas( mMapCanvas );
|
||||
stackedWidget->addWidget( w );
|
||||
stackedWidget->setCurrentWidget( w );
|
||||
// start receiving updates from widget
|
||||
|
@ -22,6 +22,7 @@ class QgsSymbolV2;
|
||||
class QgsSymbolLayerV2;
|
||||
class QgsSymbolLayerV2Widget;
|
||||
class QgsVectorLayer;
|
||||
class QgsMapCanvas;
|
||||
|
||||
class SymbolLayerItem;
|
||||
|
||||
@ -44,6 +45,13 @@ class GUI_EXPORT QgsLayerPropertiesWidget : public QWidget, private Ui::LayerPro
|
||||
*/
|
||||
QgsExpressionContext* expressionContext() const { return mPresetExpressionContext; }
|
||||
|
||||
/** Sets the map canvas associated with the widget. 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
|
||||
*/
|
||||
virtual void setMapCanvas( QgsMapCanvas* canvas );
|
||||
|
||||
public slots:
|
||||
void layerTypeChanged();
|
||||
void emitSignalChanged();
|
||||
@ -74,6 +82,8 @@ class GUI_EXPORT QgsLayerPropertiesWidget : public QWidget, private Ui::LayerPro
|
||||
|
||||
private:
|
||||
QgsExpressionContext* mPresetExpressionContext;
|
||||
QgsMapCanvas* mMapCanvas;
|
||||
|
||||
};
|
||||
|
||||
#endif //QGSLAYERPROPERTIESWIDGET_H
|
||||
|
@ -160,6 +160,13 @@ QgsFeatureRendererV2* QgsPointDisplacementRendererWidget::renderer()
|
||||
return mRenderer;
|
||||
}
|
||||
|
||||
void QgsPointDisplacementRendererWidget::setMapCanvas( QgsMapCanvas* canvas )
|
||||
{
|
||||
QgsRendererV2Widget::setMapCanvas( canvas );
|
||||
mDistanceUnitWidget->setMapCanvas( canvas );
|
||||
mEmbeddedRendererWidget->setMapCanvas( canvas );
|
||||
}
|
||||
|
||||
void QgsPointDisplacementRendererWidget::on_mLabelFieldComboBox_currentIndexChanged( const QString& text )
|
||||
{
|
||||
if ( mRenderer )
|
||||
@ -183,6 +190,7 @@ void QgsPointDisplacementRendererWidget::on_mRendererComboBox_currentIndexChange
|
||||
{
|
||||
delete mEmbeddedRendererWidget;
|
||||
mEmbeddedRendererWidget = m->createRendererWidget( mLayer, mStyle, mRenderer->embeddedRenderer()->clone() );
|
||||
mEmbeddedRendererWidget->setMapCanvas( mMapCanvas );
|
||||
}
|
||||
}
|
||||
|
||||
@ -332,6 +340,7 @@ void QgsPointDisplacementRendererWidget::on_mCenterSymbolPushButton_clicked()
|
||||
}
|
||||
QgsMarkerSymbolV2* markerSymbol = dynamic_cast<QgsMarkerSymbolV2*>( mRenderer->centerSymbol()->clone() );
|
||||
QgsSymbolV2SelectorDialog dlg( markerSymbol, QgsStyleV2::defaultStyle(), mLayer, this );
|
||||
dlg.setMapCanvas( mMapCanvas );
|
||||
if ( dlg.exec() == QDialog::Rejected )
|
||||
{
|
||||
delete markerSymbol;
|
||||
|
@ -32,6 +32,7 @@ class GUI_EXPORT QgsPointDisplacementRendererWidget: public QgsRendererV2Widget,
|
||||
~QgsPointDisplacementRendererWidget();
|
||||
|
||||
QgsFeatureRendererV2* renderer() override;
|
||||
void setMapCanvas( QgsMapCanvas* canvas ) override;
|
||||
|
||||
private:
|
||||
QgsPointDisplacementRenderer* mRenderer;
|
||||
|
@ -78,6 +78,7 @@ QgsRendererV2PropertiesDialog::QgsRendererV2PropertiesDialog( QgsVectorLayer* la
|
||||
, mStyle( style )
|
||||
, mActiveWidget( NULL )
|
||||
, mPaintEffect( 0 )
|
||||
, mMapCanvas( 0 )
|
||||
{
|
||||
setupUi( this );
|
||||
|
||||
@ -149,6 +150,13 @@ QgsRendererV2PropertiesDialog::~QgsRendererV2PropertiesDialog()
|
||||
delete mPaintEffect;
|
||||
}
|
||||
|
||||
void QgsRendererV2PropertiesDialog::setMapCanvas( QgsMapCanvas* canvas )
|
||||
{
|
||||
mMapCanvas = canvas;
|
||||
if ( mActiveWidget )
|
||||
mActiveWidget->setMapCanvas( mMapCanvas );
|
||||
}
|
||||
|
||||
|
||||
void QgsRendererV2PropertiesDialog::rendererChanged()
|
||||
{
|
||||
@ -193,6 +201,8 @@ void QgsRendererV2PropertiesDialog::rendererChanged()
|
||||
mActiveWidget = w;
|
||||
stackedWidget->addWidget( mActiveWidget );
|
||||
stackedWidget->setCurrentWidget( mActiveWidget );
|
||||
if ( mMapCanvas )
|
||||
mActiveWidget->setMapCanvas( mMapCanvas );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -28,6 +28,7 @@ class QgsStyleV2;
|
||||
class QgsSymbolV2;
|
||||
class QgsPaintEffect;
|
||||
class QgsRendererV2Widget;
|
||||
class QgsMapCanvas;
|
||||
|
||||
class GUI_EXPORT QgsRendererV2PropertiesDialog : public QDialog, private Ui::QgsRendererV2PropsDialogBase
|
||||
{
|
||||
@ -37,6 +38,13 @@ class GUI_EXPORT QgsRendererV2PropertiesDialog : public QDialog, private Ui::Qgs
|
||||
QgsRendererV2PropertiesDialog( QgsVectorLayer* layer, QgsStyleV2* style, bool embedded = false );
|
||||
~QgsRendererV2PropertiesDialog();
|
||||
|
||||
/** 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 );
|
||||
|
||||
public slots:
|
||||
//! called when user changes renderer type
|
||||
void rendererChanged();
|
||||
@ -56,6 +64,8 @@ class GUI_EXPORT QgsRendererV2PropertiesDialog : public QDialog, private Ui::Qgs
|
||||
QgsRendererV2Widget* mActiveWidget;
|
||||
|
||||
QgsPaintEffect* mPaintEffect;
|
||||
|
||||
QgsMapCanvas* mMapCanvas;
|
||||
};
|
||||
|
||||
|
||||
|
@ -24,7 +24,10 @@
|
||||
#include <QMenu>
|
||||
|
||||
QgsRendererV2Widget::QgsRendererV2Widget( QgsVectorLayer* layer, QgsStyleV2* style )
|
||||
: QWidget(), mLayer( layer ), mStyle( style )
|
||||
: QWidget()
|
||||
, mLayer( layer )
|
||||
, mStyle( style )
|
||||
, mMapCanvas( 0 )
|
||||
{
|
||||
contextMenu = new QMenu( tr( "Renderer Options" ), this );
|
||||
|
||||
@ -207,6 +210,11 @@ void QgsRendererV2Widget::showSymbolLevelsDialog( QgsFeatureRendererV2* r )
|
||||
}
|
||||
}
|
||||
|
||||
void QgsRendererV2Widget::setMapCanvas( QgsMapCanvas *canvas )
|
||||
{
|
||||
mMapCanvas = canvas;
|
||||
}
|
||||
|
||||
|
||||
////////////
|
||||
|
||||
|
@ -24,7 +24,7 @@ class QgsVectorLayer;
|
||||
class QgsStyleV2;
|
||||
class QgsFeatureRendererV2;
|
||||
class QgsSymbolV2SelectorDialog;
|
||||
|
||||
class QgsMapCanvas;
|
||||
|
||||
/**
|
||||
Base class for renderer settings widgets
|
||||
@ -50,12 +50,20 @@ class GUI_EXPORT QgsRendererV2Widget : public QWidget
|
||||
//! show a dialog with renderer's symbol level settings
|
||||
void showSymbolLevelsDialog( QgsFeatureRendererV2* r );
|
||||
|
||||
/** Sets the map canvas associated with the widget. 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
|
||||
*/
|
||||
virtual void setMapCanvas( QgsMapCanvas* canvas );
|
||||
|
||||
protected:
|
||||
QgsVectorLayer* mLayer;
|
||||
QgsStyleV2* mStyle;
|
||||
QMenu* contextMenu;
|
||||
QAction* mCopyAction;
|
||||
QAction* mPasteAction;
|
||||
QgsMapCanvas* mMapCanvas;
|
||||
|
||||
/** 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&)*/
|
||||
|
@ -129,7 +129,7 @@ void QgsRuleBasedRendererV2Widget::addRule()
|
||||
QgsSymbolV2* s = QgsSymbolV2::defaultSymbol( mLayer->geometryType() );
|
||||
QgsRuleBasedRendererV2::Rule* newrule = new QgsRuleBasedRendererV2::Rule( s );
|
||||
|
||||
QgsRendererRulePropsDialog dlg( newrule, mLayer, mStyle, this );
|
||||
QgsRendererRulePropsDialog dlg( newrule, mLayer, mStyle, this, mMapCanvas );
|
||||
if ( dlg.exec() )
|
||||
{
|
||||
QgsRuleBasedRendererV2::Rule* current = currentRule();
|
||||
@ -173,7 +173,7 @@ void QgsRuleBasedRendererV2Widget::editRule( const QModelIndex& index )
|
||||
return;
|
||||
QgsRuleBasedRendererV2::Rule* rule = mModel->ruleForIndex( index );
|
||||
|
||||
QgsRendererRulePropsDialog dlg( rule, mLayer, mStyle, this );
|
||||
QgsRendererRulePropsDialog dlg( rule, mLayer, mStyle, this, mMapCanvas );
|
||||
if ( dlg.exec() )
|
||||
{
|
||||
// model should know about the change and emit dataChanged signal for the view
|
||||
@ -256,6 +256,7 @@ void QgsRuleBasedRendererV2Widget::refineRuleCategoriesGui( const QModelIndexLis
|
||||
dlg.setWindowTitle( tr( "Refine a rule to categories" ) );
|
||||
QVBoxLayout* l = new QVBoxLayout();
|
||||
QgsCategorizedSymbolRendererV2Widget* w = new QgsCategorizedSymbolRendererV2Widget( mLayer, mStyle, NULL );
|
||||
w->setMapCanvas( mMapCanvas );
|
||||
l->addWidget( w );
|
||||
QDialogButtonBox* bb = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel );
|
||||
l->addWidget( bb );
|
||||
@ -286,6 +287,7 @@ void QgsRuleBasedRendererV2Widget::refineRuleRangesGui( const QModelIndexList& i
|
||||
dlg.setWindowTitle( tr( "Refine a rule to ranges" ) );
|
||||
QVBoxLayout* l = new QVBoxLayout();
|
||||
QgsGraduatedSymbolRendererV2Widget* w = new QgsGraduatedSymbolRendererV2Widget( mLayer, mStyle, NULL );
|
||||
w->setMapCanvas( mMapCanvas );
|
||||
l->addWidget( w );
|
||||
QDialogButtonBox* bb = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel );
|
||||
l->addWidget( bb );
|
||||
@ -571,8 +573,8 @@ void QgsRuleBasedRendererV2Widget::countFeatures()
|
||||
|
||||
///////////
|
||||
|
||||
QgsRendererRulePropsDialog::QgsRendererRulePropsDialog( QgsRuleBasedRendererV2::Rule* rule, QgsVectorLayer* layer, QgsStyleV2* style, QWidget* parent )
|
||||
: QDialog( parent ), mRule( rule ), mLayer( layer ), mSymbolSelector( NULL ), mSymbol( NULL )
|
||||
QgsRendererRulePropsDialog::QgsRendererRulePropsDialog( QgsRuleBasedRendererV2::Rule* rule, QgsVectorLayer* layer, QgsStyleV2* style, QWidget* parent , QgsMapCanvas* mapCanvas )
|
||||
: QDialog( parent ), mRule( rule ), mLayer( layer ), mSymbolSelector( NULL ), mSymbol( NULL ), mMapCanvas( mapCanvas )
|
||||
{
|
||||
setupUi( this );
|
||||
#ifdef Q_OS_MAC
|
||||
@ -597,6 +599,7 @@ QgsRendererRulePropsDialog::QgsRendererRulePropsDialog( QgsRuleBasedRendererV2::
|
||||
if ( rule->scaleMaxDenom() > 0 )
|
||||
mScaleRangeWidget->setMinimumScale( 1.0 / rule->scaleMaxDenom() );
|
||||
}
|
||||
mScaleRangeWidget->setMapCanvas( mMapCanvas );
|
||||
|
||||
if ( mRule->symbol() )
|
||||
{
|
||||
@ -610,6 +613,7 @@ QgsRendererRulePropsDialog::QgsRendererRulePropsDialog( QgsRuleBasedRendererV2::
|
||||
}
|
||||
|
||||
mSymbolSelector = new QgsSymbolV2SelectorDialog( mSymbol, style, mLayer, this, true );
|
||||
mSymbolSelector->setMapCanvas( mMapCanvas );
|
||||
QVBoxLayout* l = new QVBoxLayout;
|
||||
l->addWidget( mSymbolSelector );
|
||||
groupSymbol->setLayout( l );
|
||||
|
@ -167,7 +167,7 @@ class GUI_EXPORT QgsRendererRulePropsDialog : public QDialog, private Ui::QgsRen
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QgsRendererRulePropsDialog( QgsRuleBasedRendererV2::Rule* rule, QgsVectorLayer* layer, QgsStyleV2* style, QWidget* parent = 0 );
|
||||
QgsRendererRulePropsDialog( QgsRuleBasedRendererV2::Rule* rule, QgsVectorLayer* layer, QgsStyleV2* style, QWidget* parent = 0, QgsMapCanvas* mapCanvas = 0 );
|
||||
~QgsRendererRulePropsDialog();
|
||||
|
||||
QgsRuleBasedRendererV2::Rule* rule() { return mRule; }
|
||||
@ -183,6 +183,8 @@ class GUI_EXPORT QgsRendererRulePropsDialog : public QDialog, private Ui::QgsRen
|
||||
|
||||
QgsSymbolV2SelectorDialog* mSymbolSelector;
|
||||
QgsSymbolV2* mSymbol; // a clone of original symbol
|
||||
|
||||
QgsMapCanvas* mMapCanvas;
|
||||
};
|
||||
|
||||
|
||||
|
@ -80,6 +80,12 @@ QgsFeatureRendererV2* QgsSingleSymbolRendererV2Widget::renderer()
|
||||
return mRenderer;
|
||||
}
|
||||
|
||||
void QgsSingleSymbolRendererV2Widget::setMapCanvas( QgsMapCanvas* canvas )
|
||||
{
|
||||
QgsRendererV2Widget::setMapCanvas( canvas );
|
||||
mSelector->setMapCanvas( canvas );
|
||||
}
|
||||
|
||||
void QgsSingleSymbolRendererV2Widget::changeSingleSymbol()
|
||||
{
|
||||
// update symbol from the GUI
|
||||
|
@ -34,6 +34,9 @@ class GUI_EXPORT QgsSingleSymbolRendererV2Widget : public QgsRendererV2Widget
|
||||
|
||||
virtual QgsFeatureRendererV2* renderer() override;
|
||||
|
||||
|
||||
virtual void setMapCanvas( QgsMapCanvas* canvas ) override;
|
||||
|
||||
public slots:
|
||||
void changeSingleSymbol();
|
||||
|
||||
|
@ -68,6 +68,15 @@ static QgsExpressionContext _getExpressionContext( const void* context )
|
||||
return expContext;
|
||||
}
|
||||
|
||||
void QgsSymbolLayerV2Widget::setMapCanvas( QgsMapCanvas *canvas )
|
||||
{
|
||||
mMapCanvas = canvas;
|
||||
Q_FOREACH ( QgsUnitSelectionWidget* unitWidget, findChildren<QgsUnitSelectionWidget*>() )
|
||||
{
|
||||
unitWidget->setMapCanvas( mMapCanvas );
|
||||
}
|
||||
}
|
||||
|
||||
void QgsSymbolLayerV2Widget::registerDataDefinedButton( QgsDataDefinedButton * button, const QString & propertyName, QgsDataDefinedButton::DataType type, const QString & description )
|
||||
{
|
||||
const QgsDataDefined* dd = symbolLayer()->getDataDefinedProperty( propertyName );
|
||||
|
@ -23,13 +23,14 @@
|
||||
|
||||
class QgsSymbolLayerV2;
|
||||
class QgsVectorLayer;
|
||||
class QgsMapCanvas;
|
||||
|
||||
class GUI_EXPORT QgsSymbolLayerV2Widget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
QgsSymbolLayerV2Widget( QWidget* parent, const QgsVectorLayer* vl = 0 ) : QWidget( parent ), mVectorLayer( vl ), mPresetExpressionContext( 0 ) {}
|
||||
QgsSymbolLayerV2Widget( QWidget* parent, const QgsVectorLayer* vl = 0 ) : QWidget( parent ), mVectorLayer( vl ), mPresetExpressionContext( 0 ), mMapCanvas( 0 ) {}
|
||||
virtual ~QgsSymbolLayerV2Widget() {}
|
||||
|
||||
virtual void setSymbolLayer( QgsSymbolLayerV2* layer ) = 0;
|
||||
@ -43,6 +44,13 @@ class GUI_EXPORT QgsSymbolLayerV2Widget : public QWidget
|
||||
*/
|
||||
QgsExpressionContext* expressionContext() const { return mPresetExpressionContext; }
|
||||
|
||||
/** Sets the map canvas associated with the widget. 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
|
||||
*/
|
||||
virtual void setMapCanvas( QgsMapCanvas* canvas );
|
||||
|
||||
/** Returns the vector layer associated with the widget.
|
||||
* @note added in QGIS 2.12
|
||||
*/
|
||||
@ -66,6 +74,8 @@ class GUI_EXPORT QgsSymbolLayerV2Widget : public QWidget
|
||||
//! Optional preset expression context
|
||||
QgsExpressionContext* mPresetExpressionContext;
|
||||
|
||||
QgsMapCanvas* mMapCanvas;
|
||||
|
||||
void registerDataDefinedButton( QgsDataDefinedButton * button, const QString & propertyName, QgsDataDefinedButton::DataType type, const QString & description );
|
||||
|
||||
/** Get label for data defined entry.
|
||||
|
@ -117,6 +117,14 @@ QgsSymbolsListWidget::QgsSymbolsListWidget( QgsSymbolV2* symbol, QgsStyleV2* sty
|
||||
btnColor->setContext( "symbology" );
|
||||
}
|
||||
|
||||
void QgsSymbolsListWidget::setMapCanvas( QgsMapCanvas* canvas )
|
||||
{
|
||||
Q_FOREACH ( QgsUnitSelectionWidget* unitWidget, findChildren<QgsUnitSelectionWidget*>() )
|
||||
{
|
||||
unitWidget->setMapCanvas( canvas );
|
||||
}
|
||||
}
|
||||
|
||||
void QgsSymbolsListWidget::setExpressionContext( QgsExpressionContext *context )
|
||||
{
|
||||
mPresetExpressionContext = context;
|
||||
|
@ -40,6 +40,13 @@ class GUI_EXPORT QgsSymbolsListWidget : public QWidget, private Ui::SymbolsListW
|
||||
*/
|
||||
QgsExpressionContext* expressionContext() const { return mPresetExpressionContext; }
|
||||
|
||||
/** Sets the map canvas associated with the widget. 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
|
||||
*/
|
||||
virtual void setMapCanvas( QgsMapCanvas* canvas );
|
||||
|
||||
/** Returns the vector layer associated with the widget.
|
||||
* @note added in QGIS 2.12
|
||||
*/
|
||||
|
@ -205,7 +205,10 @@ class SymbolLayerItem : public QStandardItem
|
||||
//////////
|
||||
|
||||
QgsSymbolV2SelectorDialog::QgsSymbolV2SelectorDialog( QgsSymbolV2* symbol, QgsStyleV2* style, const QgsVectorLayer* vl, QWidget* parent, bool embedded )
|
||||
: QDialog( parent ), mAdvancedMenu( NULL ), mVectorLayer( vl )
|
||||
: QDialog( parent )
|
||||
, mAdvancedMenu( NULL )
|
||||
, mVectorLayer( vl )
|
||||
, mMapCanvas( 0 )
|
||||
{
|
||||
#ifdef Q_OS_MAC
|
||||
setWindowModality( Qt::WindowModal );
|
||||
@ -287,6 +290,20 @@ void QgsSymbolV2SelectorDialog::setExpressionContext( QgsExpressionContext *cont
|
||||
updatePreview();
|
||||
}
|
||||
|
||||
void QgsSymbolV2SelectorDialog::setMapCanvas( QgsMapCanvas *canvas )
|
||||
{
|
||||
mMapCanvas = canvas;
|
||||
|
||||
QWidget* widget = stackedWidget->currentWidget();
|
||||
QgsLayerPropertiesWidget* layerProp = dynamic_cast< QgsLayerPropertiesWidget* >( widget );
|
||||
QgsSymbolsListWidget* listWidget = dynamic_cast< QgsSymbolsListWidget* >( widget );
|
||||
|
||||
if ( layerProp )
|
||||
layerProp->setMapCanvas( canvas );
|
||||
if ( listWidget )
|
||||
listWidget->setMapCanvas( canvas );
|
||||
}
|
||||
|
||||
void QgsSymbolV2SelectorDialog::loadSymbol( QgsSymbolV2* symbol, SymbolLayerItem* parent )
|
||||
{
|
||||
SymbolLayerItem* symbolItem = new SymbolLayerItem( symbol );
|
||||
@ -399,6 +416,7 @@ void QgsSymbolV2SelectorDialog::layerChanged()
|
||||
mDataDefineRestorer.reset( new DataDefinedRestorer( parent->symbol(), currentItem->layer() ) );
|
||||
QgsLayerPropertiesWidget *layerProp = new QgsLayerPropertiesWidget( currentItem->layer(), parent->symbol(), mVectorLayer );
|
||||
layerProp->setExpressionContext( mPresetExpressionContext.data() );
|
||||
layerProp->setMapCanvas( mMapCanvas );
|
||||
setWidget( layerProp );
|
||||
connect( layerProp, SIGNAL( changed() ), mDataDefineRestorer.data(), SLOT( restore() ) );
|
||||
connect( layerProp, SIGNAL( changed() ), this, SLOT( updateLayerPreview() ) );
|
||||
@ -413,6 +431,7 @@ void QgsSymbolV2SelectorDialog::layerChanged()
|
||||
// Now populate symbols of that type using the symbols list widget:
|
||||
QgsSymbolsListWidget *symbolsList = new QgsSymbolsListWidget( currentItem->symbol(), mStyle, mAdvancedMenu, this, mVectorLayer );
|
||||
symbolsList->setExpressionContext( mPresetExpressionContext.data() );
|
||||
symbolsList->setMapCanvas( mMapCanvas );
|
||||
|
||||
setWidget( symbolsList );
|
||||
connect( symbolsList, SIGNAL( changed() ), this, SLOT( symbolChanged() ) );
|
||||
|
@ -39,6 +39,8 @@ class QgsLineSymbolV2;
|
||||
class QgsMarkerSymbolLayerV2;
|
||||
class QgsLineSymbolLayerV2;
|
||||
|
||||
class QgsMapCanvas;
|
||||
|
||||
class DataDefinedRestorer: public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
@ -93,6 +95,13 @@ class GUI_EXPORT QgsSymbolV2SelectorDialog : public QDialog, private Ui::QgsSymb
|
||||
*/
|
||||
QgsExpressionContext* expressionContext() const { return mPresetExpressionContext.data(); }
|
||||
|
||||
/** 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 );
|
||||
|
||||
protected:
|
||||
//! Reimplements dialog keyPress event so we can ignore it
|
||||
void keyPressEvent( QKeyEvent * event ) override;
|
||||
@ -150,6 +159,8 @@ class GUI_EXPORT QgsSymbolV2SelectorDialog : public QDialog, private Ui::QgsSymb
|
||||
private:
|
||||
QScopedPointer<DataDefinedRestorer> mDataDefineRestorer;
|
||||
QScopedPointer< QgsExpressionContext > mPresetExpressionContext;
|
||||
|
||||
QgsMapCanvas* mMapCanvas;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -33,7 +33,7 @@ from PyQt4.QtCore import qDebug
|
||||
# DON'T RAISE THIS THRESHOLD!!!
|
||||
# (changes which lower this threshold are welcomed though!)
|
||||
|
||||
ACCEPTABLE_MISSING_DOCS = 4038
|
||||
ACCEPTABLE_MISSING_DOCS = 4036
|
||||
|
||||
|
||||
def elemIsDocumentableClass(elem):
|
||||
|
Loading…
x
Reference in New Issue
Block a user