[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