Esempio n. 1
0
    def testProjectStyle(self):
        project = QgsProject()
        settings = project.styleSettings()
        self.assertIsInstance(settings.projectStyle(), QgsStyle)
        self.assertEqual(settings.projectStyle().name(), 'Project Styles')

        text_format = QgsTextFormat()
        text_format.setColor(QColor(255, 0, 0))
        self.assertTrue(settings.projectStyle().addTextFormat(
            'my text format', text_format))
        self.assertTrue(settings.projectStyle().saveTextFormat(
            'my text format', text_format, True, []))
        self.assertEqual(settings.projectStyle().textFormatCount(), 1)

        tmp_dir = QTemporaryDir()
        tmp_project_file = "{}/project.qgs".format(tmp_dir.path())
        self.assertTrue(project.write(tmp_project_file))

        project.deleteLater()
        del project
        QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete)

        project2 = QgsProject()
        self.assertTrue(project2.read(tmp_project_file))
        self.assertEqual(
            project2.styleSettings().projectStyle().textFormatCount(), 1)
        self.assertEqual(
            project2.styleSettings().projectStyle().textFormat(
                'my text format').color().name(), '#ff0000')

        project2.clear()
        self.assertEqual(
            project2.styleSettings().projectStyle().textFormatCount(), 0)
Esempio n. 2
0
    def testClear(self):
        """
        Test clearing the collection
        """
        p = QgsProject()
        l = QgsLayout(p)
        collection = l.pageCollection()

        collection.clear()

        # add a page
        page = QgsLayoutItemPage(l)
        page.setPageSize('A4')
        collection.addPage(page)
        # add a second page
        page2 = QgsLayoutItemPage(l)
        page2.setPageSize('A5')
        collection.addPage(page2)

        page_about_to_be_removed_spy = QSignalSpy(collection.pageAboutToBeRemoved)

        # clear
        collection.clear()
        self.assertEqual(collection.pageCount(), 0)
        self.assertEqual(len(page_about_to_be_removed_spy), 2)

        QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete)
        self.assertTrue(sip.isdeleted(page))
        self.assertTrue(sip.isdeleted(page2))
    def testClear(self):
        """
        Test clearing the collection
        """
        p = QgsProject()
        l = QgsLayout(p)
        collection = l.pageCollection()

        collection.clear()

        # add a page
        page = QgsLayoutItemPage(l)
        page.setPageSize('A4')
        collection.addPage(page)
        # add a second page
        page2 = QgsLayoutItemPage(l)
        page2.setPageSize('A5')
        collection.addPage(page2)

        page_about_to_be_removed_spy = QSignalSpy(collection.pageAboutToBeRemoved)

        # clear
        collection.clear()
        self.assertEqual(collection.pageCount(), 0)
        self.assertEqual(len(page_about_to_be_removed_spy), 2)

        QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete)
        self.assertTrue(sip.isdeleted(page))
        self.assertTrue(sip.isdeleted(page2))
