Skip to content

Commit 42a5eb9

Browse files
committed
Merge branch 'master' of github.com:qgis/Quantum-GIS
2 parents f3f1c43 + 9a006e4 commit 42a5eb9

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+694
-514
lines changed

python/core/qgsrasterlayer.sip

+5-14
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,10 @@ public:
3535
bool loadDefaultStyleFlag = true );
3636

3737
/** \brief [ data provider interface ] Constructor in provider mode */
38-
QgsRasterLayer( int dummy,
39-
const QString & baseName = QString(),
40-
const QString & path = QString(),
41-
const QString & providerLib = QString(),
42-
const QStringList & layers = QStringList(),
43-
const QStringList & styles = QStringList(),
44-
const QString & format = QString(),
45-
const QString & crs = QString());
46-
38+
QgsRasterLayer( const QString & uri,
39+
const QString & baseName,
40+
const QString & providerKey,
41+
bool loadDefaultStyleFlag = true );
4742

4843
/** \brief The destructor */
4944
~QgsRasterLayer();
@@ -195,11 +190,7 @@ public:
195190
QString redBandName();
196191

197192
/** [ data provider interface ] Set the data provider */
198-
void setDataProvider( const QString & provider,
199-
const QStringList & layers,
200-
const QStringList & styles,
201-
const QString & format,
202-
const QString & crs );
193+
void setDataProvider( const QString & provider );
203194

204195
/** \brief Mutator for drawing style */
205196
void setDrawingStyle( const DrawingStyle & theDrawingStyle );

python/core/qgsrasterrenderer.sip

