Skip to content

Commit ffb6ba7

Browse files
committedDec 9, 2016
[FEATURE][raster] support setting of color and transparency on multiple
items in paletted UI
1 parent 4894a6d commit ffb6ba7

File tree

2 files changed

+51
-3
lines changed

2 files changed

+51
-3
lines changed
 

‎src/gui/raster/qgspalettedrendererwidget.cpp

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,24 @@
2020
#include "qgsrasterdataprovider.h"
2121
#include "qgsrasterlayer.h"
2222
#include "qgscolordialog.h"
23+
2324
#include <QColorDialog>
25+
#include <QInputDialog>
26+
#include <QMenu>
2427

2528
QgsPalettedRendererWidget::QgsPalettedRendererWidget( QgsRasterLayer* layer, const QgsRectangle &extent ): QgsRasterRendererWidget( layer, extent )
2629
{
2730
setupUi( this );
2831

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+
2941
if ( mRasterLayer )
3042
{
3143
QgsRasterDataProvider* provider = mRasterLayer->dataProvider();
@@ -72,7 +84,7 @@ QgsRasterRenderer* QgsPalettedRendererWidget::renderer()
7284

7385
void QgsPalettedRendererWidget::on_mTreeWidget_itemDoubleClicked( QTreeWidgetItem * item, int column )
7486
{
75-
if ( column == 1 && item ) //change item color
87+
if ( column == ColorColumn && item ) //change item color
7688
{
7789
item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable );
7890
QColor c = QgsColorDialog::getColor( item->background( column ).color(), nullptr );
@@ -82,15 +94,15 @@ void QgsPalettedRendererWidget::on_mTreeWidget_itemDoubleClicked( QTreeWidgetIte
8294
emit widgetChanged();
8395
}
8496
}
85-
else if ( column == 2 && item )
97+
else if ( column == LabelColumn && item )
8698
{
8799
item->setFlags( Qt::ItemIsEnabled | Qt::ItemIsEditable | Qt::ItemIsSelectable );
88100
}
89101
}
90102

91103
void QgsPalettedRendererWidget::on_mTreeWidget_itemChanged( QTreeWidgetItem * item, int column )
92104
{
93-
if ( column == 2 && item ) //palette label modified
105+
if ( column == LabelColumn && item ) //palette label modified
94106
{
95107
emit widgetChanged();
96108
}
@@ -133,3 +145,25 @@ void QgsPalettedRendererWidget::setFromRenderer( const QgsRasterRenderer* r )
133145
}
134146
}
135147
}
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+
}

‎src/gui/raster/qgspalettedrendererwidget.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class GUI_EXPORT QgsPalettedRendererWidget: public QgsRasterRendererWidget, priv
3131
Q_OBJECT
3232

3333
public:
34+
3435
QgsPalettedRendererWidget( QgsRasterLayer* layer, const QgsRectangle &extent = QgsRectangle() );
3536
static QgsRasterRendererWidget* create( QgsRasterLayer* layer, const QgsRectangle &theExtent ) { return new QgsPalettedRendererWidget( layer, theExtent ); }
3637
~QgsPalettedRendererWidget();
@@ -39,9 +40,22 @@ class GUI_EXPORT QgsPalettedRendererWidget: public QgsRasterRendererWidget, priv
3940

4041
void setFromRenderer( const QgsRasterRenderer* r );
4142

43+
private:
44+
45+
enum Column
46+
{
47+
ValueColumn = 0,
48+
ColorColumn = 1,
49+
LabelColumn = 2,
50+
};
51+
52+
QMenu* contextMenu;
53+
4254
private slots:
55+
4356
void on_mTreeWidget_itemDoubleClicked( QTreeWidgetItem * item, int column );
4457
void on_mTreeWidget_itemChanged( QTreeWidgetItem * item, int column );
58+
void changeColor();
4559
};
4660

4761
#endif // QGSPALETTEDRENDERERWIDGET_H

0 commit comments

Comments
 (0)
Please sign in to comment.