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

svn_qgis at osgeo.org svn_qgis at osgeo.org
Sun Feb 20 09:55:35 EST 2011


Author: wonder
Date: 2011-02-20 06:55:35 -0800 (Sun, 20 Feb 2011)
New Revision: 15217

Modified:
   trunk/qgis/src/core/symbology-ng/qgsrulebasedrendererv2.cpp
   trunk/qgis/src/core/symbology-ng/qgsrulebasedrendererv2.h
   trunk/qgis/src/gui/symbology-ng/qgsrulebasedrendererv2widget.cpp
   trunk/qgis/src/gui/symbology-ng/qgsrulebasedrendererv2widget.h
   trunk/qgis/src/ui/qgsrendererrulepropsdialogbase.ui
   trunk/qgis/src/ui/qgsrulebasedrendererv2widget.ui
Log:
[FEATURE] Labels for rules in rule-based renderers and some other goodies.
Applied patch #3222 from Mayeul Kauffmann with various modifications.


Modified: trunk/qgis/src/core/symbology-ng/qgsrulebasedrendererv2.cpp
===================================================================
--- trunk/qgis/src/core/symbology-ng/qgsrulebasedrendererv2.cpp	2011-02-20 11:50:21 UTC (rev 15216)
+++ trunk/qgis/src/core/symbology-ng/qgsrulebasedrendererv2.cpp	2011-02-20 14:55:35 UTC (rev 15217)
@@ -14,7 +14,7 @@
  ***************************************************************************/
 
 #include "qgsrulebasedrendererv2.h"
-
+#include "qgssymbollayerv2.h"
 #include "qgssearchtreenode.h"
 #include "qgssymbollayerv2utils.h"
 #include "qgsrendercontext.h"
@@ -28,10 +28,10 @@
 
 
 
-QgsRuleBasedRendererV2::Rule::Rule( QgsSymbolV2* symbol, int scaleMinDenom, int scaleMaxDenom, QString filterExp )
+QgsRuleBasedRendererV2::Rule::Rule( QgsSymbolV2* symbol, int scaleMinDenom, int scaleMaxDenom, QString filterExp, QString label, QString description )
     : mSymbol( symbol ),
     mScaleMinDenom( scaleMinDenom ), mScaleMaxDenom( scaleMaxDenom ),
-    mFilterExp( filterExp )
+    mFilterExp( filterExp ), mLabel( label ), mDescription( description )
 {
   initFilter();
 }
@@ -62,8 +62,8 @@
 
 QString QgsRuleBasedRendererV2::Rule::dump() const
 {
-  return QString( "RULE - scale [%1,%2] - filter %3 - symbol %4" )
-         .arg( mScaleMinDenom ).arg( mScaleMaxDenom )
+  return QString( "RULE %1 - scale [%2,%3] - filter %4 - symbol %5" )
+         .arg( mLabel ).arg( mScaleMinDenom ).arg( mScaleMaxDenom )
          .arg( mFilterExp ).arg( mSymbol->dump() );
 
 }
@@ -107,6 +107,8 @@
     mScaleMinDenom = other.mScaleMinDenom;
     mScaleMaxDenom = other.mScaleMaxDenom;
     mFilterExp = other.mFilterExp;
+    mLabel = other.mLabel;
+    mDescription = other.mDescription;
     initFilter();
   }
   return *this;
@@ -233,6 +235,8 @@
     ruleElem.setAttribute( "filter", rule.filterExpression() );
     ruleElem.setAttribute( "scalemindenom", rule.scaleMinDenom() );
     ruleElem.setAttribute( "scalemaxdenom", rule.scaleMaxDenom() );
+    ruleElem.setAttribute( "label", rule.label() );
+    ruleElem.setAttribute( "description", rule.description() );
     rulesElem.appendChild( ruleElem );
   }
   rendererElem.appendChild( rulesElem );
