diff --git a/doc/api_break.dox b/doc/api_break.dox
index d14da32f949..913583a2d96 100644
--- a/doc/api_break.dox
+++ b/doc/api_break.dox
@@ -48,6 +48,7 @@ This page tries to maintain a list with incompatible changes that happened in pr
so there is no longer a need for the separate cache class. Code which previously called QgsCRSCache::updateCRSCache()
should now call QgsCoordinateReferenceSystem::invalidateCache() and QgsCoordinateTransformCache::instance()->invalidateCrs( authid ).
QgsLabel and QgsLabelAttributes. Replaced by labeling based on PAL library, see QgsLabelingEngineV2.
+QgsLegendModel was removed.
QgsMapCanvasMap. It is an internal class used by map canvas.
QgsMapRenderer. It has been replaced by QgsMapRendererJob with subclasses and QgsMapSettings.
QgsPseudoColorShader. This shader has been broken for some time and was replaced by QgsSingleBandPseudoColorRenderer.
diff --git a/python/core/composer/qgscomposerlegend.sip b/python/core/composer/qgscomposerlegend.sip
index 54c76db34a0..600eac38cc7 100644
--- a/python/core/composer/qgscomposerlegend.sip
+++ b/python/core/composer/qgscomposerlegend.sip
@@ -60,10 +60,6 @@ class QgsComposerLegend : QgsComposerItem
*/
bool resizeToContents() const;
- /** Returns pointer to the legend model*/
- //! @deprecated in 2.6 - use modelV2()
- QgsLegendModel* model() /Deprecated/;
-
//! @note added in 2.6
QgsLegendModelV2* modelV2();
diff --git a/python/core/composer/qgslegendmodel.sip b/python/core/composer/qgslegendmodel.sip
deleted file mode 100644
index 4a92f6029e5..00000000000
--- a/python/core/composer/qgslegendmodel.sip
+++ /dev/null
@@ -1,77 +0,0 @@
-/** \ingroup core
- * A model that provides group, layer and classification items.
- */
-class QgsLegendModel : QStandardItemModel
-{
-%TypeHeaderCode
-#include
-%End
-
- public:
-
- enum ItemType
- {
- GroupItem,
- LayerItem,
- ClassificationItem
- };
-
- QgsLegendModel();
- ~QgsLegendModel();
-
- /** Set layers and groups from a layer tree
- * @note added in 2.6
- */
- void setLayerSetAndGroups( QgsLayerTreeGroup* rootGroup );
- /** Sets layer set and groups
- * @deprecated in 2.6
- */
- void setLayerSetAndGroups( const QStringList& layerIds, const QList< QPair< QString, QList > >& groupInfo ) /Deprecated/;
- void setLayerSet( const QStringList& layerIds, double scaleDenominator = -1, const QString& rule = "" );
- /** Adds a group
- @param text name of group (defaults to translation of "Group")
- @param position insertion position (toplevel position (or -1 if it should be placed at the end of the legend).
- @param parentItem parent item
- @returns a pointer to the added group
- */
- QStandardItem *addGroup( QString text = QString::null, int position = -1, QStandardItem* parentItem = 0 );
-
- /** Tries to automatically update a model entry (e.g. a whole layer or only a single item)*/
- void updateItem( QStandardItem* item );
- /** Updates the whole symbology of a layer*/
- void updateLayer( QStandardItem* layerItem );
- /** Tries to update a single classification item*/
- void updateVectorV2ClassificationItem( QStandardItem* classificationItem, QgsSymbol* symbol, const QString& itemText );
-
- void updateRasterClassificationItem( QStandardItem* classificationItem );
-
- /** Update single item text using item userText and other properties like showFeatureCount */
- void updateItemText( QStandardItem* item );
-
-
- bool writeXml( QDomElement& composerLegendElem, QDomDocument& doc ) const;
- bool readXml( const QDomElement& legendModelElem, const QDomDocument& doc );
-
- Qt::DropActions supportedDropActions() const;
- Qt::ItemFlags flags( const QModelIndex &index ) const;
-
- /** Implemented to support drag operations*/
- virtual bool removeRows( int row, int count, const QModelIndex & parent = QModelIndex() );
-
- /** For the drag operation*/
- QMimeData* mimeData( const QModelIndexList &indexes ) const;
- QStringList mimeTypes() const;
-
- /** Implements the drop operation*/
- bool dropMimeData( const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent );
-
- void setAutoUpdate( bool autoUpdate );
- bool autoUpdate();
-
- public slots:
- void removeLayer( const QString& layerId );
- void addLayer( QgsMapLayer* theMapLayer, double scaleDenominator = -1, const QString& rule = "", QStandardItem* parentItem = 0 );
-
- signals:
- void layersChanged();
-};
diff --git a/python/core/core.sip b/python/core/core.sip
index 2d755cba04a..5875526cdf4 100644
--- a/python/core/core.sip
+++ b/python/core/core.sip
@@ -207,7 +207,6 @@
%Include composer/qgscomposerutils.sip
%Include composer/qgscomposition.sip
%Include composer/qgsdoubleboxscalebarstyle.sip
-%Include composer/qgslegendmodel.sip
%Include composer/qgsnumericscalebarstyle.sip
%Include composer/qgspaperitem.sip
%Include composer/qgsscalebarstyle.sip
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 36068e7485f..cbb02e64cac 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -267,7 +267,6 @@ SET(QGIS_CORE_SRCS
composer/qgscomposition.cpp
composer/qgsdoubleboxscalebarstyle.cpp
composer/qgsgroupungroupitemscommand.cpp
- composer/qgslegendmodel.cpp
composer/qgsnumericscalebarstyle.cpp
composer/qgspaperitem.cpp
composer/qgsscalebarstyle.cpp
@@ -533,7 +532,6 @@ SET(QGIS_CORE_MOC_HDRS
composer/qgscomposertexttable.h
composer/qgscomposition.h
composer/qgsgroupungroupitemscommand.h
- composer/qgslegendmodel.h
composer/qgspaperitem.h
raster/qgsrasterlayer.h
diff --git a/src/core/composer/qgscomposerlegend.cpp b/src/core/composer/qgscomposerlegend.cpp
index 6ad553dac6f..238f4abb975 100644
--- a/src/core/composer/qgscomposerlegend.cpp
+++ b/src/core/composer/qgscomposerlegend.cpp
@@ -49,8 +49,6 @@ QgsComposerLegend::QgsComposerLegend( QgsComposition* composition )
{
mLegendModel2 = new QgsLegendModelV2( QgsProject::instance()->layerTreeRoot() );
- connect( &mLegendModel, SIGNAL( layersChanged() ), this, SLOT( synchronizeWithModel() ) );
-
connect( &composition->atlasComposition(), SIGNAL( renderEnded() ), this, SLOT( onAtlasEnded() ) );
connect( &composition->atlasComposition(), SIGNAL( featureChanged( QgsFeature* ) ), this, SLOT( onAtlasFeature( QgsFeature* ) ) );
@@ -341,10 +339,6 @@ void QgsComposerLegend::synchronizeWithModel()
void QgsComposerLegend::updateLegend()
{
- // take layer list from map renderer (to have legend order)
- mLegendModel.blockSignals( true );
- mLegendModel.setLayerSet( mComposition ? mComposition->mapSettings().layers() : QStringList() );
- mLegendModel.blockSignals( false );
adjustBoxSize();
updateItem();
}
diff --git a/src/core/composer/qgscomposerlegend.h b/src/core/composer/qgscomposerlegend.h
index 77034f907a9..55cee323f58 100644
--- a/src/core/composer/qgscomposerlegend.h
+++ b/src/core/composer/qgscomposerlegend.h
@@ -20,7 +20,6 @@
#include "qgscomposeritem.h"
#include "qgslayertreemodel.h"
-#include "qgslegendmodel.h"
#include "qgslegendsettings.h"
class QgsLayerTreeModel;
@@ -87,10 +86,6 @@ class CORE_EXPORT QgsComposerLegend : public QgsComposerItem
*/
bool resizeToContents() const;
- /** Returns pointer to the legend model*/
- //! @deprecated in 2.6 - use modelV2()
- Q_DECL_DEPRECATED QgsLegendModel* model() {return &mLegendModel;}
-
//! @note added in 2.6
QgsLegendModelV2* modelV2() { return mLegendModel2; }
@@ -284,8 +279,6 @@ class CORE_EXPORT QgsComposerLegend : public QgsComposerItem
//! use new custom layer tree and update model. if new root is null pointer, will use project's tree
void setCustomLayerTree( QgsLayerTreeGroup* rootGroup );
- QgsLegendModel mLegendModel;
-
QgsLegendModelV2* mLegendModel2;
QgsLayerTreeGroup* mCustomLayerTree;
diff --git a/src/core/composer/qgslegendmodel.cpp b/src/core/composer/qgslegendmodel.cpp
deleted file mode 100644
index c37d081d79b..00000000000
--- a/src/core/composer/qgslegendmodel.cpp
+++ /dev/null
@@ -1,942 +0,0 @@
-/***************************************************************************
- qgslegendmodel.cpp - description
- ------------------
- begin : June 2008
- copyright : (C) 2008 by Marco Hugentobler
- email : marco dot hugentobler at karto dot baug dot ethz dot ch
- ***************************************************************************/
-
-/***************************************************************************
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- ***************************************************************************/
-
-#include "qgslegendmodel.h"
-#include "qgscomposerlegenditem.h"
-#include "qgsfield.h"
-#include "qgslayertree.h"
-#include "qgsmaplayer.h"
-#include "qgsmaplayerregistry.h"
-#include "qgsrasterdataprovider.h"
-#include "qgsrasterlayer.h"
-#include "qgsrasterrenderer.h"
-#include "qgsrendererv2.h"
-#include "qgssymbollayerutils.h"
-#include "qgsvectordataprovider.h"
-#include "qgsvectorlayer.h"
-#include
-#include
-#include
-#include
-#include
-#include
-
-QgsLegendModel::QgsLegendModel(): QStandardItemModel(), mAutoUpdate( true )
-{
- setColumnCount( 2 );
-
- if ( QgsMapLayerRegistry::instance() )
- {
- connect( QgsMapLayerRegistry::instance(), SIGNAL( layerWillBeRemoved( QString ) ), this, SLOT( removeLayer( const QString& ) ) );
- connect( QgsMapLayerRegistry::instance(), SIGNAL( layerWasAdded( QgsMapLayer* ) ), this, SLOT( addLayer( QgsMapLayer* ) ) );
- }
-
- QWidgetList topLevelWidgets = QApplication::topLevelWidgets();
- mHasTopLevelWindow = ( !topLevelWidgets.isEmpty() );
-}
-
-QgsLegendModel::~QgsLegendModel()
-{
-}
-
-void QgsLegendModel::setLayerSetAndGroups( QgsLayerTreeGroup* rootGroup )
-{
- clear();
- addGroupFromLayerTree( rootGroup, invisibleRootItem() );
-}
-
-void QgsLegendModel::addGroupFromLayerTree( QgsLayerTreeGroup* parentGroup, QStandardItem* parentItem )
-{
- Q_FOREACH ( QgsLayerTreeNode* node, parentGroup->children() )
- {
- if ( QgsLayerTree::isGroup( node ) )
- {
- QgsLayerTreeGroup* nodeGroup = QgsLayerTree::toGroup( node );
- QStandardItem* groupItem = addGroup( nodeGroup->name(), -1, parentItem );
- addGroupFromLayerTree( nodeGroup, groupItem );
- }
- else if ( QgsLayerTree::isLayer( node ) )
- {
- QgsLayerTreeLayer* nodeLayer = QgsLayerTree::toLayer( node );
- if ( nodeLayer->layer() )
- addLayer( nodeLayer->layer(), -1, QString(), parentItem );
- }
- }
-}
-
-void QgsLegendModel::setLayerSetAndGroups( const QStringList& layerIds, const QList< GroupLayerInfo >& groupInfo )
-{
- setLayerSet( layerIds );
-
- QStandardItem* currentItem = nullptr;
- QStandardItem* currentGroupItem = nullptr;
- int i = 0;
-
- QList< GroupLayerInfo >::const_iterator infoIt = groupInfo.constBegin();
- for ( ; infoIt != groupInfo.constEnd() && i < invisibleRootItem()->rowCount(); )
- {
- currentItem = invisibleRootItem()->child( i, 0 );
- QString infoKey = infoIt->first;
- if ( infoKey.isNull() ) //a toplevel layer
- {
- ++i;
- }
- else //a group
- {
- currentGroupItem = addGroup( infoKey, i );
- ++i;
- QList layerList = infoIt->second;
- QList::const_iterator groupLayerIt = layerList.constBegin();
- for ( ; currentItem && ( groupLayerIt != layerList.constEnd() ); ++groupLayerIt )
- {
- //check if current item is contained in this group
- QgsComposerLayerItem* layerItem = dynamic_cast( currentItem );
- if ( !layerItem )
- {
- return; //should never happen
- }
- QString layerID = layerItem->layerId();
- if ( layerList.contains( layerID ) )
- {
- takeRow( i );
- currentGroupItem->setChild( currentGroupItem->rowCount(), 0, currentItem );
- }
- else
- {
- ++i;
- }
- currentItem = invisibleRootItem()->child( i, 0 );
- }
- }
- ++infoIt;
- }
-}
-
-void QgsLegendModel::setLayerSet( const QStringList& layerIds, double scaleDenominator, const QString& rule )
-{
- mLayerIds = layerIds;
-
- //for now clear the model and add the new entries
- clear();
-
- QStringList::const_iterator idIter = mLayerIds.constBegin();
- QgsMapLayer* currentLayer = nullptr;
-
- for ( ; idIter != mLayerIds.constEnd(); ++idIter )
- {
- currentLayer = QgsMapLayerRegistry::instance()->mapLayer( *idIter );
- addLayer( currentLayer, scaleDenominator, rule );
- }
-}
-
-QStandardItem* QgsLegendModel::addGroup( QString text, int position, QStandardItem* parentItem )
-{
- if ( text.isNull() )
- text = tr( "Group" );
-
- if ( !parentItem )
- parentItem = invisibleRootItem();
-
- QgsComposerGroupItem* groupItem = new QgsComposerGroupItem( text );
- groupItem->setUserText( text );
-
- if ( position == -1 )
- {
- position = parentItem->rowCount();
- }
- QList itemsList;
- itemsList << groupItem << new QgsComposerStyleItem( groupItem );
- parentItem->insertRow( position, itemsList );
-
- emit layersChanged();
- return groupItem;
-}
-
-int QgsLegendModel::addVectorLayerItemsV2( QStandardItem* layerItem, QgsVectorLayer* vlayer, double scaleDenominator, const QString& rule )
-{
- QgsComposerLayerItem* lItem = dynamic_cast( layerItem );
-
- if ( !layerItem || !lItem || !vlayer )
- {
- return 1;
- }
-
- QgsFeatureRendererV2* renderer = vlayer->rendererV2();
- if ( !renderer )
- {
- return 2;
- }
-
- if ( lItem->showFeatureCount() )
- {
- if ( !vlayer->countSymbolFeatures() )
- {
- QgsDebugMsg( "Cannot get feature counts" );
- }
- }
-
- QgsLegendSymbolList lst = renderer->legendSymbolItems( scaleDenominator, rule );
- QgsLegendSymbolList::const_iterator symbolIt = lst.constBegin();
- int row = 0;
- for ( ; symbolIt != lst.constEnd(); ++symbolIt )
- {
- if ( qgsDoubleNear( scaleDenominator, -1 ) && rule.isEmpty() )
- {
- QgsComposerSymbolV2Item* currentSymbolItem = new QgsComposerSymbolV2Item( "" );
-
- // Get userText from old item if exists
- QgsComposerSymbolV2Item* oldSymbolItem = dynamic_cast( layerItem->child( row, 0 ) );
- if ( oldSymbolItem )
- {
- currentSymbolItem->setUserText( oldSymbolItem->userText() );
- }
-
- currentSymbolItem->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable );
- if ( symbolIt->second )
- {
- if ( mHasTopLevelWindow ) //only use QIcon / QPixmap if we have a running x-server
- {
- currentSymbolItem->setIcon( QgsSymbolLayerUtils::symbolPreviewIcon( symbolIt->second, QSize( 30, 30 ) ) );
- }
- currentSymbolItem->setSymbolV2( symbolIt->second->clone() );
- }
- layerItem->setChild( row, 0, currentSymbolItem );
-
- // updateSymbolV2ItemText needs layer set
- updateSymbolV2ItemText( currentSymbolItem );
- }
- else
- {
- QgsComposerSymbolV2Item* currentSymbolItem = new QgsComposerSymbolV2Item( "" );
- if ( mHasTopLevelWindow ) //only use QIcon / QPixmap if we have a running x-server
- {
- currentSymbolItem->setIcon( QgsSymbolLayerUtils::symbolPreviewIcon( symbolIt->second, QSize( 30, 30 ) ) );
- }
- currentSymbolItem->setSymbolV2( symbolIt->second->clone() );
- layerItem->setChild( row, 0, currentSymbolItem );
- currentSymbolItem->setText( symbolIt->first );
- }
-
- row++;
- }
-
- // Don't remove row on getLegendGraphic (read only with filter)
- if ( qgsDoubleNear( scaleDenominator, -1 ) && rule.isEmpty() )
- {
- // Delete following old items (if current number of items decreased)
- for ( int i = layerItem->rowCount() - 1; i >= row; --i )
- {
- layerItem->removeRow( i );
- }
- }
-
- return 0;
-}
-
-int QgsLegendModel::addRasterLayerItems( QStandardItem* layerItem, QgsMapLayer* rlayer )
-{
- if ( !layerItem || !rlayer )
- {
- return 1;
- }
-
- QgsRasterLayer* rasterLayer = qobject_cast( rlayer );
- if ( !rasterLayer )
- {
- return 2;
- }
-
- QgsDebugMsg( QString( "layer providertype:: %1" ).arg( rasterLayer->providerType() ) );
- if ( rasterLayer->dataProvider()->supportsLegendGraphic() )
- {
- QgsComposerRasterSymbolItem* currentSymbolItem = new QgsComposerRasterSymbolItem( "" );
- // GetLegendGraphics in case of WMS service... image can return null if GetLegendGraphics
- // is not supported by the server
- // double currentScale = legend()->canvas()->scale();
- // BEWARE getLegendGraphic() COULD BE USED WITHOUT SCALE PARAMETER IF IT WAS ALREADY CALLED WITH
- // THIS PARAMETER FROM A COMPONENT THAT CAN RECOVER CURRENT SCALE => LEGEND IN THE DESKTOP
- // OTHERWISE IT RETURN A INVALID PIXMAP (QPixmap().isNull() == False)
- QImage legendGraphic = rasterLayer->dataProvider()->getLegendGraphic();
- if ( !legendGraphic.isNull() )
- {
- QgsDebugMsg( QString( "downloaded legend with dimension width:" ) + QString::number( legendGraphic.width() ) + QString( " and Height:" ) + QString::number( legendGraphic.height() ) );
- if ( mHasTopLevelWindow )
- {
- currentSymbolItem->setIcon( QIcon( QPixmap::fromImage( legendGraphic ) ) );
- }
- }
- else
- {
- currentSymbolItem->setText( tr( "No Legend Available" ) );
- }
-
- currentSymbolItem->setLayerId( rasterLayer->id() );
- currentSymbolItem->setColor( QColor() );
- layerItem->removeRows( 0, layerItem->rowCount() );
- layerItem->setChild( layerItem->rowCount(), 0, currentSymbolItem );
- }
- else
- {
- QList< QPair< QString, QColor > > rasterItemList = rasterLayer->legendSymbologyItems();
- QList< QPair< QString, QColor > >::const_iterator itemIt = rasterItemList.constBegin();
- int row = 0;
- for ( ; itemIt != rasterItemList.constEnd(); ++itemIt )
- {
- QgsComposerRasterSymbolItem* currentSymbolItem = new QgsComposerRasterSymbolItem( itemIt->first );
-
- QgsComposerRasterSymbolItem* oldSymbolItem = dynamic_cast( layerItem->child( row, 0 ) );
- if ( oldSymbolItem )
- {
- currentSymbolItem->setUserText( oldSymbolItem->userText() );
- currentSymbolItem->setText( currentSymbolItem->userText() );
- }
-
- if ( mHasTopLevelWindow )
- {
- QPixmap itemPixmap( 20, 20 );
- itemPixmap.fill( itemIt->second );
- currentSymbolItem->setIcon( QIcon( itemPixmap ) );
- }
- currentSymbolItem->setLayerId( rasterLayer->id() );
-
- QColor itemColor = itemIt->second;
-
- //determine raster layer opacity, and adjust item color opacity to match
- QgsRasterRenderer* rasterRenderer = rasterLayer->renderer();
- int opacity = 255;
- if ( rasterRenderer )
- {
- opacity = rasterRenderer->opacity() * 255.0;
- }
- itemColor.setAlpha( opacity );
-
- currentSymbolItem->setColor( itemColor );
-
- int currentRowCount = layerItem->rowCount();
- layerItem->setChild( currentRowCount, 0, currentSymbolItem );
- row++;
- }
-
- // Delete following old items (if current number of items decreased)
- for ( int i = layerItem->rowCount() - 1; i >= row; --i )
- {
- layerItem->removeRow( i );
- }
- }
-
- return 0;
-}
-
-void QgsLegendModel::updateSymbolV2ItemText( QStandardItem* symbolItem )
-{
- QgsComposerSymbolV2Item* sv2Item = dynamic_cast( symbolItem );
- if ( !sv2Item ) return;
-
- QgsComposerLayerItem* lItem = dynamic_cast( sv2Item->parent() );
- if ( !lItem ) return;
-
- QgsMapLayer* mapLayer = QgsMapLayerRegistry::instance()->mapLayer( lItem->layerId() );
- if ( !mapLayer ) return;
-
- QgsVectorLayer* vLayer = qobject_cast( mapLayer );
- if ( !vLayer ) return;
-
- QgsFeatureRendererV2* renderer = vLayer->rendererV2();
- if ( !renderer ) return;
-
- if ( lItem->showFeatureCount() ) vLayer->countSymbolFeatures();
-
- QgsLegendSymbolList symbolList = renderer->legendSymbolItems();
-
- QPair symbol = symbolList.value( symbolItem->row() );
-
- QString label = sv2Item->userText().isEmpty() ? symbol.first : sv2Item->userText();
-
- if ( renderer->type() == "singleSymbol" )
- {
- if ( !sv2Item->userText().isEmpty() )
- {
- label = sv2Item->userText();
- }
- else if ( !lItem->userText().isEmpty() )
- {
- label = lItem->userText();
- }
- else if ( !vLayer->title().isEmpty() )
- {
- label = vLayer->title();
- }
- else
- {
- label = vLayer->name();
- }
- }
-
- if ( lItem->showFeatureCount() )
- {
- // Add counts to multi symbols layers only or labeled single symbols,
- // so that single symbol layers are still drawn on single line
- if ( symbolList.size() > 1 || !label.isEmpty() )
- {
- label += QString( " [%1]" ).arg( vLayer->featureCount( symbol.second ) );
- }
- }
- symbolItem->setText( label );
-}
-
-void QgsLegendModel::updateRasterSymbolItemText( QStandardItem* symbolItem )
-{
- QgsComposerRasterSymbolItem* rItem = dynamic_cast( symbolItem );
- if ( !rItem ) return;
-
- QgsComposerLayerItem* lItem = dynamic_cast( rItem->parent() );
- if ( !lItem ) return;
-
- QgsMapLayer* mapLayer = QgsMapLayerRegistry::instance()->mapLayer( lItem->layerId() );
- if ( !mapLayer ) return;
-
- QgsRasterLayer* rLayer = qobject_cast( mapLayer );
- if ( !rLayer ) return;
-
- QPair< QString, QColor> symbol = rLayer->legendSymbologyItems().value( symbolItem->row() );
-
- QString label = rItem->userText().isEmpty() ? symbol.first : rItem->userText();
-
- symbolItem->setText( label );
-}
-
-void QgsLegendModel::updateItem( QStandardItem* item )
-{
- if ( !item )
- {
- return;
- }
-
- //only layer items are supported for update
- QgsComposerLegendItem* cItem = dynamic_cast( item );
- if ( ! cItem )
- {
- return;
- }
-
- QgsComposerLegendItem::ItemType type = cItem->itemType();
- if ( type == QgsComposerLegendItem::LayerItem )
- {
- updateLayer( cItem );
- }
-}
-
-void QgsLegendModel::updateItemText( QStandardItem* item )
-{
- if ( !item )
- {
- return;
- }
-
- //only layer items are supported for update
- QgsComposerLegendItem* cItem = dynamic_cast( item );
- if ( ! cItem )
- {
- return;
- }
-
- QgsComposerLayerItem* lItem = dynamic_cast( cItem );
- if ( lItem )
- {
- updateLayerItemText( lItem );
- return;
- }
-
- QgsComposerSymbolV2Item* sv2Item = dynamic_cast( cItem );
- if ( sv2Item )
- {
- updateSymbolV2ItemText( sv2Item );
- return;
- }
-
- QgsComposerRasterSymbolItem* rItem = dynamic_cast( cItem );
- if ( rItem )
- {
- updateRasterSymbolItemText( rItem );
- return;
- }
-
- // group
- cItem->setText( cItem->userText() );
-}
-
-void QgsLegendModel::updateLayer( QStandardItem* layerItem )
-{
- QgsDebugMsg( "Entered." );
- QgsComposerLayerItem* lItem = dynamic_cast( layerItem );
- if ( lItem )
- {
- QgsMapLayer* mapLayer = QgsMapLayerRegistry::instance()->mapLayer( lItem->layerId() );
- if ( mapLayer )
- {
- updateLayerItemText( lItem );
-
- QgsVectorLayer* vLayer = qobject_cast( mapLayer );
- if ( vLayer )
- {
- addVectorLayerItemsV2( lItem, vLayer );
- }
-
- QgsRasterLayer* rLayer = qobject_cast( mapLayer );
- if ( rLayer )
- {
- addRasterLayerItems( lItem, rLayer );
- }
- }
- }
-}
-
-void QgsLegendModel::updateLayerItemText( QStandardItem* layerItem )
-{
- QgsComposerLayerItem* lItem = dynamic_cast( layerItem );
- if ( !lItem ) return;
-
- QgsMapLayer* mapLayer = QgsMapLayerRegistry::instance()->mapLayer( lItem->layerId() );
- if ( !mapLayer ) return;
-
- QString label = lItem->userText().isEmpty() ? mapLayer->name() : lItem->userText();
-
- QgsVectorLayer* vLayer = qobject_cast( mapLayer );
- if ( vLayer )
- {
- addVectorLayerItemsV2( lItem, vLayer );
- if ( lItem->showFeatureCount() )
- {
- label += QString( " [%1]" ).arg( vLayer->featureCount() );
- }
- }
- lItem->setText( label );
-}
-
-void QgsLegendModel::removeLayer( const QString& layerId )
-{
- int numRootItems = rowCount();
- for ( int i = 0; i < numRootItems ; ++i )
- {
- QgsComposerLayerItem* lItem = dynamic_cast( item( i ) );
- if ( !lItem )
- {
- continue;
- }
-
- if ( layerId == lItem->layerId() )
- {
- if ( QgsMapLayerRegistry::instance() )
- {
- QgsMapLayer* layer = QgsMapLayerRegistry::instance()->mapLayer( lItem->layerId() );
- if ( layer )
- {
- disconnect( layer, SIGNAL( rendererChanged() ), this, SLOT( updateLayer() ) );
- }
- }
- removeRow( i ); //todo: also remove the subitems and their symbols...
- emit layersChanged();
- return;
- }
- }
-}
-
-void QgsLegendModel::addLayer( QgsMapLayer* theMapLayer, double scaleDenominator, const QString& rule, QStandardItem* parentItem )
-{
- if ( !theMapLayer )
- {
- return;
- }
-
- if ( !parentItem )
- parentItem = invisibleRootItem();
-
- QgsComposerLayerItem* layerItem = new QgsComposerLayerItem( theMapLayer->name() );
- if ( theMapLayer->title() != "" )
- {
- layerItem->setText( theMapLayer->title() );
- layerItem->setUserText( theMapLayer->title() );
- }
- layerItem->setLayerId( theMapLayer->id() );
- layerItem->setDefaultStyle( scaleDenominator, rule );
- layerItem->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable );
-
- QList itemsList;
- itemsList << layerItem << new QgsComposerStyleItem( layerItem );
- parentItem->appendRow( itemsList );
-
- switch ( theMapLayer->type() )
- {
- case QgsMapLayer::VectorLayer:
- {
- QgsVectorLayer* vl = dynamic_cast( theMapLayer );
- if ( vl )
- {
- addVectorLayerItemsV2( layerItem, vl, scaleDenominator, rule );
- }
- break;
- }
- case QgsMapLayer::RasterLayer:
- addRasterLayerItems( layerItem, theMapLayer );
- break;
- default:
- break;
- }
-
- if ( mAutoUpdate )
- {
- connect( theMapLayer, SIGNAL( rendererChanged() ), this, SLOT( updateLayer() ) );
- }
-
- emit layersChanged();
-}
-
-void QgsLegendModel::updateLayer()
-{
- QString layerId = qobject_cast( QObject::sender() )->id();
-
- for ( int i = 0, n = rowCount(); i < n ; ++i )
- {
- QgsComposerLayerItem* lItem = dynamic_cast( item( i ) );
- if ( lItem && layerId == lItem->layerId() )
- {
- updateLayer( lItem );
- emit layersChanged();
- return;
- }
- }
-}
-
-bool QgsLegendModel::writeXml( QDomElement& composerLegendElem, QDomDocument& doc ) const
-{
- if ( composerLegendElem.isNull() )
- {
- return false;
- }
-
- QDomElement legendModelElem = doc.createElement( "Model" );
- legendModelElem.setAttribute( "autoUpdate", mAutoUpdate );
- int nTopLevelItems = invisibleRootItem()->rowCount();
- QStandardItem* currentItem = nullptr;
- QgsComposerLegendItem* currentLegendItem = nullptr;
-
- for ( int i = 0; i < nTopLevelItems; ++i )
- {
- currentItem = invisibleRootItem()->child( i, 0 );
- currentLegendItem = dynamic_cast( currentItem );
- if ( currentLegendItem )
- {
- currentLegendItem->writeXml( legendModelElem, doc );
- }
- }
-
- composerLegendElem.appendChild( legendModelElem );
- return true;
-}
-
-bool QgsLegendModel::readXml( const QDomElement& legendModelElem, const QDomDocument& doc )
-{
- Q_UNUSED( doc );
-
- if ( legendModelElem.isNull() )
- {
- return false;
- }
-
- clear();
- //disable autoupdates here in order to have a setAutoUpdate(true)
- //below connect the rendererChanged signals to the layers
- setAutoUpdate( false );
-
- QDomNodeList topLevelItemList = legendModelElem.childNodes();
- QDomElement currentElem;
-
- int nTopLevelItems = topLevelItemList.size();
- for ( int i = 0; i < nTopLevelItems; ++i )
- {
- currentElem = topLevelItemList.at( i ).toElement();
- if ( currentElem.isNull() )
- {
- continue;
- }
-
- //toplevel items can be groups or layers
- QgsComposerLegendItem* currentItem = nullptr;
- if ( currentElem.tagName() == "LayerItem" )
- {
- currentItem = new QgsComposerLayerItem();
- }
- else if ( currentElem.tagName() == "GroupItem" )
- {
- currentItem = new QgsComposerGroupItem();
- }
-
- if ( !currentItem )
- continue;
-
- currentItem->readXml( currentElem, mHasTopLevelWindow );
-
- QList itemsList;
- itemsList << currentItem << new QgsComposerStyleItem( currentItem );
- appendRow( itemsList );
- }
-
- setAutoUpdate( legendModelElem.attribute( "autoUpdate", "1" ).toInt() );
- return true;
-}
-
-Qt::DropActions QgsLegendModel::supportedDropActions() const
-{
- return Qt::MoveAction;
-}
-
-Qt::ItemFlags QgsLegendModel::flags( const QModelIndex &index ) const
-{
- Qt::ItemFlags flags = Qt::ItemIsEnabled | Qt::ItemIsSelectable;
- if ( !index.isValid() )
- {
- flags |= Qt::ItemIsDropEnabled;
- return flags;
- }
-
- QStandardItem* item = itemFromIndex( index );
- QgsComposerLegendItem* cItem = dynamic_cast( item );
-
- if ( cItem )
- {
- QgsComposerLegendItem::ItemType type = cItem->itemType();
- if ( type == QgsComposerLegendItem::GroupItem )
- {
- flags |= Qt::ItemIsDragEnabled;
- flags |= Qt::ItemIsDropEnabled;
- }
- else if ( type == QgsComposerLegendItem::LayerItem )
- {
- flags |= Qt::ItemIsDragEnabled;
- }
- }
- if ( index.column() == 1 && item )
- {
- // Style
- QStandardItem* firstColumnItem = nullptr;
- if ( item->parent() )
- {
- firstColumnItem = item->parent()->child( index.row(), 0 );
- }
- else
- {
- firstColumnItem = QgsLegendModel::item( index.row(), 0 );
- }
- cItem = dynamic_cast( firstColumnItem );
-
- if ( cItem )
- {
- if ( cItem->itemType() == QgsComposerLegendItem::GroupItem ||
- cItem->itemType() == QgsComposerLegendItem::LayerItem )
- {
- flags |= Qt::ItemIsEditable;
- }
- }
- }
- return flags;
-}
-
-bool QgsLegendModel::removeRows( int row, int count, const QModelIndex & parent )
-{
- if ( count < 1 )
- {
- return false;
- }
-
- if ( parent.isValid() )
- {
- for ( int i = row + count - 1; i >= row; --i )
- {
- QStandardItem* item = itemFromIndex( parent );
- if ( item )
- {
- item->takeRow( i );
- }
- }
- }
- else
- {
- for ( int i = row + count - 1; i >= row; --i )
- {
- takeRow( i );
- }
- }
- return true;
-}
-
-QMimeData* QgsLegendModel::mimeData( const QModelIndexList &indexes ) const
-{
- QMimeData* mimeData = new QMimeData();
- QDomDocument xmlDoc;
- QDomElement xmlRootElement = xmlDoc.createElement( "LegendModelDragData" );
- xmlDoc.appendChild( xmlRootElement );
-
- QModelIndexList::const_iterator indexIt = indexes.constBegin();
- for ( ; indexIt != indexes.constEnd(); ++indexIt )
- {
- QStandardItem* sItem = itemFromIndex( *indexIt );
- if ( sItem )
- {
- QgsComposerLegendItem* mItem = dynamic_cast( sItem );
- if ( mItem )
- {
- mItem->writeXml( xmlRootElement, xmlDoc );
- }
- }
- }
- mimeData->setData( "text/xml", xmlDoc.toByteArray() );
- return mimeData;
-}
-
-QStringList QgsLegendModel::mimeTypes() const
-{
- QStringList types;
- types << "text/xml";
- return types;
-}
-
-bool QgsLegendModel::dropMimeData( const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent )
-{
- Q_UNUSED( action );
- Q_UNUSED( column );
-
- if ( !data->hasFormat( "text/xml" ) )
- {
- return false;
- }
-
- QStandardItem* dropIntoItem = nullptr;
- if ( parent.isValid() )
- {
- dropIntoItem = itemFromIndex( parent );
- }
- else
- {
- dropIntoItem = invisibleRootItem();
- }
-
- //get XML doc
- QByteArray encodedData = data->data( "text/xml" );
- QDomDocument xmlDoc;
- xmlDoc.setContent( encodedData );
-
- QDomElement dragDataElem = xmlDoc.documentElement();
- if ( dragDataElem.tagName() != "LegendModelDragData" )
- {
- return false;
- }
-
- QDomNodeList nodeList = dragDataElem.childNodes();
- int nChildNodes = nodeList.size();
- QDomElement currentElem;
- QString currentTagName;
- QgsComposerLegendItem* currentItem = nullptr;
-
- for ( int i = 0; i < nChildNodes; ++i )
- {
- currentElem = nodeList.at( i ).toElement();
- if ( currentElem.isNull() )
- {
- continue;
- }
- currentTagName = currentElem.tagName();
- if ( currentTagName == "LayerItem" )
- {
- currentItem = new QgsComposerLayerItem();
- }
- else if ( currentTagName == "GroupItem" )
- {
- currentItem = new QgsComposerGroupItem();
- }
- else
- {
- continue;
- }
- currentItem->readXml( currentElem );
- int index;
- if ( row < 0 )
- {
- index = dropIntoItem->rowCount();
- }
- else
- {
- index = row + i;
- }
- QList itemsList;
- itemsList << currentItem << new QgsComposerStyleItem( currentItem );
- dropIntoItem->insertRow( index, itemsList );
- }
- emit layersChanged();
- return true;
-}
-
-void QgsLegendModel::setAutoUpdate( bool autoUpdate )
-{
- if ( mAutoUpdate == autoUpdate ) //prevent multiple signal/slot connections
- {
- return;
- }
-
- mAutoUpdate = autoUpdate;
- if ( autoUpdate )
- {
- if ( QgsMapLayerRegistry::instance() )
- {
- connect( QgsMapLayerRegistry::instance(), SIGNAL( layerWillBeRemoved( QString ) ), this, SLOT( removeLayer( const QString& ) ) );
- connect( QgsMapLayerRegistry::instance(), SIGNAL( layerWasAdded( QgsMapLayer* ) ), this, SLOT( addLayer( QgsMapLayer* ) ) );
-
- for ( int i = 0, n = rowCount(); i < n ; ++i )
- {
- QgsComposerLayerItem* lItem = dynamic_cast( item( i ) );
- if ( lItem )
- {
- QgsMapLayer* layer = QgsMapLayerRegistry::instance()->mapLayer( lItem->layerId() );
- if ( layer )
- {
- connect( layer, SIGNAL( rendererChanged() ), this, SLOT( updateLayer() ) );
- }
- }
- }
- }
- }
- else
- {
- if ( QgsMapLayerRegistry::instance() )
- {
- disconnect( QgsMapLayerRegistry::instance(), SIGNAL( layerWillBeRemoved( QString ) ), this, SLOT( removeLayer( const QString& ) ) );
- disconnect( QgsMapLayerRegistry::instance(), SIGNAL( layerWasAdded( QgsMapLayer* ) ), this, SLOT( addLayer( QgsMapLayer* ) ) );
-
- for ( int i = 0, n = rowCount(); i < n ; ++i )
- {
- QgsComposerLayerItem* lItem = dynamic_cast( item( i ) );
- if ( lItem )
- {
- QgsMapLayer* layer = QgsMapLayerRegistry::instance()->mapLayer( lItem->layerId() );
- if ( layer )
- {
- disconnect( layer, SIGNAL( rendererChanged() ), this, SLOT( updateLayer() ) );
- }
- }
- }
- }
- }
-}
diff --git a/src/core/composer/qgslegendmodel.h b/src/core/composer/qgslegendmodel.h
deleted file mode 100644
index c96df0616e0..00000000000
--- a/src/core/composer/qgslegendmodel.h
+++ /dev/null
@@ -1,140 +0,0 @@
-/***************************************************************************
- qgslegendmodel.h - description
- -----------------
- begin : June 2008
- copyright : (C) 2008 by Marco Hugentobler
- email : marco dot hugentobler at karto dot baug dot ethz dot ch
- ***************************************************************************/
-
-/***************************************************************************
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- ***************************************************************************/
-
-#ifndef QGSLEGENDMODEL_H
-#define QGSLEGENDMODEL_H
-
-#include
-#include
-#include
-
-class QDomDocument;
-class QDomElement;
-class QgsLayerTreeGroup;
-class QgsMapLayer;
-class QgsSymbol;
-class QgsVectorLayer;
-
-//Information about relationship between groups and layers
-//key: group name (or null strings for single layers without groups)
-//value: containter with layer ids contained in the group
-typedef QPair< QString, QList > GroupLayerInfo;
-
-/** \ingroup core
- * A model that provides group, layer and classification items.
- */
-class CORE_EXPORT QgsLegendModel : public QStandardItemModel
-{
- Q_OBJECT
-
- public:
-
- enum ItemType
- {
- GroupItem = 0,
- LayerItem,
- ClassificationItem
- };
-
- QgsLegendModel();
- ~QgsLegendModel();
-
- /** Set layers and groups from a layer tree
- * @note added in 2.6
- */
- void setLayerSetAndGroups( QgsLayerTreeGroup* rootGroup );
- /** Sets layer set and groups
- * @deprecated in 2.6
- */
- Q_DECL_DEPRECATED void setLayerSetAndGroups( const QStringList& layerIds, const QList< GroupLayerInfo >& groupInfo );
- void setLayerSet( const QStringList& layerIds, double scaleDenominator = -1, const QString& rule = "" );
- /** Adds a group
- @param text name of group (defaults to translation of "Group")
- @param position insertion position (toplevel position (or -1 if it should be placed at the end of the legend).
- @param parentItem parent item
- @returns a pointer to the added group
- */
- QStandardItem *addGroup( QString text = QString::null, int position = -1, QStandardItem* parentItem = nullptr );
-
- /** Tries to automatically update a model entry (e.g. a whole layer or only a single item)*/
- void updateItem( QStandardItem* item );
- /** Updates the whole symbology of a layer*/
- void updateLayer( QStandardItem* layerItem );
- /** Tries to update a single classification item*/
- void updateVectorV2ClassificationItem( QStandardItem* classificationItem, QgsSymbol* symbol, const QString& itemText )
- { Q_UNUSED( classificationItem ); Q_UNUSED( symbol ); Q_UNUSED( itemText ); }
- void updateRasterClassificationItem( QStandardItem* classificationItem )
- { Q_UNUSED( classificationItem ); }
-
- /** Update single item text using item userText and other properties like showFeatureCount */
- void updateItemText( QStandardItem* item );
-
-
- bool writeXml( QDomElement& composerLegendElem, QDomDocument& doc ) const;
- bool readXml( const QDomElement& legendModelElem, const QDomDocument& doc );
-
- Qt::DropActions supportedDropActions() const override;
- Qt::ItemFlags flags( const QModelIndex &index ) const override;
-
- /** Implemented to support drag operations*/
- virtual bool removeRows( int row, int count, const QModelIndex & parent = QModelIndex() ) override;
-
- /** For the drag operation*/
- QMimeData* mimeData( const QModelIndexList &indexes ) const override;
- QStringList mimeTypes() const override;
-
- /** Implements the drop operation*/
- bool dropMimeData( const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent ) override;
-
- void setAutoUpdate( bool autoUpdate );
- bool autoUpdate() { return mAutoUpdate; }
-
- public slots:
- void removeLayer( const QString& layerId );
- void addLayer( QgsMapLayer* theMapLayer, double scaleDenominator = -1, const QString& rule = "", QStandardItem* parentItem = nullptr );
-
- private slots:
- void updateLayer();
-
- signals:
- void layersChanged();
-
- private:
- /** Adds classification items of vector layers using new symbology*/
- int addVectorLayerItemsV2( QStandardItem* layerItem, QgsVectorLayer* vlayer, double scaleDenominator = -1, const QString& rule = "" );
-
- /** Adds item of raster layer
- @return 0 in case of success*/
- int addRasterLayerItems( QStandardItem* layerItem, QgsMapLayer* rlayer );
-
- void updateLayerItemText( QStandardItem* layerItem );
- void updateSymbolV2ItemText( QStandardItem* symbolItem );
- void updateRasterSymbolItemText( QStandardItem* symbolItem );
-
- void addGroupFromLayerTree( QgsLayerTreeGroup* parentGroup, QStandardItem* parentItem );
-
- protected:
- QStringList mLayerIds;
- /** True if this application has toplevel windows (normally true). If this is false, this means that the application
- might not have a running x-server on unix systems and so QPixmap and QIcon cannot be used*/
- bool mHasTopLevelWindow;
-
- /** True if the legend is auto updated when layers are added or removed from the map canvas */
- bool mAutoUpdate;
-};
-
-#endif
diff --git a/src/core/qgslegendrenderer.cpp b/src/core/qgslegendrenderer.cpp
index c55f1ece034..0d8f9534d8a 100644
--- a/src/core/qgslegendrenderer.cpp
+++ b/src/core/qgslegendrenderer.cpp
@@ -19,7 +19,6 @@
#include "qgslayertree.h"
#include "qgslayertreemodel.h"
#include "qgslayertreemodellegendnode.h"
-#include "qgslegendmodel.h"
#include "qgsmaplayerlegend.h"
#include "qgsmaplayerregistry.h"
#include "qgssymbol.h"
diff --git a/src/server/qgswfsserver.cpp b/src/server/qgswfsserver.cpp
index afff63fcd9e..6f86f66aaa8 100644
--- a/src/server/qgswfsserver.cpp
+++ b/src/server/qgswfsserver.cpp
@@ -33,7 +33,6 @@
#include "qgsvectorlayer.h"
#include "qgsmapserviceexception.h"
#include "qgssymbol.h"
-#include "qgslegendmodel.h"
#include "qgscomposerlegenditem.h"
#include "qgsrequesthandler.h"
#include "qgsogcutils.h"
diff --git a/tests/src/core/testqgslegendrenderer.cpp b/tests/src/core/testqgslegendrenderer.cpp
index 4323e021849..20dfd142ead 100644
--- a/tests/src/core/testqgslegendrenderer.cpp
+++ b/tests/src/core/testqgslegendrenderer.cpp
@@ -24,7 +24,6 @@
#include "qgslayertreeutils.h"
#include "qgslayertreemodel.h"
#include "qgslayertreemodellegendnode.h"
-#include "qgslegendmodel.h"
#include "qgsmaplayerlegend.h"
#include "qgsmaplayerregistry.h"
#include "qgslegendrenderer.h"