Skip to content

Commit 2001249

Browse files
committedFeb 17, 2012
Started widget for multiband color
1 parent ae2899a commit 2001249

18 files changed

+710
-31
lines changed
 

‎src/app/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,7 @@ INCLUDE_DIRECTORIES(
388388
../core
389389
../core/gps ../core/gps/qextserialport
390390
../core/composer ../core/raster ../core/renderer ../core/symbology ../core/symbology-ng
391-
../gui ../gui/symbology-ng ../gui/attributetable
391+
../gui ../gui/symbology-ng ../gui/attributetable ../gui/raster
392392
../plugins
393393
../python
394394
gps

‎src/app/qgsrasterlayerproperties.cpp

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@
3939
#include "qgsrastertransparency.h"
4040
#include "qgsmaptoolemitpoint.h"
4141

42+
#include "qgsrasterrendererregistry.h"
43+
#include "qgsmultibandcolorrendererwidget.h"
44+
#include "qgspalettedrendererwidget.h"
45+
4246
#include <QTableWidgetItem>
4347
#include <QHeaderView>
4448

@@ -67,7 +71,7 @@ QgsRasterLayerProperties::QgsRasterLayerProperties( QgsMapLayer* lyr, QgsMapCanv
6771
: QDialog( parent, fl ),
6872
// Constant that signals property not used.
6973
TRSTRING_NOT_SET( tr( "Not Set" ) ),
70-
mRasterLayer( qobject_cast<QgsRasterLayer *>( lyr ) )
74+
mRasterLayer( qobject_cast<QgsRasterLayer *>( lyr ) ), mRendererWidget( 0 )
7175
{
7276
ignoreSpinBoxEvent = false; //Short circuit signal loop between min max field and stdDev spin box
7377
mGrayMinimumMaximumEstimated = true;
@@ -329,6 +333,19 @@ QgsRasterLayerProperties::QgsRasterLayerProperties( QgsMapLayer* lyr, QgsMapCanv
329333
}
330334
mMaximumOversamplingSpinBox->setValue( renderer->maxOversampling() );
331335
}
336+
337+
//insert renderer widgets into registry
338+
QgsRasterRendererRegistry::instance()->insertWidgetFunction( "paletted", QgsPalettedRendererWidget::create );
339+
QgsRasterRendererRegistry::instance()->insertWidgetFunction( "multibandcolor", QgsMultiBandColorRendererWidget::create );
340+
341+
//fill available renderers into combo box
342+
QList< QgsRasterRendererRegistryEntry > rendererEntries = QgsRasterRendererRegistry::instance()->entries();
343+
QList< QgsRasterRendererRegistryEntry >::const_iterator rendererIt = rendererEntries.constBegin();
344+
for ( ; rendererIt != rendererEntries.constEnd(); ++rendererIt )
345+
{
346+
mRenderTypeComboBox->addItem( rendererIt->visibleName, rendererIt->name );
347+
}
348+
on_mRenderTypeComboBox_currentIndexChanged( mRenderTypeComboBox->currentIndex() );
332349
} // QgsRasterLayerProperties ctor
333350

334351

@@ -1397,6 +1414,11 @@ void QgsRasterLayerProperties::apply()
13971414
pixmapLegend->setScaledContents( true );
13981415
pixmapLegend->repaint();
13991416

1417+
//set renderer from widget
1418+
QgsRasterRendererWidget* rendererWidget = dynamic_cast<QgsRasterRendererWidget*>( mRendererStackedWidget->currentWidget() );
1419+
mRasterLayer->setRenderer( rendererWidget->renderer() );
1420+
1421+
#if 0
14001422
//set the appropriate render style
14011423
if ( rbtnSingleBand->isChecked() )
14021424
{
@@ -1489,6 +1511,7 @@ void QgsRasterLayerProperties::apply()
14891511
}
14901512
}
14911513
//set render style finished
1514+
#endif //0
14921515

14931516

14941517
//resampling
@@ -1715,6 +1738,29 @@ void QgsRasterLayerProperties::on_buttonBuildPyramids_clicked()
17151738
txtbMetadata->document()->setDefaultStyleSheet( myStyle );
17161739
}
17171740

