20
20
#include " qgsrasterdataprovider.h"
21
21
#include " qgsrasterlayer.h"
22
22
#include " qgscolordialog.h"
23
+
23
24
#include < QColorDialog>
25
+ #include < QInputDialog>
26
+ #include < QMenu>
24
27
25
28
QgsPalettedRendererWidget::QgsPalettedRendererWidget ( QgsRasterLayer* layer, const QgsRectangle &extent ): QgsRasterRendererWidget( layer, extent )
26
29
{
27
30
setupUi ( this );
28
31
32
+ contextMenu = new QMenu ( tr ( " Options" ), this );
33
+ contextMenu->addAction ( tr ( " Change color" ), this , SLOT ( changeColor () ) );
34
+
35
+ mTreeWidget ->setColumnWidth ( ColorColumn, 50 );
36
+ mTreeWidget ->setContextMenuPolicy ( Qt::CustomContextMenu );
37
+ mTreeWidget ->setSelectionMode ( QAbstractItemView::ExtendedSelection );
38
+ connect ( mTreeWidget , &QTreeView::customContextMenuRequested, [=]( const QPoint& ) { contextMenu->exec ( QCursor::pos () ); }
39
+ );
40
+
29
41
if ( mRasterLayer )
30
42
{
31
43
QgsRasterDataProvider* provider = mRasterLayer ->dataProvider ();
@@ -72,7 +84,7 @@ QgsRasterRenderer* QgsPalettedRendererWidget::renderer()
72
84
73
85
void QgsPalettedRendererWidget::on_mTreeWidget_itemDoubleClicked ( QTreeWidgetItem * item, int column )
74
86
{
75
- if ( column == 1 && item ) // change item color
87
+ if ( column == ColorColumn && item ) // change item color
76
88
{
77
89
item->setFlags ( Qt::ItemIsEnabled | Qt::ItemIsSelectable );
78
90
QColor c = QgsColorDialog::getColor ( item->background ( column ).color (), nullptr );
@@ -82,15 +94,15 @@ void QgsPalettedRendererWidget::on_mTreeWidget_itemDoubleClicked( QTreeWidgetIte
82
94
emit widgetChanged ();
83
95
}
84
96
}
85
- else if ( column == 2 && item )
97
+ else if ( column == LabelColumn && item )
86
98
{
87
99
item->setFlags ( Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsSelectable );
88
100
}
89
101
}
90
102
91
103
void QgsPalettedRendererWidget::on_mTreeWidget_itemChanged ( QTreeWidgetItem * item, int column )
92
104
{
93
- if ( column == 2 && item ) // palette label modified
105
+ if ( column == LabelColumn && item ) // palette label modified
94
106
{
95
107
emit widgetChanged ();
96
108
}
@@ -133,3 +145,25 @@ void QgsPalettedRendererWidget::setFromRenderer( const QgsRasterRenderer* r )
133
145
}
134
146
}
135
147
}
148
+
149
+ void QgsPalettedRendererWidget::changeColor ()
150
+ {
151
+ QList<QTreeWidgetItem *> itemList;
152
+ itemList = mTreeWidget ->selectedItems ();
153
+ if ( itemList.isEmpty () )
154
+ {
155
+ return ;
156
+ }
157
+ QTreeWidgetItem* firstItem = itemList.first ();
158
+
159
+ QColor newColor = QgsColorDialog::getColor ( firstItem->background ( ColorColumn ).color (), this , QStringLiteral ( " Change color" ), true );
160
+ if ( newColor.isValid () )
161
+ {
162
+ Q_FOREACH ( QTreeWidgetItem *item, itemList )
163
+ {
164
+ item->setFlags ( Qt::ItemIsEnabled | Qt::ItemIsSelectable );
165
+ item->setBackground ( ColorColumn, QBrush ( newColor ) );
166
+ }
167
+ emit widgetChanged ();
168
+ }
169
+ }
0 commit comments