+189
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
class QgsRasterRenderer
2+
{
3+
%TypeHeaderCode
4+
#include "qgsrasterrenderer.h"
5+
#include "qgspalettedrasterrenderer.h"
6+
#include "qgsmultibandcolorrenderer.h"
7+
#include "qgssinglebandpseudocolorrenderer.h"
8+
#include "qgssinglebandgrayrenderer.h"
9+
#include "qgssinglebandcolordatarenderer.h"
10+
%End
11+
12+
%ConvertToSubClassCode
13+
if (dynamic_cast<QgsPalettedRasterRenderer*>(sipCpp) != NULL)
14+
sipClass = sipClass_QgsPalettedRasterRenderer;
15+
else if (dynamic_cast<QgsMultiBandColorRenderer*>(sipCpp) != NULL)
16+
sipClass = sipClass_QgsMultiBandColorRenderer;
17+
else if (dynamic_cast<QgsSingleBandPseudoColorRenderer*>(sipCpp) != NULL)
18+
sipClass = sipClass_QgsSingleBandPseudoColorRenderer;
19+
else if (dynamic_cast<QgsSingleBandGrayRenderer*>(sipCpp) != NULL)
20+
sipClass = sipClass_QgsSingleBandGrayRenderer;
21+
else if (dynamic_cast<QgsSingleBandGrayRenderer*>(sipCpp) != NULL)
22+
sipClass = sipClass_QgsSingleBandGrayRenderer;
23+
else
24+
sipClass = 0;
25+
%End
26+
27+
public:
28+
QgsRasterRenderer( QgsRasterDataProvider* provider, const QString& type );
29+
virtual ~QgsRasterRenderer();
30+
31+
virtual QString type() const;
32+
virtual void draw( QPainter* p, QgsRasterViewPort* viewPort, const QgsMapToPixel* theQgsMapToPixel ) = 0;
33+
34+
bool usesTransparency( QgsCoordinateReferenceSystem& srcSRS, QgsCoordinateReferenceSystem& dstSRS ) const;
35+
36+
void setOpacity( double opacity );
37+
double opacity() const;
38+
39+
void setRasterTransparency( QgsRasterTransparency* t );
40+
const QgsRasterTransparency* rasterTransparency() const;
41+
42+
void setAlphaBand( int band );
43+
int alphaBand() const;
44+
45+
void setInvertColor( bool invert );
46+
bool invertColor() const;
47+
48+
/**Set resampler for zoomed in scales. Takes ownership of the object*/
49+
void setZoomedInResampler( QgsRasterResampler* r );
50+
const QgsRasterResampler* zoomedInResampler();
51+
52+
/**Set resampler for zoomed out scales. Takes ownership of the object*/
53+
void setZoomedOutResampler( QgsRasterResampler* r );
54+
const QgsRasterResampler* zoomedOutResampler() const;
55+
56+
void setMaxOversampling( double os );
57+
double maxOversampling() const;
58+
59+
/**Get symbology items if provided by renderer*/
60+
virtual void legendSymbologyItems( QList< QPair< QString, QColor > >& symbolItems ) const;
61+
62+
virtual void writeXML( QDomDocument& doc, QDomElement& parentElem ) const = 0;
63+
64+
/**Sets base class members from xml. Usually called from create() methods of subclasses*/
65+
void readXML( const QDomElement& rendererElem );
66+
};
67+
68+
class QgsPalettedRasterRenderer: public QgsRasterRenderer
69+
{
70+
%TypeHeaderCode
71+
#include "qgspalettedrasterrenderer.h"
72+
%End
73+
public:
74+
/**Renderer owns color array*/
75+
QgsPalettedRasterRenderer( QgsRasterDataProvider* provider, int bandNumber, QColor* colorArray, int nColors );
76+
~QgsPalettedRasterRenderer();
77+
static QgsRasterRenderer* create( const QDomElement& elem, QgsRasterDataProvider* provider );
78+
79+
void draw( QPainter* p, QgsRasterViewPort* viewPort, const QgsMapToPixel* theQgsMapToPixel );
80+
81+
/**Returns number of colors*/
82+
int nColors() const;
83+
/**Returns copy of color array (caller takes ownership)*/
84+
QColor* colors() const;
85+
86+
void writeXML( QDomDocument& doc, QDomElement& parentElem ) const;
87+
88+
void legendSymbologyItems( QList< QPair< QString, QColor > >& symbolItems ) const;
89+
};
90+
91+
class QgsMultiBandColorRenderer: public QgsRasterRenderer
92+
{
93+
%TypeHeaderCode
94+
#include "qgsmultibandcolorrenderer.h"
95+
%End
96+
public:
97+
QgsMultiBandColorRenderer( QgsRasterDataProvider* provider, int redBand, int greenBand, int blueBand,
98+
QgsContrastEnhancement* redEnhancement = 0, QgsContrastEnhancement* greenEnhancement = 0,
99+
QgsContrastEnhancement* blueEnhancement = 0 );
100+
~QgsMultiBandColorRenderer();
101+
102+
static QgsRasterRenderer* create( const QDomElement& elem, QgsRasterDataProvider* provider );
103+
104+
void draw( QPainter* p, QgsRasterViewPort* viewPort, const QgsMapToPixel* theQgsMapToPixel );
105+
106+
int redBand() const;
107+
void setRedBand( int band );
108+
int greenBand() const;
109+
void setGreenBand( int band );
110+
int blueBand() const;
111+
void setBlueBand( int band );
112+
113+
const QgsContrastEnhancement* redContrastEnhancement() const;
114+
/**Takes ownership*/
115+
void setRedContrastEnhancement( QgsContrastEnhancement* ce );
116+
117+
const QgsContrastEnhancement* greenContrastEnhancement() const;
118+
/**Takes ownership*/
119+
void setGreenContrastEnhancement( QgsContrastEnhancement* ce );
120+
121+
const QgsContrastEnhancement* blueContrastEnhancement() const;
122+
/**Takes ownership*/
123+
void setBlueContrastEnhancement( QgsContrastEnhancement* ce );
124+
125+
void writeXML( QDomDocument& doc, QDomElement& parentElem ) const;
126+
};
127+
128+
class QgsSingleBandPseudoColorRenderer: public QgsRasterRenderer
129+
{
130+
%TypeHeaderCode
131+
#include "qgssinglebandpseudocolorrenderer.h"
132+
%End
133+
public:
134+
/**Note: takes ownership of QgsRasterShader*/
135+
QgsSingleBandPseudoColorRenderer( QgsRasterDataProvider* provider, int band, QgsRasterShader* shader );
136+
~QgsSingleBandPseudoColorRenderer();
137+
138+
static QgsRasterRenderer* create( const QDomElement& elem, QgsRasterDataProvider* provider );
139+
140+
virtual void draw( QPainter* p, QgsRasterViewPort* viewPort, const QgsMapToPixel* theQgsMapToPixel );
141+
142+
/**Takes ownership of the shader*/
143+
void setShader( QgsRasterShader* shader );
144+
QgsRasterShader* shader();
145+
146+
void writeXML( QDomDocument& doc, QDomElement& parentElem ) const;
147+
148+
void legendSymbologyItems( QList< QPair< QString, QColor > >& symbolItems ) const;
149+
};
150+
151+
class QgsSingleBandGrayRenderer: public QgsRasterRenderer
152+
{
153+
%TypeHeaderCode
154+
#include "qgssinglebandgrayrenderer.h"
155+
%End
156+
public:
157+
QgsSingleBandGrayRenderer( QgsRasterDataProvider* provider, int grayBand );
158+
~QgsSingleBandGrayRenderer();
159+
160+
static QgsRasterRenderer* create( const QDomElement& elem, QgsRasterDataProvider* provider );
161+
162+
virtual void draw( QPainter* p, QgsRasterViewPort* viewPort, const QgsMapToPixel* theQgsMapToPixel );
163+
164+
int grayBand() const;
165+
void setGrayBand( int band );
166+
const QgsContrastEnhancement* contrastEnhancement() const;
167+
/**Takes ownership*/
168+
void setContrastEnhancement( QgsContrastEnhancement* ce );
169+
170+
void writeXML( QDomDocument& doc, QDomElement& parentElem ) const;
171+
172+
void legendSymbologyItems( QList< QPair< QString, QColor > >& symbolItems ) const;
173+
};
174+
175+
class QgsSingleBandColorDataRenderer: public QgsRasterRenderer
176+
{
177+
%TypeHeaderCode
178+
#include "qgssinglebandcolordatarenderer.h"
179+
%End
180+
public:
181+
QgsSingleBandColorDataRenderer( QgsRasterDataProvider* provider, int band );
182+
~QgsSingleBandColorDataRenderer();
183+
184+
static QgsRasterRenderer* create( const QDomElement& elem, QgsRasterDataProvider* provider );
185+
186+
virtual void draw( QPainter* p, QgsRasterViewPort* viewPort, const QgsMapToPixel* theQgsMapToPixel );
187+
188+
void writeXML( QDomDocument& doc, QDomElement& parentElem ) const;
189+
};

