[QGIS Commit] r10780 - in branches/symbology-ng-branch/python: .
core gui
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Wed May 13 07:28:16 EDT 2009
Author: wonder
Date: 2009-05-13 07:28:16 -0400 (Wed, 13 May 2009)
New Revision: 10780
Added:
branches/symbology-ng-branch/python/core/symbology-ng-core.sip
branches/symbology-ng-branch/python/gui/symbology-ng-gui.sip
Modified:
branches/symbology-ng-branch/python/configure.py.in
branches/symbology-ng-branch/python/core/core.sip
branches/symbology-ng-branch/python/core/qgsapplication.sip
branches/symbology-ng-branch/python/core/qgsvectorlayer.sip
branches/symbology-ng-branch/python/gui/gui.sip
Log:
Python bindings for symbology-ng
Modified: branches/symbology-ng-branch/python/configure.py.in
===================================================================
--- branches/symbology-ng-branch/python/configure.py.in 2009-05-13 11:23:29 UTC (rev 10779)
+++ branches/symbology-ng-branch/python/configure.py.in 2009-05-13 11:28:16 UTC (rev 10780)
@@ -141,6 +141,7 @@
src_path+"/src/core/renderer",
src_path+"/src/core/spatialindex",
src_path+"/src/core/symbology",
+ src_path+"/src/core/symbology-ng",
build_path, # qgsconfig.h, qgssvnversion.h
gdal_inc_dir,
geos_inc_dir]
@@ -150,6 +151,7 @@
makefile_gui.extra_libs.append("qgis_gui")
makefile_gui.extra_lib_dirs.append(build_path+"/src/gui"+intdir)
makefile_gui.extra_include_dirs.append(src_path+"/src/gui")
+makefile_gui.extra_include_dirs.append(src_path+"/src/gui/symbology-ng")
makefile_gui.extra_include_dirs.append(build_path+"/src/gui")
makefile_gui.extra_include_dirs.append(build_path+"/src/ui")
makefile_gui.extra_include_dirs.append(src_path+"/src/plugins") # because of qgisplugin.h TODO: sort out
Modified: branches/symbology-ng-branch/python/core/core.sip
===================================================================
--- branches/symbology-ng-branch/python/core/core.sip 2009-05-13 11:23:29 UTC (rev 10779)
+++ branches/symbology-ng-branch/python/core/core.sip 2009-05-13 11:28:16 UTC (rev 10780)
@@ -71,3 +71,4 @@
%Include qgsvectorfilewriter.sip
%Include qgsvectorlayer.sip
+%Include symbology-ng-core.sip
Modified: branches/symbology-ng-branch/python/core/qgsapplication.sip
===================================================================
--- branches/symbology-ng-branch/python/core/qgsapplication.sip 2009-05-13 11:23:29 UTC (rev 10779)
+++ branches/symbology-ng-branch/python/core/qgsapplication.sip 2009-05-13 11:28:16 UTC (rev 10780)
@@ -137,6 +137,12 @@
//! Returns the path to the svg directory.
static const QString svgPath();
+ //! Returns the path to user's style. Added in QGIS 1.2
+ static const QString userStyleV2Path();
+
+ //! Returns the path to default style (works as a starting point). Added in QGIS 1.2
+ static const QString defaultStyleV2Path();
+
//! Returns the path to the application prefix directory.
static const QString prefixPath();
Modified: branches/symbology-ng-branch/python/core/qgsvectorlayer.sip
===================================================================
--- branches/symbology-ng-branch/python/core/qgsvectorlayer.sip 2009-05-13 11:23:29 UTC (rev 10779)
+++ branches/symbology-ng-branch/python/core/qgsvectorlayer.sip 2009-05-13 11:28:16 UTC (rev 10780)
@@ -97,6 +97,15 @@
/** Sets the renderer. If a renderer is already present, it is deleted */
void setRenderer(QgsRenderer * r /Transfer/);
+ /** Return renderer V2. Added in QGIS 1.2 */
+ QgsFeatureRendererV2* rendererV2();
+ /** Set renderer V2. Added in QGIS 1.2 */
+ void setRendererV2(QgsFeatureRendererV2* r);
+ /** Return whether using renderer V2. Added in QGIS 1.2 */
+ bool isUsingRendererV2();
+ /** set whether to use renderer V2 for drawing. Added in QGIS 1.2 */
+ void setUsingRendererV2(bool usingRendererV2);
+
/** Returns point, line or polygon */
QGis::GeometryType geometryType() const;
Added: branches/symbology-ng-branch/python/core/symbology-ng-core.sip
===================================================================
--- branches/symbology-ng-branch/python/core/symbology-ng-core.sip (rev 0)
+++ branches/symbology-ng-branch/python/core/symbology-ng-core.sip 2009-05-13 11:28:16 UTC (rev 10780)
@@ -0,0 +1,519 @@
+
+///////////////
+
+class QgsFeatureRendererV2
+{
+%TypeHeaderCode
+#include <qgsrendererv2.h>
+%End
+
+public:
+
+ enum RendererType
+ {
+ RendererSingleSymbol,
+ RendererCategorizedSymbol,
+ RendererGraduatedSymbol
+ // TODO: user type?
+ };
+
+ RendererType type() const;
+
+ virtual QgsSymbolV2* symbolForFeature(QgsFeature& feature)=0;
+
+ virtual void startRender(QgsRenderContext& context)=0;
+
+ virtual void stopRender(QgsRenderContext& context)=0;
+
+ virtual QList<int> usedAttributes()=0;
+
+ virtual ~QgsFeatureRendererV2();
+
+ void renderFeature(QgsFeature& feature, QgsRenderContext& context);
+
+protected:
+ QgsFeatureRendererV2(RendererType type);
+
+};
+
+///////////////
+
+class QgsSingleSymbolRendererV2 : QgsFeatureRendererV2
+{
+%TypeHeaderCode
+#include <qgsrendererv2.h>
+%End
+
+public:
+
+ QgsSingleSymbolRendererV2(QgsSymbolV2* symbol /Transfer/);
+
+ virtual ~QgsSingleSymbolRendererV2();
+
+ virtual QgsSymbolV2* symbolForFeature(QgsFeature& feature);
+
+ virtual void startRender(QgsRenderContext& context);
+
+ virtual void stopRender(QgsRenderContext& context);
+
+ virtual QList<int> usedAttributes();
+
+ QgsSymbolV2* symbol() const;
+ void setSymbol(QgsSymbolV2* s);
+};
+
+//////////
+
+class QgsRendererCategoryV2
+{
+%TypeHeaderCode
+#include <qgsrendererv2.h>
+%End
+
+public:
+
+ //! takes ownership of symbol
+ QgsRendererCategoryV2(QVariant value, QgsSymbolV2* symbol, QString label);
+
+ QgsRendererCategoryV2(const QgsRendererCategoryV2& cat);
+
+ ~QgsRendererCategoryV2();
+
+ QVariant value() const;
+ QgsSymbolV2* symbol();
+ QString label() const;
+
+ void setSymbol(QgsSymbolV2* s);
+ void setLabel(QString label);
+
+};
+
+typedef QList<QgsRendererCategoryV2> QgsCategoryList;
+
+class QgsCategorizedSymbolRendererV2 : QgsFeatureRendererV2
+{
+%TypeHeaderCode
+#include <qgsrendererv2.h>
+%End
+
+public:
+
+ QgsCategorizedSymbolRendererV2(int attrNum = -1, QgsCategoryList categories = QgsCategoryList());
+
+ virtual ~QgsCategorizedSymbolRendererV2();
+
+ virtual QgsSymbolV2* symbolForFeature(QgsFeature& feature);
+
+ virtual void startRender(QgsRenderContext& context);
+
+ virtual void stopRender(QgsRenderContext& context);
+
+ virtual QList<int> usedAttributes();
+
+ const QgsCategoryList& categories();
+
+ //! return index of category with specified value (-1 if not found)
+ int categoryIndexForValue(QVariant val);
+
+ bool updateCategorySymbol(int catIndex, QgsSymbolV2* symbol);
+ bool updateCategoryLabel(int catIndex, QString label);
+
+ bool deleteCategory(int catIndex);
+ void deleteAllCategories();
+
+ int attributeIndex() const;
+ void setAttributeIndex(int attr);
+
+protected:
+
+ QgsSymbolV2* symbolForValue(QVariant value);
+};
+
+//////////
+
+class QgsSymbolLayerV2
+{
+%TypeHeaderCode
+#include <qgssymbollayerv2.h>
+%End
+
+%ConvertToSubClassCode
+ switch (sipCpp->type())
+ {
+ case QgsSymbolV2::Marker: sipClass = sipClass_QgsMarkerSymbolLayerV2; break;
+ case QgsSymbolV2::Line: sipClass = sipClass_QgsMarkerSymbolLayerV2; break;
+ case QgsSymbolV2::Fill: sipClass = sipClass_QgsMarkerSymbolLayerV2; break;
+ default: sipClass = 0; break;
+ }
+%End
+
+
+public:
+
+ virtual void setColor(const QColor& color);
+ virtual QColor color() const;
+
+ virtual ~QgsSymbolLayerV2();
+
+ virtual QString layerType() const = 0;
+
+ virtual void startRender(QgsRenderContext& context) = 0;
+ virtual void stopRender(QgsRenderContext& context) = 0;
+
+ virtual QgsSymbolLayerV2* clone() const = 0 /Factory/;
+
+ virtual QgsStringMap properties() const = 0;
+
+ virtual void drawPreviewIcon(QPainter* painter, QSize size) = 0;
+
+ virtual QgsSymbolV2* subSymbol();
+ virtual bool setSubSymbol(QgsSymbolV2* symbol /Transfer/);
+
+ QgsSymbolV2::SymbolType type() const;
+
+ void setLocked(bool locked);
+ bool isLocked() const;
+
+protected:
+ QgsSymbolLayerV2(QgsSymbolV2::SymbolType type, bool locked = false);
+
+};
+
+///////////////
+
+class QgsMarkerSymbolLayerV2 : QgsSymbolLayerV2
+{
+%TypeHeaderCode
+#include <qgssymbollayerv2.h>
+%End
+
+public:
+ virtual void renderPoint(const QPointF& point, QgsRenderContext& context) = 0;
+
+ void drawPreviewIcon(QPainter* painter, QSize size);
+
+ void setAngle(double angle);
+ double angle() const;
+
+ void setSize(double size);
+ double size() const;
+
+protected:
+ QgsMarkerSymbolLayerV2(bool locked = false);
+
+};
+
+class QgsLineSymbolLayerV2 : QgsSymbolLayerV2
+{
+%TypeHeaderCode
+#include <qgssymbollayerv2.h>
+%End
+
+public:
+ virtual void renderPolyline(const QPolygonF& points, QgsRenderContext& context) = 0;
+
+ void setWidth(int width);
+ int width() const;
+
+ void drawPreviewIcon(QPainter* painter, QSize size);
+
+protected:
+ QgsLineSymbolLayerV2(bool locked = false);
+
+};
+
+class QgsFillSymbolLayerV2 : QgsSymbolLayerV2
+{
+%TypeHeaderCode
+#include <qgssymbollayerv2.h>
+%End
+
+public:
+ virtual void renderPolygon(const QPolygonF& points, QList<QPolygonF>* rings, QgsRenderContext& context) = 0;
+
+ void drawPreviewIcon(QPainter* painter, QSize size);
+
+protected:
+ QgsFillSymbolLayerV2(bool locked = false);
+};
+
+
+///////////////
+
+
+typedef QList<QgsSymbolLayerV2*> QgsSymbolLayerV2List;
+
+class QgsSymbolV2
+{
+%TypeHeaderCode
+#include <qgssymbolv2.h>
+%End
+
+%ConvertToSubClassCode
+ switch (sipCpp->type())
+ {
+ case QgsSymbolV2::Marker: sipClass = sipClass_QgsMarkerSymbolV2; break;
+ case QgsSymbolV2::Line: sipClass = sipClass_QgsMarkerSymbolV2; break;
+ case QgsSymbolV2::Fill: sipClass = sipClass_QgsMarkerSymbolV2; break;
+ default: sipClass = 0; break;
+ }
+%End
+
+public:
+
+ enum SymbolType
+ {
+ Marker,
+ Line,
+ Fill
+ };
+
+ virtual ~QgsSymbolV2();
+
+ SymbolType type() const;
+
+ // symbol layers handling
+
+ QgsSymbolLayerV2* symbolLayer(int layer);
+
+ int symbolLayerCount();
+
+ //! insert symbol layer to specified index
+ bool insertSymbolLayer(int index, QgsSymbolLayerV2* layer /Transfer/);
+
+ //! append symbol layer at the end of the list
+ bool appendSymbolLayer(QgsSymbolLayerV2* layer /Transfer/);
+
+ //! delete symbol layer at specified index
+ bool deleteSymbolLayer(int index);
+
+ //! remove symbol layer from the list and return pointer to it
+ QgsSymbolLayerV2* takeSymbolLayer(int index) /TransferBack/;
+
+ //! delete layer at specified index and set a new one
+ bool changeSymbolLayer(int index, QgsSymbolLayerV2* layer /Transfer/);
+
+
+ void startRender(QgsRenderContext& context);
+ void stopRender(QgsRenderContext& context);
+
+ void setColor(const QColor& color);
+ QColor color();
+
+ void drawPreviewIcon(QPainter* painter, QSize size);
+
+ QImage bigSymbolPreviewImage();
+
+ void dump();
+
+ virtual QgsSymbolV2* clone() const = 0 /Factory/;
+
+protected:
+ QgsSymbolV2(SymbolType type, QgsSymbolLayerV2List layers /Transfer/); // can't be instantiated
+
+};
+
+//////////
+
+
+class QgsMarkerSymbolV2 : QgsSymbolV2
+{
+%TypeHeaderCode
+#include <qgssymbolv2.h>
+%End
+
+public:
+ QgsMarkerSymbolV2(QgsSymbolLayerV2List layers /Transfer/ = QgsSymbolLayerV2List());
+
+ void setAngle(double angle);
+ double angle();
+
+ void setSize(double size);
+ double size();
+
+ void renderPoint(const QPointF& point, QgsRenderContext& context);
+
+ virtual QgsSymbolV2* clone() const /Factory/;
+};
+
+
+
+class QgsLineSymbolV2 : QgsSymbolV2
+{
+%TypeHeaderCode
+#include <qgssymbolv2.h>
+%End
+
+public:
+ QgsLineSymbolV2(QgsSymbolLayerV2List layers /Transfer/ = QgsSymbolLayerV2List());
+
+ void setWidth(int width);
+ int width();
+
+ void renderPolyline(const QPolygonF& points, QgsRenderContext& context);
+
+ virtual QgsSymbolV2* clone() const /Factory/;
+};
+
+
+
+class QgsFillSymbolV2 : QgsSymbolV2
+{
+%TypeHeaderCode
+#include <qgssymbolv2.h>
+%End
+
+public:
+ QgsFillSymbolV2(QgsSymbolLayerV2List layers /Transfer/ = QgsSymbolLayerV2List());
+
+ void renderPolygon(const QPolygonF& points, QList<QPolygonF>* rings, QgsRenderContext& context);
+
+ virtual QgsSymbolV2* clone() const /Factory/;
+};
+
+//////////
+
+typedef QMap<QString, QString> QgsStringMap;
+
+//////////
+
+class QgsSymbolLayerV2Metadata
+{
+%TypeHeaderCode
+#include <qgssymbollayerv2registry.h>
+%End
+
+public:
+ /** construct invalid metadata */
+ QgsSymbolLayerV2Metadata();
+
+ /** construct metadata */
+ // TODO
+ //QgsSymbolLayerV2Metadata(QString name, QgsSymbolV2::SymbolType type,
+ // QgsSymbolLayerV2CreateFunc pfCreate,
+ // QgsSymbolLayerV2WidgetFunc pfWidget);
+
+ QString name() const;
+ QgsSymbolV2::SymbolType type();
+ // TODO QgsSymbolLayerV2CreateFunc createFunction() const { return mCreateFunc; }
+ // TODO QgsSymbolLayerV2WidgetFunc widgetFunction() const { return mWidgetFunc; }
+
+};
+
+//////////
+
+class QgsSymbolLayerV2Registry
+{
+%TypeHeaderCode
+#include <qgssymbollayerv2registry.h>
+%End
+
+public:
+
+ //! return the single instance of this class (instantiate it if not exists)
+ static QgsSymbolLayerV2Registry* instance();
+
+ //! return metadata for specified symbol layer
+ QgsSymbolLayerV2Metadata symbolLayerMetadata(QString name) const;
+
+ //! register a new symbol layer type
+ void addSymbolLayerType(const QgsSymbolLayerV2Metadata& metadata);
+
+ //! create a new instance of symbol layer given symbol layer name and properties
+ QgsSymbolLayerV2* createSymbolLayer(QString name, const QgsStringMap& properties) const /Factory/;
+
+ //! return a list of available symbol layers for a specified symbol type
+ QStringList symbolLayersForType(QgsSymbolV2::SymbolType type);
+
+ //! create a new instance of symbol layer for specified symbol type with default settings
+ static QgsSymbolLayerV2* defaultSymbolLayer(QgsSymbolV2::SymbolType type) /Factory/;
+
+protected:
+ QgsSymbolLayerV2Registry();
+
+};
+
+//////////
+
+class QgsStyleV2
+{
+%TypeHeaderCode
+#include <qgsstylev2.h>
+%End
+
+public:
+
+ QgsStyleV2();
+ ~QgsStyleV2();
+
+ //! remove all contents of the style
+ void clear();
+
+ //! add symbol to style. takes symbol's ownership
+ bool addSymbol(QString name, QgsSymbolV2* symbol);
+
+ //! remove symbol from style (and delete it)
+ bool removeSymbol(QString name);
+
+ //! return a NEW copy of symbol
+ QgsSymbolV2* symbol(QString name);
+
+ //! return a const pointer to a symbol (doesn't create new instance)
+ const QgsSymbolV2* symbolRef(QString name) const;
+
+ //! return count of symbols in style
+ int symbolCount();
+
+ //! return a list of names of symbols
+ QStringList symbolNames();
+
+
+ //! add color ramp to style. takes ramp's ownership
+ bool addColorRamp(QString name, QgsVectorColorRampV2* colorRamp);
+
+ //! remove color ramp from style (and delete it)
+ bool removeColorRamp(QString name);
+
+ //! return a NEW copy of color ramp
+ QgsVectorColorRampV2* colorRamp(QString name);
+
+ //! return a const pointer to a symbol (doesn't create new instance)
+ const QgsVectorColorRampV2* colorRampRef(QString name) const;
+
+ //! return count of color ramps
+ int colorRampCount();
+
+ //! return a list of names of color ramps
+ QStringList colorRampNames();
+
+
+ //! load a file into the style
+ bool load(QString filename);
+
+ //! save style into a file
+ bool save(QString filename);
+
+ //! return last error from load/save operation
+ QString errorString();
+};
+
+//////////
+
+class QgsVectorColorRampV2
+{
+%TypeHeaderCode
+#include <qgsvectorcolorrampv2.h>
+%End
+
+public:
+ virtual ~QgsVectorColorRampV2();
+
+ virtual QColor color(double value) const = 0;
+
+ virtual QString type() const = 0;
+
+ virtual QgsVectorColorRampV2* clone() const = 0;
+
+ virtual QgsStringMap properties() const = 0;
+
+};
Modified: branches/symbology-ng-branch/python/gui/gui.sip
===================================================================
--- branches/symbology-ng-branch/python/gui/gui.sip 2009-05-13 11:23:29 UTC (rev 10779)
+++ branches/symbology-ng-branch/python/gui/gui.sip 2009-05-13 11:28:16 UTC (rev 10780)
@@ -27,3 +27,4 @@
%Include qgsrubberband.sip
%Include qgsvertexmarker.sip
+%Include symbology-ng-gui.sip
Added: branches/symbology-ng-branch/python/gui/symbology-ng-gui.sip
===================================================================
--- branches/symbology-ng-branch/python/gui/symbology-ng-gui.sip (rev 0)
+++ branches/symbology-ng-branch/python/gui/symbology-ng-gui.sip 2009-05-13 11:28:16 UTC (rev 10780)
@@ -0,0 +1,92 @@
+
+
+class QgsSymbolV2PropertiesDialog : QDialog //, private Ui::DlgSymbolV2Properties
+{
+%TypeHeaderCode
+#include <qgssymbolv2propertiesdialog.h>
+%End
+
+public:
+ QgsSymbolV2PropertiesDialog(QgsSymbolV2* symbol, QWidget* parent = NULL);
+
+
+public slots:
+ void moveLayerDown();
+ void moveLayerUp();
+
+ void addLayer();
+ void removeLayer();
+
+ void lockLayer();
+
+ void layerTypeChanged();
+
+ void layerChanged();
+
+};
+
+
+
+class QgsRendererV2PropertiesDialog : QDialog //, private Ui::QgsRendererV2PropsDialogBase
+{
+%TypeHeaderCode
+#include <qgsrendererv2propertiesdialog.h>
+%End
+
+public:
+ QgsRendererV2PropertiesDialog(QgsVectorLayer* layer, QgsStyleV2* style, QWidget* parent = NULL);
+
+public slots:
+ void changeSingleSymbol();
+ void updateRenderer();
+
+ void categoryColumnChanged();
+ void categoriesDoubleClicked(const QModelIndex & idx);
+ void addCategories();
+ void deleteCategory();
+ void deleteAllCategories();
+};
+
+
+
+class QgsStyleV2ManagerDialog : QDialog //, private Ui::QgsStyleV2ManagerDialogBase
+{
+%TypeHeaderCode
+#include <qgsstylev2managerdialog.h>
+%End
+
+public:
+ QgsStyleV2ManagerDialog(QgsStyleV2* style, QString styleFilename, QWidget* parent = NULL);
+
+public slots:
+ void addItem();
+ void editItem();
+ void removeItem();
+};
+
+
+class QgsSymbolV2SelectorDialog : QDialog //, private Ui::QgsSymbolV2SelectorDialogBase
+{
+%TypeHeaderCode
+#include <qgssymbolv2selectordialog.h>
+%End
+
+public:
+ QgsSymbolV2SelectorDialog(QgsSymbolV2* symbol, QgsStyleV2* style, QWidget* parent = NULL);
+
+protected:
+ void populateSymbolView();
+ void updateSymbolPreview();
+ void updateSymbolColor();
+ void updateSymbolInfo();
+
+
+public slots:
+ void changeSymbolProperties();
+ void setSymbolFromStyle(const QModelIndex & index);
+ void setSymbolColor();
+ void setMarkerAngle(double angle);
+ void setMarkerSize(int size);
+ void setLineWidth(int width);
+
+};
More information about the QGIS-commit
mailing list