64 changes: 37 additions & 27 deletions python/core/qgsapplication.sip
Original file line number Diff line number Diff line change
Expand Up @@ -87,11 +87,11 @@ static void qtgui_UpdatePyArgv(PyObject *argvlist, int argc, char **argv)
* The theme search path usually will be pkgDataPath + "/themes/" + themName + "/"
* but plugin writers etc can use themeName() as a basis for searching
* for resources in their own datastores e.g. a Qt4 resource bundle.
* @Note A basic test will be carried out to ensure the theme search path
* based on the supplied theme name exists. If it does not the theme name will
* @note A basic test will be carried out to ensure the theme search path
* based on the supplied theme name exists. If it does not the theme name will
* be reverted to 'default'.
*/
static void setThemeName(const QString theThemeName);
static void setThemeName( const QString theThemeName );

/** Set the active theme to the specified theme.
* The theme name should be a single word e.g. 'default','classic'.
Expand Down Expand Up @@ -125,7 +125,8 @@ static void qtgui_UpdatePyArgv(PyObject *argvlist, int argc, char **argv)
static const QString translatorsFilePath();

//! Returns the path to the developer image directory.
static const QString developerPath();
//! @deprecated images are not provided anymore :-P
static const QString developerPath() /Deprecated/;

//! Returns the path to the help application.
static const QString helpAppPath();
Expand All @@ -138,7 +139,7 @@ static void qtgui_UpdatePyArgv(PyObject *argvlist, int argc, char **argv)

//! Returns the path to the settings directory in user's home dir
static const QString qgisSettingsDirPath();

//! Returns the path to the user qgis.db file.
static const QString qgisUserDbFilePath();

Expand All @@ -151,12 +152,12 @@ static void qtgui_UpdatePyArgv(PyObject *argvlist, int argc, char **argv)
//! Returns the path to the srs.db file.
static const QString srsDbFilePath();

//! Returns the paths to the svg directories.
//! Returns the pathes to svg directories.
//! @note added in 1.4
static const QStringList svgPaths();

//! Returns the path to the applications svg paths
//! @deprecated use svgPaths()
//! Returns the paths to svg applications svg directory.
//! @deprecated since 1.4 - use svgPaths()
static const QString svgPath() /Deprecated/;

//! Returns the path to the application prefix directory.
Expand All @@ -169,16 +170,26 @@ static void qtgui_UpdatePyArgv(PyObject *argvlist, int argc, char **argv)
static const QString pkgDataPath();

//! Returns the path to the currently active theme directory.
static const QString activeThemePath();
static const QString activeThemePath();

//! Returns the path to the default theme directory.
static const QString defaultThemePath();
static const QString defaultThemePath();

//! Returns path to the desired icon file.
//! First it tries to use the active theme path, then default theme path
//! @note Added in 1.5
static QString iconPath( QString iconFile );

//! Helper to get a theme icon. It will fall back to the
//! default theme if the active theme does not have the required icon.
//! @note Added in 2.0
static QIcon getThemeIcon( const QString theName );

//! Helper to get a theme icon as a pixmap. It will fall back to the
//! default theme if the active theme does not have the required icon.
//! @note Added in 2.0
static QPixmap getThemePixmap( const QString theName );

//! Returns the path to user's style. Added in QGIS 1.4
static const QString userStyleV2Path();

Expand All @@ -194,23 +205,23 @@ static void qtgui_UpdatePyArgv(PyObject *argvlist, int argc, char **argv)
static const QString libexecPath();

//! Alters prefix path - used by 3rd party apps
static void setPrefixPath(const QString thePrefixPath, bool useDefaultPaths = FALSE);
static void setPrefixPath( const QString thePrefixPath, bool useDefaultPaths = false );

//! Alters plugin path - used by 3rd party apps
static void setPluginPath(const QString thePluginPath);
static void setPluginPath( const QString thePluginPath );

//! Alters pkg data path - used by 3rd party apps
static void setPkgDataPath(const QString thePkgDataPath);
static void setPkgDataPath( const QString thePkgDataPath );

//! Alters default svg paths - used by 3rd party apps. Added in QGIS 1.5
static void setDefaultSvgPaths( const QStringList& pathList );

//! loads providers
static void initQgis();

//! deletes provider registry and map layer registry
static void exitQgis();

/** constants for endian-ness */
enum endian_t
{
Expand All @@ -231,14 +242,14 @@ static void qtgui_UpdatePyArgv(PyObject *argvlist, int argc, char **argv)
*/
static QString reportStyleSheet();

/** Convenience function to get a summary of the paths used in this
/** Convenience function to get a summary of the paths used in this
* application instance useful for debugging mainly.*/
static QString showSettings();

/** Register OGR drivers ensuring this only happens once.
* This is a workaround for an issue with older gdal versions that
* caused duplicate driver name entries to appear in the list
* of registered drivers when QgsApplication::registerOgrDrivers was called multiple
* caused duplicate driver name entries to appear in the list
* of registered drivers when QgsApplication::registerOgrDrivers was called multiple
* times.
*/
static void registerOgrDrivers();
Expand All @@ -260,26 +271,25 @@ static void qtgui_UpdatePyArgv(PyObject *argvlist, int argc, char **argv)
@note added in 2.0 */
static QString buildOutputPath();

/** Sets the GDAL_SKIP environment variable to include the specified driver
/** Sets the GDAL_SKIP environment variable to include the specified driver
* and then calls GDALDriverManager::AutoSkipDrivers() to unregister it. The
* driver name should be the short format of the Gdal driver name e.g. GTiff.
* driver name should be the short format of the Gdal driver name e.g. GTIFF.
* @note added in 2.0
*/
static void skipGdalDriver( QString theDriver );

/** Sets the GDAL_SKIP environment variable to exclude the specified driver
/** Sets the GDAL_SKIP environment variable to exclude the specified driver
* and then calls GDALDriverManager::AutoSkipDrivers() to unregister it. The
* driver name should be the short format of the Gdal driver name e.g. GTiff.
* driver name should be the short format of the Gdal driver name e.g. GTIFF.
* @note added in 2.0
*/
static void restoreGdalDriver( QString theDriver );


/** Returns the list of gdal drivers that should be skipped (based on
* GDAL_SKIP environment variable)
* GDAL_SKIP environment variable)
* @note added in 2.0
*/
static QStringList skippedGdalDrivers( ) const ;
static QStringList skippedGdalDrivers( );

/** Apply the skipped drivers list to gdal
* @see skipGdalDriver
Expand Down
202 changes: 124 additions & 78 deletions python/core/qgsdatasourceuri.sip
Original file line number Diff line number Diff line change
Expand Up @@ -11,82 +11,128 @@ class QgsDataSourceURI
#include <qgsdatasourceuri.h>
%End

public:
//! \note enumeration added in version 1.1
enum SSLmode { SSLprefer, SSLdisable, SSLallow, SSLrequire };

//! default constructor
QgsDataSourceURI();

//! constructor which parses input URI
QgsDataSourceURI(QString uri);

//! connection info
QString connectionInfo() const;

//! complete uri
QString uri() const;

//! quoted table name
QString quotedTablename() const;

//! Set all connection related members at once
//! \note This optional sslmode parameter has been added in version 1.1
void setConnection(const QString& aHost,
const QString& aPort,
const QString& aDatabase,
const QString& aUsername,
const QString& aPassword,
SSLmode sslmode = SSLprefer );

//! Set all connection related members at once
//! \note added in 1.7
void setConnection(const QString& service,
const QString& aDatabase,
const QString& aUsername,
const QString& aPassword,
SSLmode sslmode = SSLprefer );

//! Set database
//! \note added in 1.4
void setDatabase( const QString &database );

//! Set all data source related members at once
void setDataSource(const QString& aSchema,
const QString& aTable,
const QString& aGeometryColumn,
const QString& aSql = QString(),
const QString& aKeyColumn = QString());

/** Removes password from uris
* @note this method was added in QGIS 1.1
*/
static QString removePassword( const QString& aUri);

QString username() const;
QString schema() const;
QString table() const;
QString sql() const;
QString geometryColumn() const;

//! set use Estimated Metadata
// added in 1.5
void setUseEstimatedMetadata( bool theFlag );
bool useEstimatedMetadata() const;

// added in 1.1
QString host() const;
QString database() const;
QString password() const;
QString port() const;
SSLmode sslMode() const;

// added in 1.7
QString service() const;

void setSql(QString sql);

// added in 1.2
QString keyColumn() const;
void setKeyColumn(QString column);
public:
//! \note enumeration added in version 1.1
enum SSLmode { SSLprefer, SSLdisable, SSLallow, SSLrequire };

//! default constructor
QgsDataSourceURI();

//! constructor which parses input URI
QgsDataSourceURI( QString uri );

//! return connection part of URI
QString connectionInfo() const;

//! return complete uri
QString uri() const;

//! return complete encoded uri (generic mode)
// \note added in 1.9
QByteArray encodedUri() const;

//! set complete encoded uri (generic mode)
// \note added in 1.9
void setEncodedUri( const QString & uri );

//! quoted table name
QString quotedTablename() const;

//! Set generic param (generic mode)
// \note if key exists, another is inserted
// \note added in 1.9
void setParam( const QString &key, const QString &value );
void setParamList( const QString &key, const QStringList &value );
%MethodCode
sipCpp->setParam( *a0, *a1 );
%End

//! Get generic param (generic mode)
// \note added in 1.9
QString param( const QString &key ) const;

//! Get multiple generic param (generic mode)
// \note added in 1.9
QStringList params( const QString &key ) const;

//! Test if param exists (generic mode)
// \note added in 1.9
bool hasParam( const QString &key ) const;

//! Set all connection related members at once
//! \note This optional sslmode parameter has been added in version 1.1
void setConnection( const QString& aHost,
const QString& aPort,
const QString& aDatabase,
const QString& aUsername,
const QString& aPassword,
SSLmode sslmode = SSLprefer );

//! Set all connection related members at once (for the service case)
//! \note This optional sslmode parameter has been added in version 1.7
void setConnection( const QString& aService,
const QString& aDatabase,
const QString& aUsername,
const QString& aPassword,
SSLmode sslmode = SSLprefer );

//! Set database
// \note added in 1.4
void setDatabase( const QString &database );

//! Set all data source related members at once
void setDataSource( const QString& aSchema,
const QString& aTable,
const QString& aGeometryColumn,
const QString& aSql = QString(),
const QString& aKeyColumn = QString() );

//! set username
// added in 1.5
void setUsername( QString username );

//! set password
// added in 1.5
void setPassword( QString password );

//! Removes password element from uris
static QString removePassword( const QString& aUri );

QString username() const;
QString schema() const;
QString table() const;
QString sql() const;
QString geometryColumn() const;

//! set use Estimated Metadata
// added in 1.5
void setUseEstimatedMetadata( bool theFlag );
bool useEstimatedMetadata() const;

void disableSelectAtId( bool theFlag );
bool selectAtIdDisabled() const;

void clearSchema();
void setSql( QString sql );

// added in version 1.1
QString host() const;
QString database() const;
QString port() const;
QString password() const;
SSLmode sslMode() const;

// added in 1.7
QString service() const;

// added in version 1.2
QString keyColumn() const;
void setKeyColumn( QString column );

// added in 1.9
QGis::WkbType wkbType() const;
void setWkbType( QGis::WkbType type );

QString srid() const;
void setSrid( QString srid );
};
147 changes: 76 additions & 71 deletions python/core/qgspoint.sip
Original file line number Diff line number Diff line change
Expand Up @@ -8,89 +8,94 @@ class QgsPoint
#include <QString>
%End