python/core/qgsrasterresampler.sip

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
class QgsRasterResampler
2+
{
3+
%TypeHeaderCode
4+
#include "qgsrasterresampler.h"
5+
#include "qgsbilinearrasterresampler.h"
6+
#include "qgscubicrasterresampler.h"
7+
8+
%End
9+
10+
%ConvertToSubClassCode
11+
if (dynamic_cast<QgsBilinearRasterResampler*>(sipCpp) != NULL)
12+
sipClass = sipClass_QgsBilinearRasterResampler;
13+
else if (dynamic_cast<QgsCubicRasterResampler*>(sipCpp) != NULL)
14+
sipClass = sipClass_QgsCubicRasterResampler;
15+
else
16+
sipClass = 0;
17+
%End
18+
19+
public:
20+
virtual void resample( const QImage& srcImage, QImage& dstImage ) = 0;
21+
virtual QString type() const = 0;
22+
};
23+
24+
class QgsBilinearRasterResampler: public QgsRasterResampler
25+
{
26+
%TypeHeaderCode
27+
#include "qgsbilinearrasterresampler.h"
28+
%End
29+
public:
30+
QgsBilinearRasterResampler();
31+
~QgsBilinearRasterResampler();
32+
33+
void resample( const QImage& srcImage, QImage& dstImage );
34+
QString type() const;
35+
};
36+
37+
class QgsCubicRasterResampler: public QgsRasterResampler
38+
{
39+
%TypeHeaderCode
40+
#include "qgscubicrasterresampler.h"
41+
%End
42+
public:
43+
QgsCubicRasterResampler();
44+
~QgsCubicRasterResampler();
45+
void resample( const QImage& srcImage, QImage& dstImage );
46+
QString type() const;
47+
};

python/gui/qgisinterface.sip

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class QgisInterface : QObject
4646
//! Add a raster layer given a raster layer file name
4747
virtual QgsRasterLayer* addRasterLayer(QString rasterLayerPath, QString baseName = QString())=0;
4848
//! Add a WMS layer
49-
virtual QgsRasterLayer* addRasterLayer(const QString& url, const QString& layerName, const QString& providerKey, const QStringList& layers, const QStringList& styles, const QString& format, const QString& crs) = 0;
49+
virtual QgsRasterLayer* addRasterLayer(const QString& uri, const QString& baseName, const QString& providerKey) = 0;
5050

5151
//! Add a project
5252
virtual bool addProject(QString theProject)=0;

src/app/legend/qgslegend.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -2541,7 +2541,7 @@ void QgsLegend::groupSelectedLayers()
25412541
//avoid multiple refreshes of map canvas because of itemChanged signal
25422542
blockSignals( true );
25432543

