Skip to content

Commit 3c82c09

Browse files
committed
refresh the list properly
1 parent 4eb4548 commit 3c82c09

File tree

2 files changed

+41
-20
lines changed

2 files changed

+41
-20
lines changed

src/app/qgsbookmarks.cpp

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@ QgsBookmarks::QgsBookmarks( QWidget *parent )
122122

123123
connect( mMergedModel, SIGNAL( layoutChanged() ), mProxyModel, SLOT( _resetModel() ) );
124124

125+
connect( mMergedModel, SIGNAL( &QgsMergedBookmarksTableModel::selectItem( const QModelIndex &index ) ), this, SLOT( scrollToIndex( const QModelIndex &index ) ) );
126+
125127
QSettings settings;
126128
lstBookmarks->header()->restoreState( settings.value( "Windows/Bookmarks/headerstate" ).toByteArray() );
127129

@@ -342,6 +344,7 @@ void QgsBookmarks::importFromXml()
342344
}
343345
mQgisModel->setSort( 0, Qt::AscendingOrder );
344346
mQgisModel->select();
347+
mProxyModel->_resetModel();
345348
}
346349

347350
void QgsBookmarks::exportToXml()
@@ -423,6 +426,13 @@ void QgsBookmarks::exportToXml()
423426
settings.setValue( "Windows/Bookmarks/LastUsedDirectory", QFileInfo( fileName ).path() );
424427
}
425428

