LCOV - code coverage report
Current view: top level - core/symbology - qgscptcityarchive.h (source / functions) Hit Total Coverage
Test: coverage.info.cleaned Lines: 0 17 0.0 %
Date: 2021-04-10 08:29:14 Functions: 0 0 -
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /***************************************************************************
       2                 :            :     qgscptcityarchive.h
       3                 :            :     ---------------------
       4                 :            :     begin                : August 2012
       5                 :            :     copyright            : (C) 2009 by Martin Dobias
       6                 :            :     copyright            : (C) 2012 by Etienne Tourigny
       7                 :            :     email                : etourigny.dev at gmail.com
       8                 :            :  ***************************************************************************
       9                 :            :  *                                                                         *
      10                 :            :  *   This program is free software; you can redistribute it and/or modify  *
      11                 :            :  *   it under the terms of the GNU General Public License as published by  *
      12                 :            :  *   the Free Software Foundation; either version 2 of the License, or     *
      13                 :            :  *   (at your option) any later version.                                   *
      14                 :            :  *                                                                         *
      15                 :            :  ***************************************************************************/
      16                 :            : 
      17                 :            : #ifndef QGSCPTCITYARCHIVE_H
      18                 :            : #define QGSCPTCITYARCHIVE_H
      19                 :            : 
      20                 :            : #include "qgis_core.h"
      21                 :            : #include "qgis_sip.h"
      22                 :            : #include "qgis.h"
      23                 :            : #include "qgscolorramp.h"
      24                 :            : 
      25                 :            : #include <QAbstractItemModel>
      26                 :            : #include <QIcon>
      27                 :            : #include <QMimeData>
      28                 :            : #include <QAction>
      29                 :            : 
      30                 :            : class QgsCptCityColorRamp;
      31                 :            : class QgsCptCityDataItem;
      32                 :            : class QgsCptCitySelectionItem;
      33                 :            : 
      34                 :            : #define DEFAULT_CPTCITY_ARCHIVE "cpt-city-qgis-min"
      35                 :            : 
      36                 :            : /**
      37                 :            :  * \class QgsCptCityArchive
      38                 :            :  * \ingroup core
      39                 :            :  */
      40                 :            : class CORE_EXPORT QgsCptCityArchive
      41                 :            : {
      42                 :            :   public:
      43                 :            :     QgsCptCityArchive( const QString &archiveName = DEFAULT_CPTCITY_ARCHIVE,
      44                 :            :                        const QString &baseDir = QString() );
      45                 :            :     ~QgsCptCityArchive();
      46                 :            : 
      47                 :            :     //! QgsCptCityArchive cannot be copied
      48                 :            :     QgsCptCityArchive( const QgsCptCityArchive &rh ) = delete;
      49                 :            :     //! QgsCptCityArchive cannot be copied
      50                 :            :     QgsCptCityArchive &operator=( const QgsCptCityArchive &rh ) = delete;
      51                 :            : 
      52                 :            :     // basic dir info
      53                 :            :     QString baseDir() const;
      54                 :            :     static QString baseDir( QString archiveName );
      55                 :            :     static QString defaultBaseDir();
      56                 :            :     void setBaseDir( const QString &dirName ) { mBaseDir = dirName; }
      57                 :            : 
      58                 :            :     // collection + selection info
      59                 :            :     QString copyingFileName( const QString &dirName ) const;
      60                 :            :     QString descFileName( const QString &dirName ) const;
      61                 :            :     static QString findFileName( const QString &target, const QString &startDir, const QString &baseDir );
      62                 :            :     static QMap< QString, QString > copyingInfo( const QString &fileName );
      63                 :            :     static QMap< QString, QString > description( const QString &fileName );
      64                 :            :     //! \note not available in Python bindings
      65                 :            :     static QMap< double, QPair<QColor, QColor> > gradientColorMap( const QString &fileName ) SIP_SKIP;
      66                 :            : 
      67                 :            :     // archive management
      68                 :            :     bool isEmpty();
      69                 :            :     QString archiveName() const { return mArchiveName; }
      70                 :            :     static void initArchives( bool loadAll = false );
      71                 :            :     static void initArchive( const QString &archiveName, const QString &archiveBaseDir );
      72                 :            :     static void initDefaultArchive();
      73                 :            :     static void clearArchives();
      74                 :            :     static QgsCptCityArchive *defaultArchive();
      75                 :            :     static QMap< QString, QgsCptCityArchive * > archiveRegistry();
      76                 :            : 
      77                 :            :     // items
      78                 :          0 :     QVector< QgsCptCityDataItem * > rootItems() const { return mRootItems; }
      79                 :          0 :     QVector< QgsCptCityDataItem * > selectionItems() const { return mSelectionItems; }
      80                 :            : 
      81                 :            :   private:
      82                 :            : 
      83                 :            :     QString mArchiveName;
      84                 :            :     QString mBaseDir;
      85                 :            :     // root items, namely directories at root of archive
      86                 :            :     QVector< QgsCptCityDataItem * > mRootItems;
      87                 :            :     QVector<QgsCptCityDataItem *> mSelectionItems;
      88                 :            : 
      89                 :            :   private:
      90                 :            : #ifdef SIP_RUN
      91                 :            :     QgsCptCityArchive( const QgsCptCityArchive &rh );
      92                 :            : #endif
      93                 :            : 
      94                 :            : };
      95                 :            : 
      96                 :            : /**
      97                 :            :  * Base class for all items in the model
      98                 :            :  * \ingroup core
      99                 :            : */
     100                 :          0 : class CORE_EXPORT QgsCptCityDataItem : public QObject
     101                 :            : {
     102                 :            :     Q_OBJECT
     103                 :            :   public:
     104                 :            :     enum Type
     105                 :            :     {
     106                 :            :       ColorRamp,
     107                 :            :       Collection,
     108                 :            :       Directory,
     109                 :            :       Selection,
     110                 :            :       AllRamps
     111                 :            :     };
     112                 :            : 
     113                 :            :     QgsCptCityDataItem( QgsCptCityDataItem::Type type, QgsCptCityDataItem *parent,
     114                 :            :                         const QString &name, const QString &path );
     115                 :            : 
     116                 :            :     bool hasChildren();
     117                 :            : 
     118                 :            :     int rowCount();
     119                 :            :     // retrieve total count of "leaf" items (all children which are end nodes)
     120                 :            :     virtual int leafCount() const;
     121                 :            : 
     122                 :            :     //
     123                 :            : 
     124                 :            :     virtual void refresh();
     125                 :            : 
     126                 :            :     // Create vector of children
     127                 :            :     virtual QVector<QgsCptCityDataItem *> createChildren();
     128                 :            : 
     129                 :            :     // Populate children using children vector created by createChildren()
     130                 :            :     virtual void populate();
     131                 :          0 :     bool isPopulated() { return mPopulated; }
     132                 :            : 
     133                 :            :     // Insert new child using alphabetical order based on mName, emits necessary signal to model before and after, sets parent and connects signals
     134                 :            :     // refresh - refresh populated item, emit signals to model
     135                 :            :     virtual void addChildItem( QgsCptCityDataItem *child SIP_TRANSFER, bool refresh = false );
     136                 :            : 
     137                 :            :     // remove and delete child item, signals to browser are emitted
     138                 :            :     virtual void deleteChildItem( QgsCptCityDataItem *child );
     139                 :            : 
     140                 :            :     // remove child item but don't delete it, signals to browser are emitted
     141                 :            :     // returns pointer to the removed item or null if no such item was found
     142                 :            :     virtual QgsCptCityDataItem *removeChildItem( QgsCptCityDataItem *child ) SIP_TRANSFERBACK;
     143                 :            : 
     144                 :            :     virtual bool equal( const QgsCptCityDataItem *other );
     145                 :            : 
     146                 :            :     virtual QWidget *paramWidget() SIP_FACTORY { return nullptr; }
     147                 :            : 
     148                 :            :     // list of actions provided by this item - usually used for popup menu on right-click
     149                 :            :     virtual QList<QAction *> actions() { return QList<QAction *>(); }
     150                 :            : 
     151                 :            :     // whether accepts drag&drop'd layers - e.g. for import
     152                 :            :     virtual bool acceptDrop() { return false; }
     153                 :            : 
     154                 :            :     // try to process the data dropped on this item
     155                 :            :     virtual bool handleDrop( const QMimeData * /*data*/, Qt::DropAction /*action*/ ) { return false; }
     156                 :            : 
     157                 :            :     // static methods
     158                 :            : 
     159                 :            :     // Find child index in vector of items using '==' operator
     160                 :            :     static int findItem( QVector<QgsCptCityDataItem *> items, QgsCptCityDataItem *item );
     161                 :            : 
     162                 :            :     // members
     163                 :            : 
     164                 :          0 :     Type type() const { return mType; }
     165                 :          0 :     QgsCptCityDataItem *parent() const { return mParent; }
     166                 :          0 :     void setParent( QgsCptCityDataItem *parent ) { mParent = parent; }
     167                 :          0 :     QVector<QgsCptCityDataItem *> children() const { return mChildren; }
     168                 :            :     virtual QIcon icon() { return mIcon; }
     169                 :            :     virtual QIcon icon( QSize size ) { Q_UNUSED( size ) return icon(); }
     170                 :          0 :     QString name() const { return mName; }
     171                 :          0 :     QString path() const { return mPath; }
     172                 :          0 :     QString info() const { return mInfo; }
     173                 :            :     QString shortInfo() const { return mShortInfo; }
     174                 :            : 
     175                 :            :     void setIcon( const QIcon &icon ) { mIcon = icon; }
     176                 :            : 
     177                 :            :     void setToolTip( const QString &msg ) { mToolTip = msg; }
     178                 :          0 :     QString toolTip() const { return mToolTip; }
     179                 :            : 
     180                 :          0 :     bool isValid() { return mValid; }
     181                 :            : 
     182                 :            :   protected:
     183                 :            : 
     184                 :            :     Type mType;
     185                 :            :     QgsCptCityDataItem *mParent = nullptr;
     186                 :            :     QVector<QgsCptCityDataItem *> mChildren; // easier to have it always
     187                 :            :     bool mPopulated;
     188                 :            :     QString mName;
     189                 :            :     QString mPath; // it is also used to identify item in tree
     190                 :            :     QString mInfo;
     191                 :            :     QString mShortInfo;
     192                 :            :     QString mToolTip;
     193                 :            :     QIcon mIcon;
     194                 :            :     bool mValid;
     195                 :            : 
     196                 :            :   signals:
     197                 :            :     void beginInsertItems( QgsCptCityDataItem *parent, int first, int last );
     198                 :            :     void endInsertItems();
     199                 :            :     void beginRemoveItems( QgsCptCityDataItem *parent, int first, int last );
     200                 :            :     void endRemoveItems();
     201                 :            : };
     202                 :            : 
     203                 :            : /**
     204                 :            :  * Item that represents a layer that can be opened with one of the providers
     205                 :            :  * \ingroup core
     206                 :            : */
     207                 :            : class CORE_EXPORT QgsCptCityColorRampItem : public QgsCptCityDataItem
     208                 :            : {
     209                 :          0 :     Q_OBJECT
     210                 :            :   public:
     211                 :            :     QgsCptCityColorRampItem( QgsCptCityDataItem *parent,
     212                 :            :                              const QString &name, const QString &path,
     213                 :            :                              const QString &variantName = QString(),
     214                 :            :                              bool initialize = false );
     215                 :            :     QgsCptCityColorRampItem( QgsCptCityDataItem *parent,
     216                 :            :                              const QString &name, const QString &path,
     217                 :            :                              const QStringList &variantList,
     218                 :            :                              bool initialize = false );
     219                 :            : 
     220                 :            :     // --- reimplemented from QgsCptCityDataItem ---
     221                 :            : 
     222                 :            :     bool equal( const QgsCptCityDataItem *other ) override;
     223                 :            :     int leafCount() const override { return 1; }
     224                 :            : 
     225                 :            :     // --- New virtual methods for layer item derived classes ---
     226                 :          0 :     const QgsCptCityColorRamp &ramp() const { return mRamp; }
     227                 :            :     QIcon icon() override;
     228                 :            :     QIcon icon( QSize size ) override;
     229                 :            :     void init();
     230                 :            : 
     231                 :            :   protected:
     232                 :            : 
     233                 :            :     bool mInitialized;
     234                 :            :     QgsCptCityColorRamp mRamp;
     235                 :            :     QList< QIcon > mIcons;
     236                 :            : };
     237                 :            : 
     238                 :            : 
     239                 :            : /**
     240                 :            :  * A Collection: logical collection of subcollections and color ramps
     241                 :            :  * \ingroup core
     242                 :            : */
     243                 :            : class CORE_EXPORT QgsCptCityCollectionItem : public QgsCptCityDataItem
     244                 :            : {
     245                 :            :     Q_OBJECT
     246                 :            :   public:
     247                 :            :     QgsCptCityCollectionItem( QgsCptCityDataItem *parent,
     248                 :            :                               const QString &name, const QString &path );
     249                 :            :     ~QgsCptCityCollectionItem() override;
     250                 :            : 
     251                 :            :     void setPopulated() { mPopulated = true; }
     252                 :            :     void addChild( QgsCptCityDataItem *item SIP_TRANSFER ) { mChildren.append( item ); }
     253                 :            :     QVector<QgsCptCityDataItem *> childrenRamps( bool recursive );
     254                 :            : 
     255                 :            :   protected:
     256                 :            :     bool mPopulatedRamps;
     257                 :            : };
     258                 :            : 
     259                 :            : /**
     260                 :            :  * A directory: contains subdirectories and color ramps
     261                 :            :  * \ingroup core
     262                 :            : */
     263                 :            : class CORE_EXPORT QgsCptCityDirectoryItem : public QgsCptCityCollectionItem
     264                 :            : {
     265                 :            :     Q_OBJECT
     266                 :            :   public:
     267                 :            :     QgsCptCityDirectoryItem( QgsCptCityDataItem *parent,
     268                 :            :                              const QString &name, const QString &path );
     269                 :            : 
     270                 :            :     QVector<QgsCptCityDataItem *> createChildren() override;
     271                 :            : 
     272                 :            :     bool equal( const QgsCptCityDataItem *other ) override;
     273                 :            : 
     274                 :            :     static QgsCptCityDataItem *dataItem( QgsCptCityDataItem *parent,
     275                 :            :                                          const QString &name, const QString &path );
     276                 :            : 
     277                 :            :   protected:
     278                 :            :     QMap< QString, QStringList > rampsMap();
     279                 :            :     QStringList dirEntries() const;
     280                 :            :     QMap< QString, QStringList > mRampsMap;
     281                 :            : };
     282                 :            : 
     283                 :            : /**
     284                 :            :  * \ingroup core
     285                 :            :  * \class QgsCptCitySelectionItem
     286                 :            :  * \brief A selection: contains subdirectories and color ramps
     287                 :            : */
     288                 :            : class CORE_EXPORT QgsCptCitySelectionItem : public QgsCptCityCollectionItem
     289                 :            : {
     290                 :            :     Q_OBJECT
     291                 :            :   public:
     292                 :            :     QgsCptCitySelectionItem( QgsCptCityDataItem *parent, const QString &name, const QString &path );
     293                 :            : 
     294                 :            :     QVector<QgsCptCityDataItem *> createChildren() override;
     295                 :            : 
     296                 :            :     bool equal( const QgsCptCityDataItem *other ) override;
     297                 :            : 
     298                 :          0 :     QStringList selectionsList() const { return mSelectionsList; }
     299                 :            : 
     300                 :            :   protected:
     301                 :            :     void parseXml();
     302                 :            :     QStringList mSelectionsList;
     303                 :            : };
     304                 :            : 
     305                 :            : /**
     306                 :            :  * \ingroup core
     307                 :            :  * \brief An "All ramps item", which contains all items in a flat hierarchy
     308                 :            : */
     309                 :            : class CORE_EXPORT QgsCptCityAllRampsItem : public QgsCptCityCollectionItem
     310                 :            : {
     311                 :            :     Q_OBJECT
     312                 :            :   public:
     313                 :            :     QgsCptCityAllRampsItem( QgsCptCityDataItem *parent, const QString &name,
     314                 :            :                             const QVector<QgsCptCityDataItem *> &items );
     315                 :            : 
     316                 :            :     QVector<QgsCptCityDataItem *> createChildren() override;
     317                 :            : 
     318                 :            :   protected:
     319                 :            :     QVector<QgsCptCityDataItem *> mItems;
     320                 :            : };
     321                 :            : 
     322                 :            : /**
     323                 :            :  * \ingroup core
     324                 :            :  * \class QgsCptCityBrowserModel
     325                 :            :  */
     326                 :            : class CORE_EXPORT QgsCptCityBrowserModel : public QAbstractItemModel
     327                 :            : {
     328                 :          0 :     Q_OBJECT
     329                 :            : 
     330                 :            :   public:
     331                 :            : 
     332                 :            :     enum ViewType
     333                 :            :     {
     334                 :            :       Authors = 0,
     335                 :            :       Selections = 1,
     336                 :            :       List = 2 // not used anymore
     337                 :            :     };
     338                 :            : 
     339                 :            :     QgsCptCityBrowserModel( QObject *parent SIP_TRANSFERTHIS = nullptr,
     340                 :            :                             QgsCptCityArchive *archive = QgsCptCityArchive::defaultArchive(),
     341                 :            :                             ViewType Type = Authors );
     342                 :            :     ~QgsCptCityBrowserModel() override;
     343                 :            : 
     344                 :            :     // implemented methods from QAbstractItemModel for read-only access
     345                 :            :     Qt::ItemFlags flags( const QModelIndex &index ) const override;
     346                 :            :     QVariant data( const QModelIndex &index, int role = Qt::DisplayRole ) const override;
     347                 :            :     QVariant headerData( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const override;
     348                 :            :     int rowCount( const QModelIndex &parent = QModelIndex() ) const override;
     349                 :            :     int columnCount( const QModelIndex &parent = QModelIndex() ) const override;
     350                 :            :     QModelIndex index( int row, int column, const QModelIndex &parent = QModelIndex() ) const override;
     351                 :            : 
     352                 :            :     QModelIndex findItem( QgsCptCityDataItem *item, QgsCptCityDataItem *parent = nullptr ) const;
     353                 :            : 
     354                 :            :     QModelIndex parent( const QModelIndex &index ) const override;
     355                 :            : 
     356                 :            :     //! Returns a list of mime that can describe model indexes
     357                 :            :     /* virtual QStringList mimeTypes() const; */
     358                 :            : 
     359                 :            :     //! Returns an object that contains serialized items of data corresponding to the list of indexes specified
     360                 :            :     /* virtual QMimeData * mimeData( const QModelIndexList &indexes ) const; */
     361                 :            : 
     362                 :            :     //! Handles the data supplied by a drag and drop operation that ended with the given action
     363                 :            :     /* virtual bool dropMimeData( const QMimeData * data, Qt::DropAction action, int row, int column, const QModelIndex & parent ); */
     364                 :            : 
     365                 :            :     QgsCptCityDataItem *dataItem( const QModelIndex &idx ) const;
     366                 :            : 
     367                 :            :     bool hasChildren( const QModelIndex &parent = QModelIndex() ) const override;
     368                 :            : 
     369                 :            :     // Reload the whole model
     370                 :            :     void reload();
     371                 :            : 
     372                 :            :     // Refresh item specified by path
     373                 :            :     void refresh( const QString &path );
     374                 :            : 
     375                 :            :     // Refresh item children
     376                 :            :     void refresh( const QModelIndex &index = QModelIndex() );
     377                 :            : 
     378                 :            :     //! Returns index of a path
     379                 :            :     QModelIndex findPath( const QString &path );
     380                 :            : 
     381                 :            :     void connectItem( QgsCptCityDataItem *item );
     382                 :            : 
     383                 :            :     bool canFetchMore( const QModelIndex &parent ) const override;
     384                 :            :     void fetchMore( const QModelIndex &parent ) override;
     385                 :            : 
     386                 :            :   signals:
     387                 :            : 
     388                 :            :   public slots:
     389                 :            :     //void removeItems( QgsCptCityDataItem * parent, QVector<QgsCptCityDataItem *>items );
     390                 :            :     //void addItems( QgsCptCityDataItem * parent, QVector<QgsCptCityDataItem *>items );
     391                 :            :     //void refreshItems( QgsCptCityDataItem * parent, QVector<QgsCptCityDataItem *>items );
     392                 :            : 
     393                 :            :     void beginInsertItems( QgsCptCityDataItem *parent, int first, int last );
     394                 :            :     void endInsertItems();
     395                 :            :     void beginRemoveItems( QgsCptCityDataItem *parent, int first, int last );
     396                 :            :     void endRemoveItems();
     397                 :            : 
     398                 :            :   protected:
     399                 :            : 
     400                 :            :     // populates the model
     401                 :            :     void addRootItems();
     402                 :            :     void removeRootItems();
     403                 :            : 
     404                 :            :     QVector<QgsCptCityDataItem *> mRootItems;
     405                 :            :     QgsCptCityArchive *mArchive = nullptr;
     406                 :            :     ViewType mViewType;
     407                 :            :     QSize mIconSize;
     408                 :            : };
     409                 :            : 
     410                 :            : // clazy:excludeall=qstring-allocations
     411                 :            : 
     412                 :            : #endif

Generated by: LCOV version 1.14