From c46721559b7af9255c51d9b816b23ee623835e9f Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Wed, 4 Sep 2019 08:19:08 +1000 Subject: [PATCH] Add some custom roles to model --- .../core/auto_generated/qgsbookmarkmodel.sip.in | 8 ++++++++ src/core/qgsbookmarkmodel.cpp | 12 ++++++++++++ src/core/qgsbookmarkmodel.h | 9 +++++++++ tests/src/python/test_qgsbookmarkmodel.py | 17 +++++++++++++++++ 4 files changed, 46 insertions(+) diff --git a/python/core/auto_generated/qgsbookmarkmodel.sip.in b/python/core/auto_generated/qgsbookmarkmodel.sip.in index d45bdba9a8f..cf7b76280de 100644 --- a/python/core/auto_generated/qgsbookmarkmodel.sip.in +++ b/python/core/auto_generated/qgsbookmarkmodel.sip.in @@ -29,6 +29,14 @@ model data is a merge of the bookmarks stored in both managers. %End public: + enum CustomRoles + { + RoleExtent, + RoleName, + RoleId, + RoleGroup, + }; + enum Columns { ColumnName, diff --git a/src/core/qgsbookmarkmodel.cpp b/src/core/qgsbookmarkmodel.cpp index d03f87870c0..17617b26a30 100644 --- a/src/core/qgsbookmarkmodel.cpp +++ b/src/core/qgsbookmarkmodel.cpp @@ -51,6 +51,18 @@ QVariant QgsBookmarkManagerModel::data( const QModelIndex &index, int role ) con switch ( role ) { + case RoleExtent: + return b.extent(); + + case RoleName: + return b.name(); + + case RoleId: + return b.id(); + + case RoleGroup: + return b.group(); + case Qt::DisplayRole: case Qt::EditRole: { diff --git a/src/core/qgsbookmarkmodel.h b/src/core/qgsbookmarkmodel.h index cd0473af7a0..09ead9efd2b 100644 --- a/src/core/qgsbookmarkmodel.h +++ b/src/core/qgsbookmarkmodel.h @@ -43,6 +43,15 @@ class CORE_EXPORT QgsBookmarkManagerModel: public QAbstractTableModel public: + //! Custom model roles + enum CustomRoles + { + RoleExtent = Qt::UserRole, //!< Bookmark extent as a QgsReferencedRectangle + RoleName, //!< Bookmark name + RoleId, //!< Bookmark ID + RoleGroup, //!< Bookmark group + }; + //! Model columns enum Columns { diff --git a/tests/src/python/test_qgsbookmarkmodel.py b/tests/src/python/test_qgsbookmarkmodel.py index 1d6c8171a18..69b9618c077 100644 --- a/tests/src/python/test_qgsbookmarkmodel.py +++ b/tests/src/python/test_qgsbookmarkmodel.py @@ -54,6 +54,7 @@ class TestQgsBookmarkManagerModel(unittest.TestCase): self.assertFalse(model.data(model.index(-1, 0))) self.assertFalse(model.data(model.index(1, 0))) self.assertFalse(model.data(model.index(0, 0))) + self.assertFalse(model.data(model.index(0, 0), QgsBookmarkManagerModel.RoleName)) self.assertEqual(model.headerData(0, Qt.Horizontal), 'Name') self.assertEqual(model.headerData(9, Qt.Horizontal), 10) @@ -92,6 +93,12 @@ class TestQgsBookmarkManagerModel(unittest.TestCase): self.assertEqual(model.data(model.index(0, 6)), 'EPSG:4326') self.assertEqual(model.data(model.index(0, 7)), None) self.assertEqual(model.data(model.index(0, 7), Qt.CheckStateRole), Qt.Unchecked) + self.assertEqual(model.data(model.index(0, 0), QgsBookmarkManagerModel.RoleName), 'b1') + self.assertEqual(model.data(model.index(0, 0), QgsBookmarkManagerModel.RoleGroup), 'group 1') + id = model.data(model.index(0, 0), QgsBookmarkManagerModel.RoleId) + self.assertEqual(app_manager.bookmarkById(id).name(), 'b1') + self.assertEqual(model.data(model.index(0, 0), QgsBookmarkManagerModel.RoleExtent), app_manager.bookmarkById(id).extent()) + self.assertEqual(model.data(model.index(1, 0)), 'b2') self.assertEqual(model.data(model.index(1, 1)), 'group 2') self.assertEqual(model.data(model.index(1, 2)), 12.0) @@ -101,6 +108,11 @@ class TestQgsBookmarkManagerModel(unittest.TestCase): self.assertEqual(model.data(model.index(1, 6)), 'EPSG:4326') self.assertEqual(model.data(model.index(1, 7)), None) self.assertEqual(model.data(model.index(1, 7), Qt.CheckStateRole), Qt.Unchecked) + self.assertEqual(model.data(model.index(1, 0), QgsBookmarkManagerModel.RoleName), 'b2') + self.assertEqual(model.data(model.index(1, 0), QgsBookmarkManagerModel.RoleGroup), 'group 2') + id = model.data(model.index(1, 0), QgsBookmarkManagerModel.RoleId) + self.assertEqual(app_manager.bookmarkById(id).name(), 'b2') + self.assertEqual(model.data(model.index(1, 0), QgsBookmarkManagerModel.RoleExtent), app_manager.bookmarkById(id).extent()) self.assertFalse(model.data(model.index(2, 0))) self.assertFalse(model.setData(model.index(-1, 0), 4, Qt.EditRole)) @@ -171,6 +183,11 @@ class TestQgsBookmarkManagerModel(unittest.TestCase): self.assertEqual(model.data(model.index(2, 6)), 'EPSG:28355') self.assertEqual(model.data(model.index(2, 7)), None) self.assertEqual(model.data(model.index(2, 7), Qt.CheckStateRole), Qt.Checked) + self.assertEqual(model.data(model.index(2, 0), QgsBookmarkManagerModel.RoleName), 'b3') + self.assertEqual(model.data(model.index(2, 0), QgsBookmarkManagerModel.RoleGroup), 'group 3') + id = model.data(model.index(2, 0), QgsBookmarkManagerModel.RoleId) + self.assertEqual(project_manager.bookmarkById(id).name(), 'b3') + self.assertEqual(model.data(model.index(2, 0), QgsBookmarkManagerModel.RoleExtent), project_manager.bookmarkById(id).extent()) self.assertFalse(model.data(model.index(3, 0))) self.assertTrue(model.setData(model.index(2, 0), 'new name 2', Qt.EditRole))