@@ -1106,26 +1106,37 @@ QVector<QgsDataItem *> QgsFavoritesItem::createChildren()
11061106 QVector<QgsDataItem *> children;
11071107
11081108 QgsSettings settings;
1109- QStringList favDirs = settings.value ( QStringLiteral ( " browser/favourites" ), QVariant () ).toStringList ();
1109+ const QStringList favDirs = settings.value ( QStringLiteral ( " browser/favourites" ), QVariant () ).toStringList ();
11101110
1111- Q_FOREACH ( const QString &favDir, favDirs )
1111+ for ( const QString &favDir : favDirs )
11121112 {
1113- children << createChildren ( favDir );
1113+ QStringList parts = favDir.split ( QStringLiteral ( " |||" ) );
1114+ if ( parts.empty () )
1115+ continue ;
1116+
1117+ QString dir = parts.at ( 0 );
1118+ QString name = dir;
1119+ if ( parts.count () > 1 )
1120+ name = parts.at ( 1 );
1121+
1122+ children << createChildren ( dir, name );
11141123 }
11151124
11161125 return children;
11171126}
11181127
1119- void QgsFavoritesItem::addDirectory ( const QString &favDir )
1128+ void QgsFavoritesItem::addDirectory ( const QString &favDir, const QString &n )
11201129{
1130+ QString name = n.isEmpty () ? favDir : n;
1131+
11211132 QgsSettings settings;
11221133 QStringList favDirs = settings.value ( QStringLiteral ( " browser/favourites" ) ).toStringList ();
1123- favDirs.append ( favDir );
1134+ favDirs.append ( QStringLiteral ( " %1|||%2 " ). arg ( favDir, name ) );
11241135 settings.setValue ( QStringLiteral ( " browser/favourites" ), favDirs );
11251136
11261137 if ( state () == Populated )
11271138 {
1128- QVector<QgsDataItem *> items = createChildren ( favDir );
1139+ QVector<QgsDataItem *> items = createChildren ( favDir, name );
11291140 Q_FOREACH ( QgsDataItem *item, items )
11301141 {
11311142 addChildItem ( item, true );
@@ -1140,7 +1151,16 @@ void QgsFavoritesItem::removeDirectory( QgsDirectoryItem *item )
11401151
11411152 QgsSettings settings;
11421153 QStringList favDirs = settings.value ( QStringLiteral ( " browser/favourites" ) ).toStringList ();
1143- favDirs.removeAll ( item->dirPath () );
1154+ for ( int i = favDirs.count () - 1 ; i >= 0 ; --i )
1155+ {
1156+ QStringList parts = favDirs.at ( i ).split ( QStringLiteral ( " |||" ) );
1157+ if ( parts.empty () )
1158+ continue ;
1159+
1160+ QString dir = parts.at ( 0 );
1161+ if ( dir == item->dirPath () )
1162+ favDirs.removeAt ( i );
1163+ }
11441164 settings.setValue ( QStringLiteral ( " browser/favourites" ), favDirs );
11451165
11461166 int idx = findItem ( mChildren , item );
@@ -1154,7 +1174,42 @@ void QgsFavoritesItem::removeDirectory( QgsDirectoryItem *item )
11541174 deleteChildItem ( mChildren .at ( idx ) );
11551175}
11561176
1157- QVector<QgsDataItem *> QgsFavoritesItem::createChildren ( const QString &favDir )
1177+ void QgsFavoritesItem::renameFavorite ( const QString &path, const QString &name )
1178+ {
1179+ // update stored name
1180+ QgsSettings settings;
1181+ QStringList favDirs = settings.value ( QStringLiteral ( " browser/favourites" ) ).toStringList ();
1182+ for ( int i = 0 ; i < favDirs.count (); ++i )
1183+ {
1184+ QStringList parts = favDirs.at ( i ).split ( QStringLiteral ( " |||" ) );
1185+ if ( parts.empty () )
1186+ continue ;
1187+
1188+ QString dir = parts.at ( 0 );
1189+ if ( dir == path )
1190+ {
1191+ favDirs[i] = QStringLiteral ( " %1|||%2" ).arg ( path, name );
1192+ break ;
1193+ }
1194+ }
1195+ settings.setValue ( QStringLiteral ( " browser/favourites" ), favDirs );
1196+
1197+ // also update existing data item
1198+ const QVector<QgsDataItem *> ch = children ();
1199+ for ( QgsDataItem *child : ch )
1200+ {
1201+ if ( QgsFavoriteItem *favorite = qobject_cast< QgsFavoriteItem * >( child ) )
1202+ {
1203+ if ( favorite->dirPath () == path )
1204+ {
1205+ favorite->setName ( name );
1206+ break ;
1207+ }
1208+ }
1209+ }
1210+ }
1211+
1212+ QVector<QgsDataItem *> QgsFavoritesItem::createChildren ( const QString &favDir, const QString &name )
11581213{
11591214 QVector<QgsDataItem *> children;
11601215 QString pathName = pathComponent ( favDir );
@@ -1167,14 +1222,14 @@ QVector<QgsDataItem *> QgsFavoritesItem::createChildren( const QString &favDir )
11671222 QgsDataItem *item = provider->createDataItem ( favDir, this );
11681223 if ( item )
11691224 {
1170- item->setName ( favDir );
1225+ item->setName ( name );
11711226 children.append ( item );
11721227 }
11731228 }
11741229 }
11751230 if ( children.isEmpty () )
11761231 {
1177- QgsDataItem *item = new QgsDirectoryItem ( this , favDir , favDir, mPath + ' /' + pathName );
1232+ QgsFavoriteItem *item = new QgsFavoriteItem ( this , name , favDir, mPath + ' /' + pathName );
11781233 if ( item )
11791234 {
11801235 children.append ( item );
@@ -1558,4 +1613,18 @@ QVariant QgsProjectHomeItem::sortKey() const
15581613 return QStringLiteral ( " 1" );
15591614}
15601615
1616+ QgsFavoriteItem::QgsFavoriteItem ( QgsFavoritesItem *parent, const QString &name, const QString &dirPath, const QString &path )
1617+ : QgsDirectoryItem( parent, name, dirPath, path )
1618+ , mFavorites( parent )
1619+ {
1620+
1621+ }
1622+
1623+ void QgsFavoriteItem::rename ( const QString &name )
1624+ {
1625+ mFavorites ->renameFavorite ( dirPath (), name );
1626+ }
1627+
1628+
15611629// /@endcond
1630+
0 commit comments