Skip to content

Commit f652afb

Browse files
committedOct 2, 2014
Fix #11285 (improve symbol levels dialog for long symbol labels) - by Salvatore Larosa
1 parent c5652a5 commit f652afb

File tree

3 files changed

+31
-9
lines changed

3 files changed

+31
-9
lines changed
 

‎src/gui/symbology-ng/qgssymbollevelsv2dialog.cpp

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ QgsSymbolLevelsV2Dialog::QgsSymbolLevelsV2Dialog( QgsLegendSymbolList list, bool
6767
{
6868
setupUi( this );
6969

70+
QSettings settings;
71+
restoreGeometry( settings.value( "/Windows/symbolLevelsDlg/geometry" ).toByteArray() );
72+
7073
tableLevels->setItemDelegate( new SpinBoxDelegate( this ) );
7174

7275
chkEnable->setChecked( usingSymbolLevels );
@@ -84,23 +87,23 @@ QgsSymbolLevelsV2Dialog::QgsSymbolLevelsV2Dialog( QgsLegendSymbolList list, bool
8487
for ( int i = 0; i < mList.count(); i++ )
8588
{
8689
QgsSymbolV2* sym = mList[i].second;
87-
QString label = mList[i].first;
8890

8991
// set icons for the rows
9092
QIcon icon = QgsSymbolLayerV2Utils::symbolPreviewIcon( sym, QSize( 16, 16 ) );
91-
tableLevels->setVerticalHeaderItem( i, new QTableWidgetItem( icon, label ) );
93+
tableLevels->setVerticalHeaderItem( i, new QTableWidgetItem( icon, QString() ) );
9294

9395
// find out max. number of layers per symbol
9496
int layers = sym->symbolLayerCount();
9597
if ( layers > maxLayers )
9698
maxLayers = layers;
9799
}
98100

99-
tableLevels->setColumnCount( maxLayers );
101+
tableLevels->setColumnCount( maxLayers + 1 );
102+
tableLevels->setHorizontalHeaderItem( 0, new QTableWidgetItem( QString() ) );
100103
for ( int i = 0; i < maxLayers; i++ )
101104
{
102105
QString name = tr( "Layer %1" ).arg( i );
103-
tableLevels->setHorizontalHeaderItem( i, new QTableWidgetItem( name ) );
106+
tableLevels->setHorizontalHeaderItem( i + 1, new QTableWidgetItem( name ) );
104107
}
105108

106109
mMaxLayers = maxLayers;
@@ -115,11 +118,21 @@ QgsSymbolLevelsV2Dialog::QgsSymbolLevelsV2Dialog( QgsLegendSymbolList list, bool
115118
connect( tableLevels, SIGNAL( cellChanged( int, int ) ), this, SLOT( renderingPassChanged( int, int ) ) );
116119
}
117120

121+
QgsSymbolLevelsV2Dialog::~QgsSymbolLevelsV2Dialog()
122+
{
123+
QSettings settings;
124+
settings.setValue( "/Windows/symbolLevelsDlg/geometry", saveGeometry() );
125+
}
126+
118127
void QgsSymbolLevelsV2Dialog::populateTable()
119128
{
120129
for ( int row = 0; row < mList.count(); row++ )
121130
{
122131
QgsSymbolV2* sym = mList[row].second;
132+
QString label = mList[row].first;
133+
QTableWidgetItem *itemLabel = new QTableWidgetItem( label );
134+
itemLabel->setFlags( itemLabel->flags() ^ Qt::ItemIsEditable );
135+
tableLevels->setItem( row, 0, itemLabel );
123136
for ( int layer = 0; layer < mMaxLayers; layer++ )
124137
{
125138
QTableWidgetItem* item;
@@ -134,7 +147,8 @@ void QgsSymbolLevelsV2Dialog::populateTable()
134147
QIcon icon = QgsSymbolLayerV2Utils::symbolLayerPreviewIcon( sl, QgsSymbolV2::MM, QSize( 16, 16 ) );
135148
item = new QTableWidgetItem( icon, QString::number( sl->renderingPass() ) );
136149
}
137-
tableLevels->setItem( row, layer, item );
150+
tableLevels->setItem( row, layer + 1, item );
151+
tableLevels->resizeColumnToContents( 0 );
138152
}
139153
}
140154

@@ -157,7 +171,6 @@ void QgsSymbolLevelsV2Dialog::setDefaultLevels()
157171
}
158172
}
159173

160-
161174
bool QgsSymbolLevelsV2Dialog::usingLevels() const
162175
{
163176
return chkEnable->isChecked();
@@ -168,9 +181,9 @@ void QgsSymbolLevelsV2Dialog::renderingPassChanged( int row, int column )
168181
if ( row < 0 || row >= mList.count() )
169182
return;
170183
QgsSymbolV2* sym = mList[row].second;
171-
if ( column < 0 || column >= sym->symbolLayerCount() )
184+
if ( column < 0 || column > sym->symbolLayerCount() )
172185
return;
173-
sym->symbolLayer( column )->setRenderingPass( tableLevels->item( row, column )->text().toInt() );
186+
sym->symbolLayer( column - 1 )->setRenderingPass( tableLevels->item( row, column )->text().toInt() );
174187
}
175188

176189
void QgsSymbolLevelsV2Dialog::setForceOrderingEnabled( bool enabled )

‎src/gui/symbology-ng/qgssymbollevelsv2dialog.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ class GUI_EXPORT QgsSymbolLevelsV2Dialog : public QDialog, private Ui::QgsSymbol
3030
// @note not available in python bindings
3131
QgsSymbolLevelsV2Dialog( QgsLegendSymbolList list, bool usingSymbolLevels, QWidget* parent = NULL );
3232

33+
~QgsSymbolLevelsV2Dialog();
34+
3335
bool usingLevels() const;
3436

3537
// used by rule-based renderer (to hide checkbox to enable/disable ordering)

‎src/ui/qgssymbollevelsv2dialogbase.ui

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,14 @@
3232
</widget>
3333
</item>
3434
<item row="2" column="0">
35-
<widget class="QTableWidget" name="tableLevels"/>
35+
<widget class="QTableWidget" name="tableLevels">
36+
<property name="horizontalScrollMode">
37+
<enum>QAbstractItemView::ScrollPerPixel</enum>
38+
</property>
39+
<attribute name="horizontalHeaderStretchLastSection">
40+
<bool>true</bool>
41+
</attribute>
42+
</widget>
3643
</item>
3744
<item row="3" column="0">
3845
<widget class="QDialogButtonBox" name="buttonBox">

0 commit comments

Comments
 (0)
Please sign in to comment.