Don't refresh whole bookmarks browser node when deleting an item

This commit is contained in:
Nyall Dawson 2019-09-05 16:09:12 +10:00
parent a4ec735249
commit cbd3f9b6d7
2 changed files with 42 additions and 1 deletions

View File

@ -629,7 +629,30 @@ QgsBookmarkManagerItem::QgsBookmarkManagerItem( QgsDataItem *parent, const QStri
connect( mManager, &QgsBookmarkManager::bookmarkAdded, this, [ = ]( const QString & ) { depopulate(); refresh(); } );
connect( mManager, &QgsBookmarkManager::bookmarkChanged, this, [ = ]( const QString & ) { depopulate(); refresh(); } );
connect( mManager, &QgsBookmarkManager::bookmarkRemoved, this, [ = ]( const QString & ) { depopulate(); refresh(); } );
connect( mManager, &QgsBookmarkManager::bookmarkAboutToBeRemoved, this, [ = ]( const QString & id )
{
QgsBookmark b = mManager->bookmarkById( id );
const QVector<QgsDataItem *> c = children();
for ( QgsDataItem *i : c )
{
if ( QgsBookmarkItem *bookmarkItem = qobject_cast< QgsBookmarkItem * >( i ) )
{
if ( bookmarkItem->bookmark().id() == id )
{
deleteChildItem( bookmarkItem );
break;
}
}
else if ( QgsBookmarkGroupItem *groupItem = qobject_cast< QgsBookmarkGroupItem * >( i ) )
{
if ( groupItem->group() == b.group() )
{
groupItem->removeBookmarkChildById( id );
break;
}
}
}
} );
populate();
}
@ -682,6 +705,22 @@ QVector<QgsDataItem *> QgsBookmarkGroupItem::createChildren()
return children;
}
void QgsBookmarkGroupItem::removeBookmarkChildById( const QString &id )
{
const QVector<QgsDataItem *> c = children();
for ( QgsDataItem *i : c )
{
if ( QgsBookmarkItem *bookmarkItem = qobject_cast< QgsBookmarkItem * >( i ) )
{
if ( bookmarkItem->bookmark().id() == id )
{
deleteChildItem( bookmarkItem );
return;
}
}
}
}
QgsBookmarkItem::QgsBookmarkItem( QgsDataItem *parent, const QString &name, const QgsBookmark &bookmark, QgsBookmarkManager *manager )
: QgsDataItem( Custom, parent, name, QStringLiteral( "bookmarks:%1/%2" ).arg( bookmark.group().toLower(), bookmark.id() ) )
, mManager( manager )

View File

@ -340,6 +340,8 @@ class APP_EXPORT QgsBookmarkGroupItem : public QgsDataCollectionItem
QString group() const { return mGroup; }
QgsBookmarkManager *manager() { return mManager; }
void removeBookmarkChildById( const QString &id );
//! Icon for bookmark group
static QIcon iconBookmarkGroup();