29
29
#include < QSettings>
30
30
#include < QTextStream>
31
31
32
+ // override setData to emit signal when edited. By default the itemChanged signal fires way too often
33
+ void QgsTreeWidgetItem::setData ( int column, int role, const QVariant & value )
34
+ {
35
+ QTreeWidgetItem::setData ( column, role, value );
36
+ if ( role == Qt::EditRole )
37
+ {
38
+ emit itemEdited ( this , column );
39
+ }
40
+ }
41
+
32
42
QgsSingleBandPseudoColorRendererWidget::QgsSingleBandPseudoColorRendererWidget ( QgsRasterLayer* layer, const QgsRectangle &extent )
33
43
: QgsRasterRendererWidget( layer, extent )
34
44
, mMinMaxWidget( nullptr )
@@ -166,7 +176,7 @@ QgsRasterRenderer* QgsSingleBandPseudoColorRendererWidget::renderer()
166
176
return renderer;
167
177
}
168
178
169
- void QgsSingleBandPseudoColorRendererWidget::autolabel ()
179
+ void QgsSingleBandPseudoColorRendererWidget::autoLabel ()
170
180
{
171
181
bool discrete = mColorInterpolationComboBox ->currentText () == tr ( " Discrete" );
172
182
QString label = " " ;
@@ -207,11 +217,13 @@ void QgsSingleBandPseudoColorRendererWidget::autolabel()
207
217
208
218
void QgsSingleBandPseudoColorRendererWidget::on_mAddEntryButton_clicked ()
209
219
{
210
- QTreeWidgetItem * newItem = new QTreeWidgetItem ( mColormapTreeWidget );
220
+ QgsTreeWidgetItem * newItem = new QgsTreeWidgetItem ( mColormapTreeWidget );
211
221
newItem->setText ( 0 , " 0" );
212
222
newItem->setBackground ( 1 , QBrush ( QColor ( Qt::magenta ) ) );
213
223
newItem->setText ( 2 , " " );
214
- autolabel ();
224
+ connect ( newItem, SIGNAL ( itemEdited ( QTreeWidgetItem*, int ) ),
225
+ this , SLOT ( mColormapTreeWidget_itemEdited ( QTreeWidgetItem*, int ) ) );
226
+ autoLabel ();
215
227
emit widgetChanged ();
216
228
}
217
229
@@ -393,13 +405,15 @@ void QgsSingleBandPseudoColorRendererWidget::on_mClassifyButton_clicked()
393
405
394
406
for ( ; value_it != entryValues.end (); ++value_it, ++color_it )
395
407
{
396
- QTreeWidgetItem * newItem = new QTreeWidgetItem ( mColormapTreeWidget );
408
+ QgsTreeWidgetItem * newItem = new QgsTreeWidgetItem ( mColormapTreeWidget );
397
409
newItem->setText ( 0 , QString::number ( *value_it, ' g' ) );
398
410
newItem->setBackground ( 1 , QBrush ( *color_it ) );
399
411
newItem->setText ( 2 , " " );
400
412
newItem->setFlags ( Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsSelectable );
413
+ connect ( newItem, SIGNAL ( itemEdited ( QTreeWidgetItem*, int ) ),
414
+ this , SLOT ( mColormapTreeWidget_itemEdited ( QTreeWidgetItem*, int ) ) );
401
415
}
402
- autolabel ();
416
+ autoLabel ();
403
417
emit widgetChanged ();
404
418
}
405
419
@@ -432,12 +446,14 @@ void QgsSingleBandPseudoColorRendererWidget::populateColormapTreeWidget( const Q
432
446
QList<QgsColorRampShader::ColorRampItem>::const_iterator it = colorRampItems.constBegin ();
433
447
for ( ; it != colorRampItems.constEnd (); ++it )
434
448
{
435
- QTreeWidgetItem * newItem = new QTreeWidgetItem ( mColormapTreeWidget );
449
+ QgsTreeWidgetItem * newItem = new QgsTreeWidgetItem ( mColormapTreeWidget );
436
450
newItem->setText ( 0 , QString::number ( it->value , ' g' ) );
437
451
newItem->setBackground ( 1 , QBrush ( it->color ) );
438
452
newItem->setText ( 2 , it->label );
453
+ connect ( newItem, SIGNAL ( itemEdited ( QTreeWidgetItem*, int ) ),
454
+ this , SLOT ( mColormapTreeWidget_itemEdited ( QTreeWidgetItem*, int ) ) );
439
455
}
440
- autolabel ();
456
+ autoLabel ();
441
457
}
442
458
443
459
void QgsSingleBandPseudoColorRendererWidget::on_mLoadFromBandButton_clicked ()
@@ -650,18 +666,18 @@ void QgsSingleBandPseudoColorRendererWidget::on_mColormapTreeWidget_itemDoubleCl
650
666
}
651
667
}
652
668
653
- void QgsSingleBandPseudoColorRendererWidget::on_mColormapTreeWidget_itemChanged ( QTreeWidgetItem* item, int column )
669
+ void QgsSingleBandPseudoColorRendererWidget::mColormapTreeWidget_itemEdited ( QTreeWidgetItem* item, int column )
654
670
{
655
- if ( column == 0 ) // change item value
671
+ Q_UNUSED ( item );
672
+
673
+ if ( column == 0 ) // item value edited
656
674
{
657
- autolabel ();
675
+ autoLabel ();
658
676
}
659
- else if ( column == 2 ) // change item label
677
+ else if ( column == 2 ) // item label edited
660
678
{
661
- if ( item->text ( 2 ).isEmpty () )
662
- {
663
- autolabel ();
664
- }
679
+ // call autoLabel to fill when empty or gray out when same as autoLabel
680
+ autoLabel ();
665
681
}
666
682
}
667
683
@@ -695,11 +711,14 @@ void QgsSingleBandPseudoColorRendererWidget::setFromRenderer( const QgsRasterRen
695
711
QList<QgsColorRampShader::ColorRampItem>::const_iterator it = colorRampItemList.constBegin ();
696
712
for ( ; it != colorRampItemList.end (); ++it )
697
713
{
698
- QTreeWidgetItem * newItem = new QTreeWidgetItem ( mColormapTreeWidget );
714
+ QgsTreeWidgetItem * newItem = new QgsTreeWidgetItem ( mColormapTreeWidget );
699
715
newItem->setText ( 0 , QString::number ( it->value , ' g' ) );
700
716
newItem->setBackground ( 1 , QBrush ( it->color ) );
701
717
newItem->setText ( 2 , it->label );
718
+ connect ( newItem, SIGNAL ( itemEdited ( QTreeWidgetItem*, int ) ),
719
+ this , SLOT ( mColormapTreeWidget_itemEdited ( QTreeWidgetItem*, int ) ) );
702
720
}
721
+ autoLabel ();
703
722
mClipCheckBox ->setChecked ( colorRampShader->clip () );
704
723
}
705
724
}
@@ -720,7 +739,7 @@ void QgsSingleBandPseudoColorRendererWidget::on_mBandComboBox_currentIndexChange
720
739
void QgsSingleBandPseudoColorRendererWidget::on_mColorInterpolationComboBox_currentIndexChanged ( int index )
721
740
{
722
741
Q_UNUSED (index );
723
- autolabel ();
742
+ autoLabel ();
724
743
}
725
744
726
745
void QgsSingleBandPseudoColorRendererWidget::loadMinMax ( int theBandNo, double theMin, double theMax, int theOrigin )
0 commit comments