Esempio n. 4
0
    def testFileStorage(self):
        """
        Test file bound manager
        """
        manager = QgsBookmarkManager()

        tmpDir = QTemporaryDir()
        tmpFile = "{}/bookmarks.xml".format(tmpDir.path())

        manager.initialize(tmpFile)

        # add a bunch of bookmarks
        b = QgsBookmark()
        b.setId('1')
        b.setName('b1')
        b.setExtent(
            QgsReferencedRectangle(QgsRectangle(11, 21, 31, 41),
                                   QgsCoordinateReferenceSystem('EPSG:4326')))

        b2 = QgsBookmark()
        b2.setId('2')
        b2.setName('b2')
        b2.setExtent(
            QgsReferencedRectangle(QgsRectangle(12, 22, 32, 42),
                                   QgsCoordinateReferenceSystem('EPSG:4326')))

        b3 = QgsBookmark()
        b3.setId('3')
        b3.setName('b3')
        b3.setExtent(
            QgsReferencedRectangle(QgsRectangle(32, 32, 33, 43),
                                   QgsCoordinateReferenceSystem('EPSG:4326')))

        manager.addBookmark(b)
        manager.addBookmark(b2)
        manager.addBookmark(b3)

        # destroy manager, causes write to disk
        manager.deleteLater()
        QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete)
        del manager

        # create another new manager with same key, should contain existing bookmarks
        manager2 = QgsBookmarkManager()
        self.assertFalse(manager2.bookmarks())
        manager2.initialize(tmpFile)
        self.assertEqual(manager2.bookmarks(), [b, b2, b3])

        # but a manager with a different key should not...
        tmpFile2 = "{}/bookmarks2.xml".format(tmpDir.path())
        manager3 = QgsBookmarkManager()
        manager3.initialize(tmpFile2)
        self.assertEqual(manager3.bookmarks(), [])
    def testSettings(self):
        p = QgsProject()
        l = QgsLayout(p)
        map = QgsLayoutItemMap(l)
        shape = QgsLayoutItemShape(l)

        settings = QgsLayoutItemMapItemClipPathSettings(map)
        spy = QSignalSpy(settings.changed)

        self.assertFalse(settings.enabled())
        settings.setEnabled(True)
        self.assertTrue(settings.enabled())
        self.assertEqual(len(spy), 1)
        settings.setEnabled(True)
        self.assertEqual(len(spy), 1)

        settings.setFeatureClippingType(
            QgsMapClippingRegion.FeatureClippingType.NoClipping)
        self.assertEqual(settings.featureClippingType(),
                         QgsMapClippingRegion.FeatureClippingType.NoClipping)
        self.assertEqual(len(spy), 2)
        settings.setFeatureClippingType(
            QgsMapClippingRegion.FeatureClippingType.NoClipping)
        self.assertEqual(len(spy), 2)

        self.assertFalse(settings.forceLabelsInsideClipPath())
        settings.setForceLabelsInsideClipPath(True)
        self.assertTrue(settings.forceLabelsInsideClipPath())
        self.assertEqual(len(spy), 3)
        settings.setForceLabelsInsideClipPath(True)
        self.assertEqual(len(spy), 3)

        settings.setSourceItem(shape)
        self.assertEqual(len(spy), 4)
        self.assertEqual(settings.sourceItem(), shape)

        settings.setSourceItem(None)
        self.assertEqual(len(spy), 5)
        self.assertIsNone(settings.sourceItem())

        settings.setSourceItem(shape)
        self.assertEqual(len(spy), 6)
        shape.deleteLater()
        QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete)
        del shape
        self.assertIsNone(settings.sourceItem())
Esempio n. 6
0
    def test_layer_tree_group_layer(self):
        """
        Test setting a group layer on a QgsLayerTreeGroup
        """
        options = QgsGroupLayer.LayerOptions(QgsCoordinateTransformContext())
        group_layer = QgsGroupLayer('group', options)

        group_node = QgsLayerTreeGroup()
        self.assertFalse(group_node.groupLayer())
        group_node.setGroupLayer(group_layer)
        self.assertEqual(group_node.groupLayer(), group_layer)

        group_layer.deleteLater()
        group_layer = None
        QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete)
        # should be automatically cleaned
        self.assertFalse(group_node.groupLayer())
