QGIS API Documentation 3.99.0-Master (e9821da5c6b)
Loading...
Searching...
No Matches
qgsfavoritesitem.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsfavoritesitem.cpp
3 -------------------
4 begin : 2011-04-01
5 copyright : (C) 2011 Radim Blazek
6 email : radim dot blazek at gmail dot com
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
18#include "qgsfavoritesitem.h"
19
20#include "qgsapplication.h"
21#include "qgsdataitemprovider.h"
23#include "qgslogger.h"
24#include "qgssettings.h"
25
26#include <QString>
27
28#include "moc_qgsfavoritesitem.cpp"
29
30using namespace Qt::StringLiterals;
31
32//
33// QgsFavoritesItem
34//
35
37 : QgsDataCollectionItem( parent, name, u"favorites:"_s, u"special:Favorites"_s )
38{
39 Q_UNUSED( path )
42 mIconName = u"/mIconFavorites.svg"_s;
43 populate();
44}
45
46QVector<QgsDataItem *> QgsFavoritesItem::createChildren()
47{
48 QVector<QgsDataItem *> children;
49
50 const QgsSettings settings;
51
52 const QStringList favDirs = settings.value( u"browser/favourites"_s, QVariant() ).toStringList();
53
54 children.reserve( favDirs.size() );
55 for ( const QString &favDir : favDirs )
56 {
57 const QStringList parts = favDir.split( u"|||"_s );
58 if ( parts.empty() )
59 continue;
60
61 const QString dir = parts.at( 0 );
62 QString name = dir;
63 if ( parts.count() > 1 )
64 name = parts.at( 1 );
65
66 children << createChildren( dir, name );
67 }
68
69 return children;
70}
71
72void QgsFavoritesItem::addDirectory( const QString &favDir, const QString &n )
73{
74 const QString name = n.isEmpty() ? favDir : n;
75
76 QgsSettings settings;
77 QStringList favDirs = settings.value( u"browser/favourites"_s ).toStringList();
78 favDirs.append( u"%1|||%2"_s.arg( favDir, name ) );
79 settings.setValue( u"browser/favourites"_s, favDirs );
80
82 {
83 const QVector<QgsDataItem *> items = createChildren( favDir, name );
84 for ( QgsDataItem *item : items )
85 {
86 addChildItem( item, true );
87 }
88 }
89}
90
92{
93 if ( !item )
94 return;
95
96 QgsSettings settings;
97 QStringList favDirs = settings.value( u"browser/favourites"_s ).toStringList();
98 for ( int i = favDirs.count() - 1; i >= 0; --i )
99 {
100 const QStringList parts = favDirs.at( i ).split( u"|||"_s );
101 if ( parts.empty() )
102 continue;
103
104 const QString dir = parts.at( 0 );
105 if ( dir == item->dirPath() )
106 favDirs.removeAt( i );
107 }
108 settings.setValue( u"browser/favourites"_s, favDirs );
109
110 const int idx = findItem( mChildren, item );
111 if ( idx < 0 )
112 {
113 QgsDebugError( u"favorites item %1 not found"_s.arg( item->path() ) );
114 return;
115 }
116
118 deleteChildItem( mChildren.at( idx ) );
119}
120
121void QgsFavoritesItem::renameFavorite( const QString &path, const QString &name )
122{
123 // update stored name
124 QgsSettings settings;
125 QStringList favDirs = settings.value( u"browser/favourites"_s ).toStringList();
126 for ( int i = 0; i < favDirs.count(); ++i )
127 {
128 const QStringList parts = favDirs.at( i ).split( u"|||"_s );
129 if ( parts.empty() )
130 continue;
131
132 const QString dir = parts.at( 0 );
133 if ( dir == path )
134 {
135 const QStringList newParts { path, name };
136 favDirs[i] = newParts.join( "|||"_L1 );
137 break;
138 }
139 }
140 settings.setValue( u"browser/favourites"_s, favDirs );
141
142 // also update existing data item
143 const QVector<QgsDataItem *> ch = children();
144 for ( QgsDataItem *child : ch )
145 {
146 if ( QgsFavoriteItem *favorite = qobject_cast< QgsFavoriteItem * >( child ) )
147 {
148 if ( favorite->dirPath() == path )
149 {
150 favorite->setName( name );
151 break;
152 }
153 }
154 }
155}
156
158{
159 return QgsApplication::getThemeIcon( u"/mIconFavorites.svg"_s );
160}
161
163{
164 return u" 0"_s;
165}
166
167QVector<QgsDataItem *> QgsFavoritesItem::createChildren( const QString &directory, const QString &name )
168{
169 const QString pathName = pathComponent( directory );
170 const QList<QgsDataItemProvider *> providers = QgsApplication::dataItemProviderRegistry()->providers();
171
172 QVector<QgsDataItem *> children;
173 children.reserve( providers.size() );
174 for ( QgsDataItemProvider *provider : providers )
175 {
176 if ( provider->capabilities() & Qgis::DataItemProviderCapability::Directories )
177 {
178 if ( QgsDataItem *item = provider->createDataItem( directory, this ) )
179 {
180 item->setName( name );
181 children.append( item );
182 }
183 }
184 }
185 if ( children.isEmpty() )
186 {
187 children.append( new QgsFavoriteItem( this, name, directory, mPath + '/' + pathName ) );
188 }
189 return children;
190}
191
192//
193// QgsFavoriteItem
194//
195
196QgsFavoriteItem::QgsFavoriteItem( QgsFavoritesItem *parent, const QString &name, const QString &dirPath, const QString &path )
197 : QgsDirectoryItem( parent, name, dirPath, path, u"special:Favorites"_s )
198 , mFavorites( parent )
199{
201}
202
203bool QgsFavoriteItem::rename( const QString &name )
204{
205 mFavorites->renameFavorite( dirPath(), name );
206 return true;
207}
208
209
@ Directories
Can provides items which corresponds to directories.
Definition qgis.h:998
@ Populated
Children created.
Definition qgis.h:960
@ Rename
Item can be renamed.
Definition qgis.h:976
@ Fast
CreateChildren() is fast enough to be run in main thread when refreshing items, most root items (wms,...
Definition qgis.h:974
@ Favorites
Represents a favorite item.
Definition qgis.h:943
static QgsDataItemProviderRegistry * dataItemProviderRegistry()
Returns the application's data item provider registry, which keeps a list of data item providers that...
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
QgsDataCollectionItem(QgsDataItem *parent, const QString &name, const QString &path=QString(), const QString &providerKey=QString())
Constructor for QgsDataCollectionItem, with the specified parent item.
QList< QgsDataItemProvider * > providers() const
Returns the list of available providers.
Interface for providers that add custom data items to the browser tree.
Base class for all items in the model.
Definition qgsdataitem.h:50
static int findItem(QVector< QgsDataItem * > items, QgsDataItem *item)
Qgis::BrowserItemType mType
virtual void deleteChildItem(QgsDataItem *child)
Removes and deletes a child item, emitting relevant signals to the model.
QVector< QgsDataItem * > mChildren
QString mPath
QVector< QgsDataItem * > children() const
Qgis::BrowserItemCapabilities mCapabilities
QgsDataItem(Qgis::BrowserItemType type, QgsDataItem *parent, const QString &name, const QString &path, const QString &providerKey=QString())
Constructor for QgsDataItem, with the specified parent item.
QString mIconName
Qgis::BrowserItemState state() const
static QString pathComponent(const QString &component)
Create path component replacing path separators.
QString name() const
Returns the name of the item (the displayed text for the item).
QString path() const
virtual void addChildItem(QgsDataItem *child, bool refresh=false)
Inserts a new child item.
QgsDataItem * parent() const
Gets item parent.
virtual void populate(const QVector< QgsDataItem * > &children)
A browser item for directories: contains subdirectories and layers.
QString dirPath() const
Returns the full path to the directory the item represents.
QgsDirectoryItem(QgsDataItem *parent, const QString &name, const QString &path)
Constructor for QgsDirectoryItem, with the specified parent item.
A directory item showing a single favorite directory.
QgsFavoriteItem(QgsFavoritesItem *parent, const QString &name, const QString &dirPath, const QString &path)
Constructor for QgsFavoriteItem.
bool rename(const QString &name) override
Sets a new name for the favorite.
A browser item which contains various Favorites directories.
void addDirectory(const QString &directory, const QString &name=QString())
Adds a new directory to the favorites group.
QVariant sortKey() const override
Returns the sorting key for the item.
void removeDirectory(QgsDirectoryItem *item)
Removes an existing directory from the favorites group.
static QIcon iconFavorites()
Icon for favorites group.
QVector< QgsDataItem * > createChildren() override
Create children.
QgsFavoritesItem(QgsDataItem *parent, const QString &name, const QString &path=QString())
Constructor for QgsFavoritesItem.
void renameFavorite(const QString &path, const QString &name)
Renames the stored favorite with corresponding path a new name.
Stores settings for use within QGIS.
Definition qgssettings.h:68
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
void setValue(const QString &key, const QVariant &value, QgsSettings::Section section=QgsSettings::NoSection)
Sets the value of setting key to value.
#define QgsDebugError(str)
Definition qgslogger.h:59