public:
public:
/// Default constructor
QgsPoint();

/*! Create a point from another point */
QgsPoint(const QgsPoint& p);

/*! Create a point from x,y coordinates
* @param x x coordinate
* @param y y coordinate
*/
QgsPoint(double x, double y);

~QgsPoint();

/*! Sets the x value of the point
* @param x x coordinate
*/
void setX(double x);

/*! Sets the y value of the point
* @param y y coordinate
*/
void setY(double y);
QgsPoint();

/*! Sets the x and y value of the point */
void set(double x, double y);
/*! Create a point from another point */
QgsPoint(const QgsPoint& p);

/*! Create a point from x,y coordinates
* @param x x coordinate
* @param y y coordinate
*/
QgsPoint( double x, double y );

~QgsPoint();

/*! Sets the x value of the point
* @param x x coordinate
*/
void setX( double x );

/*! Sets the y value of the point
* @param y y coordinate
*/
void setY( double y );

/*! Get the x value of the point
* @return x coordinate
*/
double x() const;
/*! Sets the x and y value of the point */
void set( double x, double y );

/*! Get the y value of the point
* @return y coordinate
*/
double y() const;
/*! Get the x value of the point
* @return x coordinate
*/
double x() const;

//! String representation of the point (x,y)
QString toString() const;
/*! Get the y value of the point
* @return y coordinate
*/
double y() const;

