LCOV - code coverage report
Current view: top level - core - qgsmaplayermodel.cpp (source / functions) Hit Total Coverage
Test: coverage.info.cleaned Lines: 0 341 0.0 %
Date: 2021-03-26 12:19:53 Functions: 0 0 -
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /***************************************************************************
       2                 :            :    qgsmaplayermodel.cpp
       3                 :            :     --------------------------------------
       4                 :            :    Date                 : 01.04.2014
       5                 :            :    Copyright            : (C) 2014 Denis Rouzaud
       6                 :            :    Email                : denis.rouzaud@gmail.com
       7                 :            : ***************************************************************************
       8                 :            : *                                                                         *
       9                 :            : *   This program is free software; you can redistribute it and/or modify  *
      10                 :            : *   it under the terms of the GNU General Public License as published by  *
      11                 :            : *   the Free Software Foundation; either version 2 of the License, or     *
      12                 :            : *   (at your option) any later version.                                   *
      13                 :            : *                                                                         *
      14                 :            : ***************************************************************************/
      15                 :            : 
      16                 :            : #include <QIcon>
      17                 :            : 
      18                 :            : #include "qgsdataitem.h"
      19                 :            : #include "qgsmaplayermodel.h"
      20                 :            : #include "qgsproject.h"
      21                 :            : #include "qgsapplication.h"
      22                 :            : #include "qgsvectorlayer.h"
      23                 :            : 
      24                 :          0 : QgsMapLayerModel::QgsMapLayerModel( const QList<QgsMapLayer *> &layers, QObject *parent, QgsProject *project )
      25                 :          0 :   : QAbstractItemModel( parent )
      26                 :          0 :   , mProject( project ? project : QgsProject::instance() )
      27                 :          0 : {
      28                 :          0 :   connect( mProject, static_cast < void ( QgsProject::* )( const QStringList & ) >( &QgsProject::layersWillBeRemoved ), this, &QgsMapLayerModel::removeLayers );
      29                 :          0 :   addLayers( layers );
      30                 :          0 : }
      31                 :            : 
      32                 :          0 : QgsMapLayerModel::QgsMapLayerModel( QObject *parent, QgsProject *project )
      33                 :          0 :   : QAbstractItemModel( parent )
      34                 :          0 :   , mProject( project ? project : QgsProject::instance() )
      35                 :          0 : {
      36                 :          0 :   connect( mProject, &QgsProject::layersAdded, this, &QgsMapLayerModel::addLayers );
      37                 :          0 :   connect( mProject, static_cast < void ( QgsProject::* )( const QStringList & ) >( &QgsProject::layersWillBeRemoved ), this, &QgsMapLayerModel::removeLayers );
      38                 :          0 :   addLayers( mProject->mapLayers().values() );
      39                 :          0 : }
      40                 :            : 
      41                 :          0 : void QgsMapLayerModel::setItemsCheckable( bool checkable )
      42                 :            : {
      43                 :          0 :   mItemCheckable = checkable;
      44                 :          0 : }
      45                 :            : 
      46                 :          0 : void QgsMapLayerModel::setItemsCanBeReordered( bool allow )
      47                 :            : {
      48                 :          0 :   mCanReorder = allow;
      49                 :          0 : }
      50                 :            : 
      51                 :          0 : bool QgsMapLayerModel::itemsCanBeReordered() const
      52                 :            : {
      53                 :          0 :   return mCanReorder;
      54                 :            : }
      55                 :            : 
      56                 :          0 : void QgsMapLayerModel::checkAll( Qt::CheckState checkState )
      57                 :            : {
      58                 :          0 :   QMap<QString, Qt::CheckState>::iterator i = mLayersChecked.begin();
      59                 :          0 :   for ( ; i != mLayersChecked.end(); ++i )
      60                 :            :   {
      61                 :          0 :     *i = checkState;
      62                 :          0 :   }
      63                 :          0 :   emit dataChanged( index( 0, 0 ), index( rowCount() - 1, 0 ) );
      64                 :          0 : }
      65                 :            : 
      66                 :          0 : void QgsMapLayerModel::setAllowEmptyLayer( bool allowEmpty )
      67                 :            : {
      68                 :          0 :   if ( allowEmpty == mAllowEmpty )
      69                 :          0 :     return;
      70                 :            : 
      71                 :          0 :   if ( allowEmpty )
      72                 :            :   {
      73                 :          0 :     beginInsertRows( QModelIndex(), 0, 0 );
      74                 :          0 :     mAllowEmpty = true;
      75                 :          0 :     endInsertRows();
      76                 :          0 :   }
      77                 :            :   else
      78                 :            :   {
      79                 :          0 :     beginRemoveRows( QModelIndex(), 0, 0 );
      80                 :          0 :     mAllowEmpty = false;
      81                 :          0 :     endRemoveRows();
      82                 :            :   }
      83                 :          0 : }
      84                 :            : 
      85                 :          0 : void QgsMapLayerModel::setShowCrs( bool showCrs )
      86                 :            : {
      87                 :          0 :   if ( mShowCrs == showCrs )
      88                 :          0 :     return;
      89                 :            : 
      90                 :          0 :   mShowCrs = showCrs;
      91                 :          0 :   emit dataChanged( index( 0, 0 ), index( rowCount() - 1, 0 ), QVector<int>() << Qt::DisplayRole );
      92                 :          0 : }
      93                 :            : 
      94                 :          0 : QList<QgsMapLayer *> QgsMapLayerModel::layersChecked( Qt::CheckState checkState )
      95                 :            : {
      96                 :          0 :   QList<QgsMapLayer *> layers;
      97                 :          0 :   const auto constMLayers = mLayers;
      98                 :          0 :   for ( QgsMapLayer *layer : constMLayers )
      99                 :            :   {
     100                 :          0 :     if ( mLayersChecked[layer->id()] == checkState )
     101                 :            :     {
     102                 :          0 :       layers.append( layer );
     103                 :          0 :     }
     104                 :            :   }
     105                 :          0 :   return layers;
     106                 :          0 : }
     107                 :            : 
     108                 :          0 : void QgsMapLayerModel::setLayersChecked( const QList<QgsMapLayer *> &layers )
     109                 :            : {
     110                 :          0 :   QMap<QString, Qt::CheckState>::iterator i = mLayersChecked.begin();
     111                 :          0 :   for ( ; i != mLayersChecked.end(); ++i )
     112                 :            :   {
     113                 :          0 :     *i = Qt::Unchecked;
     114                 :          0 :   }
     115                 :          0 :   for ( const QgsMapLayer *layer : layers )
     116                 :            :   {
     117                 :          0 :     mLayersChecked[ layer->id() ] = Qt::Checked;
     118                 :            :   }
     119                 :          0 :   emit dataChanged( index( 0, 0 ), index( rowCount() - 1, 0 ), QVector<int>() << Qt::CheckStateRole );
     120                 :          0 : }
     121                 :            : 
     122                 :          0 : QModelIndex QgsMapLayerModel::indexFromLayer( QgsMapLayer *layer ) const
     123                 :            : {
     124                 :          0 :   int r = mLayers.indexOf( layer );
     125                 :          0 :   if ( r >= 0 && mAllowEmpty )
     126                 :          0 :     r++;
     127                 :          0 :   return index( r, 0 );
     128                 :            : }
     129                 :            : 
     130                 :          0 : QgsMapLayer *QgsMapLayerModel::layerFromIndex( const QModelIndex &index ) const
     131                 :            : {
     132                 :          0 :   return mProject->mapLayer( index.data( LayerIdRole ).toString() );
     133                 :          0 : }
     134                 :            : 
     135                 :          0 : void QgsMapLayerModel::setAdditionalItems( const QStringList &items )
     136                 :            : {
     137                 :          0 :   if ( items == mAdditionalItems )
     138                 :          0 :     return;
     139                 :            : 
     140                 :          0 :   int offset = 0;
     141                 :          0 :   if ( mAllowEmpty )
     142                 :          0 :     offset++;
     143                 :            : 
     144                 :          0 :   offset += mLayers.count();
     145                 :            : 
     146                 :            :   //remove existing
     147                 :          0 :   if ( !mAdditionalItems.isEmpty() )
     148                 :            :   {
     149                 :          0 :     beginRemoveRows( QModelIndex(), offset, offset + mAdditionalItems.count() - 1 );
     150                 :          0 :     mAdditionalItems.clear();
     151                 :          0 :     endRemoveRows();
     152                 :          0 :   }
     153                 :            : 
     154                 :            :   //add new
     155                 :          0 :   beginInsertRows( QModelIndex(), offset, offset + items.count() - 1 );
     156                 :          0 :   mAdditionalItems = items;
     157                 :          0 :   endInsertRows();
     158                 :          0 : }
     159                 :            : 
     160                 :          0 : void QgsMapLayerModel::removeLayers( const QStringList &layerIds )
     161                 :            : {
     162                 :          0 :   int offset = 0;
     163                 :          0 :   if ( mAllowEmpty )
     164                 :          0 :     offset++;
     165                 :            : 
     166                 :          0 :   for ( const QString &layerId : layerIds )
     167                 :            :   {
     168                 :          0 :     QModelIndex startIndex = index( 0, 0 );
     169                 :          0 :     QModelIndexList list = match( startIndex, LayerIdRole, layerId, 1 );
     170                 :          0 :     if ( !list.isEmpty() )
     171                 :            :     {
     172                 :          0 :       QModelIndex index = list[0];
     173                 :          0 :       beginRemoveRows( QModelIndex(), index.row(), index.row() );
     174                 :          0 :       mLayersChecked.remove( layerId );
     175                 :          0 :       mLayers.removeAt( index.row() - offset );
     176                 :          0 :       endRemoveRows();
     177                 :          0 :     }
     178                 :          0 :   }
     179                 :          0 : }
     180                 :            : 
     181                 :          0 : void QgsMapLayerModel::addLayers( const QList<QgsMapLayer *> &layers )
     182                 :            : {
     183                 :          0 :   if ( !layers.empty( ) )
     184                 :            :   {
     185                 :          0 :     int offset = 0;
     186                 :          0 :     if ( mAllowEmpty )
     187                 :          0 :       offset++;
     188                 :            : 
     189                 :          0 :     beginInsertRows( QModelIndex(), mLayers.count() + offset, mLayers.count() + layers.count() - 1  + offset );
     190                 :          0 :     const auto constLayers = layers;
     191                 :          0 :     for ( QgsMapLayer *layer : constLayers )
     192                 :            :     {
     193                 :          0 :       mLayers.append( layer );
     194                 :          0 :       mLayersChecked.insert( layer->id(), Qt::Unchecked );
     195                 :            :     }
     196                 :          0 :     endInsertRows();
     197                 :          0 :   }
     198                 :          0 : }
     199                 :            : 
     200                 :          0 : QModelIndex QgsMapLayerModel::index( int row, int column, const QModelIndex &parent ) const
     201                 :            : {
     202                 :          0 :   int offset = 0;
     203                 :          0 :   if ( mAllowEmpty )
     204                 :          0 :     offset++;
     205                 :          0 : 
     206                 :          0 :   if ( hasIndex( row, column, parent ) )
     207                 :            :   {
     208                 :          0 :     QgsMapLayer *layer = nullptr;
     209                 :          0 :     if ( row - offset >= 0 && row - offset < mLayers.count() )
     210                 :          0 :       layer = mLayers.at( row - offset );
     211                 :            : 
     212                 :          0 :     return createIndex( row, column, layer );
     213                 :          0 :   }
     214                 :            : 
     215                 :          0 :   return QModelIndex();
     216                 :            : 
     217                 :          0 : }
     218                 :            : 
     219                 :          0 : QModelIndex QgsMapLayerModel::parent( const QModelIndex &child ) const
     220                 :            : {
     221                 :          0 :   Q_UNUSED( child )
     222                 :          0 :   return QModelIndex();
     223                 :            : }
     224                 :            : 
     225                 :            : 
     226                 :          0 : int QgsMapLayerModel::rowCount( const QModelIndex &parent ) const
     227                 :            : {
     228                 :          0 :   if ( parent.isValid() )
     229                 :          0 :     return 0;
     230                 :            : 
     231                 :          0 :   return ( mAllowEmpty ? 1 : 0 ) + mLayers.length() + mAdditionalItems.count();
     232                 :          0 : }
     233                 :            : 
     234                 :          0 : int QgsMapLayerModel::columnCount( const QModelIndex &parent ) const
     235                 :            : {
     236                 :          0 :   Q_UNUSED( parent )
     237                 :          0 :   return 1;
     238                 :            : }
     239                 :            : 
     240                 :            : 
     241                 :          0 : QVariant QgsMapLayerModel::data( const QModelIndex &index, int role ) const
     242                 :            : {
     243                 :          0 :   if ( !index.isValid() )
     244                 :          0 :     return QVariant();
     245                 :            : 
     246                 :          0 :   bool isEmpty = index.row() == 0 && mAllowEmpty;
     247                 :          0 :   int additionalIndex = index.row() - ( mAllowEmpty ? 1 : 0 ) - mLayers.count();
     248                 :            : 
     249                 :          0 :   switch ( role )
     250                 :            :   {
     251                 :            :     case Qt::DisplayRole:
     252                 :            :     case Qt::EditRole:
     253                 :            :     {
     254                 :          0 :       if ( index.row() == 0 && mAllowEmpty )
     255                 :          0 :         return QVariant();
     256                 :            : 
     257                 :          0 :       if ( additionalIndex >= 0 )
     258                 :          0 :         return mAdditionalItems.at( additionalIndex );
     259                 :            : 
     260                 :          0 :       QgsMapLayer *layer = mLayers.value( index.row() - ( mAllowEmpty ? 1 : 0 ) );
     261                 :          0 :       if ( !layer )
     262                 :          0 :         return QVariant();
     263                 :            : 
     264                 :          0 :       if ( !mShowCrs || !layer->isSpatial() || role == Qt::EditRole )
     265                 :            :       {
     266                 :          0 :         return layer->name();
     267                 :            :       }
     268                 :            :       else
     269                 :            :       {
     270                 :          0 :         return tr( "%1 [%2]" ).arg( layer->name(), layer->crs().authid() );
     271                 :            :       }
     272                 :            :     }
     273                 :            : 
     274                 :            :     case LayerIdRole:
     275                 :            :     {
     276                 :          0 :       if ( isEmpty || additionalIndex >= 0 )
     277                 :          0 :         return QVariant();
     278                 :            : 
     279                 :          0 :       QgsMapLayer *layer = mLayers.value( index.row() - ( mAllowEmpty ? 1 : 0 ) );
     280                 :          0 :       return layer ? layer->id() : QVariant();
     281                 :            :     }
     282                 :            : 
     283                 :            :     case LayerRole:
     284                 :            :     {
     285                 :          0 :       if ( isEmpty || additionalIndex >= 0 )
     286                 :          0 :         return QVariant();
     287                 :            : 
     288                 :          0 :       return QVariant::fromValue<QgsMapLayer *>( mLayers.value( index.row() - ( mAllowEmpty ? 1 : 0 ) ) );
     289                 :            :     }
     290                 :            : 
     291                 :            :     case EmptyRole:
     292                 :          0 :       return isEmpty;
     293                 :            : 
     294                 :            :     case AdditionalRole:
     295                 :          0 :       return additionalIndex >= 0;
     296                 :            : 
     297                 :            :     case Qt::CheckStateRole:
     298                 :            :     {
     299                 :          0 :       if ( mItemCheckable )
     300                 :            :       {
     301                 :          0 :         if ( isEmpty || additionalIndex >= 0 )
     302                 :          0 :           return QVariant();
     303                 :            : 
     304                 :          0 :         QgsMapLayer *layer = mLayers.value( index.row() - ( mAllowEmpty ? 1 : 0 ) );
     305                 :          0 :         return layer ? mLayersChecked[layer->id()] : QVariant();
     306                 :            :       }
     307                 :            : 
     308                 :          0 :       return QVariant();
     309                 :            :     }
     310                 :            : 
     311                 :            :     case Qt::ToolTipRole:
     312                 :            :     {
     313                 :          0 :       QgsMapLayer *layer = mLayers.value( index.row() - ( mAllowEmpty ? 1 : 0 ) );
     314                 :          0 :       if ( layer )
     315                 :            :       {
     316                 :          0 :         QStringList parts;
     317                 :          0 :         QString title = layer->title().isEmpty() ? layer->shortName() : layer->title();
     318                 :          0 :         if ( title.isEmpty() )
     319                 :          0 :           title = layer->name();
     320                 :          0 :         title = "<b>" + title + "</b>";
     321                 :          0 :         if ( layer->isSpatial() && layer->crs().isValid() )
     322                 :            :         {
     323                 :          0 :           if ( QgsVectorLayer *vl = qobject_cast<QgsVectorLayer *>( layer ) )
     324                 :          0 :             title = tr( "%1 (%2 - %3)" ).arg( title, QgsWkbTypes::displayString( vl->wkbType() ), layer->crs().authid() );
     325                 :            :           else
     326                 :          0 :             title = tr( "%1 (%2) " ).arg( title, layer->crs().authid() );
     327                 :          0 :         }
     328                 :          0 :         parts << title;
     329                 :            : 
     330                 :          0 :         if ( !layer->abstract().isEmpty() )
     331                 :          0 :           parts << "<br/>" + layer->abstract().replace( QLatin1String( "\n" ), QLatin1String( "<br/>" ) );
     332                 :          0 :         parts << "<i>" + layer->publicSource() + "</i>";
     333                 :          0 :         return parts.join( QLatin1String( "<br/>" ) );
     334                 :          0 :       }
     335                 :          0 :       return QVariant();
     336                 :            :     }
     337                 :            : 
     338                 :            :     case Qt::DecorationRole:
     339                 :            :     {
     340                 :          0 :       if ( isEmpty || additionalIndex >= 0 )
     341                 :          0 :         return QVariant();
     342                 :            : 
     343                 :          0 :       QgsMapLayer *layer = mLayers.value( index.row() - ( mAllowEmpty ? 1 : 0 ) );
     344                 :          0 :       if ( !layer )
     345                 :          0 :         return QVariant();
     346                 :            : 
     347                 :          0 :       return iconForLayer( layer );
     348                 :            :     }
     349                 :            :   }
     350                 :            : 
     351                 :          0 :   return QVariant();
     352                 :          0 : }
     353                 :            : 
     354                 :          0 : QHash<int, QByteArray> QgsMapLayerModel::roleNames() const
     355                 :            : {
     356                 :          0 :   QHash<int, QByteArray> roles  = QAbstractItemModel::roleNames();
     357                 :          0 :   roles[LayerIdRole]  = "layerId";
     358                 :          0 :   roles[LayerRole] = "layer";
     359                 :            : 
     360                 :          0 :   return roles;
     361                 :          0 : }
     362                 :            : 
     363                 :          0 : Qt::ItemFlags QgsMapLayerModel::flags( const QModelIndex &index ) const
     364                 :            : {
     365                 :          0 :   if ( !index.isValid() )
     366                 :            :   {
     367                 :          0 :     if ( mCanReorder )
     368                 :          0 :       return Qt::ItemIsDropEnabled;
     369                 :            :     else
     370                 :          0 :       return Qt::ItemFlags();
     371                 :            :   }
     372                 :            : 
     373                 :          0 :   bool isEmpty = index.row() == 0 && mAllowEmpty;
     374                 :          0 :   int additionalIndex = index.row() - ( mAllowEmpty ? 1 : 0 ) - mLayers.count();
     375                 :            : 
     376                 :          0 :   Qt::ItemFlags flags = Qt::ItemIsEnabled | Qt::ItemIsSelectable;
     377                 :            : 
     378                 :          0 :   if ( mCanReorder && !isEmpty && additionalIndex < 0 )
     379                 :            :   {
     380                 :          0 :     flags |= Qt::ItemIsDragEnabled;
     381                 :          0 :   }
     382                 :            : 
     383                 :          0 :   if ( mItemCheckable && !isEmpty && additionalIndex < 0 )
     384                 :            :   {
     385                 :          0 :     flags |= Qt::ItemIsUserCheckable;
     386                 :          0 :   }
     387                 :          0 :   return flags;
     388                 :          0 : }
     389                 :            : 
     390                 :          0 : bool QgsMapLayerModel::insertRows( int row, int count, const QModelIndex &parent )
     391                 :            : {
     392                 :          0 :   if ( parent.isValid() )
     393                 :          0 :     return false;
     394                 :            : 
     395                 :          0 :   int offset = 0;
     396                 :          0 :   if ( mAllowEmpty )
     397                 :          0 :     offset++;
     398                 :            : 
     399                 :          0 :   beginInsertRows( parent, row, row + count - 1 );
     400                 :          0 :   for ( int i = row; i < row + count; ++i )
     401                 :          0 :     mLayers.insert( i - offset, nullptr );
     402                 :          0 :   endInsertRows();
     403                 :            : 
     404                 :          0 :   return true;
     405                 :          0 : }
     406                 :            : 
     407                 :          0 : bool QgsMapLayerModel::removeRows( int row, int count, const QModelIndex &parent )
     408                 :            : {
     409                 :          0 :   if ( parent.isValid() || row < 0 )
     410                 :          0 :     return false;
     411                 :            : 
     412                 :          0 :   int offset = 0;
     413                 :          0 :   if ( mAllowEmpty )
     414                 :            :   {
     415                 :          0 :     if ( row == 0 )
     416                 :          0 :       return false;
     417                 :            : 
     418                 :          0 :     offset++;
     419                 :          0 :   }
     420                 :            : 
     421                 :          0 :   if ( row - offset > mLayers.count() - 1 )
     422                 :            :   {
     423                 :          0 :     return false;
     424                 :            :   }
     425                 :            : 
     426                 :          0 :   beginRemoveRows( parent, row, row + count - 1 );
     427                 :          0 :   for ( int i = 0; i != count; ++i )
     428                 :          0 :     mLayers.removeAt( row - offset );
     429                 :          0 :   endRemoveRows();
     430                 :            : 
     431                 :          0 :   return true;
     432                 :          0 : }
     433                 :            : 
     434                 :          0 : QStringList QgsMapLayerModel::mimeTypes() const
     435                 :            : {
     436                 :          0 :   QStringList types;
     437                 :          0 :   types << QStringLiteral( "application/qgis.layermodeldata" );
     438                 :          0 :   return types;
     439                 :          0 : }
     440                 :            : 
     441                 :          0 : bool QgsMapLayerModel::canDropMimeData( const QMimeData *data, Qt::DropAction action, int, int, const QModelIndex & ) const
     442                 :            : {
     443                 :          0 :   if ( !mCanReorder || action != Qt::MoveAction || !data->hasFormat( QStringLiteral( "application/qgis.layermodeldata" ) ) )
     444                 :          0 :     return false;
     445                 :          0 :   return true;
     446                 :          0 : }
     447                 :            : 
     448                 :          0 : QMimeData *QgsMapLayerModel::mimeData( const QModelIndexList &indexes ) const
     449                 :            : {
     450                 :          0 :   std::unique_ptr< QMimeData > mimeData = std::make_unique< QMimeData >();
     451                 :            : 
     452                 :          0 :   QByteArray encodedData;
     453                 :          0 :   QDataStream stream( &encodedData, QIODevice::WriteOnly );
     454                 :          0 :   QSet< QString > addedLayers;
     455                 :            : 
     456                 :          0 :   for ( const QModelIndex &i : indexes )
     457                 :            :   {
     458                 :          0 :     if ( i.isValid() )
     459                 :            :     {
     460                 :          0 :       const QString id = data( index( i.row(), 0, i.parent() ), LayerIdRole ).toString();
     461                 :          0 :       if ( !addedLayers.contains( id ) )
     462                 :            :       {
     463                 :          0 :         addedLayers.insert( id );
     464                 :          0 :         stream << id;
     465                 :          0 :       }
     466                 :          0 :     }
     467                 :            :   }
     468                 :          0 :   mimeData->setData( QStringLiteral( "application/qgis.layermodeldata" ), encodedData );
     469                 :          0 :   return mimeData.release();
     470                 :          0 : }
     471                 :            : 
     472                 :          0 : bool QgsMapLayerModel::dropMimeData( const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent )
     473                 :            : {
     474                 :          0 :   if ( !canDropMimeData( data, action, row, column, parent ) || row < 0 )
     475                 :          0 :     return false;
     476                 :            : 
     477                 :          0 :   if ( action == Qt::IgnoreAction )
     478                 :          0 :     return true;
     479                 :          0 :   else if ( action != Qt::MoveAction )
     480                 :          0 :     return false;
     481                 :            : 
     482                 :          0 :   QByteArray encodedData = data->data( QStringLiteral( "application/qgis.layermodeldata" ) );
     483                 :          0 :   QDataStream stream( &encodedData, QIODevice::ReadOnly );
     484                 :          0 :   QStringList newItems;
     485                 :          0 :   int rows = 0;
     486                 :            : 
     487                 :          0 :   while ( !stream.atEnd() )
     488                 :            :   {
     489                 :          0 :     QString text;
     490                 :          0 :     stream >> text;
     491                 :          0 :     newItems << text;
     492                 :          0 :     ++rows;
     493                 :          0 :   }
     494                 :            : 
     495                 :          0 :   insertRows( row, rows, QModelIndex() );
     496                 :          0 :   for ( const QString &text : std::as_const( newItems ) )
     497                 :            :   {
     498                 :          0 :     QModelIndex idx = index( row, 0, QModelIndex() );
     499                 :          0 :     setData( idx, text, LayerIdRole );
     500                 :          0 :     row++;
     501                 :            :   }
     502                 :            : 
     503                 :          0 :   return true;
     504                 :          0 : }
     505                 :            : 
     506                 :          0 : Qt::DropActions QgsMapLayerModel::supportedDropActions() const
     507                 :            : {
     508                 :          0 :   return Qt::MoveAction;
     509                 :            : }
     510                 :            : 
     511                 :          0 : QIcon QgsMapLayerModel::iconForLayer( QgsMapLayer *layer )
     512                 :            : {
     513                 :          0 :   switch ( layer->type() )
     514                 :            :   {
     515                 :            :     case QgsMapLayerType::RasterLayer:
     516                 :            :     {
     517                 :          0 :       return QgsLayerItem::iconRaster();
     518                 :            :     }
     519                 :            : 
     520                 :            :     case QgsMapLayerType::MeshLayer:
     521                 :            :     {
     522                 :          0 :       return QgsLayerItem::iconMesh();
     523                 :            :     }
     524                 :            : 
     525                 :            :     case QgsMapLayerType::VectorTileLayer:
     526                 :            :     {
     527                 :          0 :       return QgsLayerItem::iconVectorTile();
     528                 :            :     }
     529                 :            : 
     530                 :            :     case QgsMapLayerType::PointCloudLayer:
     531                 :            :     {
     532                 :          0 :       return QgsLayerItem::iconPointCloud();
     533                 :            :     }
     534                 :            : 
     535                 :            :     case QgsMapLayerType::VectorLayer:
     536                 :            :     {
     537                 :          0 :       QgsVectorLayer *vl = qobject_cast<QgsVectorLayer *>( layer );
     538                 :          0 :       if ( !vl )
     539                 :            :       {
     540                 :          0 :         return QIcon();
     541                 :            :       }
     542                 :          0 :       QgsWkbTypes::GeometryType geomType = vl->geometryType();
     543                 :          0 :       switch ( geomType )
     544                 :            :       {
     545                 :            :         case QgsWkbTypes::PointGeometry:
     546                 :            :         {
     547                 :          0 :           return QgsLayerItem::iconPoint();
     548                 :            :         }
     549                 :            :         case QgsWkbTypes::PolygonGeometry :
     550                 :            :         {
     551                 :          0 :           return QgsLayerItem::iconPolygon();
     552                 :            :         }
     553                 :            :         case QgsWkbTypes::LineGeometry :
     554                 :            :         {
     555                 :          0 :           return QgsLayerItem::iconLine();
     556                 :            :         }
     557                 :            :         case QgsWkbTypes::NullGeometry :
     558                 :            :         {
     559                 :          0 :           return QgsLayerItem::iconTable();
     560                 :            :         }
     561                 :            :         default:
     562                 :            :         {
     563                 :          0 :           return QIcon();
     564                 :            :         }
     565                 :            :       }
     566                 :            :     }
     567                 :            : 
     568                 :            :     default:
     569                 :            :     {
     570                 :          0 :       return QIcon();
     571                 :            :     }
     572                 :            :   }
     573                 :          0 : }
     574                 :            : 
     575                 :            : 
     576                 :          0 : bool QgsMapLayerModel::setData( const QModelIndex &index, const QVariant &value, int role )
     577                 :            : {
     578                 :          0 :   if ( !index.isValid() )
     579                 :          0 :     return false;
     580                 :            : 
     581                 :          0 :   bool isEmpty = index.row() == 0 && mAllowEmpty;
     582                 :          0 :   int additionalIndex = index.row() - ( mAllowEmpty ? 1 : 0 ) - mLayers.count();
     583                 :            : 
     584                 :          0 :   switch ( role )
     585                 :            :   {
     586                 :            :     case Qt::CheckStateRole:
     587                 :            :     {
     588                 :          0 :       if ( !isEmpty && additionalIndex < 0 )
     589                 :            :       {
     590                 :          0 :         QgsMapLayer *layer = static_cast<QgsMapLayer *>( index.internalPointer() );
     591                 :          0 :         mLayersChecked[layer->id()] = ( Qt::CheckState )value.toInt();
     592                 :          0 :         emit dataChanged( index, index, QVector< int >() << Qt::CheckStateRole );
     593                 :          0 :         return true;
     594                 :            :       }
     595                 :          0 :       break;
     596                 :            :     }
     597                 :            : 
     598                 :            :     case LayerIdRole:
     599                 :          0 :       if ( !isEmpty && additionalIndex < 0 )
     600                 :            :       {
     601                 :          0 :         mLayers[index.row() - ( mAllowEmpty ? 1 : 0 )] = mProject->mapLayer( value.toString() );
     602                 :          0 :         emit dataChanged( index, index );
     603                 :          0 :         return true;
     604                 :            :       }
     605                 :          0 :       break;
     606                 :            :   }
     607                 :            : 
     608                 :          0 :   return false;
     609                 :          0 : }

Generated by: LCOV version 1.14