1741+
void QgsRasterLayerProperties::on_mRenderTypeComboBox_currentIndexChanged( int index )
1742+
{
1743+
delete mRendererWidget;
1744+
mRendererWidget = 0;
1745+
1746+
if ( index < 0 )
1747+
{
1748+
return;
1749+
}
1750+
1751+
QString rendererName = mRenderTypeComboBox->itemData( index ).toString();
1752+
1753+
QgsRasterRendererRegistryEntry rendererEntry;
1754+
if ( QgsRasterRendererRegistry::instance()->rendererData( rendererName, rendererEntry ) )
1755+
{
1756+
if ( rendererEntry.widgetCreateFunction )
1757+
{
1758+
mRendererWidget = ( *rendererEntry.widgetCreateFunction )( mRasterLayer );
1759+
mRendererStackedWidget->addWidget( mRendererWidget );
1760+
}
1761+
}
1762+
}
1763+
17181764
void QgsRasterLayerProperties::on_cboBlue_currentIndexChanged( const QString& theText )
17191765
{
17201766
if ( TRSTRING_NOT_SET != theText )

‎src/app/qgsrasterlayerproperties.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class QgsMapLayer;
2929
class QgsMapCanvas;
3030
class QgsRasterLayer;
3131
class QgsMapToolEmitPoint;
32+
class QgsRasterRendererWidget;
3233

3334
/**Property sheet for a raster map layer
3435
*@author Tim Sutton
@@ -99,6 +100,7 @@ class QgsRasterLayerProperties : public QDialog, private Ui::QgsRasterLayerPrope
99100
void userDefinedMinMax_textEdited( QString );
100101

101102
private slots:
103+
void on_mRenderTypeComboBox_currentIndexChanged( int index );
102104
/** This slow handles necessary interface modifications (i.e. loading min max values) */
103105
void on_cboBlue_currentIndexChanged( const QString& );
104106
/** This slow handles necessary interface modifications (i.e. loading min max values) */
@@ -186,6 +188,8 @@ class QgsRasterLayerProperties : public QDialog, private Ui::QgsRasterLayerPrope
186188
*/
187189
//bool mRasterLayerIsInternal;
188190

191+
QgsRasterRendererWidget* mRendererWidget;
192+
189193
/** \brief Clear current color map table and population with values from new list */
190194
void populateColorMapTable( const QList<QgsColorRampShader::ColorRampItem>& );
191195

‎src/core/raster/qgsmultibandcolorrenderer.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,11 @@ QgsMultiBandColorRenderer::~QgsMultiBandColorRenderer()
3535
{
3636
}
3737

38+
QgsRasterRenderer* QgsMultiBandColorRenderer::create( const QDomElement& elem )
39+
{
40+
return 0;
41+
}
42+
3843
void QgsMultiBandColorRenderer::draw( QPainter* p, QgsRasterViewPort* viewPort, const QgsMapToPixel* theQgsMapToPixel )
3944
{
4045
if ( !p || !mProvider || !viewPort || !theQgsMapToPixel )

‎src/core/raster/qgsmultibandcolorrenderer.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include "qgsrasterrenderer.h"
2222

2323
class QgsContrastEnhancement;
24+
class QDomElement;
2425

2526
/**Renderer for multiband images with the color components*/
2627
class QgsMultiBandColorRenderer: public QgsRasterRenderer
@@ -31,8 +32,17 @@ class QgsMultiBandColorRenderer: public QgsRasterRenderer
3132
QgsContrastEnhancement* blueEnhancement = 0 );
3233
~QgsMultiBandColorRenderer();
3334

35+
static QgsRasterRenderer* create( const QDomElement& elem );
36+
3437
void draw( QPainter* p, QgsRasterViewPort* viewPort, const QgsMapToPixel* theQgsMapToPixel );
3538

39+
int redBand() const { return mRedBand; }
40+
void setRedBand( int band ) { mRedBand = band; }
41+
int greenBand() const { return mGreenBand; }
42+
void setGreenBand( int band ) { mGreenBand = band; }
43+
int blueBand() const { return mBlueBand; }
44+
void setBlueBand( int band ) { mBlueBand = band; }
45+
3646
const QgsContrastEnhancement* redContrastEnhancement() const { return mRedContrastEnhancement; }
3747
void setRedContrastEnhancement( QgsContrastEnhancement* ce ) { mRedContrastEnhancement = ce; }
3848

‎src/core/raster/qgspalettedrasterrenderer.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,25 @@ QgsPalettedRasterRenderer::~QgsPalettedRasterRenderer()
3232
delete[] mColors;
3333
}
3434