//! As above but with precision for string representaiton of a point
QString toString(int thePrecision) const;

/** Return a string representation as degrees minutes seconds.
* Its up to the calling function to ensure that this point can
* be meaningfully represented in this form.
* @note added in QGIS 1.4
*/
QString toDegreesMinutesSeconds( int thePrecision ) const;
//! String representation of the point (x,y)
QString toString() const;


/*! Return the well known text representation for the point.
* The wkt is created without an SRID.
* @return Well known text in the form POINT(x y)
*/
QString wellKnownText();
//! As above but with precision for string representation of a point
QString toString( int thePrecision ) const;

/** Return a string representation as degrees minutes seconds.
* Its up to the calling function to ensure that this point can
* be meaningfully represented in this form.
* @note added in QGIS 1.4
*/
QString toDegreesMinutesSeconds( int thePrecision ) const;

/** Return a string representation as degrees minutes.
* Its up to the calling function to ensure that this point can
* be meaningfully represented in this form.
* @note added in QGIS 1.9
*/
QString toDegreesMinutes( int thePrecision ) const;


/*! Return the well known text representation for the point.
* The wkt is created without an SRID.
* @return Well known text in the form POINT(x y)
*/
QString wellKnownText() const;

/**Returns the squared distance between this point and x,y*/
double sqrDist(double x, double y) const;
/**Returns the squared distance between this point and x,y*/
double sqrDist( double x, double y ) const;

