|
QGIS API Documentation
master-59fd5e0
|
00001 /*************************************************************************** 00002 qgsmaplayer.h - description 00003 ------------------- 00004 begin : Fri Jun 28 2002 00005 copyright : (C) 2002 by Gary E.Sherman 00006 email : sherman at mrcc.com 00007 ***************************************************************************/ 00008 00009 /*************************************************************************** 00010 * * 00011 * This program is free software; you can redistribute it and/or modify * 00012 * it under the terms of the GNU General Public License as published by * 00013 * the Free Software Foundation; either version 2 of the License, or * 00014 * (at your option) any later version. * 00015 * * 00016 ***************************************************************************/ 00017 00018 #ifndef QGSMAPLAYER_H 00019 #define QGSMAPLAYER_H 00020 00021 #include <QDateTime> 00022 #include <QObject> 00023 #include <QUndoStack> 00024 #include <QVariant> 00025 #include <QImage> 00026 #include <QDomNode> 00027 #include <QPainter> 00028 00029 #include "qgis.h" 00030 #include "qgserror.h" 00031 #include "qgsrectangle.h" 00032 #include "qgsmaprenderer.h" 00033 00034 class QgsRenderContext; 00035 class QgsCoordinateReferenceSystem; 00036 00037 class QDomDocument; 00038 class QKeyEvent; 00039 class QPainter; 00040 00045 class CORE_EXPORT QgsMapLayer : public QObject 00046 { 00047 Q_OBJECT 00048 00049 public: 00051 enum LayerType 00052 { 00053 VectorLayer, 00054 RasterLayer, 00055 PluginLayer // added in 1.5 00056 }; 00057 00063 QgsMapLayer( QgsMapLayer::LayerType type = VectorLayer, QString lyrname = QString::null, QString source = QString::null ); 00064 00066 virtual ~QgsMapLayer(); 00067 00071 QgsMapLayer::LayerType type() const; 00072 00076 QString id() const; 00077 00081 void setLayerName( const QString & name ); 00082 00086 const QString & name() const; 00087 00091 const QString & originalName() const { return mLayerOrigName; } 00092 00093 void setTitle( const QString& title ) { mTitle = title; } 00094 const QString& title() const { return mTitle; } 00095 00096 void setAbstract( const QString& abstract ) { mAbstract = abstract; } 00097 const QString& abstract() const { return mAbstract; } 00098 00099 void setKeywordList( const QString& keywords ) { mKeywordList = keywords; } 00100 const QString& keywordList() const { return mKeywordList; } 00101 00102 /* Layer dataUrl information */ 00103 void setDataUrl( const QString& dataUrl ) { mDataUrl = dataUrl; } 00104 const QString& dataUrl() const { return mDataUrl; } 00105 void setDataUrlFormat( const QString& dataUrlFormat ) { mDataUrlFormat = dataUrlFormat; } 00106 const QString& dataUrlFormat() const { return mDataUrlFormat; } 00107 00108 /* Layer attribution information */ 00109 void setAttribution( const QString& attrib ) { mAttribution = attrib; } 00110 const QString& attribution() const { return mAttribution; } 00111 void setAttributionUrl( const QString& attribUrl ) { mAttributionUrl = attribUrl; } 00112 const QString& attributionUrl() const { return mAttributionUrl; } 00113 00114 /* Layer metadataUrl information */ 00115 void setMetadataUrl( const QString& metaUrl ) { mMetadataUrl = metaUrl; } 00116 const QString& metadataUrl() const { return mMetadataUrl; } 00117 void setMetadataUrlType( const QString& metaUrlType ) { mMetadataUrlType = metaUrlType; } 00118 const QString& metadataUrlType() const { return mMetadataUrlType; } 00119 void setMetadataUrlFormat( const QString& metaUrlFormat ) { mMetadataUrlFormat = metaUrlFormat; } 00120 const QString& metadataUrlFormat() const { return mMetadataUrlFormat; } 00121 00122 /* Set the blending mode used for rendering a layer */ 00123 void setBlendMode( const QPainter::CompositionMode blendMode ); 00124 /* Returns the current blending mode for a layer */ 00125 QPainter::CompositionMode blendMode() const; 00126 00129 virtual void reload() {} 00130 00137 virtual bool draw( QgsRenderContext& rendererContext ); 00138 00142 virtual void drawLabels( QgsRenderContext& rendererContext ); 00143 00145 virtual QgsRectangle extent(); 00146 00151 bool isValid(); 00152 00157 QString publicSource() const; 00158 00160 const QString &source() const; 00161 00166 virtual QStringList subLayers() const; 00167 00172 virtual void setLayerOrder( const QStringList &layers ); 00173 00175 virtual void setSubLayerVisibility( QString name, bool vis ); 00176 00178 virtual bool isEditable() const; 00179 00194 bool readLayerXML( const QDomElement& layerElement ); 00195 00196 00212 bool writeLayerXML( QDomElement& layerElement, QDomDocument& document ); 00213 00216 void setCustomProperty( const QString& key, const QVariant& value ); 00219 QVariant customProperty( const QString& value, const QVariant& defaultValue = QVariant() ) const; 00222 void removeCustomProperty( const QString& key ); 00223 00224 #if 0 00225 00226 unsigned int getTransparency(); 00227 00229 virtual void setTransparency( unsigned int ); 00230 #endif 00231 00238 virtual QString lastErrorTitle(); 00239 00246 virtual QString lastError(); 00247 00252 virtual QgsError error() const { return mError; } 00253 00257 const QgsCoordinateReferenceSystem& crs() const; 00258 00261 void setCrs( const QgsCoordinateReferenceSystem& srs, bool emitSignal = true ); 00262 00264 static QString capitaliseLayerName( const QString& name ); 00265 00273 virtual QString styleURI( ); 00274 00283 virtual QString loadDefaultStyle( bool & theResultFlag ); 00284 00298 virtual QString loadNamedStyle( const QString theURI, bool & theResultFlag ); 00299 00300 virtual bool loadNamedStyleFromDb( const QString db, const QString theURI, QString &qml ); 00301 00302 //TODO edit infos 00309 virtual void exportNamedStyle( QDomDocument &doc, QString &errorMsg ); 00310 00311 00318 virtual void exportSldStyle( QDomDocument &doc, QString &errorMsg ); 00319 00328 virtual QString saveDefaultStyle( bool & theResultFlag ); 00329 00343 virtual QString saveNamedStyle( const QString theURI, bool & theResultFlag ); 00344 00345 virtual QString saveSldStyle( const QString theURI, bool & theResultFlag ); 00346 virtual QString loadSldStyle( const QString theURI, bool &theResultFlag ); 00347 00348 virtual bool readSld( const QDomNode& node, QString& errorMessage ) 00349 { Q_UNUSED( node ); errorMessage = QString( "Layer type %1 not supported" ).arg( type() ); return false; } 00350 00351 00357 virtual bool readSymbology( const QDomNode& node, QString& errorMessage ) = 0; 00358 00365 virtual bool writeSymbology( QDomNode &node, QDomDocument& doc, QString& errorMessage ) const = 0; 00366 00368 QUndoStack* undoStack(); 00369 00372 QImage *cacheImage() { return mpCacheImage; } 00375 void setCacheImage( QImage * thepImage ); 00376 00381 virtual void onCacheImageDelete() {}; 00382 00383 public slots: 00384 00386 virtual void invalidTransformInput(); 00387 00389 void setMinimumScale( float theMinScale ); 00390 float minimumScale(); 00391 00393 void setMaximumScale( float theMaxScale ); 00394 float maximumScale(); 00395 00397 void toggleScaleBasedVisibility( bool theVisibilityFlag ); 00398 bool hasScaleBasedVisibility(); 00399 00402 void clearCacheImage(); 00403 00405 virtual QString metadata(); 00406 00408 virtual QDateTime timestamp() const { return QDateTime() ; } 00409 00410 signals: 00411 00413 void drawingProgress( int theProgress, int theTotalSteps ); 00414 00416 void statusChanged( QString theStatus ); 00417 00419 void layerNameChanged(); 00420 00424 void layerCrsChanged(); 00425 00429 void repaintRequested(); 00430 00433 void screenUpdateRequested(); 00434 00436 void recalculateExtents(); 00437 00440 void dataChanged(); 00441 00442 protected: 00444 virtual void setExtent( const QgsRectangle &rect ); 00445 00448 void setValid( bool valid ); 00449 00453 virtual bool readXml( const QDomNode& layer_node ); 00454 00458 virtual bool writeXml( QDomNode & layer_node, QDomDocument & document ); 00459 00460 00464 void readCustomProperties( const QDomNode& layerNode, const QString& keyStartsWith = "" ); 00465 00467 void writeCustomProperties( QDomNode & layerNode, QDomDocument & doc ) const; 00468 00470 void connectNotify( const char * signal ); 00471 00473 void appendError( const QgsErrorMessage & theMessage ) { mError.append( theMessage );} 00475 void setError( const QgsError & theError ) { mError = theError;} 00476 00478 unsigned int mTransparencyLevel; 00479 00481 QgsRectangle mExtent; 00482 00484 bool mValid; 00485 00487 QString mDataSource; 00488 00490 QString mLayerName; 00491 00495 QString mLayerOrigName; 00496 00497 QString mTitle; 00498 00500 QString mAbstract; 00501 QString mKeywordList; 00502 00504 QString mDataUrl; 00505 QString mDataUrlFormat; 00506 00508 QString mAttribution; 00509 QString mAttributionUrl; 00510 00512 QString mMetadataUrl; 00513 QString mMetadataUrlType; 00514 QString mMetadataUrlFormat; 00515 00517 QgsError mError; 00518 00519 private: 00522 QgsCoordinateReferenceSystem* mCRS; 00523 00525 QgsMapLayer( QgsMapLayer const & ); 00526 00528 QgsMapLayer & operator=( QgsMapLayer const & ); 00529 00531 QString mID; 00532 00534 QgsMapLayer::LayerType mLayerType; 00535 00537 QPainter::CompositionMode mBlendMode; 00538 00540 QString mTag; 00541 00543 float mMinScale; 00545 float mMaxScale; 00547 bool mScaleBasedVisibility; 00548 00550 QUndoStack mUndoStack; 00551 00552 QMap<QString, QVariant> mCustomProperties; 00553 00556 QImage * mpCacheImage; 00557 00558 }; 00559 00560 #endif