Esempio n. 7
0
    def test_children(self):
        options = QgsGroupLayer.LayerOptions(QgsCoordinateTransformContext())
        group_layer = QgsGroupLayer('test', options)
        self.assertTrue(group_layer.isValid())

        self.assertFalse(group_layer.childLayers())

        # add some child layers
        layer1 = QgsVectorLayer('Point?crs=epsg:3111', 'Point', 'memory')
        layer2 = QgsVectorLayer('Point?crs=epsg:4326', 'Point', 'memory')

        group_layer.setChildLayers([layer1, layer2])
        self.assertEqual(group_layer.childLayers(), [layer1, layer2])

        # force deletion of a layer
        layer1.deleteLater()
        layer1 = None
        QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete)
        # should be automatically cleaned
        self.assertEqual(group_layer.childLayers(), [layer2])
    def testIsActive(self):
        p = QgsProject()
        l = QgsLayout(p)
        map = QgsLayoutItemMap(l)
        shape = QgsLayoutItemShape(l)

        settings = QgsLayoutItemMapItemClipPathSettings(map)
        self.assertFalse(settings.isActive())
        settings.setEnabled(True)
        self.assertFalse(settings.isActive())
        settings.setSourceItem(shape)
        self.assertTrue(settings.isActive())
        settings.setEnabled(False)
        self.assertFalse(settings.isActive())

        settings.setEnabled(True)
        self.assertTrue(settings.isActive())
        shape.deleteLater()
        QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete)
        del shape
        self.assertFalse(settings.isActive())
    def testDeletePages(self):
        """
        Test deleting pages from the collection
        """
        p = QgsProject()
        l = QgsLayout(p)
        collection = l.pageCollection()

        # add a page
        page = QgsLayoutItemPage(l)
        page.setPageSize('A4')
        collection.addPage(page)
        # add a second page
        page2 = QgsLayoutItemPage(l)
        page2.setPageSize('A5')
        collection.addPage(page2)

        page_about_to_be_removed_spy = QSignalSpy(collection.pageAboutToBeRemoved)

        # delete page
        collection.deletePage(None)
        self.assertEqual(collection.pageCount(), 2)
        self.assertEqual(len(page_about_to_be_removed_spy), 0)

        page3 = QgsLayoutItemPage(l)
        # try deleting a page not in collection
        collection.deletePage(page3)
        QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete)
        self.assertFalse(sip.isdeleted(page3))
        self.assertEqual(collection.pageCount(), 2)
        self.assertEqual(len(page_about_to_be_removed_spy), 0)

        self.assertEqual(l.layoutBounds(ignorePages=False), QRectF(0.0, 0.0, 210.0, 517.0))
        collection.deletePage(page)
        self.assertEqual(collection.pageCount(), 1)
        self.assertEqual(l.layoutBounds(ignorePages=False), QRectF(0.0, 0.0, 148.0, 210.0))
        self.assertFalse(page in collection.pages())
        QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete)
        self.assertTrue(sip.isdeleted(page))
        self.assertEqual(len(page_about_to_be_removed_spy), 1)
        self.assertEqual(page_about_to_be_removed_spy[-1][0], 0)

        collection.deletePage(page2)
        self.assertEqual(collection.pageCount(), 0)
        self.assertFalse(collection.pages())
        self.assertEqual(l.layoutBounds(ignorePages=False), QRectF())
        QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete)
        self.assertTrue(sip.isdeleted(page2))
        self.assertEqual(len(page_about_to_be_removed_spy), 2)
        self.assertEqual(page_about_to_be_removed_spy[-1][0], 0)
    def testDeletePages(self):
        """
        Test deleting pages from the collection
        """
        p = QgsProject()
        l = QgsLayout(p)
        collection = l.pageCollection()

        # add a page
        page = QgsLayoutItemPage(l)
        page.setPageSize('A4')
        collection.addPage(page)
        # add a second page
        page2 = QgsLayoutItemPage(l)
        page2.setPageSize('A5')
        collection.addPage(page2)

        page_about_to_be_removed_spy = QSignalSpy(collection.pageAboutToBeRemoved)

        # delete page
        collection.deletePage(None)
        self.assertEqual(collection.pageCount(), 2)
        self.assertEqual(len(page_about_to_be_removed_spy), 0)

        page3 = QgsLayoutItemPage(l)
        # try deleting a page not in collection
        collection.deletePage(page3)
        QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete)
        self.assertFalse(sip.isdeleted(page3))
        self.assertEqual(collection.pageCount(), 2)
        self.assertEqual(len(page_about_to_be_removed_spy), 0)

        collection.deletePage(page)
        self.assertEqual(collection.pageCount(), 1)
        self.assertFalse(page in collection.pages())
        QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete)
        self.assertTrue(sip.isdeleted(page))
        self.assertEqual(len(page_about_to_be_removed_spy), 1)
        self.assertEqual(page_about_to_be_removed_spy[-1][0], 0)

        collection.deletePage(page2)
        self.assertEqual(collection.pageCount(), 0)
        self.assertFalse(collection.pages())
        QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete)
        self.assertTrue(sip.isdeleted(page2))
        self.assertEqual(len(page_about_to_be_removed_spy), 2)
        self.assertEqual(page_about_to_be_removed_spy[-1][0], 0)
    def testDeletePages(self):
        """
        Test deleting pages from the collection
        """
        p = QgsProject()
        l = QgsLayout(p)
        collection = l.pageCollection()

        # add a page
        page = QgsLayoutItemPage(l)
        page.setPageSize('A4')
        collection.addPage(page)
        # add a second page
        page2 = QgsLayoutItemPage(l)
        page2.setPageSize('A5')
        collection.addPage(page2)

        # delete page
        collection.deletePage(None)
        self.assertEqual(collection.pageCount(), 2)

        page3 = QgsLayoutItemPage(l)
        # try deleting a page not in collection
        collection.deletePage(page3)
        QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete)
        self.assertFalse(sip.isdeleted(page3))
        self.assertEqual(collection.pageCount(), 2)

        collection.deletePage(page)
        self.assertEqual(collection.pageCount(), 1)
        self.assertFalse(page in collection.pages())
        QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete)
        self.assertTrue(sip.isdeleted(page))

        collection.deletePage(page2)
        self.assertEqual(collection.pageCount(), 0)
        self.assertFalse(collection.pages())
        QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete)
        self.assertTrue(sip.isdeleted(page2))
