def testStylePaths(self): p = QgsProjectStyleSettings() spy = QSignalSpy(p.styleDatabasesChanged) model = QgsProjectStyleDatabaseModel(p) model_with_default = QgsProjectStyleDatabaseModel(p) model_with_default.setShowDefaultStyle(True) proxy_model = QgsProjectStyleDatabaseProxyModel(model_with_default) proxy_model.setFilters( QgsProjectStyleDatabaseProxyModel.Filter.FilterHideReadOnly) project_style = QgsStyle() project_style.setName('project') model_with_project_style = QgsProjectStyleDatabaseModel(p) model_with_project_style.setShowDefaultStyle(True) model_with_project_style.setProjectStyle(project_style) self.assertFalse(p.styleDatabasePaths()) self.assertFalse(p.styles()) self.assertEqual(p.combinedStyleModel().rowCount(), 0) self.assertEqual(model.rowCount(QModelIndex()), 0) self.assertFalse( model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole)) self.assertEqual(model_with_default.rowCount(QModelIndex()), 1) self.assertEqual( model_with_default.data( model_with_default.index(0, 0, QModelIndex()), Qt.DisplayRole), 'Default') self.assertEqual( model_with_default.data( model_with_default.index(0, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), QgsStyle.defaultStyle()) self.assertEqual(model_with_project_style.rowCount(QModelIndex()), 2) self.assertEqual( model_with_project_style.data( model_with_project_style.index(0, 0, QModelIndex()), Qt.DisplayRole), 'project') self.assertEqual( model_with_project_style.data( model_with_project_style.index(0, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), project_style) self.assertEqual( model_with_project_style.data( model_with_project_style.index(1, 0, QModelIndex()), Qt.DisplayRole), 'Default') self.assertEqual( model_with_project_style.data( model_with_project_style.index(1, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), QgsStyle.defaultStyle()) self.assertEqual(proxy_model.rowCount(QModelIndex()), 1) self.assertEqual( proxy_model.data(proxy_model.index(0, 0, QModelIndex()), Qt.DisplayRole), 'Default') self.assertEqual( proxy_model.data(proxy_model.index(0, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), QgsStyle.defaultStyle()) p.addStyleDatabasePath(unitTestDataPath() + '/style1.db') self.assertEqual(len(spy), 1) self.assertEqual(p.styleDatabasePaths(), [unitTestDataPath() + '/style1.db']) self.assertEqual(p.combinedStyleModel().rowCount(), 1) self.assertEqual( p.combinedStyleModel().data(p.combinedStyleModel().index(0, 0)), 'style1') self.assertEqual(len(p.styles()), 1) self.assertEqual(p.styles()[0].fileName(), unitTestDataPath() + '/style1.db') self.assertEqual(p.styles()[0].name(), 'style1') self.assertEqual(model.rowCount(QModelIndex()), 1) self.assertEqual( model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole), 'style1') self.assertEqual( model.data(model.index(0, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), p.styles()[0]) self.assertEqual( model.data(model.index(0, 0, QModelIndex()), QgsProjectStyleDatabaseModel.PathRole), unitTestDataPath() + '/style1.db') self.assertEqual(model_with_default.rowCount(QModelIndex()), 2) self.assertEqual( model_with_default.data( model_with_default.index(0, 0, QModelIndex()), Qt.DisplayRole), 'Default') self.assertEqual( model_with_default.data( model_with_default.index(0, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), QgsStyle.defaultStyle()) self.assertEqual( model_with_default.data( model_with_default.index(1, 0, QModelIndex()), Qt.DisplayRole), 'style1') self.assertEqual( model_with_default.data( model_with_default.index(1, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), p.styles()[0]) self.assertEqual( model_with_default.data( model_with_default.index(1, 0, QModelIndex()), QgsProjectStyleDatabaseModel.PathRole), unitTestDataPath() + '/style1.db') self.assertEqual(model_with_project_style.rowCount(QModelIndex()), 3) self.assertEqual( model_with_project_style.data( model_with_project_style.index(0, 0, QModelIndex()), Qt.DisplayRole), 'project') self.assertEqual( model_with_project_style.data( model_with_project_style.index(0, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), project_style) self.assertEqual( model_with_project_style.data( model_with_project_style.index(1, 0, QModelIndex()), Qt.DisplayRole), 'Default') self.assertEqual( model_with_project_style.data( model_with_project_style.index(1, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), QgsStyle.defaultStyle()) self.assertEqual( model_with_project_style.data( model_with_project_style.index(2, 0, QModelIndex()), Qt.DisplayRole), 'style1') self.assertEqual( model_with_project_style.data( model_with_project_style.index(2, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), p.styles()[0]) self.assertEqual( model_with_project_style.data( model_with_project_style.index(2, 0, QModelIndex()), QgsProjectStyleDatabaseModel.PathRole), unitTestDataPath() + '/style1.db') self.assertEqual(proxy_model.rowCount(QModelIndex()), 2) self.assertEqual( proxy_model.data(proxy_model.index(0, 0, QModelIndex()), Qt.DisplayRole), 'Default') self.assertEqual( proxy_model.data(proxy_model.index(0, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), QgsStyle.defaultStyle()) self.assertEqual( proxy_model.data(proxy_model.index(1, 0, QModelIndex()), Qt.DisplayRole), 'style1') self.assertEqual( proxy_model.data(proxy_model.index(1, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), p.styles()[0]) self.assertEqual( proxy_model.data(proxy_model.index(1, 0, QModelIndex()), QgsProjectStyleDatabaseModel.PathRole), unitTestDataPath() + '/style1.db') # try re-adding path which is already present p.addStyleDatabasePath(unitTestDataPath() + '/style1.db') self.assertEqual(len(spy), 1) self.assertEqual(p.styleDatabasePaths(), [unitTestDataPath() + '/style1.db']) self.assertEqual(p.combinedStyleModel().rowCount(), 1) self.assertEqual( p.combinedStyleModel().data(p.combinedStyleModel().index(0, 0)), 'style1') self.assertEqual(model.rowCount(QModelIndex()), 1) self.assertEqual( model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole), 'style1') self.assertEqual( model.data(model.index(0, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), p.styles()[0]) self.assertEqual(model_with_default.rowCount(QModelIndex()), 2) self.assertEqual( model_with_default.data( model_with_default.index(0, 0, QModelIndex()), Qt.DisplayRole), 'Default') self.assertEqual( model_with_default.data( model_with_default.index(0, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), QgsStyle.defaultStyle()) self.assertEqual( model_with_default.data( model_with_default.index(1, 0, QModelIndex()), Qt.DisplayRole), 'style1') self.assertEqual( model_with_default.data( model_with_default.index(1, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), p.styles()[0]) p.addStyleDatabasePath(unitTestDataPath() + '/style2.db') self.assertEqual(len(spy), 2) self.assertEqual(p.styleDatabasePaths(), [ unitTestDataPath() + '/style1.db', unitTestDataPath() + '/style2.db' ]) self.assertEqual(p.styles()[0].fileName(), unitTestDataPath() + '/style1.db') self.assertEqual(p.styles()[0].name(), 'style1') self.assertEqual(p.styles()[1].fileName(), unitTestDataPath() + '/style2.db') self.assertEqual(p.styles()[1].name(), 'style2') self.assertEqual(p.combinedStyleModel().rowCount(), 2) self.assertEqual( p.combinedStyleModel().data(p.combinedStyleModel().index(0, 0)), 'style1') self.assertEqual( p.combinedStyleModel().data(p.combinedStyleModel().index(1, 0)), 'style2') self.assertEqual(model.rowCount(QModelIndex()), 2) self.assertEqual( model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole), 'style1') self.assertEqual( model.data(model.index(0, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), p.styles()[0]) self.assertEqual( model.data(model.index(1, 0, QModelIndex()), Qt.DisplayRole), 'style2') self.assertEqual( model.data(model.index(1, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), p.styles()[1]) self.assertEqual(model_with_default.rowCount(QModelIndex()), 3) self.assertEqual( model_with_default.data( model_with_default.index(0, 0, QModelIndex()), Qt.DisplayRole), 'Default') self.assertEqual( model_with_default.data( model_with_default.index(0, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), QgsStyle.defaultStyle()) self.assertEqual( model_with_default.data( model_with_default.index(1, 0, QModelIndex()), Qt.DisplayRole), 'style1') self.assertEqual( model_with_default.data( model_with_default.index(1, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), p.styles()[0]) self.assertEqual( model_with_default.data( model_with_default.index(2, 0, QModelIndex()), Qt.DisplayRole), 'style2') self.assertEqual( model_with_default.data( model_with_default.index(2, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), p.styles()[1]) self.assertEqual(model_with_project_style.rowCount(QModelIndex()), 4) self.assertEqual( model_with_project_style.data( model_with_project_style.index(0, 0, QModelIndex()), Qt.DisplayRole), 'project') self.assertEqual( model_with_project_style.data( model_with_project_style.index(0, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), project_style) self.assertEqual( model_with_project_style.data( model_with_project_style.index(1, 0, QModelIndex()), Qt.DisplayRole), 'Default') self.assertEqual( model_with_project_style.data( model_with_project_style.index(1, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), QgsStyle.defaultStyle()) self.assertEqual( model_with_project_style.data( model_with_project_style.index(2, 0, QModelIndex()), Qt.DisplayRole), 'style1') self.assertEqual( model_with_project_style.data( model_with_project_style.index(2, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), p.styles()[0]) self.assertEqual( model_with_project_style.data( model_with_project_style.index(3, 0, QModelIndex()), Qt.DisplayRole), 'style2') self.assertEqual( model_with_project_style.data( model_with_project_style.index(3, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), p.styles()[1]) self.assertEqual(p.styleAtPath(unitTestDataPath() + '/style1.db'), p.styles()[0]) self.assertEqual(p.styleAtPath(unitTestDataPath() + '/style2.db'), p.styles()[1]) self.assertFalse(p.styleAtPath('.xxx')) p.setStyleDatabasePaths([unitTestDataPath() + '/style3.db']) self.assertEqual(len(spy), 3) self.assertEqual(p.styleDatabasePaths(), [unitTestDataPath() + '/style3.db']) self.assertEqual(p.combinedStyleModel().rowCount(), 1) self.assertEqual( p.combinedStyleModel().data(p.combinedStyleModel().index(0, 0)), 'style3') self.assertEqual(model.rowCount(QModelIndex()), 1) self.assertEqual( model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole), 'style3') self.assertEqual( model.data(model.index(0, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), p.styles()[0]) self.assertEqual(model_with_default.rowCount(QModelIndex()), 2) self.assertEqual( model_with_default.data( model_with_default.index(0, 0, QModelIndex()), Qt.DisplayRole), 'Default') self.assertEqual( model_with_default.data( model_with_default.index(0, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), QgsStyle.defaultStyle()) self.assertEqual( model_with_default.data( model_with_default.index(1, 0, QModelIndex()), Qt.DisplayRole), 'style3') self.assertEqual( model_with_default.data( model_with_default.index(1, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), p.styles()[0]) self.assertEqual(model_with_project_style.rowCount(QModelIndex()), 3) self.assertEqual( model_with_project_style.data( model_with_project_style.index(0, 0, QModelIndex()), Qt.DisplayRole), 'project') self.assertEqual( model_with_project_style.data( model_with_project_style.index(0, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), project_style) self.assertEqual( model_with_project_style.data( model_with_project_style.index(1, 0, QModelIndex()), Qt.DisplayRole), 'Default') self.assertEqual( model_with_project_style.data( model_with_project_style.index(1, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), QgsStyle.defaultStyle()) self.assertEqual( model_with_project_style.data( model_with_project_style.index(2, 0, QModelIndex()), Qt.DisplayRole), 'style3') self.assertEqual( model_with_project_style.data( model_with_project_style.index(2, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), p.styles()[0]) self.assertEqual(p.styles()[0].fileName(), unitTestDataPath() + '/style3.db') self.assertEqual(p.styles()[0].name(), 'style3') p.setStyleDatabasePaths([unitTestDataPath() + '/style3.db']) self.assertEqual(len(spy), 3) self.assertEqual(p.combinedStyleModel().rowCount(), 1) self.assertEqual( p.combinedStyleModel().data(p.combinedStyleModel().index(0, 0)), 'style3') self.assertEqual(model.rowCount(QModelIndex()), 1) self.assertEqual( model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole), 'style3') self.assertEqual( model.data(model.index(0, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), p.styles()[0]) self.assertEqual(model_with_default.rowCount(QModelIndex()), 2) self.assertEqual( model_with_default.data( model_with_default.index(0, 0, QModelIndex()), Qt.DisplayRole), 'Default') self.assertEqual( model_with_default.data( model_with_default.index(0, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), QgsStyle.defaultStyle()) self.assertEqual( model_with_default.data( model_with_default.index(1, 0, QModelIndex()), Qt.DisplayRole), 'style3') self.assertEqual( model_with_default.data( model_with_default.index(1, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), p.styles()[0]) p.setStyleDatabasePaths([]) self.assertEqual(len(spy), 4) self.assertFalse(p.styleDatabasePaths()) self.assertFalse(p.styles()) self.assertEqual(p.combinedStyleModel().rowCount(), 0) self.assertEqual(model.rowCount(QModelIndex()), 0) self.assertEqual(model_with_default.rowCount(QModelIndex()), 1) self.assertEqual( model_with_default.data( model_with_default.index(0, 0, QModelIndex()), Qt.DisplayRole), 'Default') self.assertEqual( model_with_default.data( model_with_default.index(0, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), QgsStyle.defaultStyle()) # test using a .xml path p.addStyleDatabasePath(unitTestDataPath() + '/categorized.xml') self.assertEqual(p.styles()[0].fileName(), unitTestDataPath() + '/categorized.xml') self.assertEqual(p.combinedStyleModel().rowCount(), 4) self.assertEqual( p.combinedStyleModel().data(p.combinedStyleModel().index(0, 0)), 'categorized') self.assertEqual( p.combinedStyleModel().data(p.combinedStyleModel().index(1, 0)), ' ----c/- ') self.assertEqual( p.combinedStyleModel().data(p.combinedStyleModel().index(2, 0)), 'B ') self.assertEqual( p.combinedStyleModel().data(p.combinedStyleModel().index(3, 0)), 'a') self.assertEqual(model.rowCount(QModelIndex()), 1) self.assertEqual( model.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole), 'categorized') self.assertEqual( model.data(model.index(0, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), p.styles()[0]) self.assertEqual(model_with_default.rowCount(QModelIndex()), 2) self.assertEqual( model_with_default.data( model_with_default.index(0, 0, QModelIndex()), Qt.DisplayRole), 'Default') self.assertEqual( model_with_default.data( model_with_default.index(0, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), QgsStyle.defaultStyle()) self.assertEqual( model_with_default.data( model_with_default.index(1, 0, QModelIndex()), Qt.DisplayRole), 'categorized') self.assertEqual( model_with_default.data( model_with_default.index(1, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), p.styles()[0]) # read only style should not be included self.assertEqual(proxy_model.rowCount(QModelIndex()), 1) self.assertEqual( proxy_model.data(proxy_model.index(0, 0, QModelIndex()), Qt.DisplayRole), 'Default') self.assertEqual( proxy_model.data(proxy_model.index(0, 0, QModelIndex()), QgsProjectStyleDatabaseModel.StyleRole), QgsStyle.defaultStyle())
def test_model(self): model = QgsCombinedStyleModel() self.assertFalse(model.styles()) self.assertEqual(model.rowCount(), 0) style1 = QgsStyle() style1.createMemoryDatabase() style1.setName('first style') style1.setFileName('/home/my style1.db') model.addStyle(style1) self.assertEqual(model.styles(), [style1]) self.assertEqual(model.headerData(0, Qt.Horizontal), 'Name') self.assertEqual(model.headerData(1, Qt.Horizontal), 'Tags') self.assertEqual(model.columnCount(), 2) self.assertEqual(model.rowCount(), 1) self.assertEqual(model.data(model.index(0, 0)), 'first style') self.assertTrue(model.data(model.index(0, 0), QgsStyleModel.IsTitleRole)) self.assertEqual(model.data(model.index(0, 0), QgsStyleModel.StyleName), 'first style') self.assertEqual(model.data(model.index(0, 0), QgsStyleModel.StyleFileName), '/home/my style1.db') style1.addTextFormat('format 1', QgsTextFormat(), True) self.assertEqual(model.rowCount(), 2) self.assertEqual(model.data(model.index(0, 0)), 'first style') self.assertTrue(model.data(model.index(0, 0), QgsStyleModel.IsTitleRole)) self.assertEqual(model.data(model.index(1, 0)), 'format 1') self.assertFalse(model.data(model.index(1, 0), QgsStyleModel.IsTitleRole)) self.assertEqual(model.data(model.index(1, 0), QgsStyleModel.StyleName), 'first style') self.assertEqual(model.data(model.index(1, 0), QgsStyleModel.StyleFileName), '/home/my style1.db') style2 = QgsStyle() style2.createMemoryDatabase() style2.setName('second style') style2.setFileName('/home/my style2.db') style2.addTextFormat('format 2', QgsTextFormat(), True) style2.addTextFormat('format 3', QgsTextFormat(), True) model.addStyle(style2) self.assertEqual(model.styles(), [style1, style2]) self.assertEqual(model.rowCount(), 5) self.assertEqual(model.data(model.index(0, 0)), 'first style') self.assertTrue(model.data(model.index(0, 0), QgsStyleModel.IsTitleRole)) self.assertEqual(model.data(model.index(0, 0), QgsStyleModel.StyleName), 'first style') self.assertEqual(model.data(model.index(0, 0), QgsStyleModel.StyleFileName), '/home/my style1.db') self.assertEqual(model.data(model.index(1, 0)), 'format 1') self.assertFalse(model.data(model.index(1, 0), QgsStyleModel.IsTitleRole)) self.assertEqual(model.data(model.index(1, 0), QgsStyleModel.StyleName), 'first style') self.assertEqual(model.data(model.index(1, 0), QgsStyleModel.StyleFileName), '/home/my style1.db') self.assertEqual(model.data(model.index(2, 0)), 'second style') self.assertTrue(model.data(model.index(2, 0), QgsStyleModel.IsTitleRole)) self.assertEqual(model.data(model.index(2, 0), QgsStyleModel.StyleName), 'second style') self.assertEqual(model.data(model.index(2, 0), QgsStyleModel.StyleFileName), '/home/my style2.db') self.assertEqual(model.data(model.index(3, 0)), 'format 2') self.assertFalse(model.data(model.index(3, 0), QgsStyleModel.IsTitleRole)) self.assertEqual(model.data(model.index(3, 0), QgsStyleModel.StyleName), 'second style') self.assertEqual(model.data(model.index(3, 0), QgsStyleModel.StyleFileName), '/home/my style2.db') self.assertEqual(model.data(model.index(4, 0)), 'format 3') self.assertFalse(model.data(model.index(4, 0), QgsStyleModel.IsTitleRole)) self.assertEqual(model.data(model.index(4, 0), QgsStyleModel.StyleName), 'second style') self.assertEqual(model.data(model.index(4, 0), QgsStyleModel.StyleFileName), '/home/my style2.db') style1.deleteLater() style1 = None QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete) self.assertEqual(model.rowCount(), 3) self.assertEqual(model.data(model.index(0, 0)), 'second style') self.assertTrue(model.data(model.index(0, 0), QgsStyleModel.IsTitleRole)) self.assertEqual(model.data(model.index(1, 0)), 'format 2') self.assertFalse(model.data(model.index(1, 0), QgsStyleModel.IsTitleRole)) self.assertEqual(model.data(model.index(2, 0)), 'format 3') self.assertFalse(model.data(model.index(2, 0), QgsStyleModel.IsTitleRole)) model.removeStyle(style2) self.assertEqual(model.rowCount(), 0) model.removeStyle(style2)