@@ -250,7 +254,7 @@
   for ( QList<Rule>::iterator it = mRules.begin(); it != mRules.end(); ++it )
   {
     QPixmap pix = QgsSymbolLayerV2Utils::symbolPreviewPixmap( it->symbol(), iconSize );
-    lst << qMakePair( it->filterExpression(), pix );
+    lst << qMakePair( it->label(), pix );
   }
   return lst;
 }
@@ -260,7 +264,7 @@
   QgsLegendSymbolList lst;
   for ( QList<Rule>::iterator it = mRules.begin(); it != mRules.end(); ++it )
   {
-    lst << qMakePair( it->filterExpression(), it->symbol() );
+    lst << qMakePair( it->label(), it->symbol() );
   }
   return lst;
 }
@@ -292,9 +296,11 @@
     if ( symbolMap.contains( symbolIdx ) )
     {
       QString filterExp = ruleElem.attribute( "filter" );
+      QString label = ruleElem.attribute( "label" );
+      QString description = ruleElem.attribute( "description" );
       int scaleMinDenom = ruleElem.attribute( "scalemindenom", "0" ).toInt();
       int scaleMaxDenom = ruleElem.attribute( "scalemaxdenom", "0" ).toInt();
-      r->mRules.append( Rule( symbolMap.take( symbolIdx ), scaleMinDenom, scaleMaxDenom, filterExp ) );
+      r->mRules.append( Rule( symbolMap.take( symbolIdx ), scaleMinDenom, scaleMaxDenom, filterExp, label, description ) );
     }
     else
     {
@@ -350,11 +356,13 @@
   {
     QString newfilter = QString( "%1 = '%2'" ).arg( r->classAttribute() ).arg( cat.value().toString() );
     QString filter = initialRule.filterExpression();
+    QString label = initialRule.label();
+    QString description = initialRule.description();
     if ( filter.isEmpty() )
       filter = newfilter;
     else
       filter = QString( "(%1) AND (%2)" ).arg( filter ).arg( newfilter );
-    rules.append( Rule( cat.symbol()->clone(), initialRule.scaleMinDenom(), initialRule.scaleMaxDenom(), filter ) );
+    rules.append( Rule( cat.symbol()->clone(), initialRule.scaleMinDenom(), initialRule.scaleMaxDenom(), filter, initialRule.label(), initialRule.description() ) );
   }
   return rules;
 }
@@ -366,11 +374,13 @@
   {
     QString newfilter = QString( "%1 >= '%2' AND %1 <= '%3'" ).arg( r->classAttribute() ).arg( rng.lowerValue() ).arg( rng.upperValue() );
     QString filter = initialRule.filterExpression();
+    QString label = initialRule.label();
+    QString description = initialRule.description();
     if ( filter.isEmpty() )
       filter = newfilter;
     else
       filter = QString( "(%1) AND (%2)" ).arg( filter ).arg( newfilter );
-    rules.append( Rule( rng.symbol()->clone(), initialRule.scaleMinDenom(), initialRule.scaleMaxDenom(), filter ) );
+    rules.append( Rule( rng.symbol()->clone(), initialRule.scaleMinDenom(), initialRule.scaleMaxDenom(), filter, initialRule.label(), initialRule.description() ) );
   }
   return rules;
 }
@@ -387,10 +397,10 @@
       continue; // jump over the first scales out of the interval
     if ( maxDenom != 0 && maxDenom  <= scale )
       break; // ignore the latter scales out of the interval
-    rules.append( Rule( initialRule.symbol()->clone(), oldScale, scale, initialRule.filterExpression() ) );
+    rules.append( Rule( initialRule.symbol()->clone(), oldScale, scale, initialRule.filterExpression(), initialRule.label(), initialRule.description() ) );
     oldScale = scale;
   }
   // last rule
-  rules.append( Rule( initialRule.symbol()->clone(), oldScale, maxDenom, initialRule.filterExpression() ) );
+  rules.append( Rule( initialRule.symbol()->clone(), oldScale, maxDenom, initialRule.filterExpression(), initialRule.label(), initialRule.description() ) );
   return rules;
 }