Esempio n. 12
0
    def testPages(self):
        """
        Test adding/retrieving/deleting pages from the collection
        """
        p = QgsProject()
        l = QgsLayout(p)
        collection = l.pageCollection()

        self.assertEqual(collection.pageCount(), 0)
        self.assertFalse(collection.pages())
        self.assertFalse(collection.page(-1))
        self.assertFalse(collection.page(0))
        self.assertFalse(collection.page(1))

        # add a page
        page = QgsLayoutItemPage(l)
        page.setPageSize('A4')
        self.assertEqual(collection.pageNumber(page), -1)

        collection.addPage(page)

        self.assertTrue(page in l.items())

        self.assertEqual(collection.pageCount(), 1)
        self.assertEqual(collection.pages(), [page])
        self.assertFalse(collection.page(-1))
        self.assertEqual(collection.page(0), page)
        self.assertFalse(collection.page(1))
        self.assertEqual(collection.pageNumber(page), 0)

        # add a second page
        page2 = QgsLayoutItemPage(l)
        page2.setPageSize('A5')
        collection.addPage(page2)

        self.assertEqual(collection.pageCount(), 2)
        self.assertEqual(collection.pages(), [page, page2])
        self.assertFalse(collection.page(-1))
        self.assertEqual(collection.page(0), page)
        self.assertEqual(collection.page(1), page2)
        self.assertEqual(collection.pageNumber(page2), 1)

        # insert a page
        page3 = QgsLayoutItemPage(l)
        page3.setPageSize('A3')
        collection.insertPage(page3, 1)
        self.assertTrue(page3 in l.items())

        self.assertEqual(collection.pageCount(), 3)
        self.assertEqual(collection.pages(), [page, page3, page2])
        self.assertEqual(collection.page(0), page)
        self.assertEqual(collection.page(1), page3)
        self.assertEqual(collection.page(2), page2)
        self.assertEqual(collection.pageNumber(page3), 1)

        # delete page
        collection.deletePage(-1)
        self.assertEqual(collection.pageCount(), 3)
        self.assertEqual(collection.pages(), [page, page3, page2])
        collection.deletePage(100)
        self.assertEqual(collection.pageCount(), 3)
        self.assertEqual(collection.pages(), [page, page3, page2])
        collection.deletePage(1)
        self.assertEqual(collection.pageCount(), 2)
        self.assertEqual(collection.pages(), [page, page2])

        # make sure page was deleted
        QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete)
        self.assertTrue(sip.isdeleted(page3))

        del l
        QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete)
        self.assertTrue(sip.isdeleted(page))
        self.assertTrue(sip.isdeleted(page2))