2544-
QTreeWidgetItem * parent;
2544+
QTreeWidgetItem * parent = 0;
25452545
foreach( QTreeWidgetItem* item, selectedItems() )
25462546
{
25472547
parent = item->parent();

src/app/qgisapp.cpp

+10-43
Original file line numberDiff line numberDiff line change
@@ -753,7 +753,7 @@ void QgisApp::dropEvent( QDropEvent *event )
753753
}
754754
else if ( u.layerType == "raster" )
755755
{
756-
addRasterLayer( u.uri, u.name, u.providerKey, QStringList(), QStringList(), QString(), QString() );
756+
addRasterLayer( u.uri, u.name, u.providerKey );
757757
}
758758
}
759759
}
@@ -2632,10 +2632,8 @@ void QgisApp::addWmsLayer()
26322632
QMessageBox::warning( this, tr( "WMS" ), tr( "Cannot get WMS select dialog from provider." ) );
26332633
return;
26342634
}
2635-
connect( wmss , SIGNAL( addRasterLayer( QString const &, QString const &, QString const &, QStringList const &, QStringList const &, QString const &,
2636-
QString const & ) ),
2637-
this , SLOT( addRasterLayer( QString const &, QString const &, QString const &, QStringList const &, QStringList const &, QString const &,
2638-
QString const & ) ) );
2635+
connect( wmss , SIGNAL( addRasterLayer( QString const &, QString const &, QString const & ) ),
2636+
this , SLOT( addRasterLayer( QString const &, QString const &, QString const & ) ) );
26392637
wmss->exec();
26402638
delete wmss;
26412639
}
@@ -6813,22 +6811,17 @@ QgsRasterLayer* QgisApp::addRasterLayer( QString const & rasterFile, QString con
68136811

68146812
/** Add a raster layer directly without prompting user for location
68156813
The caller must provide information compatible with the provider plugin
6816-
using the rasterLayerPath and baseName. The provider can use these
6814+
using the uri and baseName. The provider can use these
68176815
parameters in any way necessary to initialize the layer. The baseName
68186816
parameter is used in the Map Legend so it should be formed in a meaningful
68196817
way.
68206818
68216819
\note Copied from the equivalent addVectorLayer function in this file
6822-
TODO Make it work for rasters specifically.
68236820
*/
68246821
QgsRasterLayer* QgisApp::addRasterLayer(
6825-
QString const &rasterLayerPath,
6822+
QString const &uri,
68266823
QString const &baseName,
6827-
QString const &providerKey,
6828-
QStringList const & layers,
6829-
QStringList const & styles,
6830-
QString const &format,
6831-
QString const &crs )
6824+
QString const &providerKey )
68326825
{
68336826
QgsDebugMsg( "about to get library for " + providerKey );
68346827

@@ -6839,42 +6832,20 @@ QgsRasterLayer* QgisApp::addRasterLayer(
68396832

68406833
mMapCanvas->freeze();
68416834

6842-
// Let render() do its own cursor management
6843-
// QApplication::setOverrideCursor(Qt::WaitCursor);
6844-
68456835
// create the layer
68466836
QgsRasterLayer *layer;
6847-
/* Eliminate the need to instantiate the layer based on provider type.
6848-
The caller is responsible for cobbling together the needed information to
6849-
open the layer
6850-
*/
6851-
QgsDebugMsg( "Creating new raster layer using " + rasterLayerPath
6852-
+ " with baseName of " + baseName
6853-
+ " and layer list of " + layers.join( ", " )
6854-
+ " and style list of " + styles.join( ", " )
6855-
+ " and format of " + format
6856-
+ " and providerKey of " + providerKey
6857-
+ " and CRS of " + crs );
6837+
QgsDebugMsg( "Creating new raster layer using " + uri
6838+
+ " with baseName of " + baseName );
68586839

6859-
// TODO: Remove the 0 when the raster layer becomes a full provider gateway.
6860-
layer = new QgsRasterLayer( 0, rasterLayerPath, baseName, providerKey, layers, styles, format, crs );
6840+
layer = new QgsRasterLayer( uri, baseName, providerKey );
68616841

68626842
QgsDebugMsg( "Constructed new layer." );
68636843

6864-
if ( layer && shouldAskUserForGDALSublayers( layer ) )
6865-
{
6866-
askUserForGDALSublayers( layer );
6867-
6868-
// The first layer loaded is not useful in that case. The user can select it in
6869-
// the list if he wants to load it.
6870-
delete layer;
6871-
}
6872-
else if ( layer && layer->isValid() )
6844+
if ( layer && layer->isValid() )
68736845
{
68746846
addRasterLayer( layer );
68756847

68766848
statusBar()->showMessage( mMapCanvas->extent().toString( 2 ) );
6877-
68786849
}
68796850
else
68806851
{
@@ -6889,10 +6860,6 @@ QgsRasterLayer* QgisApp::addRasterLayer(
68896860
mMapCanvas->refresh();
68906861

68916862
return layer;
6892-
6893-
// Let render() do its own cursor management
6894-
// QApplication::restoreOverrideCursor();
6895-
68966863
} // QgisApp::addRasterLayer
68976864

68986865

0 commit comments

Comments
 (0)