[QGIS Commit] r12116 - in branches/symbology-ng-branch:
images/themes/default python/gui src/app
src/core/symbology-ng src/gui src/gui/symbology-ng src/ui
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Sat Nov 14 20:48:36 EST 2009
Author: wonder
Date: 2009-11-14 20:48:35 -0500 (Sat, 14 Nov 2009)
New Revision: 12116
Added:
branches/symbology-ng-branch/images/themes/default/rendererCategorizedSymbol.png
branches/symbology-ng-branch/images/themes/default/rendererGraduatedSymbol.png
branches/symbology-ng-branch/images/themes/default/rendererSingleSymbol.png
branches/symbology-ng-branch/src/gui/symbology-ng/qgscategorizedsymbolrendererv2widget.cpp
branches/symbology-ng-branch/src/gui/symbology-ng/qgscategorizedsymbolrendererv2widget.h
branches/symbology-ng-branch/src/gui/symbology-ng/qgsgraduatedsymbolrendererv2widget.cpp
branches/symbology-ng-branch/src/gui/symbology-ng/qgsgraduatedsymbolrendererv2widget.h
branches/symbology-ng-branch/src/gui/symbology-ng/qgsrendererv2widget.cpp
branches/symbology-ng-branch/src/gui/symbology-ng/qgsrendererv2widget.h
branches/symbology-ng-branch/src/gui/symbology-ng/qgssinglesymbolrendererv2widget.cpp
branches/symbology-ng-branch/src/gui/symbology-ng/qgssinglesymbolrendererv2widget.h
branches/symbology-ng-branch/src/ui/qgscategorizedsymbolrendererv2widget.ui
branches/symbology-ng-branch/src/ui/qgsgraduatedsymbolrendererv2widget.ui
Modified:
branches/symbology-ng-branch/python/gui/symbology-ng-gui.sip
branches/symbology-ng-branch/src/app/qgsvectorlayerproperties.cpp
branches/symbology-ng-branch/src/core/symbology-ng/qgsrendererv2.cpp
branches/symbology-ng-branch/src/core/symbology-ng/qgsrendererv2registry.cpp
branches/symbology-ng-branch/src/core/symbology-ng/qgsrendererv2registry.h
branches/symbology-ng-branch/src/gui/CMakeLists.txt
branches/symbology-ng-branch/src/gui/symbology-ng/qgsrendererv2propertiesdialog.cpp
branches/symbology-ng-branch/src/gui/symbology-ng/qgsrendererv2propertiesdialog.h
branches/symbology-ng-branch/src/gui/symbology-ng/qgssymbollayerv2widget.h
branches/symbology-ng-branch/src/ui/qgsrendererv2propsdialogbase.ui
Log:
Renderer properties dialog completely refactored into several classes and made generic to be able to handle any custom renderer.
Added: branches/symbology-ng-branch/images/themes/default/rendererCategorizedSymbol.png
===================================================================
(Binary files differ)
Property changes on: branches/symbology-ng-branch/images/themes/default/rendererCategorizedSymbol.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: branches/symbology-ng-branch/images/themes/default/rendererGraduatedSymbol.png
===================================================================
(Binary files differ)
Property changes on: branches/symbology-ng-branch/images/themes/default/rendererGraduatedSymbol.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: branches/symbology-ng-branch/images/themes/default/rendererSingleSymbol.png
===================================================================
(Binary files differ)
Property changes on: branches/symbology-ng-branch/images/themes/default/rendererSingleSymbol.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Modified: branches/symbology-ng-branch/python/gui/symbology-ng-gui.sip
===================================================================
--- branches/symbology-ng-branch/python/gui/symbology-ng-gui.sip 2009-11-15 00:21:19 UTC (rev 12115)
+++ branches/symbology-ng-branch/python/gui/symbology-ng-gui.sip 2009-11-15 01:48:35 UTC (rev 12116)
@@ -26,7 +26,6 @@
};
-
class QgsRendererV2PropertiesDialog : QDialog //, private Ui::QgsRendererV2PropsDialogBase
{
%TypeHeaderCode
@@ -34,21 +33,25 @@
%End
public:
- QgsRendererV2PropertiesDialog(QgsVectorLayer* layer, QgsStyleV2* style, QWidget* parent = NULL, bool embedded = false);
-
+ QgsRendererV2PropertiesDialog(QgsVectorLayer* layer, QgsStyleV2* style, bool embedded = false);
+
public slots:
- void changeSingleSymbol();
- void updateRenderer();
-
- void categoryColumnChanged();
- void categoriesDoubleClicked(const QModelIndex & idx);
- void addCategories();
- void deleteCategory();
- void deleteAllCategories();
+ //! called when user changes renderer type
+ void rendererChanged();
+
+ void apply();
+ void onOK();
+
+ void showSymbolLevels();
+
+protected:
+
+ //! Reimplements dialog keyPress event so we can ignore it
+ void keyPressEvent( QKeyEvent * event );
+
};
-
class QgsStyleV2ManagerDialog : QDialog //, private Ui::QgsStyleV2ManagerDialogBase
{
%TypeHeaderCode
Modified: branches/symbology-ng-branch/src/app/qgsvectorlayerproperties.cpp
===================================================================
--- branches/symbology-ng-branch/src/app/qgsvectorlayerproperties.cpp 2009-11-15 00:21:19 UTC (rev 12115)
+++ branches/symbology-ng-branch/src/app/qgsvectorlayerproperties.cpp 2009-11-15 01:48:35 UTC (rev 12116)
@@ -475,7 +475,7 @@
if (layer->isUsingRendererV2())
{
- mRendererDialog = new QgsRendererV2PropertiesDialog(layer, QgsStyleV2::defaultStyle(), NULL, true);
+ mRendererDialog = new QgsRendererV2PropertiesDialog(layer, QgsStyleV2::defaultStyle(), true);
// hide unused widgets
legendtypecombobox->hide();
Modified: branches/symbology-ng-branch/src/core/symbology-ng/qgsrendererv2.cpp
===================================================================
--- branches/symbology-ng-branch/src/core/symbology-ng/qgsrendererv2.cpp 2009-11-15 00:21:19 UTC (rev 12115)
+++ branches/symbology-ng-branch/src/core/symbology-ng/qgsrendererv2.cpp 2009-11-15 01:48:35 UTC (rev 12116)
@@ -266,7 +266,7 @@
// load renderer
QString rendererType = element.attribute("type");
- QgsRendererV2CreateFunc pfCreate = QgsRendererV2Registry::instance()->rendererCreateFunction(rendererType);
+ QgsRendererV2CreateFunc pfCreate = QgsRendererV2Registry::instance()->rendererMetadata(rendererType).createFunction();
// unknown renderer type?
if (pfCreate == NULL)
Modified: branches/symbology-ng-branch/src/core/symbology-ng/qgsrendererv2registry.cpp
===================================================================
--- branches/symbology-ng-branch/src/core/symbology-ng/qgsrendererv2registry.cpp 2009-11-15 00:21:19 UTC (rev 12115)
+++ branches/symbology-ng-branch/src/core/symbology-ng/qgsrendererv2registry.cpp 2009-11-15 01:48:35 UTC (rev 12116)
@@ -11,9 +11,18 @@
QgsRendererV2Registry::QgsRendererV2Registry()
{
// add default renderers
- addRenderer("singleSymbol", QgsSingleSymbolRendererV2::create);
- addRenderer("categorizedSymbol", QgsCategorizedSymbolRendererV2::create);
- addRenderer("graduatedSymbol", QgsGraduatedSymbolRendererV2::create);
+ addRenderer(QgsRendererV2Metadata("singleSymbol",
+ QObject::tr("Single Symbol"),
+ QgsSingleSymbolRendererV2::create,
+ "rendererSingleSymbol.png"));
+ addRenderer(QgsRendererV2Metadata("categorizedSymbol",
+ QObject::tr("Categorized"),
+ QgsCategorizedSymbolRendererV2::create,
+ "rendererCategorizedSymbol.png"));
+ addRenderer(QgsRendererV2Metadata("graduatedSymbol",
+ QObject::tr("Graduated"),
+ QgsGraduatedSymbolRendererV2::create,
+ "rendererGraduatedSymbol.png"));
}
QgsRendererV2Registry* QgsRendererV2Registry::instance()
@@ -25,12 +34,10 @@
}
-bool QgsRendererV2Registry::addRenderer(QString rendererName, QgsRendererV2CreateFunc pfCreate)
+void QgsRendererV2Registry::addRenderer(const QgsRendererV2Metadata& metadata)
{
- if (mRenderers.contains(rendererName))
- return false;
- mRenderers.insert(rendererName, pfCreate);
- return true;
+ mRenderers[metadata.name()] = metadata;
+ mRenderersOrder << metadata.name();
}
bool QgsRendererV2Registry::removeRenderer(QString rendererName)
@@ -38,10 +45,24 @@
if (!mRenderers.contains(rendererName))
return false;
mRenderers.remove(rendererName);
+ mRenderersOrder.removeAll(rendererName);
return true;
}
-QgsRendererV2CreateFunc QgsRendererV2Registry::rendererCreateFunction(QString rendererName)
+QgsRendererV2Metadata QgsRendererV2Registry::rendererMetadata(QString rendererName)
{
- return mRenderers.value(rendererName, NULL);
+ return mRenderers.value(rendererName);
}
+
+bool QgsRendererV2Registry::setRendererWidgetFunction(QString name, QgsRendererV2WidgetFunc f)
+{
+ if (!mRenderers.contains(name))
+ return false;
+ mRenderers[name].setWidgetFunction(f);
+ return true;
+}
+
+QStringList QgsRendererV2Registry::renderersList()
+{
+ return mRenderersOrder;
+}
Modified: branches/symbology-ng-branch/src/core/symbology-ng/qgsrendererv2registry.h
===================================================================
--- branches/symbology-ng-branch/src/core/symbology-ng/qgsrendererv2registry.h 2009-11-15 00:21:19 UTC (rev 12115)
+++ branches/symbology-ng-branch/src/core/symbology-ng/qgsrendererv2registry.h 2009-11-15 01:48:35 UTC (rev 12116)
@@ -2,12 +2,53 @@
#define QGSRENDERERV2REGISTRY_H
#include <QMap>
+#include <QStringList>
class QgsFeatureRendererV2;
class QDomElement;
+class QgsVectorLayer;
+class QgsStyleV2;
+class QgsRendererV2Widget;
typedef QgsFeatureRendererV2* (*QgsRendererV2CreateFunc)(QDomElement&);
+typedef QgsRendererV2Widget* (*QgsRendererV2WidgetFunc)(QgsVectorLayer*, QgsStyleV2*, QgsFeatureRendererV2*);
+class QgsRendererV2Metadata
+{
+public:
+ /** construct invalid metadata */
+ QgsRendererV2Metadata()
+ : mName(), mVisibleName(), mCreateFunc(NULL), mIconName(), mWidgetFunc(NULL) {}
+
+ /** construct metadata */
+ QgsRendererV2Metadata(QString name,
+ QString visibleName,
+ QgsRendererV2CreateFunc pfCreate,
+ QString iconName = QString(),
+ QgsRendererV2WidgetFunc pfWidget = NULL)
+ : mName(name), mVisibleName(visibleName), mCreateFunc(pfCreate), mIconName(iconName), mWidgetFunc(pfWidget) {}
+
+ QString name() const { return mName; }
+ QString visibleName() const { return mVisibleName; }
+ QString iconName() const { return mIconName; }
+ QgsRendererV2CreateFunc createFunction() const { return mCreateFunc; }
+ QgsRendererV2WidgetFunc widgetFunction() const { return mWidgetFunc; }
+
+ void setWidgetFunction(QgsRendererV2WidgetFunc f) { mWidgetFunc = f; }
+
+protected:
+ //! name used within QGIS for identification (the same what renderer's type() returns)
+ QString mName;
+ //! name visible for users (translatable)
+ QString mVisibleName;
+ //! pointer to function that creates an instance of the renderer when loading project / style
+ QgsRendererV2CreateFunc mCreateFunc;
+ //! icon to be shown in the renderer properties dialog
+ QString mIconName;
+ //! pointer to function that creates a widget for configuration of renderer's params
+ QgsRendererV2WidgetFunc mWidgetFunc;
+};
+
/**
Registry of renderers.
@@ -19,19 +60,31 @@
static QgsRendererV2Registry* instance();
- bool addRenderer(QString rendererName, QgsRendererV2CreateFunc pfCreate);
+ //! add a renderer to registry
+ void addRenderer(const QgsRendererV2Metadata& metadata);
+ //! remove renderer from registry
bool removeRenderer(QString rendererName);
- QgsRendererV2CreateFunc rendererCreateFunction(QString rendererName);
+ //! get factory method for particular renderer
+ QgsRendererV2Metadata rendererMetadata(QString rendererName);
+ //! assign a widget factory to particular renderer
+ bool setRendererWidgetFunction(QString name, QgsRendererV2WidgetFunc f);
+
+ //! return a list of available renderers
+ QStringList renderersList();
+
protected:
//! protected constructor
QgsRendererV2Registry();
static QgsRendererV2Registry* mInstance;
- QMap<QString, QgsRendererV2CreateFunc> mRenderers;
+ QMap<QString, QgsRendererV2Metadata> mRenderers;
+
+ //! list to keep order in which renderers have been added
+ QStringList mRenderersOrder;
};
#endif // QGSRENDERERV2REGISTRY_H
Modified: branches/symbology-ng-branch/src/gui/CMakeLists.txt
===================================================================
--- branches/symbology-ng-branch/src/gui/CMakeLists.txt 2009-11-15 00:21:19 UTC (rev 12115)
+++ branches/symbology-ng-branch/src/gui/CMakeLists.txt 2009-11-15 01:48:35 UTC (rev 12116)
@@ -5,6 +5,10 @@
symbology-ng/qgspenstylecombobox.cpp
symbology-ng/qgssymbollayerv2widget.cpp
symbology-ng/qgssymbolv2propertiesdialog.cpp
+symbology-ng/qgsrendererv2widget.cpp
+symbology-ng/qgssinglesymbolrendererv2widget.cpp
+symbology-ng/qgscategorizedsymbolrendererv2widget.cpp
+symbology-ng/qgsgraduatedsymbolrendererv2widget.cpp
symbology-ng/qgsrendererv2propertiesdialog.cpp
symbology-ng/qgsstylev2managerdialog.cpp
symbology-ng/qgssymbollevelsv2dialog.cpp
@@ -44,6 +48,9 @@
symbology-ng/qgssymbollayerv2widget.h
symbology-ng/qgssymbolv2propertiesdialog.h
+symbology-ng/qgssinglesymbolrendererv2widget.h
+symbology-ng/qgscategorizedsymbolrendererv2widget.h
+symbology-ng/qgsgraduatedsymbolrendererv2widget.h
symbology-ng/qgsrendererv2propertiesdialog.h
symbology-ng/qgsstylev2managerdialog.h
symbology-ng/qgssymbollevelsv2dialog.h
Added: branches/symbology-ng-branch/src/gui/symbology-ng/qgscategorizedsymbolrendererv2widget.cpp
===================================================================
--- branches/symbology-ng-branch/src/gui/symbology-ng/qgscategorizedsymbolrendererv2widget.cpp (rev 0)
+++ branches/symbology-ng-branch/src/gui/symbology-ng/qgscategorizedsymbolrendererv2widget.cpp 2009-11-15 01:48:35 UTC (rev 12116)
@@ -0,0 +1,328 @@
+#include "qgscategorizedsymbolrendererv2widget.h"
+
+#include "qgscategorizedsymbolrendererv2.h"
+
+#include "qgssymbolv2.h"
+#include "qgssymbollayerv2utils.h"
+#include "qgsvectorcolorrampv2.h"
+#include "qgsstylev2.h"
+
+#include "qgssymbolv2selectordialog.h"
+
+#include "qgsvectorlayer.h"
+#include "qgsvectordataprovider.h" // for uniqueValues
+
+#include <QStandardItemModel>
+#include <QStandardItem>
+
+
+QgsRendererV2Widget* QgsCategorizedSymbolRendererV2Widget::create(QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer)
+{
+ return new QgsCategorizedSymbolRendererV2Widget(layer, style, renderer);
+}
+
+QgsCategorizedSymbolRendererV2Widget::QgsCategorizedSymbolRendererV2Widget(QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer)
+ : QgsRendererV2Widget(layer, style)
+{
+
+ // try to recognize the previous renderer
+ // (null renderer means "no previous renderer")
+ if (!renderer || renderer->type() != "categorizedSymbol")
+ {
+ // we're not going to use it - so let's delete the renderer
+ delete renderer;
+
+ mRenderer = new QgsCategorizedSymbolRendererV2("", QgsCategoryList());
+ }
+ else
+ {
+ mRenderer = static_cast<QgsCategorizedSymbolRendererV2*>(renderer);
+ }
+
+ // setup user interface
+ setupUi(this);
+
+ populateColumns();
+ populateColorRamps();
+ QStandardItemModel* m = new QStandardItemModel(this);
+ QStringList labels;
+ labels << "Value" << "Label";
+ m->setHorizontalHeaderLabels(labels);
+ viewCategories->setModel(m);
+
+ mCategorizedSymbol = QgsSymbolV2::defaultSymbol(mLayer->geometryType());
+
+ connect(cboCategorizedColumn, SIGNAL(currentIndexChanged(int)), this, SLOT(categoryColumnChanged()));
+
+ connect(viewCategories, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(categoriesDoubleClicked(const QModelIndex &)));
+
+ connect(btnChangeCategorizedSymbol, SIGNAL(clicked()), this, SLOT(changeCategorizedSymbol()));
+ connect(btnAddCategories, SIGNAL(clicked()), this, SLOT(addCategories()));
+ connect(btnDeleteCategory, SIGNAL(clicked()), this, SLOT(deleteCategory()));
+ connect(btnDeleteAllCategories, SIGNAL(clicked()), this, SLOT(deleteAllCategories()));
+
+ // update GUI from renderer
+ updateUiFromRenderer();
+}
+
+QgsCategorizedSymbolRendererV2Widget::~QgsCategorizedSymbolRendererV2Widget()
+{
+ delete mRenderer;
+}
+
+void QgsCategorizedSymbolRendererV2Widget::updateUiFromRenderer()
+{
+
+ updateCategorizedSymbolIcon();
+ populateCategories();
+
+ // set column
+ disconnect(cboCategorizedColumn, SIGNAL(currentIndexChanged(int)), this, SLOT(categoryColumnChanged()));
+ QString attrName = mRenderer->classAttribute();
+ int idx = cboCategorizedColumn->findText(attrName, Qt::MatchExactly);
+ cboCategorizedColumn->setCurrentIndex(idx >= 0 ? idx : 0);
+ connect(cboCategorizedColumn, SIGNAL(currentIndexChanged(int)), this, SLOT(categoryColumnChanged()));
+
+ // set source symbol
+ if (mRenderer->sourceSymbol())
+ {
+ delete mCategorizedSymbol;
+ mCategorizedSymbol = mRenderer->sourceSymbol()->clone();
+ updateCategorizedSymbolIcon();
+ }
+
+ // set source color ramp
+ if (mRenderer->sourceColorRamp())
+ {
+ QSize rampIconSize(50,16);
+ QIcon icon = QgsSymbolLayerV2Utils::colorRampPreviewIcon(mRenderer->sourceColorRamp(), rampIconSize);
+ if (cboCategorizedColorRamp->itemText(0) == "[source]")
+ cboCategorizedColorRamp->setItemIcon(0, icon);
+ else
+ cboCategorizedColorRamp->insertItem(0, icon, "[source]");
+ cboCategorizedColorRamp->setCurrentIndex(0);
+ }
+
+}
+
+QgsFeatureRendererV2* QgsCategorizedSymbolRendererV2Widget::renderer()
+{
+ return mRenderer;
+}
+
+void QgsCategorizedSymbolRendererV2Widget::changeCategorizedSymbol()
+{
+ QgsSymbolV2SelectorDialog dlg(mCategorizedSymbol, mStyle, this);
+ if (!dlg.exec())
+ return;
+
+ updateCategorizedSymbolIcon();
+}
+
+void QgsCategorizedSymbolRendererV2Widget::updateCategorizedSymbolIcon()
+{
+ QIcon icon = QgsSymbolLayerV2Utils::symbolPreviewIcon(mCategorizedSymbol, btnChangeCategorizedSymbol->iconSize());
+ btnChangeCategorizedSymbol->setIcon(icon);
+}
+
+
+void QgsCategorizedSymbolRendererV2Widget::populateCategories()
+{
+ QStandardItemModel* m = qobject_cast<QStandardItemModel*>(viewCategories->model());
+ m->clear();
+
+ QStringList labels;
+ labels << "Value" << "Label";
+ m->setHorizontalHeaderLabels(labels);
+
+ QSize iconSize(16,16);
+
+ int i, count = mRenderer->categories().count();
+
+ // TODO: sort?? utils.sortVariantList(keys);
+
+ for (i = 0; i < count; i++)
+ {
+ const QgsRendererCategoryV2& cat = mRenderer->categories()[i];
+ QVariant k = cat.value();
+
+ QIcon icon = QgsSymbolLayerV2Utils::symbolPreviewIcon(cat.symbol(), iconSize);
+ QStandardItem* item = new QStandardItem(icon, k.toString());
+ item->setData(k); // set attribute value as user role
+ item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+
+ QList<QStandardItem *> list;
+ list << item << new QStandardItem(cat.label());
+ m->appendRow( list );
+ }
+}
+
+void QgsCategorizedSymbolRendererV2Widget::populateColumns()
+{
+ cboCategorizedColumn->clear();
+ const QgsFieldMap& flds = mLayer->pendingFields();
+ QgsFieldMap::ConstIterator it = flds.begin();
+ for ( ; it != flds.end(); ++it)
+ {
+ cboCategorizedColumn->addItem(it->name());
+ }
+}
+
+void QgsCategorizedSymbolRendererV2Widget::populateColorRamps()
+{
+ QSize rampIconSize(50,16);
+ cboCategorizedColorRamp->setIconSize(rampIconSize);
+
+ QStringList rampNames = mStyle->colorRampNames();
+ for (QStringList::iterator it = rampNames.begin(); it != rampNames.end(); ++it)
+ {
+ QgsVectorColorRampV2* ramp = mStyle->colorRamp(*it);
+ QIcon icon = QgsSymbolLayerV2Utils::colorRampPreviewIcon(ramp, rampIconSize);
+ cboCategorizedColorRamp->addItem(icon, *it);
+ delete ramp;
+ }
+}
+
+
+void QgsCategorizedSymbolRendererV2Widget::categoryColumnChanged()
+{
+ deleteAllCategories();
+}
+
+void QgsCategorizedSymbolRendererV2Widget::categoriesDoubleClicked(const QModelIndex & idx)
+{
+ if (idx.isValid() && idx.column() == 0)
+ changeCategorySymbol();
+}
+
+void QgsCategorizedSymbolRendererV2Widget::changeCategorySymbol()
+{
+ QVariant k = currentCategory();
+ if (!k.isValid())
+ return;
+
+ int catIdx = mRenderer->categoryIndexForValue(k);
+ QgsSymbolV2* newSymbol = mRenderer->categories()[catIdx].symbol()->clone();
+
+ QgsSymbolV2SelectorDialog dlg(newSymbol, mStyle, this);
+ if (!dlg.exec())
+ {
+ delete newSymbol;
+ return;
+ }
+
+ mRenderer->updateCategorySymbol(catIdx, newSymbol);
+
+ populateCategories();
+}
+
+
+
+
+static void _createCategories(QgsCategoryList& cats, QList<QVariant>& values, QgsSymbolV2* symbol, QgsVectorColorRampV2* ramp)
+{
+ // sort the categories first
+ // TODO: sortVariantList(values);
+
+ int num = values.count();
+
+ for (int i = 0; i < num; i++)
+ {
+ QVariant value = values[i];
+ double x = i / (double) num;
+ QgsSymbolV2* newSymbol = symbol->clone();
+ newSymbol->setColor( ramp->color(x) );
+
+ cats.append( QgsRendererCategoryV2(value, newSymbol, value.toString()) );
+ }
+
+}
+
+void QgsCategorizedSymbolRendererV2Widget::addCategories()
+{
+ QString attrName = cboCategorizedColumn->currentText();
+ int idx = QgsFeatureRendererV2::fieldNameIndex(mLayer->pendingFields(), attrName);
+ QList<QVariant> unique_vals;
+ mLayer->dataProvider()->uniqueValues(idx, unique_vals);
+
+ //DlgAddCategories dlg(mStyle, createDefaultSymbol(), unique_vals, this);
+ //if (!dlg.exec())
+ // return;
+
+ QgsVectorColorRampV2* ramp = NULL;
+ QString rampName = cboCategorizedColorRamp->currentText();
+ if (rampName == "[source]")
+ ramp = mRenderer->sourceColorRamp()->clone();
+ else
+ ramp = mStyle->colorRamp( rampName );
+
+ QgsCategoryList cats;
+ _createCategories(cats, unique_vals, mCategorizedSymbol, ramp );
+
+ // TODO: if not all categories are desired, delete some!
+ /*
+ if (not dlg.radAllCats.isChecked())
+ {
+ cats2 = {}
+ for item in dlg.listCategories.selectedItems():
+ for k,c in cats.iteritems():
+ if item.text() == k.toString():
+ break
+ cats2[k] = c
+ cats = cats2
+ }
+ */
+
+ // recreate renderer
+ delete mRenderer;
+ mRenderer = new QgsCategorizedSymbolRendererV2(attrName, cats);
+ mRenderer->setSourceSymbol(mCategorizedSymbol->clone());
+ mRenderer->setSourceColorRamp(ramp->clone());
+
+ populateCategories();
+}
+
+int QgsCategorizedSymbolRendererV2Widget::currentCategoryRow()
+{
+ QModelIndex idx = viewCategories->selectionModel()->currentIndex();
+ if (!idx.isValid())
+ return -1;
+ return idx.row();
+}
+
+QVariant QgsCategorizedSymbolRendererV2Widget::currentCategory()
+{
+ int row = currentCategoryRow();
+ if (row == -1)
+ return QVariant();
+ QStandardItemModel* m = qobject_cast<QStandardItemModel*>(viewCategories->model());
+ return m->item(row)->data();
+}
+
+void QgsCategorizedSymbolRendererV2Widget::deleteCategory()
+{
+ QVariant k = currentCategory();
+ if (!k.isValid())
+ return;
+
+ const QgsCategoryList& cats = mRenderer->categories();
+ QgsCategoryList::ConstIterator it = cats.begin();
+
+ for ( ; it != cats.end(); ++it)
+ {
+ if (k.toString() == it->value().toString())
+ {
+ int idx = mRenderer->categoryIndexForValue(k);
+ mRenderer->deleteCategory(idx);
+ }
+ }
+
+ populateCategories();
+}
+
+void QgsCategorizedSymbolRendererV2Widget::deleteAllCategories()
+{
+ mRenderer->deleteAllCategories();
+ populateCategories();
+}
+
Added: branches/symbology-ng-branch/src/gui/symbology-ng/qgscategorizedsymbolrendererv2widget.h
===================================================================
--- branches/symbology-ng-branch/src/gui/symbology-ng/qgscategorizedsymbolrendererv2widget.h (rev 0)
+++ branches/symbology-ng-branch/src/gui/symbology-ng/qgscategorizedsymbolrendererv2widget.h 2009-11-15 01:48:35 UTC (rev 12116)
@@ -0,0 +1,61 @@
+#ifndef QGSCATEGORIZEDSYMBOLRENDERERV2WIDGET_H
+#define QGSCATEGORIZEDSYMBOLRENDERERV2WIDGET_H
+
+#include "qgsrendererv2widget.h"
+
+class QgsCategorizedSymbolRendererV2;
+
+#include "ui_qgscategorizedsymbolrendererv2widget.h"
+
+class QgsCategorizedSymbolRendererV2Widget : public QgsRendererV2Widget, private Ui::QgsCategorizedSymbolRendererV2Widget
+{
+ Q_OBJECT
+
+public:
+
+ static QgsRendererV2Widget* create(QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer);
+
+ QgsCategorizedSymbolRendererV2Widget(QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer);
+ ~QgsCategorizedSymbolRendererV2Widget();
+
+ virtual QgsFeatureRendererV2* renderer();
+
+public slots:
+ void changeCategorizedSymbol();
+ void categoryColumnChanged();
+ void categoriesDoubleClicked(const QModelIndex & idx);
+ void addCategories();
+ void deleteCategory();
+ void deleteAllCategories();
+
+protected:
+
+ void updateUiFromRenderer();
+
+ void updateCategorizedSymbolIcon();
+
+ //! populate categories view
+ void populateCategories();
+
+ //! populate column combo
+ void populateColumns();
+
+ void populateColorRamps();
+
+ //! return row index for the currently selected category (-1 if on no selection)
+ int currentCategoryRow();
+
+ //! return key for the currently selected category
+ QVariant currentCategory();
+
+ void changeCategorySymbol();
+
+protected:
+ QgsCategorizedSymbolRendererV2* mRenderer;
+
+ QgsSymbolV2* mCategorizedSymbol;
+};
+
+
+
+#endif // QGSCATEGORIZEDSYMBOLRENDERERV2WIDGET_H
Added: branches/symbology-ng-branch/src/gui/symbology-ng/qgsgraduatedsymbolrendererv2widget.cpp
===================================================================
--- branches/symbology-ng-branch/src/gui/symbology-ng/qgsgraduatedsymbolrendererv2widget.cpp (rev 0)
+++ branches/symbology-ng-branch/src/gui/symbology-ng/qgsgraduatedsymbolrendererv2widget.cpp 2009-11-15 01:48:35 UTC (rev 12116)
@@ -0,0 +1,256 @@
+#include "qgsgraduatedsymbolrendererv2widget.h"
+
+#include "qgssymbolv2.h"
+#include "qgssymbollayerv2utils.h"
+#include "qgsvectorcolorrampv2.h"
+#include "qgsstylev2.h"
+
+#include "qgsvectorlayer.h"
+
+#include "qgsgraduatedsymbolrendererv2.h"
+
+#include "qgssymbolv2selectordialog.h"
+
+#include <QStandardItemModel>
+#include <QStandardItem>
+
+
+QgsRendererV2Widget* QgsGraduatedSymbolRendererV2Widget::create(QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer)
+{
+ return new QgsGraduatedSymbolRendererV2Widget(layer, style, renderer);
+}
+
+QgsGraduatedSymbolRendererV2Widget::QgsGraduatedSymbolRendererV2Widget(QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer)
+ : QgsRendererV2Widget(layer, style)
+{
+
+ // try to recognize the previous renderer
+ // (null renderer means "no previous renderer")
+ if (!renderer || renderer->type() != "graduatedSymbol")
+ {
+ // we're not going to use it - so let's delete the renderer
+ delete renderer;
+
+ mRenderer = new QgsGraduatedSymbolRendererV2("", QgsRangeList());
+ }
+ else
+ {
+ mRenderer = static_cast<QgsGraduatedSymbolRendererV2*>(renderer);
+ }
+
+ // setup user interface
+ setupUi(this);
+
+ populateColumns();
+ populateColorRamps();
+ QStandardItemModel* mg = new QStandardItemModel(this);
+ QStringList labels;
+ labels << "Range" << "Label";
+ mg->setHorizontalHeaderLabels(labels);
+ viewGraduated->setModel(mg);
+
+ mGraduatedSymbol = QgsSymbolV2::defaultSymbol(mLayer->geometryType());
+
+ connect(viewGraduated, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(rangesDoubleClicked(const QModelIndex &)));
+
+ connect(btnGraduatedClassify, SIGNAL(clicked()), this, SLOT(classifyGraduated()));
+ connect(btnChangeGraduatedSymbol, SIGNAL(clicked()), this, SLOT(changeGraduatedSymbol()));
+
+ // initialize from previously set renderer
+ updateUiFromRenderer();
+}
+
+QgsGraduatedSymbolRendererV2Widget::~QgsGraduatedSymbolRendererV2Widget()
+{
+ delete mRenderer;
+}
+
+QgsFeatureRendererV2* QgsGraduatedSymbolRendererV2Widget::renderer()
+{
+ return mRenderer;
+}
+
+
+void QgsGraduatedSymbolRendererV2Widget::updateUiFromRenderer()
+{
+
+ updateGraduatedSymbolIcon();
+ populateRanges();
+
+ // update UI from the graduated renderer (update combo boxes, view)
+ if (mRenderer->mode() < cboGraduatedMode->count())
+ cboGraduatedMode->setCurrentIndex( mRenderer->mode() );
+ if (mRenderer->ranges().count())
+ spinGraduatedClasses->setValue( mRenderer->ranges().count() );
+
+ // set column
+ //disconnect(cboGraduatedColumn, SIGNAL(currentIndexChanged(int)), this, SLOT(graduatedColumnChanged()));
+ QString attrName = mRenderer->classAttribute();
+ int idx = cboGraduatedColumn->findText(attrName, Qt::MatchExactly);
+ cboGraduatedColumn->setCurrentIndex(idx >= 0 ? idx : 0);
+ //connect(cboGraduatedColumn, SIGNAL(currentIndexChanged(int)), this, SLOT(graduatedColumnChanged()));
+
+ // set source symbol
+ if (mRenderer->sourceSymbol())
+ {
+ delete mGraduatedSymbol;
+ mGraduatedSymbol = mRenderer->sourceSymbol()->clone();
+ updateGraduatedSymbolIcon();
+ }
+
+ // set source color ramp
+ if (mRenderer->sourceColorRamp())
+ {
+ QSize rampIconSize(50,16);
+ QIcon icon = QgsSymbolLayerV2Utils::colorRampPreviewIcon(mRenderer->sourceColorRamp(), rampIconSize);
+ if (cboGraduatedColorRamp->itemText(0) == "[source]")
+ cboGraduatedColorRamp->setItemIcon(0, icon);
+ else
+ cboGraduatedColorRamp->insertItem(0, icon, "[source]");
+ cboGraduatedColorRamp->setCurrentIndex(0);
+ }
+
+}
+
+
+
+void QgsGraduatedSymbolRendererV2Widget::populateColumns()
+{
+ cboGraduatedColumn->clear();
+ const QgsFieldMap& flds = mLayer->pendingFields();
+ QgsFieldMap::ConstIterator it = flds.begin();
+ for ( ; it != flds.end(); ++it)
+ {
+ if (it->type() == QVariant::Double || it->type() == QVariant::Int)
+ cboGraduatedColumn->addItem(it->name());
+ }
+}
+
+
+void QgsGraduatedSymbolRendererV2Widget::populateColorRamps()
+{
+ QSize rampIconSize(50,16);
+ cboGraduatedColorRamp->setIconSize(rampIconSize);
+
+ QStringList rampNames = mStyle->colorRampNames();
+ for (QStringList::iterator it = rampNames.begin(); it != rampNames.end(); ++it)
+ {
+ QgsVectorColorRampV2* ramp = mStyle->colorRamp(*it);
+ QIcon icon = QgsSymbolLayerV2Utils::colorRampPreviewIcon(ramp, rampIconSize);
+ cboGraduatedColorRamp->addItem(icon, *it);
+ delete ramp;
+ }
+}
+
+
+
+void QgsGraduatedSymbolRendererV2Widget::classifyGraduated()
+{
+ QString attrName = cboGraduatedColumn->currentText();
+
+ int classes = spinGraduatedClasses->value();
+
+ QgsVectorColorRampV2* ramp = NULL;
+ QString rampName = cboGraduatedColorRamp->currentText();
+ if (rampName == "[source]")
+ ramp = mRenderer->sourceColorRamp()->clone();
+ else
+ ramp = mStyle->colorRamp( rampName );
+
+ QgsGraduatedSymbolRendererV2::Mode mode;
+ if (cboGraduatedMode->currentIndex() == 0)
+ mode = QgsGraduatedSymbolRendererV2::EqualInterval;
+ else
+ mode = QgsGraduatedSymbolRendererV2::Quantile;
+
+ // create and set new renderer
+ delete mRenderer;
+ mRenderer = QgsGraduatedSymbolRendererV2::createRenderer(
+ mLayer, attrName, classes, mode, mGraduatedSymbol, ramp);
+
+ populateRanges();
+}
+
+void QgsGraduatedSymbolRendererV2Widget::changeGraduatedSymbol()
+{
+ QgsSymbolV2SelectorDialog dlg(mGraduatedSymbol, mStyle, this);
+ if (!dlg.exec())
+ return;
+
+ updateGraduatedSymbolIcon();
+}
+
+void QgsGraduatedSymbolRendererV2Widget::updateGraduatedSymbolIcon()
+{
+ QIcon icon = QgsSymbolLayerV2Utils::symbolPreviewIcon(mGraduatedSymbol, btnChangeGraduatedSymbol->iconSize());
+ btnChangeGraduatedSymbol->setIcon(icon);
+}
+
+
+void QgsGraduatedSymbolRendererV2Widget::populateRanges()
+{
+
+ QStandardItemModel* m = qobject_cast<QStandardItemModel*>(viewGraduated->model());
+ m->clear();
+
+ QStringList labels;
+ labels << "Range" << "Label";
+ m->setHorizontalHeaderLabels(labels);
+
+ QSize iconSize(16,16);
+
+ int i, count = mRenderer->ranges().count();
+
+ for (i = 0; i < count; i++)
+ {
+ const QgsRendererRangeV2& range = mRenderer->ranges()[i];
+ QString rangeStr = QString::number(range.lowerValue(),'f',4) + " - " + QString::number(range.upperValue(),'f',4);
+
+ QIcon icon = QgsSymbolLayerV2Utils::symbolPreviewIcon(range.symbol(), iconSize);
+ QStandardItem* item = new QStandardItem(icon, rangeStr);
+ //item->setData(k); // set attribute value as user role
+ item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
+
+ QList<QStandardItem *> list;
+ list << item << new QStandardItem(range.label());
+ m->appendRow( list );
+ }
+
+ // make sure that the "range" column has visible context
+ viewGraduated->resizeColumnToContents(0);
+}
+
+
+/*
+int QgsRendererV2PropertiesDialog::currentRangeRow()
+{
+ QModelIndex idx = viewGraduated->selectionModel()->currentIndex();
+ if (!idx.isValid())
+ return -1;
+ return idx.row();
+}
+*/
+
+void QgsGraduatedSymbolRendererV2Widget::rangesDoubleClicked(const QModelIndex & idx)
+{
+ if (idx.isValid() && idx.column() == 0)
+ changeRangeSymbol(idx.row());
+}
+
+void QgsGraduatedSymbolRendererV2Widget::changeRangeSymbol(int rangeIdx)
+{
+
+ QgsSymbolV2* newSymbol = mRenderer->ranges()[rangeIdx].symbol()->clone();
+
+ QgsSymbolV2SelectorDialog dlg(newSymbol, mStyle, this);
+ if (!dlg.exec())
+ {
+ delete newSymbol;
+ return;
+ }
+
+ mRenderer->updateRangeSymbol(rangeIdx, newSymbol);
+
+ populateRanges();
+}
+
Added: branches/symbology-ng-branch/src/gui/symbology-ng/qgsgraduatedsymbolrendererv2widget.h
===================================================================
--- branches/symbology-ng-branch/src/gui/symbology-ng/qgsgraduatedsymbolrendererv2widget.h (rev 0)
+++ branches/symbology-ng-branch/src/gui/symbology-ng/qgsgraduatedsymbolrendererv2widget.h 2009-11-15 01:48:35 UTC (rev 12116)
@@ -0,0 +1,51 @@
+#ifndef QGSGRADUATEDSYMBOLRENDERERV2WIDGET_H
+#define QGSGRADUATEDSYMBOLRENDERERV2WIDGET_H
+
+#include "qgsrendererv2widget.h"
+
+class QgsGraduatedSymbolRendererV2;
+
+#include "ui_qgsgraduatedsymbolrendererv2widget.h"
+
+class QgsGraduatedSymbolRendererV2Widget : public QgsRendererV2Widget, private Ui::QgsGraduatedSymbolRendererV2Widget
+{
+ Q_OBJECT
+
+public:
+
+ static QgsRendererV2Widget* create(QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer);
+
+ QgsGraduatedSymbolRendererV2Widget(QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer);
+ ~QgsGraduatedSymbolRendererV2Widget();
+
+ virtual QgsFeatureRendererV2* renderer();
+
+public slots:
+ void changeGraduatedSymbol();
+ void classifyGraduated();
+ void rangesDoubleClicked(const QModelIndex & idx);
+
+protected:
+ void updateUiFromRenderer();
+
+ void updateGraduatedSymbolIcon();
+
+ //! populate column combos in categorized and graduated page
+ void populateColumns();
+
+ void populateColorRamps();
+
+ //! populate ranges of graduated symbol renderer
+ void populateRanges();
+
+ void changeRangeSymbol(int rangeIdx);
+
+
+protected:
+ QgsGraduatedSymbolRendererV2* mRenderer;
+
+ QgsSymbolV2* mGraduatedSymbol;
+};
+
+
+#endif // QGSGRADUATEDSYMBOLRENDERERV2WIDGET_H
Modified: branches/symbology-ng-branch/src/gui/symbology-ng/qgsrendererv2propertiesdialog.cpp
===================================================================
--- branches/symbology-ng-branch/src/gui/symbology-ng/qgsrendererv2propertiesdialog.cpp 2009-11-15 00:21:19 UTC (rev 12115)
+++ branches/symbology-ng-branch/src/gui/symbology-ng/qgsrendererv2propertiesdialog.cpp 2009-11-15 01:48:35 UTC (rev 12116)
@@ -1,42 +1,26 @@
#include "qgsrendererv2propertiesdialog.h"
-#include "qgssymbollayerv2utils.h"
#include "qgsrendererv2.h"
-#include "qgssymbolv2.h"
-#include "qgsvectorcolorrampv2.h"
-#include "qgsstylev2.h"
+#include "qgsrendererv2registry.h"
-#include "qgssinglesymbolrendererv2.h"
-#include "qgscategorizedsymbolrendererv2.h"
-#include "qgsgraduatedsymbolrendererv2.h"
+#include "qgsrendererv2widget.h"
+#include "qgssinglesymbolrendererv2widget.h"
+#include "qgscategorizedsymbolrendererv2widget.h"
+#include "qgsgraduatedsymbolrendererv2widget.h"
-
-#include "qgssymbolv2selectordialog.h"
#include "qgssymbollevelsv2dialog.h"
+#include "qgsapplication.h"
#include "qgslogger.h"
#include "qgsvectorlayer.h"
-#include "qgsvectordataprovider.h"
-#include <QStandardItemModel>
-#include <QStandardItem>
#include <QKeyEvent>
-QgsRendererV2PropertiesDialog::QgsRendererV2PropertiesDialog(QgsVectorLayer* layer, QgsStyleV2* style, QWidget* parent, bool embedded)
- : QDialog(parent), mStyle(style)
-{
- mLayer = layer;
-
- // if the layer doesn't use renderer V2, let's start using it!
- if (!mLayer->isUsingRendererV2())
- {
- mLayer->setRendererV2( QgsFeatureRendererV2::defaultRenderer(mLayer->geometryType()) );
- mLayer->setUsingRendererV2(true);
- }
- mRenderer = mLayer->rendererV2()->clone();
-
+QgsRendererV2PropertiesDialog::QgsRendererV2PropertiesDialog(QgsVectorLayer* layer, QgsStyleV2* style, bool embedded)
+ : mLayer(layer), mStyle(style), mActiveWidget(NULL)
+{
setupUi(this);
// can be embedded in vector layer properties
@@ -46,575 +30,139 @@
}
connect(buttonBox, SIGNAL(accepted()), this, SLOT(onOK()));
+ connect(btnSymbolLevels, SIGNAL(clicked()), this, SLOT(showSymbolLevels()));
- connect(btnSymbolLevels, SIGNAL(clicked()), this, SLOT(symbolLevels()));
-
- connect(radSingleSymbol, SIGNAL(clicked()), this, SLOT(updateRenderer()));
- connect(radCategorized, SIGNAL(clicked()), this, SLOT(updateRenderer()));
- connect(radGraduated, SIGNAL(clicked()), this, SLOT(updateRenderer()));
-
- // simple symbol page
- if (mRenderer->type() == "singleSymbol")
- mSingleSymbol = ((QgsSingleSymbolRendererV2*)mRenderer)->symbol()->clone();
- else
- mSingleSymbol = QgsSymbolV2::defaultSymbol(mLayer->geometryType());
-
- stackedWidget->removeWidget(pageSingleSymbol);
- delete pageSingleSymbol;
- pageSingleSymbol = new QgsSymbolV2SelectorDialog(mSingleSymbol, mStyle, NULL, true);
- stackedWidget->addWidget( pageSingleSymbol );
- connect(pageSingleSymbol, SIGNAL(symbolModified()), this, SLOT(changeSingleSymbol()));
-
- // categorized symbol page
-
- populateColumns(); // together with graduated
- QStandardItemModel* m = new QStandardItemModel(this);
- QStringList labels;
- labels << "Value" << "Label";
- m->setHorizontalHeaderLabels(labels);
- viewCategories->setModel(m);
-
- mCategorizedSymbol = QgsSymbolV2::defaultSymbol(mLayer->geometryType());
-
- connect(cboCategorizedColumn, SIGNAL(currentIndexChanged(int)), this, SLOT(categoryColumnChanged()));
-
- connect(viewCategories, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(categoriesDoubleClicked(const QModelIndex &)));
-
- connect(btnChangeCategorizedSymbol, SIGNAL(clicked()), this, SLOT(changeCategorizedSymbol()));
- connect(btnAddCategories, SIGNAL(clicked()), this, SLOT(addCategories()));
- connect(btnDeleteCategory, SIGNAL(clicked()), this, SLOT(deleteCategory()));
- connect(btnDeleteAllCategories, SIGNAL(clicked()), this, SLOT(deleteAllCategories()));
-
- // graduated symbol page
- populateColorRamps();
- QStandardItemModel* mg = new QStandardItemModel(this);
- QStringList labelsG;
- labels << "Range" << "Label";
- mg->setHorizontalHeaderLabels(labels);
- viewGraduated->setModel(mg);
-
- mGraduatedSymbol = QgsSymbolV2::defaultSymbol(mLayer->geometryType());
-
- connect(viewGraduated, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(rangesDoubleClicked(const QModelIndex &)));
-
- connect(btnGraduatedClassify, SIGNAL(clicked()), this, SLOT(classifyGraduated()));
- connect(btnChangeGraduatedSymbol, SIGNAL(clicked()), this, SLOT(changeGraduatedSymbol()));
-
- // initialize from previously set renderer
- updateUiFromRenderer();
-}
-
-QgsRendererV2PropertiesDialog::~QgsRendererV2PropertiesDialog()
-{
- // delete the temporary renderer (if exists)
- delete mRenderer;
-
- delete mSingleSymbol;
- // TODO: delete categorized, graduated symbol?
-}
-
-void QgsRendererV2PropertiesDialog::apply()
-{
- // use clone of our temporary renderer
- mLayer->setRendererV2( mRenderer->clone() );
-}
-
-void QgsRendererV2PropertiesDialog::onOK()
-{
- apply();
- accept();
-}
-
-QgsSingleSymbolRendererV2* QgsRendererV2PropertiesDialog::rendererSingle()
-{
- Q_ASSERT(mRenderer != NULL && mRenderer->type() == "singleSymbol");
- return static_cast<QgsSingleSymbolRendererV2*>(mRenderer);
-}
-
-QgsCategorizedSymbolRendererV2* QgsRendererV2PropertiesDialog::rendererCategorized()
-{
- Q_ASSERT(mRenderer != NULL && mRenderer->type() == "categorizedSymbol");
- return static_cast<QgsCategorizedSymbolRendererV2*>(mRenderer);
-}
-
-QgsGraduatedSymbolRendererV2* QgsRendererV2PropertiesDialog::rendererGraduated()
-{
- Q_ASSERT(mRenderer != NULL && mRenderer->type() == "graduatedSymbol");
- return static_cast<QgsGraduatedSymbolRendererV2*>(mRenderer);
-}
-
-void QgsRendererV2PropertiesDialog::changeSingleSymbol()
-{
- // update symbol from the GUI
- rendererSingle()->setSymbol( mSingleSymbol->clone() );
-}
-
-void QgsRendererV2PropertiesDialog::updateRenderer()
-{
- delete mRenderer;
-
- if (radSingleSymbol->isChecked())
- mRenderer = new QgsSingleSymbolRendererV2( mSingleSymbol->clone() );
- else if (radCategorized->isChecked())
- mRenderer = new QgsCategorizedSymbolRendererV2(QString(), QgsCategoryList());
- else if (radGraduated->isChecked())
- mRenderer = new QgsGraduatedSymbolRendererV2(QString(), QgsRangeList());
- else
- Q_ASSERT(false);
-
- updateUiFromRenderer();
-}
-
-void QgsRendererV2PropertiesDialog::updateUiFromRenderer()
-{
- QString rendererType = mRenderer->type();
-
- if (rendererType == "singleSymbol")
+ // initialize registry's widget functions
+ QgsRendererV2Registry* reg = QgsRendererV2Registry::instance();
+ if (reg->rendererMetadata("singleSymbol").widgetFunction() == NULL)
{
- radSingleSymbol->setChecked(true);
-
- stackedWidget->setCurrentWidget(pageSingleSymbol);
- //updateSingleSymbolIcon();
+ reg->setRendererWidgetFunction("singleSymbol", QgsSingleSymbolRendererV2Widget::create);
+ reg->setRendererWidgetFunction("categorizedSymbol", QgsCategorizedSymbolRendererV2Widget::create);
+ reg->setRendererWidgetFunction("graduatedSymbol", QgsGraduatedSymbolRendererV2Widget::create);
}
- else if (rendererType == "categorizedSymbol")
+
+ QPixmap pix;
+ QStringList renderers = reg->renderersList();
+ foreach (QString name, renderers)
{
- radCategorized->setChecked(true);
+ QgsRendererV2Metadata m = reg->rendererMetadata(name);
- stackedWidget->setCurrentWidget(pageCategorized);
- updateCategorizedSymbolIcon();
- populateCategories();
+ QString iconPath = QgsApplication::defaultThemePath() + m.iconName();
+ if (!pix.load(iconPath, "png"))
+ pix = QPixmap();
- QgsCategorizedSymbolRendererV2* r = rendererCategorized();
-
- // set column
- disconnect(cboCategorizedColumn, SIGNAL(currentIndexChanged(int)), this, SLOT(categoryColumnChanged()));
- QString attrName = r->classAttribute();
- int idx = cboCategorizedColumn->findText(attrName, Qt::MatchExactly);
- cboCategorizedColumn->setCurrentIndex(idx >= 0 ? idx : 0);
- connect(cboCategorizedColumn, SIGNAL(currentIndexChanged(int)), this, SLOT(categoryColumnChanged()));
-
- // set source symbol
- if (r->sourceSymbol())
- {
- delete mCategorizedSymbol;
- mCategorizedSymbol = r->sourceSymbol()->clone();
- updateCategorizedSymbolIcon();
- }
-
- // set source color ramp
- if (r->sourceColorRamp())
- {
- QSize rampIconSize(50,16);
- QIcon icon = QgsSymbolLayerV2Utils::colorRampPreviewIcon(r->sourceColorRamp(), rampIconSize);
- if (cboCategorizedColorRamp->itemText(0) == "[source]")
- cboCategorizedColorRamp->setItemIcon(0, icon);
- else
- cboCategorizedColorRamp->insertItem(0, icon, "[source]");
- cboCategorizedColorRamp->setCurrentIndex(0);
- }
+ QListWidgetItem* item = new QListWidgetItem(QIcon(pix), m.visibleName(), listRenderers);
+ item->setData(Qt::UserRole, name);
}
- else if (rendererType == "graduatedSymbol")
+
+ // if the layer doesn't use renderer V2, let's start using it!
+ if (!mLayer->isUsingRendererV2())
{
- radGraduated->setChecked(true);
+ mLayer->setRendererV2( QgsFeatureRendererV2::defaultRenderer(mLayer->geometryType()) );
+ mLayer->setUsingRendererV2(true);
+ }
- stackedWidget->setCurrentWidget(pageGraduated);
- updateGraduatedSymbolIcon();
- populateRanges();
+ // setup slot rendererChanged()
+ connect(listRenderers, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), this, SLOT(rendererChanged()));
- // update UI from the graduated renderer (update combo boxes, view)
- QgsGraduatedSymbolRendererV2* r = rendererGraduated();
- if (r->mode() < cboGraduatedMode->count())
- cboGraduatedMode->setCurrentIndex( r->mode() );
- if (r->ranges().count())
- spinGraduatedClasses->setValue( r->ranges().count() );
-
- // set column
- //disconnect(cboGraduatedColumn, SIGNAL(currentIndexChanged(int)), this, SLOT(graduatedColumnChanged()));
- QString attrName = r->classAttribute();
- int idx = cboGraduatedColumn->findText(attrName, Qt::MatchExactly);
- cboGraduatedColumn->setCurrentIndex(idx >= 0 ? idx : 0);
- //connect(cboGraduatedColumn, SIGNAL(currentIndexChanged(int)), this, SLOT(graduatedColumnChanged()));
-
- // set source symbol
- if (r->sourceSymbol())
+ // set current renderer from layer
+ QString rendererName = mLayer->rendererV2()->type();
+ for (int i = 0; i < listRenderers->count(); i++)
+ {
+ if (listRenderers->item(i)->data(Qt::UserRole).toString() == rendererName)
{
- delete mGraduatedSymbol;
- mGraduatedSymbol = r->sourceSymbol()->clone();
- updateGraduatedSymbolIcon();
+ listRenderers->setCurrentItem( listRenderers->item(i) );
+ return;
}
-
- // set source color ramp
- if (r->sourceColorRamp())
- {
- QSize rampIconSize(50,16);
- QIcon icon = QgsSymbolLayerV2Utils::colorRampPreviewIcon(r->sourceColorRamp(), rampIconSize);
- if (cboGraduatedColorRamp->itemText(0) == "[source]")
- cboGraduatedColorRamp->setItemIcon(0, icon);
- else
- cboGraduatedColorRamp->insertItem(0, icon, "[source]");
- cboGraduatedColorRamp->setCurrentIndex(0);
- }
}
-}
-
-void QgsRendererV2PropertiesDialog::changeCategorizedSymbol()
-{
- QgsSymbolV2SelectorDialog dlg(mCategorizedSymbol, mStyle, this);
- if (!dlg.exec())
- return;
+ // no renderer found... this mustn't happen
+ Q_ASSERT( false && "there must be a renderer!" );
- updateCategorizedSymbolIcon();
}
-void QgsRendererV2PropertiesDialog::updateCategorizedSymbolIcon()
-{
- QIcon icon = QgsSymbolLayerV2Utils::symbolPreviewIcon(mCategorizedSymbol, btnChangeCategorizedSymbol->iconSize());
- btnChangeCategorizedSymbol->setIcon(icon);
-}
-void QgsRendererV2PropertiesDialog::populateCategories()
+void QgsRendererV2PropertiesDialog::rendererChanged()
{
- QStandardItemModel* m = qobject_cast<QStandardItemModel*>(viewCategories->model());
- m->clear();
-
- QStringList labels;
- labels << "Value" << "Label";
- m->setHorizontalHeaderLabels(labels);
-
- QSize iconSize(16,16);
-
- QgsCategorizedSymbolRendererV2* r = rendererCategorized();
- int i, count = r->categories().count();
-
- // TODO: sort?? utils.sortVariantList(keys);
-
- for (i = 0; i < count; i++)
- {
- const QgsRendererCategoryV2& cat = r->categories()[i];
- QVariant k = cat.value();
-
- QIcon icon = QgsSymbolLayerV2Utils::symbolPreviewIcon(cat.symbol(), iconSize);
- QStandardItem* item = new QStandardItem(icon, k.toString());
- item->setData(k); // set attribute value as user role
- item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
-
- QList<QStandardItem *> list;
- list << item << new QStandardItem(cat.label());
- m->appendRow( list );
- }
-}
-void QgsRendererV2PropertiesDialog::populateColumns()
-{
- cboCategorizedColumn->clear();
- const QgsFieldMap& flds = mLayer->dataProvider()->fields();
- QgsFieldMap::ConstIterator it = flds.begin();
- for ( ; it != flds.end(); ++it)
+ if (listRenderers->currentItem() == NULL)
{
- cboCategorizedColumn->addItem(it->name());
-
- if (it->type() == QVariant::Double || it->type() == QVariant::Int)
- cboGraduatedColumn->addItem(it->name());
+ QgsDebugMsg("No current item -- this should never happen!");
+ return;
}
-}
+ QString rendererName = listRenderers->currentItem()->data(Qt::UserRole).toString();
-void QgsRendererV2PropertiesDialog::categoryColumnChanged()
-{
- deleteAllCategories();
-}
-
-void QgsRendererV2PropertiesDialog::categoriesDoubleClicked(const QModelIndex & idx)
-{
- if (idx.isValid() && idx.column() == 0)
- changeCategorySymbol();
-}
-
-void QgsRendererV2PropertiesDialog::changeCategorySymbol()
-{
- QVariant k = currentCategory();
- if (!k.isValid())
- return;
-
- QgsCategorizedSymbolRendererV2* r = rendererCategorized();
- int catIdx = r->categoryIndexForValue(k);
- QgsSymbolV2* newSymbol = r->categories()[catIdx].symbol()->clone();
-
- QgsSymbolV2SelectorDialog dlg(newSymbol, mStyle, this);
- if (!dlg.exec())
+ // get rid of old active widget (if any)
+ if (mActiveWidget)
{
- delete newSymbol;
- return;
+ stackedWidget->removeWidget( mActiveWidget );
+
+ delete mActiveWidget;
+ mActiveWidget = NULL;
}
-
- r->updateCategorySymbol(catIdx, newSymbol);
-
- populateCategories();
-}
-void createCategories(QgsCategoryList& cats, QList<QVariant>& values, QgsSymbolV2* symbol, QgsVectorColorRampV2* ramp)
-{
- // sort the categories first
- // TODO: sortVariantList(values);
-
- int num = values.count();
-
- for (int i = 0; i < num; i++)
+ QgsRendererV2Metadata m = QgsRendererV2Registry::instance()->rendererMetadata(rendererName);
+ QgsRendererV2WidgetFunc fWidget = m.widgetFunction();
+ if (fWidget != NULL)
{
- QVariant value = values[i];
- double x = i / (double) num;
- QgsSymbolV2* newSymbol = symbol->clone();
- newSymbol->setColor( ramp->color(x) );
-
- cats.append( QgsRendererCategoryV2(value, newSymbol, value.toString()) );
- }
-
-}
+ // instantiate the widget and set as active
+ mActiveWidget = fWidget(mLayer, mStyle, mLayer->rendererV2()->clone());
+ stackedWidget->addWidget(mActiveWidget);
+ stackedWidget->setCurrentWidget(mActiveWidget);
-void QgsRendererV2PropertiesDialog::addCategories()
-{
- QString attrName = cboCategorizedColumn->currentText();
- int idx = QgsFeatureRendererV2::fieldNameIndex(mLayer->pendingFields(), attrName);
- QList<QVariant> unique_vals;
- mLayer->dataProvider()->uniqueValues(idx, unique_vals);
-
- //DlgAddCategories dlg(mStyle, createDefaultSymbol(), unique_vals, this);
- //if (!dlg.exec())
- // return;
-
- QgsVectorColorRampV2* ramp = NULL;
- QString rampName = cboCategorizedColorRamp->currentText();
- if (rampName == "[source]" && rendererCategorized())
- ramp = rendererCategorized()->sourceColorRamp()->clone();
+ btnSymbolLevels->setEnabled(true);
+ }
else
- ramp = mStyle->colorRamp( rampName );
-
- QgsCategoryList cats;
- ::createCategories(cats, unique_vals, mCategorizedSymbol, ramp );
-
- // TODO: if not all categories are desired, delete some!
- /*
- if (not dlg.radAllCats.isChecked())
{
- cats2 = {}
- for item in dlg.listCategories.selectedItems():
- for k,c in cats.iteritems():
- if item.text() == k.toString():
- break
- cats2[k] = c
- cats = cats2
+ // set default "no edit widget available" page
+ stackedWidget->setCurrentWidget(pageNoWidget);
+
+ btnSymbolLevels->setEnabled(false);
}
- */
-
- // recreate renderer
- delete mRenderer;
- QgsCategorizedSymbolRendererV2* r = new QgsCategorizedSymbolRendererV2(attrName, cats);
- r->setSourceSymbol(mCategorizedSymbol->clone());
- r->setSourceColorRamp(ramp->clone());
- mRenderer = r;
- populateCategories();
}
-int QgsRendererV2PropertiesDialog::currentCategoryRow()
+void QgsRendererV2PropertiesDialog::apply()
{
- QModelIndex idx = viewCategories->selectionModel()->currentIndex();
- if (!idx.isValid())
- return -1;
- return idx.row();
-}
-
-QVariant QgsRendererV2PropertiesDialog::currentCategory()
-{
- int row = currentCategoryRow();
- if (row == -1)
- return QVariant();
- QStandardItemModel* m = qobject_cast<QStandardItemModel*>(viewCategories->model());
- return m->item(row)->data();
-}
-
-void QgsRendererV2PropertiesDialog::deleteCategory()
-{
- QVariant k = currentCategory();
- if (!k.isValid())
- return;
-
- QgsCategorizedSymbolRendererV2* r = rendererCategorized();
- const QgsCategoryList& cats = r->categories();
- QgsCategoryList::ConstIterator it = cats.begin();
-
- for ( ; it != cats.end(); ++it)
+ if (mActiveWidget != NULL)
{
- if (k.toString() == it->value().toString())
- {
- int idx = r->categoryIndexForValue(k);
- r->deleteCategory(idx);
- }
+ mLayer->setRendererV2( mActiveWidget->renderer()->clone() );
}
-
- populateCategories();
}
-void QgsRendererV2PropertiesDialog::deleteAllCategories()
+void QgsRendererV2PropertiesDialog::onOK()
{
- rendererCategorized()->deleteAllCategories();
- populateCategories();
+ apply();
+ accept();
}
-//////
-
-void QgsRendererV2PropertiesDialog::populateColorRamps()
+void QgsRendererV2PropertiesDialog::keyPressEvent( QKeyEvent * e )
{
- QSize rampIconSize(50,16);
- cboGraduatedColorRamp->setIconSize(rampIconSize);
- cboCategorizedColorRamp->setIconSize(rampIconSize);
-
- QStringList rampNames = mStyle->colorRampNames();
- for (QStringList::iterator it = rampNames.begin(); it != rampNames.end(); ++it)
+ // Ignore the ESC key to avoid close the dialog without the properties window
+ if ( !isWindow() && e->key() == Qt::Key_Escape )
{
- QgsVectorColorRampV2* ramp = mStyle->colorRamp(*it);
- QIcon icon = QgsSymbolLayerV2Utils::colorRampPreviewIcon(ramp, rampIconSize);
- cboGraduatedColorRamp->addItem(icon, *it);
- cboCategorizedColorRamp->addItem(icon, *it);
- delete ramp;
+ e->ignore();
}
-}
-
-void QgsRendererV2PropertiesDialog::classifyGraduated()
-{
- QString attrName = cboGraduatedColumn->currentText();
-
- int classes = spinGraduatedClasses->value();
-
- QgsVectorColorRampV2* ramp = NULL;
- QString rampName = cboGraduatedColorRamp->currentText();
- if (rampName == "[source]" && rendererGraduated())
- ramp = rendererGraduated()->sourceColorRamp()->clone();
else
- ramp = mStyle->colorRamp( rampName );
-
- QgsGraduatedSymbolRendererV2::Mode mode;
- if (cboGraduatedMode->currentIndex() == 0)
- mode = QgsGraduatedSymbolRendererV2::EqualInterval;
- else
- mode = QgsGraduatedSymbolRendererV2::Quantile;
-
- // create and set new renderer
- QgsGraduatedSymbolRendererV2* r = QgsGraduatedSymbolRendererV2::createRenderer(
- mLayer, attrName, classes, mode, mGraduatedSymbol, ramp);
-
- delete mRenderer;
- mRenderer = r;
-
- populateRanges();
-}
-
-void QgsRendererV2PropertiesDialog::changeGraduatedSymbol()
-{
- QgsSymbolV2SelectorDialog dlg(mGraduatedSymbol, mStyle, this);
- if (!dlg.exec())
- return;
-
- updateGraduatedSymbolIcon();
-}
-
-void QgsRendererV2PropertiesDialog::updateGraduatedSymbolIcon()
-{
- QIcon icon = QgsSymbolLayerV2Utils::symbolPreviewIcon(mGraduatedSymbol, btnChangeGraduatedSymbol->iconSize());
- btnChangeGraduatedSymbol->setIcon(icon);
-}
-
-void QgsRendererV2PropertiesDialog::populateRanges()
-{
-
- QStandardItemModel* m = qobject_cast<QStandardItemModel*>(viewGraduated->model());
- m->clear();
-
- QStringList labels;
- labels << "Range" << "Label";
- m->setHorizontalHeaderLabels(labels);
-
- QSize iconSize(16,16);
-
- QgsGraduatedSymbolRendererV2* r = rendererGraduated();
- int i, count = r->ranges().count();
-
- for (i = 0; i < count; i++)
{
- const QgsRendererRangeV2& range = r->ranges()[i];
- QString rangeStr = QString::number(range.lowerValue(),'f',4) + " - " + QString::number(range.upperValue(),'f',4);
-
- QIcon icon = QgsSymbolLayerV2Utils::symbolPreviewIcon(range.symbol(), iconSize);
- QStandardItem* item = new QStandardItem(icon, rangeStr);
- //item->setData(k); // set attribute value as user role
- item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
-
- QList<QStandardItem *> list;
- list << item << new QStandardItem(range.label());
- m->appendRow( list );
+ QDialog::keyPressEvent(e);
}
-
- // make sure that the "range" column has visible context
- viewGraduated->resizeColumnToContents(0);
}
-/*
-int QgsRendererV2PropertiesDialog::currentRangeRow()
-{
- QModelIndex idx = viewGraduated->selectionModel()->currentIndex();
- if (!idx.isValid())
- return -1;
- return idx.row();
-}
-*/
-void QgsRendererV2PropertiesDialog::rangesDoubleClicked(const QModelIndex & idx)
+void QgsRendererV2PropertiesDialog::showSymbolLevels()
{
- if (idx.isValid() && idx.column() == 0)
- changeRangeSymbol(idx.row());
-}
-
-void QgsRendererV2PropertiesDialog::changeRangeSymbol(int rangeIdx)
-{
-
- QgsGraduatedSymbolRendererV2* r = rendererGraduated();
- QgsSymbolV2* newSymbol = r->ranges()[rangeIdx].symbol()->clone();
-
- QgsSymbolV2SelectorDialog dlg(newSymbol, mStyle, this);
- if (!dlg.exec())
- {
- delete newSymbol;
+ if (!mActiveWidget)
return;
- }
- r->updateRangeSymbol(rangeIdx, newSymbol);
+ QgsFeatureRendererV2* r = mActiveWidget->renderer();
+ QgsSymbolV2List symbols = r->symbols();
- populateRanges();
-}
-
-
-void QgsRendererV2PropertiesDialog::symbolLevels()
-{
- QgsSymbolV2List symbols = mRenderer->symbols();
-
- QgsSymbolLevelsV2Dialog dlg(symbols, mRenderer->usingSymbolLevels(), this);
+ QgsSymbolLevelsV2Dialog dlg(symbols, r->usingSymbolLevels(), this);
if (dlg.exec())
{
- mRenderer->setUsingSymbolLevels( dlg.usingLevels() );
+ r->setUsingSymbolLevels( dlg.usingLevels() );
}
}
-
-void QgsRendererV2PropertiesDialog::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);
- }
-}
Modified: branches/symbology-ng-branch/src/gui/symbology-ng/qgsrendererv2propertiesdialog.h
===================================================================
--- branches/symbology-ng-branch/src/gui/symbology-ng/qgsrendererv2propertiesdialog.h 2009-11-15 00:21:19 UTC (rev 12115)
+++ branches/symbology-ng-branch/src/gui/symbology-ng/qgsrendererv2propertiesdialog.h 2009-11-15 01:48:35 UTC (rev 12116)
@@ -2,91 +2,45 @@
#ifndef QGSRENDERERV2PROPERTIESDIALOG_H
#define QGSRENDERERV2PROPERTIESDIALOG_H
+#include <QDialog>
+
#include "ui_qgsrendererv2propsdialogbase.h"
+class QKeyEvent;
+
class QgsVectorLayer;
class QgsStyleV2;
class QgsSymbolV2;
-class QgsFeatureRendererV2;
-class QgsSingleSymbolRendererV2;
-class QgsCategorizedSymbolRendererV2;
-class QgsGraduatedSymbolRendererV2;
+class QgsRendererV2Widget;
class QgsRendererV2PropertiesDialog : public QDialog, private Ui::QgsRendererV2PropsDialogBase
{
Q_OBJECT
public:
- QgsRendererV2PropertiesDialog(QgsVectorLayer* layer, QgsStyleV2* style, QWidget* parent = NULL, bool embedded = false);
- ~QgsRendererV2PropertiesDialog();
-
+ QgsRendererV2PropertiesDialog(QgsVectorLayer* layer, QgsStyleV2* style, bool embedded = false);
+
public slots:
- void changeSingleSymbol();
- void updateRenderer();
-
- void changeCategorizedSymbol();
- void categoryColumnChanged();
- void categoriesDoubleClicked(const QModelIndex & idx);
- void addCategories();
- void deleteCategory();
- void deleteAllCategories();
+ //! called when user changes renderer type
+ void rendererChanged();
- void changeGraduatedSymbol();
- void classifyGraduated();
- void rangesDoubleClicked(const QModelIndex & idx);
+ void apply();
+ void onOK();
- void symbolLevels();
+ void showSymbolLevels();
- void onOK();
- void apply();
-
protected:
- //! Reimplements dialog keyPress event so we can ignore it
- void keyPressEvent( QKeyEvent * event );
+ //! Reimplements dialog keyPress event so we can ignore it
+ void keyPressEvent( QKeyEvent * event );
- //! update UI to reflect changes in renderer
- void updateUiFromRenderer();
-
- void updateCategorizedSymbolIcon();
- void updateGraduatedSymbolIcon();
-
- //! populate categories view
- void populateCategories();
-
- //! populate column combos in categorized and graduated page
- void populateColumns();
-
- //! populate ranges of graduated symbol renderer
- void populateRanges();
-
- void populateColorRamps();
- //! return row index for the currently selected category (-1 if on no selection)
- int currentCategoryRow();
-
- //! return key for the currently selected category
- QVariant currentCategory();
-
- void changeCategorySymbol();
+ QgsVectorLayer* mLayer;
+ QgsStyleV2* mStyle;
- void changeRangeSymbol(int rangeIdx);
-
- QgsSingleSymbolRendererV2* rendererSingle();
- QgsCategorizedSymbolRendererV2* rendererCategorized();
- QgsGraduatedSymbolRendererV2* rendererGraduated();
-
- //! temporary renderer in current dialog
- QgsFeatureRendererV2* mRenderer;
-
- QgsVectorLayer* mLayer;
-
- QgsStyleV2* mStyle;
-
- QgsSymbolV2* mSingleSymbol;
- QgsSymbolV2* mGraduatedSymbol;
- QgsSymbolV2* mCategorizedSymbol;
+ QgsRendererV2Widget* mActiveWidget;
};
+
#endif
Added: branches/symbology-ng-branch/src/gui/symbology-ng/qgsrendererv2widget.cpp
===================================================================
--- branches/symbology-ng-branch/src/gui/symbology-ng/qgsrendererv2widget.cpp (rev 0)
+++ branches/symbology-ng-branch/src/gui/symbology-ng/qgsrendererv2widget.cpp 2009-11-15 01:48:35 UTC (rev 12116)
@@ -0,0 +1,7 @@
+#include "qgsrendererv2widget.h"
+
+
+QgsRendererV2Widget::QgsRendererV2Widget(QgsVectorLayer* layer, QgsStyleV2* style)
+ : QWidget(), mLayer(layer), mStyle(style)
+{
+}
Added: branches/symbology-ng-branch/src/gui/symbology-ng/qgsrendererv2widget.h
===================================================================
--- branches/symbology-ng-branch/src/gui/symbology-ng/qgsrendererv2widget.h (rev 0)
+++ branches/symbology-ng-branch/src/gui/symbology-ng/qgsrendererv2widget.h 2009-11-15 01:48:35 UTC (rev 12116)
@@ -0,0 +1,38 @@
+#ifndef QGSRENDERERV2WIDGET_H
+#define QGSRENDERERV2WIDGET_H
+
+#include <QWidget>
+
+class QgsVectorLayer;
+class QgsStyleV2;
+class QgsSymbolV2;
+class QgsFeatureRendererV2;
+class QgsSymbolV2SelectorDialog;
+
+
+/**
+ 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
+*/
+class QgsRendererV2Widget : public QWidget
+{
+public:
+ QgsRendererV2Widget(QgsVectorLayer* layer, QgsStyleV2* style);
+
+ virtual ~QgsRendererV2Widget() {}
+
+ //! return pointer to the renderer (no transfer of ownership)
+ virtual QgsFeatureRendererV2* renderer() = 0;
+
+protected:
+ QgsVectorLayer* mLayer;
+ QgsStyleV2* mStyle;
+};
+
+#endif // QGSRENDERERV2WIDGET_H
Added: branches/symbology-ng-branch/src/gui/symbology-ng/qgssinglesymbolrendererv2widget.cpp
===================================================================
--- branches/symbology-ng-branch/src/gui/symbology-ng/qgssinglesymbolrendererv2widget.cpp (rev 0)
+++ branches/symbology-ng-branch/src/gui/symbology-ng/qgssinglesymbolrendererv2widget.cpp 2009-11-15 01:48:35 UTC (rev 12116)
@@ -0,0 +1,68 @@
+#include "qgssinglesymbolrendererv2widget.h"
+
+#include "qgssinglesymbolrendererv2.h"
+#include "qgssymbolv2.h"
+
+#include "qgsvectorlayer.h"
+
+#include "qgssymbolv2selectordialog.h"
+
+QgsRendererV2Widget* QgsSingleSymbolRendererV2Widget::create(QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer)
+{
+ return new QgsSingleSymbolRendererV2Widget(layer, style, renderer);
+}
+
+QgsSingleSymbolRendererV2Widget::QgsSingleSymbolRendererV2Widget(QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer)
+ : QgsRendererV2Widget(layer, style)
+{
+ // try to recognize the previous renderer
+ // (null renderer means "no previous renderer")
+ if (!renderer || renderer->type() != "singleSymbol")
+ {
+ // we're not going to use it - so let's delete the renderer
+ delete renderer;
+
+ // some default options
+ QgsSymbolV2* symbol = QgsSymbolV2::defaultSymbol(mLayer->geometryType());
+
+ mRenderer = new QgsSingleSymbolRendererV2( symbol );
+ }
+ else
+ {
+ mRenderer = static_cast<QgsSingleSymbolRendererV2*>(renderer);
+ }
+
+ // load symbol from it
+ mSingleSymbol = mRenderer->symbol()->clone();
+
+ // setup ui
+ mSelector = new QgsSymbolV2SelectorDialog(mSingleSymbol, mStyle, NULL, true);
+ connect(mSelector, SIGNAL(symbolModified()), this, SLOT(changeSingleSymbol()));
+
+ QVBoxLayout* layout = new QVBoxLayout;
+ layout->addWidget(mSelector);
+ setLayout(layout);
+
+}
+
+QgsSingleSymbolRendererV2Widget::~QgsSingleSymbolRendererV2Widget()
+{
+ delete mSingleSymbol;
+
+ delete mRenderer;
+
+ delete mSelector;
+}
+
+
+QgsFeatureRendererV2* QgsSingleSymbolRendererV2Widget::renderer()
+{
+ return mRenderer;
+}
+
+void QgsSingleSymbolRendererV2Widget::changeSingleSymbol()
+{
+ // update symbol from the GUI
+ mRenderer->setSymbol( mSingleSymbol->clone() );
+}
+
Added: branches/symbology-ng-branch/src/gui/symbology-ng/qgssinglesymbolrendererv2widget.h
===================================================================
--- branches/symbology-ng-branch/src/gui/symbology-ng/qgssinglesymbolrendererv2widget.h (rev 0)
+++ branches/symbology-ng-branch/src/gui/symbology-ng/qgssinglesymbolrendererv2widget.h 2009-11-15 01:48:35 UTC (rev 12116)
@@ -0,0 +1,32 @@
+#ifndef QGSSINGLESYMBOLRENDERERV2WIDGET_H
+#define QGSSINGLESYMBOLRENDERERV2WIDGET_H
+
+#include "qgsrendererv2widget.h"
+
+class QgsSingleSymbolRendererV2;
+class QgsSymbolV2SelectorDialog;
+
+class QgsSingleSymbolRendererV2Widget : public QgsRendererV2Widget
+{
+ Q_OBJECT
+
+public:
+
+ static QgsRendererV2Widget* create(QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer);
+
+ QgsSingleSymbolRendererV2Widget(QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer);
+ ~QgsSingleSymbolRendererV2Widget();
+
+ virtual QgsFeatureRendererV2* renderer();
+
+public slots:
+ void changeSingleSymbol();
+
+protected:
+ QgsSingleSymbolRendererV2* mRenderer;
+ QgsSymbolV2SelectorDialog* mSelector;
+ QgsSymbolV2* mSingleSymbol;
+};
+
+
+#endif // QGSSINGLESYMBOLRENDERERV2WIDGET_H
Modified: branches/symbology-ng-branch/src/gui/symbology-ng/qgssymbollayerv2widget.h
===================================================================
--- branches/symbology-ng-branch/src/gui/symbology-ng/qgssymbollayerv2widget.h 2009-11-15 00:21:19 UTC (rev 12115)
+++ branches/symbology-ng-branch/src/gui/symbology-ng/qgssymbollayerv2widget.h 2009-11-15 01:48:35 UTC (rev 12116)
@@ -13,6 +13,7 @@
public:
QgsSymbolLayerV2Widget(QWidget* parent) : QWidget(parent) {}
+ virtual ~QgsSymbolLayerV2Widget() {}
virtual void setSymbolLayer(QgsSymbolLayerV2* layer) = 0;
virtual QgsSymbolLayerV2* symbolLayer() = 0;
Added: branches/symbology-ng-branch/src/ui/qgscategorizedsymbolrendererv2widget.ui
===================================================================
--- branches/symbology-ng-branch/src/ui/qgscategorizedsymbolrendererv2widget.ui (rev 0)
+++ branches/symbology-ng-branch/src/ui/qgscategorizedsymbolrendererv2widget.ui 2009-11-15 01:48:35 UTC (rev 12116)
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>QgsCategorizedSymbolRendererV2Widget</class>
+ <widget class="QWidget" name="QgsCategorizedSymbolRendererV2Widget">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>464</width>
+ <height>316</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Column:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QComboBox" name="cboCategorizedColumn">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Expanding</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QLabel" name="label_9">
+ <property name="text">
+ <string>Symbol:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnChangeCategorizedSymbol">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>change</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_10">
+ <property name="text">
+ <string>Color ramp:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QComboBox" name="cboCategorizedColorRamp">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QTreeView" name="viewCategories">
+ <property name="iconSize">
+ <size>
+ <width>16</width>
+ <height>16</height>
+ </size>
+ </property>
+ <property name="rootIsDecorated">
+ <bool>false</bool>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <item>
+ <widget class="QPushButton" name="btnAddCategories">
+ <property name="text">
+ <string>Classify</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnDeleteCategory">
+ <property name="text">
+ <string>Delete</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnDeleteAllCategories">
+ <property name="text">
+ <string>Delete all</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnJoinCategories">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Join</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <tabstops>
+ <tabstop>cboCategorizedColumn</tabstop>
+ <tabstop>btnChangeCategorizedSymbol</tabstop>
+ <tabstop>cboCategorizedColorRamp</tabstop>
+ <tabstop>viewCategories</tabstop>
+ <tabstop>btnAddCategories</tabstop>
+ <tabstop>btnDeleteCategory</tabstop>
+ <tabstop>btnDeleteAllCategories</tabstop>
+ <tabstop>btnJoinCategories</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
Added: branches/symbology-ng-branch/src/ui/qgsgraduatedsymbolrendererv2widget.ui
===================================================================
--- branches/symbology-ng-branch/src/ui/qgsgraduatedsymbolrendererv2widget.ui (rev 0)
+++ branches/symbology-ng-branch/src/ui/qgsgraduatedsymbolrendererv2widget.ui 2009-11-15 01:48:35 UTC (rev 12116)
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>QgsGraduatedSymbolRendererV2Widget</class>
+ <widget class="QWidget" name="QgsGraduatedSymbolRendererV2Widget">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>507</width>
+ <height>341</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <layout class="QGridLayout">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_4">
+ <property name="text">
+ <string>Column:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1" colspan="2">
+ <widget class="QComboBox" name="cboGraduatedColumn"/>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_6">
+ <property name="text">
+ <string>Symbol:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QPushButton" name="btnChangeGraduatedSymbol">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>change</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="3">
+ <widget class="QLabel" name="label_5">
+ <property name="text">
+ <string>Classes:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="4">
+ <widget class="QSpinBox" name="spinGraduatedClasses">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="value">
+ <number>5</number>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_7">
+ <property name="text">
+ <string>Color ramp:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QComboBox" name="cboGraduatedColorRamp"/>
+ </item>
+ <item row="2" column="3">
+ <widget class="QLabel" name="label_8">
+ <property name="text">
+ <string>Mode:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="4">
+ <widget class="QComboBox" name="cboGraduatedMode">
+ <item>
+ <property name="text">
+ <string>Equal Interval</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Quantile</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="1" column="2" rowspan="2">
+ <spacer>
+ <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>
+ <widget class="QTreeView" name="viewGraduated">
+ <property name="rootIsDecorated">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="_2">
+ <item>
+ <widget class="QPushButton" name="btnGraduatedClassify">
+ <property name="text">
+ <string>Classify</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="btnGraduatedDelete">
+ <property name="text">
+ <string>Delete class</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <tabstops>
+ <tabstop>cboGraduatedColumn</tabstop>
+ <tabstop>btnChangeGraduatedSymbol</tabstop>
+ <tabstop>cboGraduatedColorRamp</tabstop>
+ <tabstop>spinGraduatedClasses</tabstop>
+ <tabstop>cboGraduatedMode</tabstop>
+ <tabstop>viewGraduated</tabstop>
+ <tabstop>btnGraduatedClassify</tabstop>
+ <tabstop>btnGraduatedDelete</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
Modified: branches/symbology-ng-branch/src/ui/qgsrendererv2propsdialogbase.ui
===================================================================
--- branches/symbology-ng-branch/src/ui/qgsrendererv2propsdialogbase.ui 2009-11-15 00:21:19 UTC (rev 12115)
+++ branches/symbology-ng-branch/src/ui/qgsrendererv2propsdialogbase.ui 2009-11-15 01:48:35 UTC (rev 12116)
@@ -6,478 +6,90 @@
<rect>
<x>0</x>
<y>0</y>
- <width>612</width>
- <height>398</height>
+ <width>529</width>
+ <height>324</height>
</rect>
</property>
<property name="windowTitle">
- <string>Renderer V2 properties</string>
+ <string>Renderer settings</string>
</property>
- <layout class="QGridLayout">
+ <layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
- <layout class="QVBoxLayout">
- <item>
- <widget class="QLabel" name="label">
- <property name="text">
- <string>Renderer:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QRadioButton" name="radSingleSymbol">
- <property name="text">
- <string>single symbol</string>
- </property>
- <property name="checked">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QRadioButton" name="radCategorized">
- <property name="text">
- <string>categorized</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QRadioButton" name="radGraduated">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="text">
- <string>graduated</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer>
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>111</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QPushButton" name="btnSymbolLevels">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="text">
- <string>Symbol levels...</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item row="0" column="1">
- <widget class="Line" name="line">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
+ <widget class="QListWidget" name="listRenderers">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
</property>
- </widget>
- </item>
- <item row="1" column="0" colspan="3">
- <widget class="QDialogButtonBox" name="buttonBox">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
+ <property name="editTriggers">
+ <set>QAbstractItemView::NoEditTriggers</set>
</property>
- <property name="standardButtons">
- <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+ <property name="showDropIndicator" stdset="0">
+ <bool>false</bool>
</property>
+ <property name="iconSize">
+ <size>
+ <width>48</width>
+ <height>48</height>
+ </size>
+ </property>
+ <property name="spacing">
+ <number>4</number>
+ </property>
+ <property name="viewMode">
+ <enum>QListView::IconMode</enum>
+ </property>
</widget>
</item>
- <item row="0" column="2">
+ <item row="0" column="1" rowspan="2">
<widget class="QStackedWidget" name="stackedWidget">
- <property name="currentIndex">
- <number>0</number>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+ <horstretch>4</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
</property>
- <widget class="QWidget" name="pageSingleSymbol">
- <layout class="QGridLayout">
- <item row="0" column="0">
- <widget class="QLabel" name="label_2">
- <property name="text">
- <string>Symbol:</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QPushButton" name="btnChangeSingleSymbol">
- <property name="text">
- <string>Change</string>
- </property>
- </widget>
- </item>
- <item row="0" column="2">
- <spacer>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item row="1" column="0" colspan="2">
- <spacer>
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>271</width>
- <height>181</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </widget>
- <widget class="QWidget" name="pageCategorized">
+ <widget class="QWidget" name="pageNoWidget">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <item>
- <widget class="QLabel" name="label_3">
- <property name="text">
- <string>Column:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QComboBox" name="cboCategorizedColumn">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Expanding</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="QLabel" name="label_9">
- <property name="text">
- <string>Symbol:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="btnChangeCategorizedSymbol">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
- <horstretch>1</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>change</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="label_10">
- <property name="text">
- <string>Color ramp:</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QComboBox" name="cboCategorizedColorRamp">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
- <horstretch>1</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QTreeView" name="viewCategories">
- <property name="iconSize">
- <size>
- <width>16</width>
- <height>16</height>
- </size>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>This renderer doesn't implement a graphical interface.</string>
</property>
- <property name="rootIsDecorated">
- <bool>false</bool>
- </property>
- <property name="allColumnsShowFocus">
- <bool>true</bool>
- </property>
</widget>
</item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_3">
- <item>
- <widget class="QPushButton" name="btnAddCategories">
- <property name="text">
- <string>Classify</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="btnDeleteCategory">
- <property name="text">
- <string>Delete</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="btnDeleteAllCategories">
- <property name="text">
- <string>Delete all</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QPushButton" name="btnJoinCategories">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>Join</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
</layout>
</widget>
- <widget class="QWidget" name="pageGraduated">
- <layout class="QVBoxLayout">
- <item>
- <layout class="QGridLayout">
- <item row="0" column="0">
- <widget class="QLabel" name="label_4">
- <property name="text">
- <string>Column:</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1" colspan="2">
- <widget class="QComboBox" name="cboGraduatedColumn"/>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_6">
- <property name="text">
- <string>Symbol:</string>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QPushButton" name="btnChangeGraduatedSymbol">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
- <horstretch>1</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>change</string>
- </property>
- </widget>
- </item>
- <item row="1" column="3">
- <widget class="QLabel" name="label_5">
- <property name="text">
- <string>Classes:</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- </widget>
- </item>
- <item row="1" column="4">
- <widget class="QSpinBox" name="spinGraduatedClasses">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="value">
- <number>5</number>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_7">
- <property name="text">
- <string>Color ramp:</string>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QComboBox" name="cboGraduatedColorRamp"/>
- </item>
- <item row="2" column="3">
- <widget class="QLabel" name="label_8">
- <property name="text">
- <string>Mode:</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
- </property>
- </widget>
- </item>
- <item row="2" column="4">
- <widget class="QComboBox" name="cboGraduatedMode">
- <item>
- <property name="text">
- <string>Equal Interval</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Quantile</string>
- </property>
- </item>
- </widget>
- </item>
- <item row="1" column="2" rowspan="2">
- <spacer>
- <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>
- <widget class="QTreeView" name="viewGraduated">
- <property name="rootIsDecorated">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout">
- <item>
- <widget class="QPushButton" name="btnGraduatedClassify">
- <property name="text">
- <string>Classify</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="btnGraduatedDelete">
- <property name="text">
- <string>Delete class</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>40</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
</widget>
</item>
+ <item row="2" column="0" colspan="2">
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QPushButton" name="btnSymbolLevels">
+ <property name="text">
+ <string>Symbol levels</string>
+ </property>
+ </widget>
+ </item>
</layout>
</widget>
<tabstops>
- <tabstop>buttonBox</tabstop>
- <tabstop>radSingleSymbol</tabstop>
- <tabstop>radCategorized</tabstop>
- <tabstop>radGraduated</tabstop>
- <tabstop>btnChangeSingleSymbol</tabstop>
- <tabstop>cboCategorizedColumn</tabstop>
- <tabstop>btnChangeCategorizedSymbol</tabstop>
- <tabstop>cboCategorizedColorRamp</tabstop>
- <tabstop>viewCategories</tabstop>
- <tabstop>btnAddCategories</tabstop>
- <tabstop>btnDeleteCategory</tabstop>
- <tabstop>btnDeleteAllCategories</tabstop>
- <tabstop>btnJoinCategories</tabstop>
- <tabstop>cboGraduatedColumn</tabstop>
- <tabstop>btnChangeGraduatedSymbol</tabstop>
- <tabstop>spinGraduatedClasses</tabstop>
- <tabstop>cboGraduatedColorRamp</tabstop>
- <tabstop>cboGraduatedMode</tabstop>
- <tabstop>viewGraduated</tabstop>
- <tabstop>btnGraduatedClassify</tabstop>
- <tabstop>btnGraduatedDelete</tabstop>
+ <tabstop>listRenderers</tabstop>
<tabstop>btnSymbolLevels</tabstop>
+ <tabstop>buttonBox</tabstop>
</tabstops>
<resources/>
- <connections>
- <connection>
- <sender>buttonBox</sender>
- <signal>rejected()</signal>
- <receiver>QgsRendererV2PropsDialogBase</receiver>
- <slot>reject()</slot>
- <hints>
- <hint type="sourcelabel">
- <x>325</x>
- <y>388</y>
- </hint>
- <hint type="destinationlabel">
- <x>286</x>
- <y>274</y>
- </hint>
- </hints>
- </connection>
- </connections>
+ <connections/>
</ui>
More information about the QGIS-commit
mailing list