@@ -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
347350void 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+
426436QgsProjectBookmarksTableModel::QgsProjectBookmarksTableModel ( QObject *parent )
427437 : QAbstractTableModel( parent )
428438{
@@ -449,8 +459,10 @@ int QgsProjectBookmarksTableModel::columnCount( const QModelIndex &parent ) cons
449459
450460QVariant 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
510522bool 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
627641bool 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
661677Qt::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
0 commit comments