/**Returns the squared distance between this and other point*/
double sqrDist(const QgsPoint& other);
/**Returns the squared distance between this and other point*/
double sqrDist( const QgsPoint& other ) const;

/**Returns the minimum distance between this point and a segment
/**Returns the minimum distance between this point and a segment
@note added in QGIS 1.5*/
double sqrDistToSegment( double x1, double y1, double x2, double y2, QgsPoint& minDistPoint /Out/) const;
double sqrDistToSegment( double x1, double y1, double x2, double y2, QgsPoint& minDistPoint /Out/, double epsilon = DEFAULT_SEGMENT_EPSILON ) const;

/**Calculates azimut between this point and other one (clockwise in degree, starting from north)
@note: this function has been added in version 1.7*/
double azimuth( const QgsPoint& other );
/**Calculates azimut between this point and other one (clockwise in degree, starting from north)
@note: this function has been added in version 1.7*/
double azimuth( const QgsPoint& other );

//! equality operator
bool operator==( const QgsPoint &other );

//! Inequality operator
bool operator!=( const QgsPoint &other ) const;

//! Multiply x and y by the given value
void multiply( const double& scalar );

//! equality operator
bool operator==(const QgsPoint &other);

//! Inequality operator
bool operator!=(const QgsPoint &other);

//! Multiply x and y by the given value
void multiply(const double& scalar);