35+
QgsRasterRenderer* QgsPalettedRasterRenderer::create( const QDomElement& elem )
36+
{
37+
return 0;
38+
}
39+
40+
QColor* QgsPalettedRasterRenderer::colors() const
41+
{
42+
if ( mNColors < 1 )
43+
{
44+
return 0;
45+
}
46+
QColor* colorArray = new QColor[ mNColors ];
47+
for ( int i = 0; i < mNColors; ++i )
48+
{
49+
colorArray[i] = mColors[i];
50+
}
51+
return colorArray;
52+
}
53+
3554
void QgsPalettedRasterRenderer::draw( QPainter* p, QgsRasterViewPort* viewPort, const QgsMapToPixel* theQgsMapToPixel )
3655
{
3756
if ( !p || !mProvider || !viewPort || !theQgsMapToPixel )

‎src/core/raster/qgspalettedrasterrenderer.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,23 @@
2121
#include "qgsrasterrenderer.h"
2222

2323
class QColor;
24+
class QDomElement;
2425

2526
class QgsPalettedRasterRenderer: public QgsRasterRenderer
2627
{
2728
public:
2829
/**Renderer owns color array*/
2930
QgsPalettedRasterRenderer( QgsRasterDataProvider* provider, int bandNumber, QColor* colorArray, int nColors );
3031
~QgsPalettedRasterRenderer();
32+
static QgsRasterRenderer* create( const QDomElement& elem );
33+
3134
void draw( QPainter* p, QgsRasterViewPort* viewPort, const QgsMapToPixel* theQgsMapToPixel );
3235

36+
/**Returns number of colors*/
37+
int nColors() const { return mNColors; }
38+
/**Returns copy of color array (caller takes ownership)*/
39+
QColor* colors() const;
40+
3341
private:
3442
int mBandNumber;
3543
/**Color array*/

‎src/core/raster/qgsrasterrendererregistry.cpp

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@
1616
***************************************************************************/
1717

1818
#include "qgsrasterrendererregistry.h"
19+
#include "qgsmultibandcolorrenderer.h"
20+
#include "qgspalettedrasterrenderer.h"
1921

2022
QgsRasterRendererRegistry* QgsRasterRendererRegistry::mInstance = 0;
2123

2224
QgsRasterRendererRegistry* QgsRasterRendererRegistry::instance()
2325
{
24-
if( !mInstance )
26+
if ( !mInstance )
2527
{
2628
mInstance = new QgsRasterRendererRegistry();
2729
}
@@ -30,6 +32,21 @@ QgsRasterRendererRegistry* QgsRasterRendererRegistry::instance()
3032

3133
QgsRasterRendererRegistry::QgsRasterRendererRegistry()
3234
{
35+
//add entry for palleted renderer
36+
QgsRasterRendererRegistryEntry palettedEntry;
37+
palettedEntry.name = "paletted";
38+
palettedEntry.visibleName = QObject::tr( "Paletted" );
39+
palettedEntry.rendererCreateFunction = QgsPalettedRasterRenderer::create;
40+
//widget function will be assigned later in raster properties dialog with QgsRasterRendererRegistry::insertWidgetFunction
41+
palettedEntry.widgetCreateFunction = 0;
42+
insert( palettedEntry );
43+
44+
QgsRasterRendererRegistryEntry multiBandColorEntry;
45+
multiBandColorEntry.name = "multibandcolor";
46+
multiBandColorEntry.visibleName = QObject::tr( "Multiband color" );
47+
palettedEntry.rendererCreateFunction = QgsMultiBandColorRenderer::create;
48+
multiBandColorEntry.widgetCreateFunction = 0;
49+
insert( multiBandColorEntry );
3350
}
3451

3552
QgsRasterRendererRegistry::~QgsRasterRendererRegistry()
@@ -41,15 +58,42 @@ void QgsRasterRendererRegistry::insert( QgsRasterRendererRegistryEntry entry )
4158
mEntries.insert( entry.name, entry );
4259
}
4360

61+
void QgsRasterRendererRegistry::insertWidgetFunction( const QString& rendererName, QgsRasterRendererWidgetCreateFunc func )
62+
{
63+
if ( !mEntries.contains( rendererName ) )
64+
{
65+
return;
66+
}
67+
68+
mEntries[rendererName].widgetCreateFunction = func;
69+
}
70+
4471
bool QgsRasterRendererRegistry::rendererData( const QString& rendererName, QgsRasterRendererRegistryEntry& data ) const
4572
{
4673
QHash< QString, QgsRasterRendererRegistryEntry >::const_iterator it = mEntries.find( rendererName );
47-
if( it == mEntries.constEnd() )
74+
if ( it == mEntries.constEnd() )
4875
{
4976
return false;
5077
}
5178
data = it.value();
5279
return true;
5380
}
5481

82+
QStringList QgsRasterRendererRegistry::renderersList() const
83+
{
84+
return QStringList( mEntries.keys() );
85+
}
86+
87+
QList< QgsRasterRendererRegistryEntry > QgsRasterRendererRegistry::entries() const
88+
{
89+
QList< QgsRasterRendererRegistryEntry > result;
90+
91+
QHash< QString, QgsRasterRendererRegistryEntry >::const_iterator it = mEntries.constBegin();
92+
for ( ; it != mEntries.constEnd(); ++it )
93+
{
94+
result.push_back( it.value() );
95+
}
96+
return result;
97+
}
98+
5599

‎src/core/raster/qgsrasterrendererregistry.h

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,21 @@
2121
#include <QHash>
2222
#include <QString>
2323

24+
class QDomElement;
2425
class QgsRasterDataProvider;
26+
class QgsRasterLayer;
2527
class QgsRasterRenderer;
28+
class QgsRasterRendererWidget;
2629

27-
typedef QgsRasterRenderer*(*QgsRasterRendererCreateFunc)(const QDomElement&);
30+
typedef QgsRasterRenderer*( *QgsRasterRendererCreateFunc )( const QDomElement& );
31+
typedef QgsRasterRendererWidget*( *QgsRasterRendererWidgetCreateFunc )( QgsRasterLayer* );
2832

2933
struct QgsRasterRendererRegistryEntry
3034
{
3135
QString name;
36+
QString visibleName; //visible (and translatable) name
3237
QgsRasterRendererCreateFunc rendererCreateFunction; //pointer to create function
33-
//pointer to create function for renderer widget
38+
QgsRasterRendererWidgetCreateFunc widgetCreateFunction; //pointer to create function for renderer widget
3439
};
3540

3641
class QgsRasterRendererRegistry
@@ -40,7 +45,10 @@ class QgsRasterRendererRegistry
4045
~QgsRasterRendererRegistry();
4146

4247
void insert( QgsRasterRendererRegistryEntry entry );
48+
void insertWidgetFunction( const QString& rendererName, QgsRasterRendererWidgetCreateFunc func );
4349
bool rendererData( const QString& rendererName, QgsRasterRendererRegistryEntry& data ) const;
50+
QStringList renderersList() const;
51+
QList< QgsRasterRendererRegistryEntry > entries() const;
4452

4553
protected:
4654
QgsRasterRendererRegistry();

‎src/gui/CMakeLists.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11

22
SET(QGIS_GUI_SRCS
33

4+
raster/qgsmultibandcolorrendererwidget.cpp
5+
raster/qgspalettedrendererwidget.cpp
6+
47
symbology-ng/qgsbrushstylecombobox.cpp
58
symbology-ng/qgscolorrampcombobox.cpp
69
symbology-ng/qgsdashspacedialog.cpp
@@ -80,6 +83,9 @@ qgsquerybuilder.cpp
8083

8184
SET(QGIS_GUI_MOC_HDRS
8285

86+
raster/qgspalettedrendererwidget.h
87+
raster/qgsmultibandcolorrendererwidget.h
88+
8389
symbology-ng/qgsdashspacedialog.h
8490
symbology-ng/qgssymbollayerv2widget.h
8591
symbology-ng/qgssymbolv2propertiesdialog.h
@@ -212,6 +218,7 @@ ELSE (WITH_INTERNAL_SPATIALITE)
212218
ENDIF (WITH_INTERNAL_SPATIALITE)
213219

214220
INCLUDE_DIRECTORIES(${GEOS_INCLUDE_DIR})
221+
INCLUDE_DIRECTORIES(${GDAL_INCLUDE_DIR})
215222

216223
IF (WIN32)
217224
IF (MSVC)
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/***************************************************************************
2+
qgsmultibandcolorrendererwidget.cpp
3+
-----------------------------------
4+
begin : February 2012
5+
copyright : (C) 2012 by Marco Hugentobler
6+
email : marco at sourcepole dot ch
7+
***************************************************************************/
8+
9+
/***************************************************************************
10+
* *
11+
* This program is free software; you can redistribute it and/or modify *
12+
* it under the terms of the GNU General Public License as published by *
13+
* the Free Software Foundation; either version 2 of the License, or *
14+
* (at your option) any later version. *
15+
* *
16+
***************************************************************************/
17+
18+
#include "qgsmultibandcolorrendererwidget.h"
19+
#include "qgsmultibandcolorrenderer.h"
20+
#include "qgsrasterlayer.h"
21+
22+
QgsMultiBandColorRendererWidget::QgsMultiBandColorRendererWidget( QgsRasterLayer* layer ): QgsRasterRendererWidget( layer )
23+
{
24+
setupUi( this );
25+
26+
if ( mRasterLayer )
27+
{
28+
QgsRasterDataProvider* provider = mRasterLayer->dataProvider();
29+
if ( !provider )
30+
{
31+
return;
32+
}
33+
34+
//fill available bands into combo boxes
35+
mRedBandComboBox->addItem( tr( "Not set" ), -1 );
36+
mGreenBandComboBox->addItem( tr( "Not set" ), -1 );
37+
mBlueBandComboBox->addItem( tr( "Not set" ), -1 );
38+
39+
int nBands = provider->bandCount();
40+
for ( int i = 1; i <= nBands; ++i ) //band numbering seem to start at 1
41+
{
42+
mRedBandComboBox->addItem( provider->colorInterpretationName( i ), i );
43+
mGreenBandComboBox->addItem( provider->colorInterpretationName( i ), i );
44+
mBlueBandComboBox->addItem( provider->colorInterpretationName( i ), i );
45+
}
46+
47+
QgsMultiBandColorRenderer* r = dynamic_cast<QgsMultiBandColorRenderer*>( mRasterLayer->renderer() );
48+
if ( r )
49+
{
50+
mRedBandComboBox->setCurrentIndex( mRedBandComboBox->findData( r->redBand() ) );
51+
mGreenBandComboBox->setCurrentIndex( mGreenBandComboBox->findData( r->greenBand() ) );
52+
mBlueBandComboBox->setCurrentIndex( mBlueBandComboBox->findData( r->blueBand() ) );
53+
}
54+
else
55+
{
56+
mRedBandComboBox->setCurrentIndex( mRedBandComboBox->findText( tr( "Red" ) ) );
57+
mGreenBandComboBox->setCurrentIndex( mGreenBandComboBox->findText( tr( "Green" ) ) );
58+
mBlueBandComboBox->setCurrentIndex( mBlueBandComboBox->findText( tr( "Blue" ) ) );
59+
}
60+
}
61+
}
62+
63+
QgsMultiBandColorRendererWidget::~QgsMultiBandColorRendererWidget()
64+
{
65+
}
66+
67+
QgsRasterRenderer* QgsMultiBandColorRendererWidget::renderer()
68+
{
69+
return new QgsMultiBandColorRenderer( mRasterLayer->dataProvider(),
70+
mRedBandComboBox->itemData( mRedBandComboBox->currentIndex() ).toInt(),
71+
mGreenBandComboBox->itemData( mGreenBandComboBox->currentIndex() ).toInt(),
72+
mBlueBandComboBox->itemData( mBlueBandComboBox->currentIndex() ).toInt()
73+
);
74+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/***************************************************************************
2+
qgsmultibandcolorrendererwidget.h
3+
---------------------------------
4+
begin : February 2012
5+
copyright : (C) 2012 by Marco Hugentobler
6+
email : marco at sourcepole dot ch
7+
***************************************************************************/
8+
9+
/***************************************************************************
10+
* *
11+
* This program is free software; you can redistribute it and/or modify *
12+
* it under the terms of the GNU General Public License as published by *
13+
* the Free Software Foundation; either version 2 of the License, or *
14+
* (at your option) any later version. *
15+
* *
16+
***************************************************************************/
17+
18+
#ifndef QGSMULTIBANDCOLORRENDERERWIDGET_H
19+
#define QGSMULTIBANDCOLORRENDERERWIDGET_H
20+
21+
#include "qgsrasterrendererwidget.h"
22+
#include "ui_qgsmultibandcolorrendererwidgetbase.h"
23+
24+
class QgsRasterLayer;
25+
26+
class QgsMultiBandColorRendererWidget: public QgsRasterRendererWidget, private Ui::QgsMultiBandColorRendererWidgetBase
27+
{
28+
Q_OBJECT
29+
30+
public:
31+
QgsMultiBandColorRendererWidget( QgsRasterLayer* layer );
32+
static QgsRasterRendererWidget* create( QgsRasterLayer* layer ) { return new QgsMultiBandColorRendererWidget( layer ); }
33+
~QgsMultiBandColorRendererWidget();
34+
35+
QgsRasterRenderer* renderer();
36+
};
37+
38+
#endif // QGSMULTIBANDCOLORRENDERERWIDGET_H
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
/***************************************************************************
2+
qgspalettedrendererwidget.cpp
3+
-----------------------------
4+
begin : February 2012
5+
copyright : (C) 2012 by Marco Hugentobler
6+
email : marco at sourcepole dot ch
7+
***************************************************************************/
8+
9+
/***************************************************************************
10+
* *
11+
* This program is free software; you can redistribute it and/or modify *
12+
* it under the terms of the GNU General Public License as published by *
13+
* the Free Software Foundation; either version 2 of the License, or *
14+
* (at your option) any later version. *
15+
* *
16+
***************************************************************************/
17+
18+
#include "qgspalettedrendererwidget.h"
19+
#include "qgspalettedrasterrenderer.h"
20+
#include "qgsrasterlayer.h"
21+
#include <QColorDialog>
22+
23+
QgsPalettedRendererWidget::QgsPalettedRendererWidget( QgsRasterLayer* layer ): QgsRasterRendererWidget( layer )
24+
{
25+
setupUi( this );
26+
27+
if ( mRasterLayer )
28+
{
29+
QgsRasterDataProvider* provider = mRasterLayer->dataProvider();
30+
if ( !provider )
31+
{
32+
return;
33+
}
34+
35+
//fill available bands into combo box
36+
int nBands = provider->bandCount();
37+
for ( int i = 1; i <= nBands; ++i ) //band numbering seem to start at 1
38+
{
39+
mBandComboBox->addItem( provider->colorInterpretationName( i ), i );
40+
}
41+
42+
QgsPalettedRasterRenderer* r = dynamic_cast<QgsPalettedRasterRenderer*>( mRasterLayer->renderer() );
43+
if ( r )
44+
{
45+
//read values and colors and fill into tree widget
46+
int nColors = r->nColors();
47+
QColor* colors = r->colors();
48+
for ( int i = 0; i < nColors; ++i )
49+
{
50+
QTreeWidgetItem* item = new QTreeWidgetItem( mTreeWidget );
51+
item->setText( 0, QString::number( i ) );
52+
item->setBackground( 1, QBrush( colors[i] ) );
53+
}
54+
delete[] colors;
55+
}
56+
else
57+
{
58+
//read default palette settings from layer
59+
QList<QgsColorRampShader::ColorRampItem>* itemList =
60+
mRasterLayer->colorTable( mBandComboBox->itemData( mBandComboBox->currentIndex() ).toInt() );
61+
QList<QgsColorRampShader::ColorRampItem>::const_iterator itemIt = itemList->constBegin();
62+
int index = 0;
63+
for ( ; itemIt != itemList->constEnd(); ++itemIt )
64+
{
65+
QTreeWidgetItem* item = new QTreeWidgetItem( mTreeWidget );
66+
item->setText( 0, QString::number( index ) );
67+
item->setBackground( 1, QBrush( itemIt->color ) );
68+
++index;
69+
}
70+
}
71+
}
72+
}
73+
74+
QgsPalettedRendererWidget::~QgsPalettedRendererWidget()
75+
{
76+
77+
}
78+
79+
QgsRasterRenderer* QgsPalettedRendererWidget::renderer()
80+
{
81+
int nColors = mTreeWidget->topLevelItemCount();
82+
QColor* colorArray = new QColor[nColors];
83+
for ( int i = 0; i < nColors; ++i )
84+
{
85+
colorArray[i] = mTreeWidget->topLevelItem( i )->background( 1 ).color();
86+
}
87+
int bandNumber = mBandComboBox->itemData( mBandComboBox->currentIndex() ).toInt();
88+
return new QgsPalettedRasterRenderer( mRasterLayer->dataProvider(), bandNumber, colorArray, nColors );
89+
}
90+
91+
void QgsPalettedRendererWidget::on_mTreeWidget_itemDoubleClicked( QTreeWidgetItem * item, int column )
92+
{
93+
if ( column == 1 && item ) //change item color
94+
{
95+
QColor c = QColorDialog::getColor( item->background( column ).color() );
96+
if ( c.isValid() )
97+
{
98+
item->setBackground( column, QBrush( c ) );
99+
}
100+
}
101+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/***************************************************************************
2+
qgspalettedrendererwidget.h
3+
---------------------------
4+
begin : February 2012
5+
copyright : (C) 2012 by Marco Hugentobler
6+
email : marco at sourcepole dot ch
7+
***************************************************************************/
8+
9+
/***************************************************************************
10+
* *
11+
* This program is free software; you can redistribute it and/or modify *
12+
* it under the terms of the GNU General Public License as published by *
13+
* the Free Software Foundation; either version 2 of the License, or *
14+
* (at your option) any later version. *
15+
* *
16+
***************************************************************************/
17+
18+
#ifndef QGSPALETTEDRENDERERWIDGET_H
19+
#define QGSPALETTEDRENDERERWIDGET_H
20+
21+
#include "qgsrasterrendererwidget.h"
22+
#include "ui_qgspalettedrendererwidgetbase.h"
23+
24+
class QgsRasterLayer;
25+
26+
class QgsPalettedRendererWidget: public QgsRasterRendererWidget, private Ui::QgsPalettedRendererWidgetBase
27+
{
28+
Q_OBJECT
29+
30+
public:
31+
QgsPalettedRendererWidget( QgsRasterLayer* layer );
32+
static QgsRasterRendererWidget* create( QgsRasterLayer* layer ) { return new QgsPalettedRendererWidget( layer ); }
33+
~QgsPalettedRendererWidget();
34+
35+
QgsRasterRenderer* renderer();
36+
37+
private slots:
38+
void on_mTreeWidget_itemDoubleClicked( QTreeWidgetItem * item, int column );
39+
};
40+
41+
#endif // QGSPALETTEDRENDERERWIDGET_H
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/***************************************************************************
2+
qgsrasterrendererwidget.h
3+
---------------------------
4+
begin : February 2012
5+
copyright : (C) 2012 by Marco Hugentobler
6+
email : marco at sourcepole dot ch
7+
***************************************************************************/
8+
9+
/***************************************************************************
10+
* *
11+
* This program is free software; you can redistribute it and/or modify *
12+
* it under the terms of the GNU General Public License as published by *
13+
* the Free Software Foundation; either version 2 of the License, or *
14+
* (at your option) any later version. *
15+
* *
16+
***************************************************************************/
17+
18+
#ifndef QGSRASTERRENDERERWIDGET_H
19+
#define QGSRASTERRENDERERWIDGET_H
20+
21+
#include <QWidget>
22+
23+
class QgsRasterLayer;
24+
class QgsRasterRenderer;
25+
26+
class QgsRasterRendererWidget: public QWidget
27+
{
28+
public:
29+
QgsRasterRendererWidget( QgsRasterLayer* layer ) { mRasterLayer = layer; }
30+
virtual ~QgsRasterRendererWidget() {}
31+
32+
virtual QgsRasterRenderer* renderer() = 0;
33+
34+
void setRasterLayer( QgsRasterLayer* layer ) { mRasterLayer = layer; }
35+
const QgsRasterLayer* rasterLayer() const { return mRasterLayer; }
36+
37+
protected:
38+
QgsRasterLayer* mRasterLayer;
39+
};
40+
41+
#endif // QGSRASTERRENDERERWIDGET_H
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<ui version="4.0">
3+
<class>QgsMultiBandColorRendererWidgetBase</class>
4+
<widget class="QWidget" name="QgsMultiBandColorRendererWidgetBase">
5+
<property name="geometry">
6+
<rect>
7+
<x>0</x>
8+
<y>0</y>
9+
<width>260</width>
10+
<height>248</height>
11+
</rect>
12+
</property>
13+
<property name="windowTitle">
14+
<string>Form</string>
15+
</property>
16+
<layout class="QGridLayout" name="gridLayout_2">
17+
<item row="0" column="0">
18+
<layout class="QGridLayout" name="gridLayout">
19+
<item row="0" column="0">
20+
<widget class="QLabel" name="mRedBandLabel">
21+
<property name="text">
22+
<string>Red band</string>
23+
</property>
24+
</widget>
25+
</item>
26+
<item row="0" column="1">
27+
<widget class="QComboBox" name="mRedBandComboBox"/>
28+
</item>
29+
<item row="1" column="0">
30+
<widget class="QLabel" name="mGreenBandLabel">
31+
<property name="text">
32+
<string>Green band</string>
33+
</property>
34+
</widget>
35+
</item>
36+
<item row="1" column="1">
37+
<widget class="QComboBox" name="mGreenBandComboBox"/>
38+
</item>
39+
<item row="2" column="0">
40+
<widget class="QLabel" name="mBlueBandLabel">
41+
<property name="text">
42+
<string>Blue band</string>
43+
</property>
44+
</widget>
45+
</item>
46+
<item row="2" column="1">
47+
<widget class="QComboBox" name="mBlueBandComboBox"/>
48+
</item>
49+
</layout>
50+
</item>
51+
<item row="1" column="0">
52+
<widget class="QGroupBox" name="mMinMaxGroupBox">
53+
<property name="title">
54+
<string>Min/Max values</string>
55+
</property>
56+
</widget>
57+
</item>
58+
<item row="2" column="0">
59+
<widget class="QGroupBox" name="mContrastEnhancementGroupBox">
60+
<property name="title">
61+
<string>Contrast enhancement</string>
62+
</property>
63+
</widget>
64+
</item>
65+
</layout>
66+
</widget>
67+
<resources/>
68+
<connections/>
69+
</ui>
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<ui version="4.0">
3+
<class>QgsPalettedRendererWidgetBase</class>
4+
<widget class="QWidget" name="QgsPalettedRendererWidgetBase">
5+
<property name="geometry">
6+
<rect>
7+
<x>0</x>
8+
<y>0</y>
9+
<width>211</width>
10+
<height>256</height>
11+
</rect>
12+
</property>
13+
<property name="windowTitle">
14+
<string>Form</string>
15+
</property>
16+
<layout class="QGridLayout" name="gridLayout">
17+
<item row="0" column="0">
18+
<layout class="QHBoxLayout" name="horizontalLayout">
19+
<item>
20+
<widget class="QLabel" name="mBandLabel">
21+
<property name="sizePolicy">
22+
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
23+
<horstretch>0</horstretch>
24+
<verstretch>0</verstretch>
25+
</sizepolicy>
26+
</property>
27+
<property name="text">
28+
<string>Band</string>
29+
</property>
30+
</widget>
31+
</item>
32+
<item>
33+
<widget class="QComboBox" name="mBandComboBox"/>
34+
</item>
35+
</layout>
36+
</item>
37+
<item row="1" column="0">
38+
<widget class="QTreeWidget" name="mTreeWidget">
39+
<column>
40+
<property name="text">
41+
<string>Value</string>
42+
</property>
43+
</column>
44+
<column>
45+
<property name="text">
46+
<string>Color</string>
47+
</property>
48+
</column>
49+
</widget>
50+
</item>
51+
</layout>
52+
</widget>
53+
<resources/>
54+
<connections/>
55+
</ui>

‎src/ui/qgsrasterlayerpropertiesbase.ui

Lines changed: 134 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
<rect>
77
<x>0</x>
88
<y>0</y>
9-
<width>691</width>
10-
<height>617</height>
9+
<width>706</width>
10+
<height>663</height>
1111
</rect>
1212
</property>
1313
<property name="windowTitle">
@@ -36,6 +36,113 @@
3636
<height>22</height>
3737
</size>
3838
</property>
39+
<widget class="QWidget" name="tab">
40+
<attribute name="title">
41+
<string comment="mRendererTab">Style</string>
42+
</attribute>
43+
<layout class="QGridLayout" name="gridLayout_10">
44+
<item row="0" column="0">
45+
<widget class="QGroupBox" name="mResamplingGroupBox_2">
46+
<property name="title">
47+
<string>Resampling</string>
48+
</property>
49+
<layout class="QGridLayout" name="gridLayout_9">
50+
<item row="0" column="0">
51+
<widget class="QLabel" name="mZoomedInResamplingLabel">
52+
<property name="text">
53+
<string>Zoomed in</string>
54+
</property>
55+
</widget>
56+
</item>
57+
<item row="0" column="1">
58+
<widget class="QLabel" name="mZoomedOutResamplingLabel">
59+
<property name="text">
60+
<string>Zoomed out</string>
61+
</property>
62+
</widget>
63+
</item>
64+
<item row="0" column="2">
65+
<widget class="QLabel" name="mMaximumOversamplingLabel">
66+
<property name="text">
67+
<string>Maximum oversampling</string>
68+
</property>
69+
</widget>
70+
</item>
71+
<item row="1" column="0">
72+
<widget class="QComboBox" name="mZoomedInResamplingComboBox"/>
73+
</item>
74+
<item row="1" column="1">
75+
<widget class="QComboBox" name="mZoomedOutResamplingComboBox"/>
76+
</item>
77+
<item row="1" column="2">
78+
<widget class="QDoubleSpinBox" name="mMaximumOversamplingSpinBox"/>
79+
</item>
80+
</layout>
81+
</widget>
82+
</item>
83+
<item row="1" column="0">
84+
<layout class="QHBoxLayout" name="horizontalLayout_2">
85+
<item>
86+
<widget class="QLabel" name="mRenderTypeLabel">
87+
<property name="sizePolicy">
88+
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
89+
<horstretch>0</horstretch>
90+
<verstretch>0</verstretch>
91+
</sizepolicy>
92+
</property>
93+
<property name="maximumSize">
94+
<size>
95+
<width>32767</width>
96+
<height>22</height>
97+
</size>
98+
</property>
99+
<property name="text">
100+
<string>Render type</string>
101+
</property>
102+
</widget>
103+
</item>
104+
<item>
105+
<widget class="QComboBox" name="mRenderTypeComboBox">
106+
<property name="sizePolicy">
107+
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
108+
<horstretch>0</horstretch>
109+
<verstretch>0</verstretch>
110+
</sizepolicy>
111+
</property>
112+
<property name="minimumSize">
113+
<size>
114+
<width>0</width>
115+
<height>26</height>
116+
</size>
117+
</property>
118+
<property name="maximumSize">
119+
<size>
120+
<width>32767</width>
121+
<height>22</height>
122+
</size>
123+
</property>
124+
</widget>
125+
</item>
126+
<item>
127+
<spacer name="horizontalSpacer_2">
128+
<property name="orientation">
129+
<enum>Qt::Horizontal</enum>
130+
</property>
131+
<property name="sizeHint" stdset="0">
132+
<size>
133+
<width>318</width>
134+
<height>20</height>
135+
</size>
136+
</property>
137+
</spacer>
138+
</item>
139+
</layout>
140+
</item>
141+
<item row="2" column="0">
142+
<widget class="QStackedWidget" name="mRendererStackedWidget"/>
143+
</item>
144+
</layout>
145+
</widget>
39146
<widget class="QWidget" name="tabPageSymbology">
40147
<attribute name="icon">
41148
<iconset resource="../../images/images.qrc">
@@ -757,30 +864,30 @@
757864
</property>
758865
<layout class="QGridLayout" name="gridLayout_7">
759866
<item row="1" column="0">
760-
<widget class="QComboBox" name="mZoomedInResamplingComboBox"/>
867+
<widget class="QComboBox" name="mZoomedInResamplingComboBox_3"/>
761868
</item>
762869
<item row="0" column="0">
763-
<widget class="QLabel" name="mZoomedInResamplingLabel">
870+
<widget class="QLabel" name="mZoomedInResamplingLabel_3">
764871
<property name="text">
765872
<string>Zoomed in</string>
766873
</property>
767874
</widget>
768875
</item>
769876
<item row="2" column="0">
770-
<widget class="QLabel" name="mZoomedOutResamplingLabel">
877+
<widget class="QLabel" name="mZoomedOutResamplingLabel_3">
771878
<property name="text">
772879
<string>Zoomed out</string>
773880
</property>
774881
</widget>
775882
</item>
776883
<item row="3" column="0">
777-
<widget class="QComboBox" name="mZoomedOutResamplingComboBox"/>
884+
<widget class="QComboBox" name="mZoomedOutResamplingComboBox_3"/>
778885
</item>
779886
<item row="5" column="0">
780-
<widget class="QDoubleSpinBox" name="mMaximumOversamplingSpinBox"/>
887+
<widget class="QDoubleSpinBox" name="mMaximumOversamplingSpinBox_3"/>
781888
</item>
782889
<item row="4" column="0">
783-
<widget class="QLabel" name="mMaximumOversamplingLabel">
890+
<widget class="QLabel" name="mMaximumOversamplingLabel_3">
784891
<property name="text">
785892
<string>Maximum oversampling</string>
786893
</property>
@@ -1845,6 +1952,8 @@ p, li { white-space: pre-wrap; }
18451952
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
18461953
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
18471954
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
1955+
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
1956+
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
18481957
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:10pt;&quot;&gt;&lt;/p&gt;
18491958
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans'; font-size:10pt;&quot;&gt;&lt;/p&gt;
18501959
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;&quot;&gt;&lt;/p&gt;
@@ -1961,17 +2070,20 @@ p, li { white-space: pre-wrap; }
19612070
</widget>
19622071
</widget>
19632072
</item>
1964-
<item row="1" column="0">
1965-
<widget class="QPushButton" name="pbnLoadDefaultStyle">
1966-
<property name="text">
1967-
<string>Restore Default Style</string>
2073+
<item row="2" column="0" colspan="4">
2074+
<widget class="QDialogButtonBox" name="buttonBox">
2075+
<property name="orientation">
2076+
<enum>Qt::Horizontal</enum>
2077+
</property>
2078+
<property name="standardButtons">
2079+
<set>QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Ok</set>
19682080
</property>
19692081
</widget>
19702082
</item>
1971-
<item row="1" column="1">
1972-
<widget class="QPushButton" name="pbnSaveDefaultStyle">
2083+
<item row="1" column="3">
2084+
<widget class="QPushButton" name="pbnSaveStyleAs">
19732085
<property name="text">
1974-
<string>Save As Default</string>
2086+
<string>Save Style ...</string>
19752087
</property>
19762088
</widget>
19772089
</item>
@@ -1982,20 +2094,17 @@ p, li { white-space: pre-wrap; }
19822094
</property>
19832095
</widget>
19842096
</item>
1985-
<item row="1" column="3">
1986-
<widget class="QPushButton" name="pbnSaveStyleAs">
2097+
<item row="1" column="0">
2098+
<widget class="QPushButton" name="pbnLoadDefaultStyle">
19872099
<property name="text">
1988-
<string>Save Style ...</string>
2100+
<string>Restore Default Style</string>
19892101
</property>
19902102
</widget>
19912103
</item>
1992-
<item row="2" column="0" colspan="4">
1993-
<widget class="QDialogButtonBox" name="buttonBox">
1994-
<property name="orientation">
1995-
<enum>Qt::Horizontal</enum>
1996-
</property>
1997-
<property name="standardButtons">
1998-
<set>QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Help|QDialogButtonBox::Ok</set>
2104+
<item row="1" column="1">
2105+
<widget class="QPushButton" name="pbnSaveDefaultStyle">
2106+
<property name="text">
2107+
<string>Save As Default</string>
19992108
</property>
20002109
</widget>
20012110
</item>

0 commit comments

Comments
 (0)
Please sign in to comment.