/************************************************************************
 * This file has been generated automatically from                      *
 *                                                                      *
 * src/gui/symbology/qgsrendererwidget.h                                *
 *                                                                      *
 * Do not edit manually ! Edit header and run scripts/sipify.py again   *
 ************************************************************************/



class QgsRendererWidget : QgsPanelWidget, QgsExpressionContextGenerator
{
%Docstring(signature="appended")
Base class for renderer settings widgets.

WORKFLOW:

- open renderer dialog with some RENDERER (never null!)
- find out which widget to use
- instantiate it and set in stacked widget
- 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
%End

%TypeHeaderCode
#include "qgsrendererwidget.h"
%End
  public:
    QgsRendererWidget( QgsVectorLayer *layer, QgsStyle *style );
    virtual QgsExpressionContext createExpressionContext() const;


    virtual QgsFeatureRenderer *renderer() = 0;
%Docstring
Returns pointer to the renderer (no transfer of ownership)
%End

    void showSymbolLevelsDialog( QgsFeatureRenderer *r );
%Docstring
Show a dialog with renderer's symbol level settings.
%End

    virtual void setContext( const QgsSymbolWidgetContext &context );
%Docstring
Sets the context in which the renderer widget is shown, e.g., the
associated map canvas and expression contexts.

:param context: symbol widget context

.. seealso:: :py:func:`context`
%End

    QgsSymbolWidgetContext context() const;
%Docstring
Returns the context in which the renderer widget is shown, e.g., the
associated map canvas and expression contexts.

.. seealso:: :py:func:`setContext`
%End

    const QgsVectorLayer *vectorLayer() const;
%Docstring
Returns the vector layer associated with the widget.
%End

    void applyChanges();
%Docstring
This method should be called whenever the renderer is actually set on
the layer.
%End

    virtual void setDockMode( bool dockMode );



  signals:

    void layerVariablesChanged();
%Docstring
Emitted when expression context variables on the associated vector
layers have been changed. Will request the parent dialog to
re-synchronize with the variables.
%End

 void symbolLevelsChanged() /Deprecated/;
%Docstring
Emitted when the symbol levels settings have been changed.

.. deprecated:: 3.20

   No longer emitted.
%End

  protected:




    virtual QList<QgsSymbol *> selectedSymbols();
%Docstring
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&).
%End
    virtual void refreshSymbolView();

    QgsDataDefinedSizeLegendWidget *createDataDefinedSizeLegendWidget( const QgsMarkerSymbol *symbol, const QgsDataDefinedSizeLegend *ddsLegend ) /Factory/;
%Docstring
Creates widget to setup data-defined size legend. Returns newly created
panel - may be ``None`` if it could not be opened. Ownership is
transferred to the caller.
%End

    virtual void setSymbolLevels( const QList<QgsLegendSymbolItem> &levels, bool enabled );
%Docstring
Sets the symbol levels for the renderer defined in the widget.

The ``levels`` argument defines the updated list of symbols with
rendering passes set.

The ``enabled`` arguments specifies if symbol levels should be enabled
for the renderer.

.. versionadded:: 3.20
%End

    void registerDataDefinedButton( QgsPropertyOverrideButton *button, QgsFeatureRenderer::Property key );
%Docstring
Registers a data defined override button. Handles setting up connections
for the button and initializing the button to show the correct
descriptions and help text for the associated property.
%End

  protected slots:
    void contextMenuViewCategories( QPoint p );
    void changeSymbolColor();
%Docstring
Change color of selected symbols
%End
    void changeSymbolOpacity();
%Docstring
Change opacity of selected symbols
%End
    void changeSymbolUnit();
%Docstring
Change units mm/map units of selected symbols
%End
    void changeSymbolWidth();
%Docstring
Change line widths of selected symbols
%End
    void changeSymbolSize();
%Docstring
Change marker sizes of selected symbols
%End
    void changeSymbolAngle();
%Docstring
Change marker angles of selected symbols
%End


    virtual void copy();
    virtual void paste();

    virtual void pasteSymbolToSelection();
%Docstring
Pastes the clipboard symbol over selected items.

.. versionadded:: 3.10
%End

  private:
    virtual void apply();
%Docstring
This will be called whenever the renderer is set on a layer. This can be
overwritten in subclasses.
%End
};







class QgsDataDefinedValueDialog : QDialog
{
%Docstring(signature="appended")
Utility classes for "en masse" size definition.
%End

%TypeHeaderCode
#include "qgsrendererwidget.h"
%End
  public:
    QgsDataDefinedValueDialog( const QList<QgsSymbol *> &symbolList, QgsVectorLayer *layer, const QString &label );
%Docstring
Constructor

:param symbolList: must not be empty
:param layer: must not be ``None``
:param label: value label
%End

    void setContext( const QgsSymbolWidgetContext &context );
%Docstring
Sets the context in which the symbol widget is shown, e.g., the
associated map canvas and expression contexts.

:param context: symbol widget context

.. seealso:: :py:func:`context`
%End

    QgsSymbolWidgetContext context() const;
%Docstring
Returns the context in which the symbol widget is shown, e.g., the
associated map canvas and expression contexts.

.. seealso:: :py:func:`setContext`
%End

    const QgsVectorLayer *vectorLayer() const;
%Docstring
Returns the vector layer associated with the widget.
%End

  public slots:
    void dataDefinedChanged();

  protected:
    void init( int propertyKey ); // needed in children ctor to call virtual

  private:
    QgsProperty symbolDataDefined() const;
    virtual QgsProperty symbolDataDefined( const QgsSymbol * ) const = 0;
    virtual double value( const QgsSymbol * ) const = 0;
    virtual void setDataDefined( QgsSymbol *symbol, const QgsProperty &dd ) = 0;
};

class QgsDataDefinedSizeDialog : QgsDataDefinedValueDialog
{

%TypeHeaderCode
#include "qgsrendererwidget.h"
%End
  public:
    QgsDataDefinedSizeDialog( const QList<QgsSymbol *> &symbolList, QgsVectorLayer *layer );

  protected:
    virtual QgsProperty symbolDataDefined( const QgsSymbol *symbol ) const;


    virtual double value( const QgsSymbol *symbol ) const;


    virtual void setDataDefined( QgsSymbol *symbol, const QgsProperty &dd );


};

class QgsDataDefinedRotationDialog : QgsDataDefinedValueDialog
{

%TypeHeaderCode
#include "qgsrendererwidget.h"
%End
  public:
    QgsDataDefinedRotationDialog( const QList<QgsSymbol *> &symbolList, QgsVectorLayer *layer );

  protected:
    virtual QgsProperty symbolDataDefined( const QgsSymbol *symbol ) const;


    virtual double value( const QgsSymbol *symbol ) const;


    virtual void setDataDefined( QgsSymbol *symbol, const QgsProperty &dd );

};

class QgsDataDefinedWidthDialog : QgsDataDefinedValueDialog
{

%TypeHeaderCode
#include "qgsrendererwidget.h"
%End
  public:
    QgsDataDefinedWidthDialog( const QList<QgsSymbol *> &symbolList, QgsVectorLayer *layer );

  protected:
    virtual QgsProperty symbolDataDefined( const QgsSymbol *symbol ) const;


    virtual double value( const QgsSymbol *symbol ) const;


    virtual void setDataDefined( QgsSymbol *symbol, const QgsProperty &dd );

};


/************************************************************************
 * This file has been generated automatically from                      *
 *                                                                      *
 * src/gui/symbology/qgsrendererwidget.h                                *
 *                                                                      *
 * Do not edit manually ! Edit header and run scripts/sipify.py again   *
 ************************************************************************/