SIP_PYOBJECT __repr__();
%MethodCode
QString str = "(" + QString::number(sipCpp->x()) + "," + QString::number(sipCpp->y()) + ")";
Expand Down Expand Up @@ -118,5 +123,5 @@ public:



}; // class QgsPOint
}; // class QgsPoint

7 changes: 3 additions & 4 deletions python/plugins/db_manager/db_plugins/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -192,22 +192,21 @@ def info(self):
from .info_model import DatabaseInfo
return DatabaseInfo(self)


def sqlResultModel(self, sql, parent):
from .data_model import SqlResultModel
return SqlResultModel(self, sql, parent)


def toSqlLayer(self, sql, geomCol, uniqueCol, layerName="QueryLayer", layerType=None):
def toSqlLayer(self, sql, geomCol, uniqueCol, layerName="QueryLayer", layerType=None, avoidSelectById=False):
from qgis.core import QgsMapLayer, QgsVectorLayer, QgsRasterLayer
uri = self.uri()
uri.setDataSource("", u"(%s\n)" % sql, geomCol, QString(), uniqueCol)
if avoidSelectById:
uri.disableSelectAtId( True )
provider = self.dbplugin().providerName()
if layerType == QgsMapLayer.RasterLayer:
return QgsRasterLayer(uri.uri(), layerName, provider)
return QgsVectorLayer(uri.uri(), layerName, provider)


def registerAllActions(self, mainWindow):
self.registerDatabaseActions(mainWindow)
self.registerSubPluginActions(mainWindow)
Expand Down
1 change: 0 additions & 1 deletion python/plugins/db_manager/db_plugins/postgis/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,6 @@ def tableTriggersFactory(self, row, table):
def tableRulesFactory(self, row, table):
return PGTableRule(row, table)


def info(self):
from .info_model import PGTableInfo
return PGTableInfo(self)
Expand Down
4 changes: 1 addition & 3 deletions python/plugins/db_manager/dlg_sql_window.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,6 @@ def loadAsLayerToggled(self, checked):
self.loadAsLayerGroup.setChecked( checked )
self.loadAsLayerWidget.setVisible( checked )


def getSql(self):
# If the selection obtained from an editor spans a line break,
# the text will contain a Unicode U+2029 paragraph separator
Expand Down Expand Up @@ -132,7 +131,6 @@ def executeSql(self):
self.update()
QApplication.restoreOverrideCursor()


def loadSqlLayer(self):
uniqueFieldName = self.uniqueCombo.currentText()
geomFieldName = self.geomCombo.currentText()
Expand Down Expand Up @@ -165,7 +163,7 @@ def loadSqlLayer(self):
newLayerName = u"%s_%d" % (layerName, index)

# create the layer
layer = self.db.toSqlLayer(query, geomFieldName, uniqueFieldName, newLayerName, layerType)
layer = self.db.toSqlLayer(query, geomFieldName, uniqueFieldName, newLayerName, layerType, self.avoidSelectById.isChecked())
if layer.isValid():
QgsMapLayerRegistry.instance().addMapLayer(layer, True)