Esempio n. 13
0
    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)
    def testPages(self):
        """
        Test adding/retrieving/deleting pages from the collection
        """
        p = QgsProject()
        l = QgsLayout(p)
        collection = l.pageCollection()

        self.assertEqual(collection.pageCount(), 0)
        self.assertFalse(collection.pages())
        self.assertFalse(collection.page(-1))
        self.assertFalse(collection.page(0))
        self.assertFalse(collection.page(1))

        # add a page
        page = QgsLayoutItemPage(l)
        page.setPageSize('A4')
        self.assertEqual(collection.pageNumber(page), -1)

        collection.addPage(page)

        self.assertTrue(page in l.items())

        self.assertEqual(collection.pageCount(), 1)
        self.assertEqual(collection.pages(), [page])
        self.assertFalse(collection.page(-1))
        self.assertEqual(collection.page(0), page)
        self.assertFalse(collection.page(1))
        self.assertEqual(collection.pageNumber(page), 0)

        # add a second page
        page2 = QgsLayoutItemPage(l)
        page2.setPageSize('A5')
        collection.addPage(page2)

        self.assertEqual(collection.pageCount(), 2)
        self.assertEqual(collection.pages(), [page, page2])
        self.assertFalse(collection.page(-1))
        self.assertEqual(collection.page(0), page)
        self.assertEqual(collection.page(1), page2)
        self.assertEqual(collection.pageNumber(page2), 1)

        # insert a page
        page3 = QgsLayoutItemPage(l)
        page3.setPageSize('A3')
        collection.insertPage(page3, 1)
        self.assertTrue(page3 in l.items())

        self.assertEqual(collection.pageCount(), 3)
        self.assertEqual(collection.pages(), [page, page3, page2])
        self.assertEqual(collection.page(0), page)
        self.assertEqual(collection.page(1), page3)
        self.assertEqual(collection.page(2), page2)
        self.assertEqual(collection.pageNumber(page3), 1)

        # delete page
        collection.deletePage(-1)
        self.assertEqual(collection.pageCount(), 3)
        self.assertEqual(collection.pages(), [page, page3, page2])
        collection.deletePage(100)
        self.assertEqual(collection.pageCount(), 3)
        self.assertEqual(collection.pages(), [page, page3, page2])
        collection.deletePage(1)
        self.assertEqual(collection.pageCount(), 2)
        self.assertEqual(collection.pages(), [page, page2])

        # make sure page was deleted
        QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete)
        self.assertTrue(sip.isdeleted(page3))

        del l
        QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete)
        self.assertTrue(sip.isdeleted(page))
        self.assertTrue(sip.isdeleted(page2))