Modified: trunk/qgis/src/core/symbology-ng/qgsrulebasedrendererv2.h
===================================================================
--- trunk/qgis/src/core/symbology-ng/qgsrulebasedrendererv2.h	2011-02-20 11:50:21 UTC (rev 15216)
+++ trunk/qgis/src/core/symbology-ng/qgsrulebasedrendererv2.h	2011-02-20 14:55:35 UTC (rev 15217)
@@ -44,7 +44,7 @@
     {
       public:
         //! Constructor takes ownership of the symbol
-        Rule( QgsSymbolV2* symbol, int scaleMinDenom = 0, int scaleMaxDenom = 0, QString filterExp = QString() );
+        Rule( QgsSymbolV2* symbol, int scaleMinDenom = 0, int scaleMaxDenom = 0, QString filterExp = QString(), QString label = QString(), QString description = QString() );
         Rule( const Rule& other );
         ~Rule();
         QString dump() const;
@@ -57,10 +57,14 @@
         int scaleMinDenom() const { return mScaleMinDenom; }
         int scaleMaxDenom() const { return mScaleMaxDenom; }
         QString filterExpression() const { return mFilterExp; }
+        QString label() const { return mLabel; }
+        QString description() const { return mDescription; }
 
         void setScaleMinDenom( int scaleMinDenom ) { mScaleMinDenom = scaleMinDenom; }
         void setScaleMaxDenom( int scaleMaxDenom ) { mScaleMaxDenom = scaleMaxDenom; }
         void setFilterExpression( QString filterExp ) { mFilterExp = filterExp; initFilter(); }
+        void setLabel( QString label ) { mLabel = label; }
+        void setDescription( QString description ) { mDescription = description; }
 
         Rule& operator=( const Rule& other );
 
@@ -70,7 +74,7 @@
 
         QgsSymbolV2* mSymbol;
         int mScaleMinDenom, mScaleMaxDenom;
-        QString mFilterExp;
+        QString mFilterExp, mLabel, mDescription;
 
         // temporary
         QgsSearchString mFilterParsed;
@@ -81,7 +85,7 @@
 
     static QgsFeatureRendererV2* create( QDomElement& element );
 
-    //! Constructor. Takes ownership of the defult symbol.
+    //! Constructor. Takes ownership of the default symbol.
     QgsRuleBasedRendererV2( QgsSymbolV2* defaultSymbol );
 
     //! return symbol for current feature. Should not be used individually: there could be more symbols for a feature

Modified: trunk/qgis/src/gui/symbology-ng/qgsrulebasedrendererv2widget.cpp
===================================================================
--- trunk/qgis/src/gui/symbology-ng/qgsrulebasedrendererv2widget.cpp	2011-02-20 11:50:21 UTC (rev 15216)
+++ trunk/qgis/src/gui/symbology-ng/qgsrulebasedrendererv2widget.cpp	2011-02-20 14:55:35 UTC (rev 15217)
@@ -57,7 +57,6 @@
   setupUi( this );
 
   treeRules->setRenderer( mRenderer );
-
   mRefineMenu = new QMenu( btnRefineRule );
   mRefineMenu->addAction( tr( "Add scales" ), this, SLOT( refineRuleScales() ) );
   mRefineMenu->addAction( tr( "Add categories" ), this, SLOT( refineRuleCategories() ) );
@@ -303,6 +302,8 @@
   setupUi( this );
 
   editFilter->setText( mRule.filterExpression() );
+  editLabel->setText( mRule.label() );
+  editDescription->setText( mRule.description() );
 
   if ( mRule.dependsOnScale() )
   {
@@ -368,6 +369,8 @@
 void QgsRendererRulePropsDialog::updateRuleFromGui()
 {
   mRule.setFilterExpression( editFilter->text() );
+  mRule.setLabel( editLabel->text() );
+  mRule.setDescription( editDescription->text() );
   mRule.setScaleMinDenom( groupScale->isChecked() ? spinMinScale->value() : 0 );
   mRule.setScaleMaxDenom( groupScale->isChecked() ? spinMaxScale->value() : 0 );
 }
@@ -377,6 +380,9 @@
 QgsRendererRulesTreeWidget::QgsRendererRulesTreeWidget( QWidget* parent )
     : QTreeWidget( parent ), mR( NULL ), mGrouping( NoGrouping )
 {
+  mLongestMinDenom = 0;
+  mLongestMaxDenom = 0;
+
   setSelectionMode( QAbstractItemView::SingleSelection );
   /*
     setDragEnabled(true);
@@ -401,47 +407,90 @@
 QString QgsRendererRulesTreeWidget::formatScaleRange( int minDenom, int maxDenom )
 {
   if ( maxDenom != 0 )
-    return QString( "<1:%1, 1:%2>" ).arg( minDenom ).arg( maxDenom );
+    return QString( "<1:%L1, 1:%L2>" ).arg( minDenom ).arg( maxDenom );
   else
-    return QString( "<1:%1, 1:inf>" ).arg( minDenom );
+    return QString( "<1:%L1, 1:inf>" ).arg( minDenom );
+
 }
 
+QString QgsRendererRulesTreeWidget::formatScale( int denom, int size )
+{
+  if ( denom != 0 )
+  {
+    QString txt = QString( "1:%L1" ).arg( denom );
+    if ( size > 0 )
+      txt.prepend( QString( size - txt.count(), QChar( ' ' ) ) );
+    return txt;
+  }
+  else
+    return QString();
+}
 
+#include "qgslogger.h"
 void QgsRendererRulesTreeWidget::populateRules()
 {
   if ( !mR ) return;
 
   clear();
+
+  mLongestMinDenom = 0;
+  mLongestMaxDenom = 0;
+  // find longest scale string for future padding
+  // TODO: use a custom model and implement custom sorting
+  for ( int i = 0; i < mR->ruleCount(); ++i )
+  {
+    QgsRuleBasedRendererV2::Rule& rule = mR->ruleAt( i );
+
+    mLongestMinDenom = qMax( mLongestMinDenom, formatScale( rule.scaleMinDenom() ).size() );
+    mLongestMaxDenom = qMax( mLongestMaxDenom, formatScale( rule.scaleMaxDenom() ).size() );
+  }
+
+
+
   if ( mGrouping == NoGrouping )
     populateRulesNoGrouping();
   else if ( mGrouping == GroupingByScale )
     populateRulesGroupByScale();
   else
     populateRulesGroupByFilter();
+
+  setColumnWidth( 1, 200 ); // make the column for filter a bit bigger
 }
 
 void QgsRendererRulesTreeWidget::populateRulesNoGrouping()
 {
   QList<QTreeWidgetItem *> lst;
+
   for ( int i = 0; i < mR->ruleCount(); ++i )
   {
     QgsRuleBasedRendererV2::Rule& rule = mR->ruleAt( i );
 
     QTreeWidgetItem* item = new QTreeWidgetItem;
-    QString txt = rule.filterExpression();
-    if ( txt.isEmpty() ) txt = tr( "(no filter)" );
+
+    QString txtLabel = rule.label();
+    item->setText( 0, txtLabel );
+    item->setData( 0, Qt::UserRole + 1, i );
+    item->setIcon( 0, QgsSymbolLayerV2Utils::symbolPreviewIcon( rule.symbol(), QSize( 16, 16 ) ) );
+
+    QString txtRule = rule.filterExpression();
+    if ( txtRule.isEmpty() ) txtRule = tr( "(no filter)" );
+    item->setText( 1, txtRule );
+
     if ( rule.dependsOnScale() )
     {
-      txt += tr( ", scale " ) + formatScaleRange( rule.scaleMinDenom(), rule.scaleMaxDenom() );
+      item->setText( 2, formatScale( rule.scaleMinDenom(), mLongestMinDenom ) );
+      item->setText( 3, formatScale( rule.scaleMaxDenom(), mLongestMaxDenom ) );
+      item->setTextAlignment( 2, Qt::AlignRight );
+      item->setTextAlignment( 3, Qt::AlignRight );
     }
 
-    item->setText( 0, txt );
-    item->setData( 0, Qt::UserRole + 1, i );
-    item->setIcon( 0, QgsSymbolLayerV2Utils::symbolPreviewIcon( rule.symbol(), QSize( 16, 16 ) ) );
+    //item->setBackground( 1, Qt::lightGray );
+    //item->setBackground( 3, Qt::lightGray );
 
     lst << item;
   }
 
+
   addTopLevelItems( lst );
 }
 
@@ -449,6 +498,9 @@
 {
   QMap< QPair<int, int>, QTreeWidgetItem*> scale_items;
 
+  QFont italicFont;
+  italicFont.setItalic( true );
+
   for ( int i = 0; i < mR->ruleCount(); ++i )
   {
     QgsRuleBasedRendererV2::Rule& rule = mR->ruleAt( i );
@@ -466,15 +518,38 @@
       scale_item->setText( 0, txt );
       scale_item->setData( 0, Qt::UserRole + 1, -2 );
       scale_item->setFlags( scale_item->flags() & ~Qt::ItemIsDragEnabled ); // groups cannot be dragged
+      scale_item->setFont( 0, italicFont );
       scale_items[scale] = scale_item;
+      // need to add the item before setFirstColumnSpanned,
+      // see http://qt.nokia.com/developer/task-tracker/index_html?method=entry&id=214686
+      addTopLevelItem( scale_item );
+      scale_item->setFirstColumnSpanned( true );
     }
 
     QString filter = rule.filterExpression();
 
     QTreeWidgetItem* item = new QTreeWidgetItem( scale_items[scale] );
-    item->setText( 0, filter.isEmpty() ? tr( "(no filter)" ) : filter );
+
+    QString txtLabel = rule.label();
+    item->setText( 0, txtLabel );
     item->setData( 0, Qt::UserRole + 1, i );
     item->setIcon( 0, QgsSymbolLayerV2Utils::symbolPreviewIcon( rule.symbol(), QSize( 16, 16 ) ) );
+
+    QString txtRule = rule.filterExpression();
+    if ( txtRule.isEmpty() ) txtRule = tr( "(no filter)" );
+    item->setText( 1, txtRule );
+
+    if ( rule.dependsOnScale() )
+    {
+      // Displaying scales is redundant here, but keeping them allows to keep constant the layout and width of all columns when switching to one of the two other views
+      item->setText( 2, formatScale( rule.scaleMinDenom(), mLongestMinDenom ) );
+      item->setText( 3, formatScale( rule.scaleMaxDenom(), mLongestMaxDenom ) );
+      item->setTextAlignment( 2, Qt::AlignRight );
+      item->setTextAlignment( 3, Qt::AlignRight );
+    }
+
+    //item->setBackground( 1, Qt::lightGray );
+    //item->setBackground( 3, Qt::lightGray );
   }
   addTopLevelItems( scale_items.values() );
 }
@@ -483,6 +558,9 @@
 {
   QMap<QString, QTreeWidgetItem *> filter_items;
 
+  QFont italicFont;
+  italicFont.setItalic( true );
+
   for ( int i = 0; i < mR->ruleCount(); ++i )
   {
     QgsRuleBasedRendererV2::Rule& rule = mR->ruleAt( i );
@@ -494,20 +572,38 @@
       filter_item->setText( 0, filter.isEmpty() ? tr( "(no filter)" ) : filter );
       filter_item->setData( 0, Qt::UserRole + 1, -1 );
       filter_item->setFlags( filter_item->flags() & ~Qt::ItemIsDragEnabled ); // groups cannot be dragged
+      filter_item->setFont( 0, italicFont );
       filter_items[filter] = filter_item;
+      // need to add the item before setFirstColumnSpanned,
+      // see http://qt.nokia.com/developer/task-tracker/index_html?method=entry&id=214686
+      addTopLevelItem( filter_item );
+      filter_item->setFirstColumnSpanned( true );
     }
 
-    QString txt;
-    if ( rule.dependsOnScale() )
-      txt = QString( "scale <1:%1, 1:%2>" ).arg( rule.scaleMinDenom() ).arg( rule.scaleMaxDenom() );
-    else
-      txt = "any scale";
+    QTreeWidgetItem* item = new QTreeWidgetItem( filter_items[filter] );
 
-    QTreeWidgetItem* item = new QTreeWidgetItem( filter_items[filter] );
-    item->setText( 0, txt );
+    QString txtLabel = rule.label();
+    item->setText( 0, txtLabel );
     item->setData( 0, Qt::UserRole + 1, i );
     item->setIcon( 0, QgsSymbolLayerV2Utils::symbolPreviewIcon( rule.symbol(), QSize( 16, 16 ) ) );
 
+    // Displaying filter is redundant here, but keeping it allows to keep constant the layout and width of all columns when switching to one of the two other views
+    item->setText( 1, filter );
+
+    // Makes table layout slightly more readable when filters are long strings
+    //item->setBackground( 1, Qt::lightGray );
+    //item->setBackground( 3, Qt::lightGray );
+
+    if ( rule.dependsOnScale() )
+    {
+      item->setText( 2, formatScale( rule.scaleMinDenom(), mLongestMinDenom ) );
+      item->setText( 3, formatScale( rule.scaleMaxDenom(), mLongestMaxDenom ) );
+      item->setTextAlignment( 2, Qt::AlignRight );
+      item->setTextAlignment( 3, Qt::AlignRight );
+    }
   }
+
   addTopLevelItems( filter_items.values() );
+
+
 }

Modified: trunk/qgis/src/gui/symbology-ng/qgsrulebasedrendererv2widget.h
===================================================================
--- trunk/qgis/src/gui/symbology-ng/qgsrulebasedrendererv2widget.h	2011-02-20 11:50:21 UTC (rev 15216)
+++ trunk/qgis/src/gui/symbology-ng/qgsrulebasedrendererv2widget.h	2011-02-20 14:55:35 UTC (rev 15217)
@@ -47,8 +47,13 @@
 
     QString formatScaleRange( int minDenom, int maxDenom );
 
+    QString formatScale( int denom, int size = 0 );
+
     QgsRuleBasedRendererV2* mR;
     Grouping mGrouping;
+
+    int mLongestMinDenom;
+    int mLongestMaxDenom;
 };
 
 ///////

Modified: trunk/qgis/src/ui/qgsrendererrulepropsdialogbase.ui
===================================================================
--- trunk/qgis/src/ui/qgsrendererrulepropsdialogbase.ui	2011-02-20 11:50:21 UTC (rev 15216)
+++ trunk/qgis/src/ui/qgsrendererrulepropsdialogbase.ui	2011-02-20 14:55:35 UTC (rev 15217)
@@ -6,7 +6,7 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>545</width>
+    <width>558</width>
     <height>298</height>
    </rect>
   </property>
@@ -15,40 +15,61 @@
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
-    <layout class="QHBoxLayout" name="horizontalLayout">
-     <property name="rightMargin">
-      <number>0</number>
-     </property>
-     <item>
+    <layout class="QFormLayout" name="formLayout">
+     <item row="0" column="0">
       <widget class="QLabel" name="label">
        <property name="text">
-        <string>Filter</string>
+        <string>Label</string>
        </property>
       </widget>
      </item>
-     <item>
-      <widget class="QLineEdit" name="editFilter"/>
+     <item row="0" column="1">
+      <widget class="QLineEdit" name="editLabel"/>
      </item>
-     <item>
-      <widget class="QPushButton" name="btnExpressionBuilder">
-       <property name="sizePolicy">
-        <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
+     <item row="1" column="0">
+      <widget class="QLabel" name="label">
        <property name="text">
-        <string>...</string>
+        <string>Filter</string>
        </property>
       </widget>
      </item>
-     <item>
-      <widget class="QPushButton" name="btnTestFilter">
+     <item row="1" column="1">
+      <layout class="QHBoxLayout" name="horizontalLayout">
+       <item>
+        <widget class="QLineEdit" name="editFilter"/>
+       </item>
+       <item>
+        <widget class="QPushButton" name="btnExpressionBuilder">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="text">
+          <string>...</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QPushButton" name="btnTestFilter">
+         <property name="text">
+          <string>Test</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item row="2" column="0">
+      <widget class="QLabel" name="label_4">
        <property name="text">
-        <string>Test</string>
+        <string>Description</string>
        </property>
       </widget>
      </item>
+     <item row="2" column="1">
+      <widget class="QLineEdit" name="editDescription"/>
+     </item>
     </layout>
    </item>
    <item>
@@ -149,6 +170,17 @@
    </item>
   </layout>
  </widget>
+ <tabstops>
+  <tabstop>editLabel</tabstop>
+  <tabstop>editFilter</tabstop>
+  <tabstop>btnExpressionBuilder</tabstop>
+  <tabstop>btnTestFilter</tabstop>
+  <tabstop>editDescription</tabstop>
+  <tabstop>groupScale</tabstop>
+  <tabstop>spinMinScale</tabstop>
+  <tabstop>spinMaxScale</tabstop>
+  <tabstop>buttonBox</tabstop>
+ </tabstops>
  <resources/>
  <connections>
   <connection>

Modified: trunk/qgis/src/ui/qgsrulebasedrendererv2widget.ui
===================================================================
--- trunk/qgis/src/ui/qgsrulebasedrendererv2widget.ui	2011-02-20 11:50:21 UTC (rev 15216)
+++ trunk/qgis/src/ui/qgsrulebasedrendererv2widget.ui	2011-02-20 14:55:35 UTC (rev 15217)
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>460</width>
-    <height>221</height>
+    <width>622</width>
+    <height>273</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -15,28 +15,45 @@
   </property>
   <layout class="QGridLayout" name="gridLayout">
    <item row="0" column="0">
-    <widget class="QLabel" name="label">
-     <property name="text">
-      <string>Rules</string>
-     </property>
-    </widget>
-   </item>
-   <item row="1" column="0">
     <widget class="QgsRendererRulesTreeWidget" name="treeRules">
      <property name="rootIsDecorated">
       <bool>false</bool>
      </property>
-     <property name="headerHidden">
+     <property name="sortingEnabled">
       <bool>true</bool>
      </property>
+     <property name="headerHidden">
+      <bool>false</bool>
+     </property>
      <column>
       <property name="text">
+       <string>Label</string>
+      </property>
+     </column>
+     <column>
+      <property name="text">
        <string>Rule</string>
       </property>
      </column>
+     <column>
+      <property name="text">
+       <string>Min. scale</string>
+      </property>
+      <property name="textAlignment">
+       <set>AlignHCenter|AlignVCenter|AlignCenter</set>
+      </property>
+     </column>
+     <column>
+      <property name="text">
+       <string>Max. scale</string>
+      </property>
+      <property name="textAlignment">
+       <set>AlignHCenter|AlignVCenter|AlignCenter</set>
+      </property>
+     </column>
     </widget>
    </item>
-   <item row="1" column="1">
+   <item row="0" column="1">
     <layout class="QVBoxLayout" name="verticalLayout">
      <item>
       <widget class="QPushButton" name="btnAddRule">
@@ -68,7 +85,7 @@
      </item>
     </layout>
    </item>
-   <item row="2" column="0" colspan="2">
+   <item row="1" column="0" colspan="2">
     <widget class="QGroupBox" name="groupBox">
      <property name="title">
       <string>Rule grouping</string>



More information about the QGIS-commit mailing list