From 6c897b6b1e66450da6536a573d9a00f55dfdadaa Mon Sep 17 00:00:00 2001 From: Alessandro Pasotti Date: Fri, 1 Dec 2017 11:59:01 +0100 Subject: [PATCH] [bugfix] Bookmarks: fix a crash and show 6 digits Fixes #17003 Spatial bookmarks keyboard navigation: right-arrow causes a row to appear below the current one and looks like a tree expansion (actually crashes master) Fixes #16350 Spatial Bookmark Panel: precision gets trimmed --- src/app/qgsbookmarks.cpp | 25 +++++++++++++++++++++++++ src/app/qgsbookmarks.h | 23 ++++++++++++++++++++++- src/ui/qgsbookmarksbase.ui | 15 +++++++++++---- 3 files changed, 58 insertions(+), 5 deletions(-) diff --git a/src/app/qgsbookmarks.cpp b/src/app/qgsbookmarks.cpp index d337d9c6f6f..90ced96597a 100644 --- a/src/app/qgsbookmarks.cpp +++ b/src/app/qgsbookmarks.cpp @@ -30,9 +30,13 @@ #include #include #include +#include #include #include + +const int QgsDoubleSpinBoxBookmarksDelegate::DECIMAL_PLACES = 6; + QgsBookmarks::QgsBookmarks( QWidget *parent ) : QgsDockWidget( parent ) @@ -105,6 +109,7 @@ QgsBookmarks::QgsBookmarks( QWidget *parent ) mProxyModel->setSourceModel( mModel ); lstBookmarks->setModel( mProxyModel ); + lstBookmarks->setItemDelegate( new QgsDoubleSpinBoxBookmarksDelegate ); connect( mModel, &QgsMergedBookmarksTableModel::layoutChanged, mProxyModel, &QgsBookmarksProxyModel::_resetModel ); @@ -755,3 +760,23 @@ QVariant QgsBookmarksProxyModel::headerData( int section, Qt::Orientation orient return sourceModel()->headerData( section, orientation, role ); } +QString QgsDoubleSpinBoxBookmarksDelegate::displayText( const QVariant &value, const QLocale &locale ) const +{ + if ( value.userType() == QVariant::Double ) + { + return locale.toString( value.toDouble(), 'f', QgsDoubleSpinBoxBookmarksDelegate::DECIMAL_PLACES ); + } + else + { + return QStyledItemDelegate::displayText( value, locale ); + } +} + +QWidget *QgsDoubleSpinBoxBookmarksDelegate::createEditor( QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index ) const +{ + QWidget *widget = QStyledItemDelegate::createEditor( parent, option, index ); + QDoubleSpinBox *spinbox = qobject_cast( widget ); + if ( spinbox ) + spinbox->setDecimals( QgsDoubleSpinBoxBookmarksDelegate::DECIMAL_PLACES ); + return widget; +} diff --git a/src/app/qgsbookmarks.h b/src/app/qgsbookmarks.h index 6942412000b..408cc372135 100644 --- a/src/app/qgsbookmarks.h +++ b/src/app/qgsbookmarks.h @@ -19,7 +19,7 @@ #include #include -#include +#include #include "ui_qgsbookmarksbase.h" #include "qgsdockwidget.h" @@ -72,6 +72,27 @@ class QgsBookmarksProxyModel: public QSortFilterProxyModel } }; + +/** + * \brief QgsDoubleSpinBoxBookmarksDelegate class shows 6 digits when value is a double + */ +class QgsDoubleSpinBoxBookmarksDelegate : public QStyledItemDelegate +{ + Q_OBJECT + + public: + + QString displayText( const QVariant &value, const QLocale &locale ) const override; + + QWidget *createEditor( QWidget *parent, + const QStyleOptionViewItem &option, + const QModelIndex &index ) const override; + private: + + static const int DECIMAL_PLACES; + +}; + /* * Model that merge the QGIS and project model */ diff --git a/src/ui/qgsbookmarksbase.ui b/src/ui/qgsbookmarksbase.ui index e873be11d09..a3d6d37fbc0 100644 --- a/src/ui/qgsbookmarksbase.ui +++ b/src/ui/qgsbookmarksbase.ui @@ -11,7 +11,7 @@ - Spatial Bookmarks Panel + Sp&atial Bookmarks Panel @@ -54,8 +54,14 @@ false - - true + + false + + + false + + + false @@ -103,8 +109,9 @@ QgsDockWidget QDockWidget
qgsdockwidget.h
+ 1 - +