Esempio n. 15
0
    def testAdditionalLayers(self):
        QgsProject.instance().clear()
        l1 = create_layer('l1')
        l2 = create_layer('l2')
        QgsProject.instance().addMapLayers([l1, l2])
        m = QgsMapLayerComboBox()
        self.assertEqual(m.count(), 2)
        l3 = create_layer('l3')
        l4 = create_layer('l4')
        m.setAdditionalLayers([l3, l4])
        self.assertEqual(m.count(), 4)

        m.setAdditionalItems(['a', 'b'])
        self.assertEqual(m.count(), 6)
        self.assertEqual(m.itemText(0), 'l1')
        self.assertEqual(m.itemText(1), 'l2')
        self.assertEqual(m.itemText(2), 'l3')
        self.assertEqual(m.itemText(3), 'l4')
        self.assertEqual(m.itemText(4), 'a')
        self.assertEqual(m.itemText(5), 'b')

        m.setAllowEmptyLayer(True)
        self.assertEqual(m.count(), 7)
        self.assertFalse(m.itemText(0))
        self.assertEqual(m.itemText(1), 'l1')
        self.assertEqual(m.itemText(2), 'l2')
        self.assertEqual(m.itemText(3), 'l3')
        self.assertEqual(m.itemText(4), 'l4')
        self.assertEqual(m.itemText(5), 'a')
        self.assertEqual(m.itemText(6), 'b')

        l3.deleteLater()
        QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete)
        self.assertEqual(m.count(), 6)
        self.assertFalse(m.itemText(0))
        self.assertEqual(m.itemText(1), 'l1')
        self.assertEqual(m.itemText(2), 'l2')
        self.assertEqual(m.itemText(3), 'l4')
        self.assertEqual(m.itemText(4), 'a')
        self.assertEqual(m.itemText(5), 'b')

        l5 = create_layer('l5')
        l6 = create_layer('l6')
        m.setAdditionalLayers([l5, l6, l4])
        self.assertEqual(m.count(), 8)
        self.assertFalse(m.itemText(0))
        self.assertEqual(m.itemText(1), 'l1')
        self.assertEqual(m.itemText(2), 'l2')
        self.assertEqual(m.itemText(3), 'l4')
        self.assertEqual(m.itemText(4), 'l5')
        self.assertEqual(m.itemText(5), 'l6')
        self.assertEqual(m.itemText(6), 'a')
        self.assertEqual(m.itemText(7), 'b')

        m.setAdditionalLayers([l5, l4])
        self.assertEqual(m.count(), 7)
        self.assertFalse(m.itemText(0))
        self.assertEqual(m.itemText(1), 'l1')
        self.assertEqual(m.itemText(2), 'l2')
        self.assertEqual(m.itemText(3), 'l4')
        self.assertEqual(m.itemText(4), 'l5')
        self.assertEqual(m.itemText(5), 'a')
        self.assertEqual(m.itemText(6), 'b')

        QgsProject.instance().removeMapLayers([l1.id(), l2.id()])

        self.assertEqual(m.count(), 5)
        self.assertFalse(m.itemText(0))
        self.assertEqual(m.itemText(1), 'l4')
        self.assertEqual(m.itemText(2), 'l5')
        self.assertEqual(m.itemText(3), 'a')
        self.assertEqual(m.itemText(4), 'b')
Esempio n. 16
0
    def testAdditionalLayers(self):
        l1 = create_layer('l1')
        l2 = create_layer('l2')
        QgsProject.instance().addMapLayers([l1, l2])
        m = QgsMapLayerModel()
        self.assertEqual(m.rowCount(QModelIndex()), 2)
        l3 = create_layer('l3')
        l4 = create_layer('l4')
        m.setAdditionalLayers([l3, l4])
        self.assertEqual(m.rowCount(QModelIndex()), 4)

        m.setAdditionalItems(['a', 'b'])
        self.assertEqual(m.rowCount(QModelIndex()), 6)
        self.assertEqual(m.data(m.index(0, 0), Qt.DisplayRole), 'l1')
        self.assertEqual(m.data(m.index(1, 0), Qt.DisplayRole), 'l2')
        self.assertEqual(m.data(m.index(2, 0), Qt.DisplayRole), 'l3')
        self.assertEqual(m.data(m.index(3, 0), Qt.DisplayRole), 'l4')
        self.assertEqual(m.data(m.index(4, 0), Qt.DisplayRole), 'a')
        self.assertEqual(m.data(m.index(5, 0), Qt.DisplayRole), 'b')

        m.setAllowEmptyLayer(True)
        self.assertEqual(m.rowCount(QModelIndex()), 7)
        self.assertFalse(m.data(m.index(0, 0), Qt.DisplayRole))
        self.assertEqual(m.data(m.index(1, 0), Qt.DisplayRole), 'l1')
        self.assertEqual(m.data(m.index(2, 0), Qt.DisplayRole), 'l2')
        self.assertEqual(m.data(m.index(3, 0), Qt.DisplayRole), 'l3')
        self.assertEqual(m.data(m.index(4, 0), Qt.DisplayRole), 'l4')
        self.assertEqual(m.data(m.index(5, 0), Qt.DisplayRole), 'a')
        self.assertEqual(m.data(m.index(6, 0), Qt.DisplayRole), 'b')

        l3.deleteLater()
        QCoreApplication.sendPostedEvents(None, QEvent.DeferredDelete)
        self.assertEqual(m.rowCount(QModelIndex()), 6)
        self.assertFalse(m.data(m.index(0, 0), Qt.DisplayRole))
        self.assertEqual(m.data(m.index(1, 0), Qt.DisplayRole), 'l1')
        self.assertEqual(m.data(m.index(2, 0), Qt.DisplayRole), 'l2')
        self.assertEqual(m.data(m.index(3, 0), Qt.DisplayRole), 'l4')
        self.assertEqual(m.data(m.index(4, 0), Qt.DisplayRole), 'a')
        self.assertEqual(m.data(m.index(5, 0), Qt.DisplayRole), 'b')

        l5 = create_layer('l5')
        l6 = create_layer('l6')
        m.setAdditionalLayers([l5, l6, l4])
        self.assertEqual(m.rowCount(QModelIndex()), 8)
        self.assertFalse(m.data(m.index(0, 0), Qt.DisplayRole))
        self.assertEqual(m.data(m.index(1, 0), Qt.DisplayRole), 'l1')
        self.assertEqual(m.data(m.index(2, 0), Qt.DisplayRole), 'l2')
        self.assertEqual(m.data(m.index(3, 0), Qt.DisplayRole), 'l5')
        self.assertEqual(m.data(m.index(4, 0), Qt.DisplayRole), 'l6')
        self.assertEqual(m.data(m.index(5, 0), Qt.DisplayRole), 'l4')
        self.assertEqual(m.data(m.index(6, 0), Qt.DisplayRole), 'a')
        self.assertEqual(m.data(m.index(7, 0), Qt.DisplayRole), 'b')

        m.setAdditionalLayers([l5, l4])
        self.assertEqual(m.rowCount(QModelIndex()), 7)
        self.assertFalse(m.data(m.index(0, 0), Qt.DisplayRole))
        self.assertEqual(m.data(m.index(1, 0), Qt.DisplayRole), 'l1')
        self.assertEqual(m.data(m.index(2, 0), Qt.DisplayRole), 'l2')
        self.assertEqual(m.data(m.index(3, 0), Qt.DisplayRole), 'l5')
        self.assertEqual(m.data(m.index(4, 0), Qt.DisplayRole), 'l4')
        self.assertEqual(m.data(m.index(5, 0), Qt.DisplayRole), 'a')
        self.assertEqual(m.data(m.index(6, 0), Qt.DisplayRole), 'b')

        QgsProject.instance().removeMapLayers([l1.id(), l2.id()])

        self.assertEqual(m.rowCount(QModelIndex()), 5)
        self.assertFalse(m.data(m.index(0, 0), Qt.DisplayRole))
        self.assertEqual(m.data(m.index(1, 0), Qt.DisplayRole), 'l5')
        self.assertEqual(m.data(m.index(2, 0), Qt.DisplayRole), 'l4')
        self.assertEqual(m.data(m.index(3, 0), Qt.DisplayRole), 'a')
        self.assertEqual(m.data(m.index(4, 0), Qt.DisplayRole), 'b')