429+
void QgsBookmarks::scrollToIndex( const QModelIndex & index )
430+
{
431+
QModelIndex proxyIndex( mProxyModel->mapFromSource( index ) );
432+
lstBookmarks->scrollTo( proxyIndex );
433+
lstBookmarks->setCurrentIndex( proxyIndex );
434+
}
435+
426436
QgsProjectBookmarksTableModel::QgsProjectBookmarksTableModel( QObject *parent )
427437
: QAbstractTableModel( parent )
428438
{
@@ -449,8 +459,10 @@ int QgsProjectBookmarksTableModel::columnCount( const QModelIndex &parent ) cons
449459

450460
QVariant QgsProjectBookmarksTableModel::data( const QModelIndex& index, int role ) const
451461
{
452-
Q_UNUSED( role );
453-
Q_ASSERT( role == Qt::DisplayRole );
462+
if ( role != Qt::DisplayRole && role != Qt::EditRole )
463+
{
464+
return QVariant();
465+
}
454466

455467
switch ( index.column() )
456468
{
@@ -510,9 +522,11 @@ bool QgsProjectBookmarksTableModel::setData( const QModelIndex& index, const QVa
510522
bool QgsProjectBookmarksTableModel::insertRows( int row, int count, const QModelIndex &parent )
511523
{
512524
Q_UNUSED( parent );
513-
beginInsertRows( parent, row, row + count );
514-
515-
bool result = QgsProject::instance()->writeEntry( "Bookmarks" , "/count", QgsProject::instance()->readNumEntry( "Bookmarks", "/count" ) + count );
525+
Q_UNUSED( row );
526+
// append
527+
int oldCount = QgsProject::instance()->readNumEntry( QStringLiteral( "Bookmarks" ), QStringLiteral( "/count" ) );
528+
beginInsertRows( parent, oldCount, oldCount + count );
529+
bool result = QgsProject::instance()->writeEntry( QStringLiteral( "Bookmarks" ), QStringLiteral( "/count" ), oldCount + count );
516530
endInsertRows();
517531
return result;
518532
}
@@ -626,36 +640,38 @@ QVariant QgsMergedBookmarksTableModel::data( const QModelIndex &index, int role
626640

627641
bool QgsMergedBookmarksTableModel::setData( const QModelIndex &index, const QVariant &value, int role )
628642
{
643+
bool result = false;
629644
// last column triggers a move from QGIS to project bookmark
630645
if ( index.column() == mQgisTableModel.columnCount() )
631646
{
632647
if ( index.row() < mQgisTableModel.rowCount() )
633648
{
634649
// Move from SQLite storage to project
635650
moveBookmark( mQgisTableModel, mProjectTableModel, index.row() );
636-
mTreeView->scrollTo( this->index( rowCount() - 1, 1 ) );
637-
mTreeView->setCurrentIndex( this->index( rowCount() - 1, 1 ) );
638-
mTreeView->selectionModel()->select( this->index( rowCount() - 1, 1 ), QItemSelectionModel::Rows );
651+
emit selectItem( this->index( rowCount() - 1, 1 ) );
639652
}
640653
else
641654
{
642655
//Move from project to SQLite storage
643656
moveBookmark( mProjectTableModel, mQgisTableModel, index.row() - mQgisTableModel.rowCount() );
644-
mTreeView->scrollTo( this->index( mQgisTableModel.rowCount() - 1, 1 ) );
645-
mTreeView->setCurrentIndex( this->index( mQgisTableModel.rowCount() - 1, 1 ) );
646-
mTreeView->selectionModel()->select( this->index( mQgisTableModel.rowCount() - 1, 1 ), QItemSelectionModel::Rows );
657+
emit selectItem( this->index( mQgisTableModel.rowCount() - 1, 1 ) );
647658
}
648-
return true;
649-
}
650-
651-
if ( index.row() < mQgisTableModel.rowCount() )
652-
{
653-
return mQgisTableModel.setData( index, value, role );
659+
result = true;
654660
}
655661
else
656662
{
657-
return mProjectTableModel.setData( this->index( index.row() - mQgisTableModel.rowCount(), index.column() ), value, role );
663+
if ( index.row() < mQgisTableModel.rowCount() )
664+
{
665+
result = mQgisTableModel.setData( index, value, role );
666+
}
667+
else
668+
{
669+
result = mProjectTableModel.setData( this->index( index.row() - mQgisTableModel.rowCount(), index.column() ), value, role );
670+
}
658671
}
672+
if ( result )
673+
emit dataChanged( index, index );
674+
return result;
659675
}
660676

661677
Qt::ItemFlags QgsMergedBookmarksTableModel::flags( const QModelIndex &index ) const
@@ -682,7 +698,6 @@ bool QgsMergedBookmarksTableModel::removeRows( int row, int count, const QModelI
682698
{
683699
Q_ASSERT( count == 1 );
684700
bool result;
685-
beginRemoveRows( parent, row, row + count );
686701
if ( row < mQgisTableModel.rowCount() )
687702
{
688703
QSqlTableModel *qgisModel = static_cast<QSqlTableModel *>( &mQgisTableModel );
@@ -694,7 +709,7 @@ bool QgsMergedBookmarksTableModel::removeRows( int row, int count, const QModelI
694709
{
695710
result = mProjectTableModel.removeRows( row - mQgisTableModel.rowCount(), count, parent );
696711
}
697-
endRemoveRows();
712+
allLayoutChanged();
698713
return result;
699714
}
700715

src/app/qgsbookmarks.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,10 @@ class QgsMergedBookmarksTableModel: public QAbstractTableModel
105105
bool projectAvailable() const;
106106
void moveBookmark( QAbstractTableModel& modelFrom, QAbstractTableModel& modelTo, int row );
107107

108+
signals:
109+
110+
void selectItem( const QModelIndex &index );
111+
108112
private slots:
109113
void allLayoutChanged()
110114
{
@@ -155,6 +159,8 @@ class APP_EXPORT QgsBookmarks : public QgsDockWidget, private Ui::QgsBookmarksBa
155159

156160
void lstBookmarks_doubleClicked( const QModelIndex & );
157161

162+
void scrollToIndex( const QModelIndex & );
163+
158164
private:
159165
QSqlTableModel *mQgisModel;
160166
QgsProjectBookmarksTableModel *mProjectModel;

0 commit comments

Comments
 (0)