00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef QGSLEGENDMODEL_H
00019 #define QGSLEGENDMODEL_H
00020
00021 #include <QStandardItemModel>
00022 #include <QStringList>
00023 #include <QSet>
00024
00025 class QDomDocument;
00026 class QDomElement;
00027 class QgsMapLayer;
00028 class QgsSymbol;
00029 class QgsSymbolV2;
00030 class QgsVectorLayer;
00031
00032
00033
00034
00035 typedef QPair< QString, QList<QString> > GroupLayerInfo;
00036
00040 class CORE_EXPORT QgsLegendModel: public QStandardItemModel
00041 {
00042 Q_OBJECT
00043
00044 public:
00045
00046 enum ItemType
00047 {
00048 GroupItem = 0,
00049 LayerItem,
00050 ClassificationItem
00051 };
00052
00053 QgsLegendModel();
00054 ~QgsLegendModel();
00055
00057 void setLayerSetAndGroups( const QStringList& layerIds, const QList< GroupLayerInfo >& groupInfo );
00058 void setLayerSet( const QStringList& layerIds );
00060 QStandardItem* addGroup( QString text = tr( "Group" ), int position = -1 );
00061
00063 void updateItem( QStandardItem* item );
00065 void updateLayer( QStandardItem* layerItem );
00067 void updateVectorClassificationItem( QStandardItem* classificationItem, QgsSymbol* symbol, QString itemText ) {}
00068 void updateVectorV2ClassificationItem( QStandardItem* classificationItem, QgsSymbolV2* symbol, QString itemText ) {}
00069 void updateRasterClassificationItem( QStandardItem* classificationItem ) {}
00070
00071 bool writeXML( QDomElement& composerLegendElem, QDomDocument& doc ) const;
00072 bool readXML( const QDomElement& legendModelElem, const QDomDocument& doc );
00073
00074 Qt::DropActions supportedDropActions() const;
00075 Qt::ItemFlags flags( const QModelIndex &index ) const;
00076
00078 virtual bool removeRows( int row, int count, const QModelIndex & parent = QModelIndex() );
00079
00081 QMimeData* mimeData( const QModelIndexList &indexes ) const;
00082 QStringList mimeTypes() const;
00083
00085 bool dropMimeData( const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent );
00086
00087
00088 public slots:
00089 void removeLayer( const QString& layerId );
00090 void addLayer( QgsMapLayer* theMapLayer );
00091
00092 signals:
00093 void layersChanged();
00094
00095 private:
00098 int addVectorLayerItems( QStandardItem* layerItem, QgsVectorLayer* vlayer );
00099
00101 int addVectorLayerItemsV2( QStandardItem* layerItem, QgsVectorLayer* vlayer );
00102
00105 int addRasterLayerItem( QStandardItem* layerItem, QgsMapLayer* rlayer );
00106
00108 QStandardItem* itemFromSymbol( QgsSymbol* s, int opacity, const QString& layerID );
00109
00110 protected:
00111 QStringList mLayerIds;
00114 bool mHasTopLevelWindow;
00115 };
00116
00117 #endif