Expand Down
55 changes: 41 additions & 14 deletions python/plugins/db_manager/ui/DlgSqlWindow.ui
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>738</width>
<width>747</width>
<height>525</height>
</rect>
</property>
Expand All @@ -19,7 +19,7 @@
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<widget class="QWidget" name="">
<widget class="QWidget" name="layoutWidget">
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QLabel" name="label">
Expand Down Expand Up @@ -81,7 +81,7 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="">
<widget class="QWidget" name="layoutWidget">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label_2">
Expand All @@ -107,6 +107,16 @@
</widget>
</widget>
</item>
<item row="2" column="0">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Close</set>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QGroupBox" name="loadAsLayerGroup">
<property name="sizePolicy">
Expand Down Expand Up @@ -286,19 +296,19 @@ columns</string>
</layout>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="avoidSelectById">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Avoid selecting feature by id. Sometimes - especially when running expensive queries/views - fetching the data sequentially instead of fetching features by id can be much quicker.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Avoid selecting by feature id</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="2" column="0">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Close</set>
</property>
</widget>
</item>
</layout>
</widget>
<customwidgets>
Expand All @@ -315,5 +325,22 @@ columns</string>
<tabstop>viewResult</tabstop>
</tabstops>
<resources/>
<connections/>
<connections>
<connection>
<sender>loadAsLayerGroup</sender>
<signal>toggled(bool)</signal>
<receiver>avoidSelectById</receiver>
<slot>setVisible(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>88</x>
<y>351</y>
</hint>
<hint type="destinationlabel">
<x>142</x>
<y>451</y>
</hint>
</hints>
</connection>
</connections>
</ui>
10 changes: 5 additions & 5 deletions src/core/qgis.h
Original file line number Diff line number Diff line change
Expand Up @@ -154,16 +154,16 @@ const QString GEOWKT =
/** Wkt string that represents a geographic coord sys
* @note deprecated in 1.8 due to violation of coding conventions (globals
* should be in all caps).
*/
*/
#ifndef _MSC_VER
Q_DECL_DEPRECATED
#endif
const QString GEOWkt = GEOWKT;

const QString PROJECT_SCALES =
"1:1000000,1:500000,1:250000,1:100000,1:50000,1:25000,"
"1:10000,1:5000,1:2500,1:1000,1:500";

#ifndef _MSC_VER
Q_DECL_DEPRECATED
#endif
const QString GEOWkt = GEOWKT;
/** PROJ4 string that represents a geographic coord sys */
extern CORE_EXPORT const QString GEOPROJ4;
/** Magic number for a geographic coord sys in POSTGIS SRID */
Expand Down
4 changes: 3 additions & 1 deletion src/core/qgsapplication.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ class CORE_EXPORT QgsApplication: public QApplication
* but plugin writers etc can use this method as a basis for searching
* for resources in their own datastores e.g. a Qt4 resource bundle.
*/
static const QString themeName() ;
static const QString themeName();

//! Returns the path to the authors file.
static const QString authorsFilePath();
Expand Down Expand Up @@ -210,9 +210,11 @@ class CORE_EXPORT QgsApplication: public QApplication
* the gradient fills for backgrounds.
*/
static QString reportStyleSheet();

/** Convenience function to get a summary of the paths used in this
* application instance useful for debugging mainly.*/
static QString showSettings();

/** Register OGR drivers ensuring this only happens once.
* This is a workaround for an issue with older gdal versions that
* caused duplicate driver name entries to appear in the list
Expand Down
6 changes: 3 additions & 3 deletions src/core/qgsrasterdataprovider.h
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ class CORE_EXPORT QgsRasterDataProvider : public QgsDataProvider, public QgsRast
* Add the list of WMS layer names to be rendered by this server
*/
virtual void addLayers( QStringList const & layers,
QStringList const & styles = QStringList() ) = 0;
QStringList const & styles = QStringList() ) = 0;

//! get raster image encodings supported by (e.g.) the WMS Server, expressed as MIME types
virtual QStringList supportedImageEncodings() = 0;
Expand All @@ -130,7 +130,7 @@ class CORE_EXPORT QgsRasterDataProvider : public QgsDataProvider, public QgsRast
/**
* Set the image encoding (as a MIME type) used in the transfer from (e.g.) the WMS server
*/
virtual void setImageEncoding( QString const & mimeType ) = 0;
virtual void setImageEncoding( QString const & mimeType ) = 0;

/**
* Set the image projection (in WMS CRS format) used in the transfer from (e.g.) the WMS server
Expand All @@ -141,7 +141,7 @@ class CORE_EXPORT QgsRasterDataProvider : public QgsDataProvider, public QgsRast
// TODO: Document this better.
/** \brief Renders the layer as an image
*/
virtual QImage* draw( QgsRectangle const & viewExtent, int pixelWidth, int pixelHeight ) = 0;
virtual QImage* draw( QgsRectangle const & viewExtent, int pixelWidth, int pixelHeight ) = 0;

/** Returns a bitmask containing the supported capabilities
Note, some capabilities may change depending on whether
Expand Down