QGIS API Documentation  master-59fd5e0
src/core/qgsmaplayer.h
Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines