[QGIS Commit] r14454 - in trunk/qgis/src: core gui/symbology-ng

svn_qgis at osgeo.org svn_qgis at osgeo.org
Sat Oct 30 07:22:42 EDT 2010


Author: wonder
Date: 2010-10-30 04:22:42 -0700 (Sat, 30 Oct 2010)
New Revision: 14454

Modified:
   trunk/qgis/src/core/qgsvectorlayer.cpp
   trunk/qgis/src/gui/symbology-ng/qgssymbollevelsv2dialog.cpp
Log:
Fixed #3006 and added a convenience spin box for setting symbol levels (constrained to 0-999)


Modified: trunk/qgis/src/core/qgsvectorlayer.cpp
===================================================================
--- trunk/qgis/src/core/qgsvectorlayer.cpp	2010-10-30 10:00:31 UTC (rev 14453)
+++ trunk/qgis/src/core/qgsvectorlayer.cpp	2010-10-30 11:22:42 UTC (rev 14454)
@@ -840,6 +840,8 @@
     for ( int j = 0; j < sym->symbolLayerCount(); j++ )
     {
       int level = sym->symbolLayer( j )->renderingPass();
+      if ( level < 0 || level >= 1000 ) // ignore invalid levels
+        continue;
       QgsSymbolV2LevelItem item( sym, j );
       while ( level >= levels.count() ) // append new empty levels
         levels.append( QgsSymbolV2Level() );

Modified: trunk/qgis/src/gui/symbology-ng/qgssymbollevelsv2dialog.cpp
===================================================================
--- trunk/qgis/src/gui/symbology-ng/qgssymbollevelsv2dialog.cpp	2010-10-30 10:00:31 UTC (rev 14453)
+++ trunk/qgis/src/gui/symbology-ng/qgssymbollevelsv2dialog.cpp	2010-10-30 11:22:42 UTC (rev 14454)
@@ -6,12 +6,55 @@
 #include "qgssymbolv2.h"
 
 #include <QTableWidgetItem>
+#include <QItemDelegate>
+#include <QSpinBox>
 
+// delegate used from Qt Spin Box example
+class SpinBoxDelegate : public QItemDelegate
+{
+public:
+  SpinBoxDelegate(QObject *parent = 0) : QItemDelegate(parent) {}
+
+    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem & /*option*/, const QModelIndex &/*index*/) const
+    {
+        QSpinBox *editor = new QSpinBox(parent);
+        editor->setMinimum(0);
+        editor->setMaximum(999);
+        return editor;
+    }
+
+    void setEditorData(QWidget *editor, const QModelIndex &index) const
+    {
+        int value = index.model()->data(index, Qt::EditRole).toInt();
+        QSpinBox *spinBox = static_cast<QSpinBox*>(editor);
+        spinBox->setValue(value);
+    }
+
+    void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
+    {
+        QSpinBox *spinBox = static_cast<QSpinBox*>(editor);
+        spinBox->interpretText();
+        int value = spinBox->value();
+
+        model->setData(index, value, Qt::EditRole);
+    }
+
+    void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex & /*index*/) const
+    {
+        editor->setGeometry(option.rect);
+    }
+
+};
+
+////////////////
+
 QgsSymbolLevelsV2Dialog::QgsSymbolLevelsV2Dialog( QgsSymbolV2List symbols, bool usingSymbolLevels, QWidget* parent )
     : QDialog( parent ), mSymbols( symbols )
 {
   setupUi( this );
 
+  tableLevels->setItemDelegate( new SpinBoxDelegate(this) );
+
   chkEnable->setChecked( usingSymbolLevels );
 
   connect( chkEnable, SIGNAL( clicked() ), this, SLOT( updateUi() ) );



More information about the QGIS-commit mailing list