def testGenerateUniqueTitle(self): project = QgsProject() manager = QgsLayoutManager(project) self.assertEqual(manager.generateUniqueTitle(QgsMasterLayoutInterface.PrintLayout), 'Layout 1') self.assertEqual(manager.generateUniqueTitle(QgsMasterLayoutInterface.Report), 'Report 1') layout = QgsPrintLayout(project) layout.setName(manager.generateUniqueTitle()) manager.addLayout(layout) self.assertEqual(manager.generateUniqueTitle(), 'Layout 2') self.assertEqual(manager.generateUniqueTitle(QgsMasterLayoutInterface.Report), 'Report 1') layout2 = QgsPrintLayout(project) layout2.setName(manager.generateUniqueTitle()) manager.addLayout(layout2) self.assertEqual(manager.generateUniqueTitle(), 'Layout 3') report1 = QgsReport(project) report1.setName(manager.generateUniqueTitle(QgsMasterLayoutInterface.Report)) manager.addLayout(report1) self.assertEqual(manager.generateUniqueTitle(QgsMasterLayoutInterface.Report), 'Report 2') manager.clear() self.assertEqual(manager.generateUniqueTitle(), 'Layout 1') self.assertEqual(manager.generateUniqueTitle(QgsMasterLayoutInterface.Report), 'Report 1')
def testFieldGroupSectionVisibility(self): states = QgsVectorLayer("Point?crs=epsg:4326&field=country:string(20)&field=state:string(20)", "points", "memory") p = QgsProject() r = QgsReport(p) # add a child child1 = QgsReportSectionFieldGroup() child1.setLayer(states) child1.setField('country') child1_header = QgsLayout(p) child1.setHeader(child1_header) child1.setHeaderEnabled(True) child1_footer = QgsLayout(p) child1.setFooter(child1_footer) child1.setFooterEnabled(True) r.appendChild(child1) # check that no header was rendered when no features are found self.assertTrue(r.beginRender()) self.assertFalse(r.next()) child1.setHeaderVisibility(QgsReportSectionFieldGroup.AlwaysInclude) child1.setFooterVisibility(QgsReportSectionFieldGroup.AlwaysInclude) # check that the header is included when no features are found self.assertTrue(r.beginRender()) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_header) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_footer)
def testCombo(self): project = QgsProject() manager = QgsLayoutManager(project) layout = QgsPrintLayout(project) layout.setName('ccc') self.assertTrue(manager.addLayout(layout)) layout2 = QgsPrintLayout(project) layout2.setName('bbb') self.assertTrue(manager.addLayout(layout2)) r = QgsReport(project) r.setName('ddd') manager.addLayout(r) combo = QgsLayoutComboBox(None, manager) spy = QSignalSpy(combo.layoutChanged) self.assertEqual(combo.count(), 3) self.assertEqual(combo.itemText(0), 'bbb') self.assertEqual(combo.itemText(1), 'ccc') self.assertEqual(combo.itemText(2), 'ddd') self.assertEqual(combo.layout(0), layout2) self.assertEqual(combo.layout(1), layout) self.assertEqual(combo.layout(2), r) combo.setCurrentLayout(None) self.assertEqual(combo.currentLayout(), None) self.assertEqual(len(spy), 1) combo.setCurrentLayout(layout) self.assertEqual(combo.currentLayout(), layout) self.assertEqual(len(spy), 2) combo.setCurrentLayout(r) self.assertEqual(combo.currentLayout(), r) self.assertEqual(len(spy), 3) combo.setCurrentLayout(layout2) self.assertEqual(combo.currentLayout(), layout2) self.assertEqual(len(spy), 4) combo.setAllowEmptyLayout(True) self.assertEqual(combo.count(), 4) self.assertEqual(combo.itemText(0), '') self.assertEqual(combo.itemText(1), 'bbb') self.assertEqual(combo.itemText(2), 'ccc') self.assertEqual(combo.itemText(3), 'ddd') combo.setCurrentLayout(None) self.assertEqual(combo.currentIndex(), 0) combo.setFilters(QgsLayoutManagerProxyModel.FilterPrintLayouts) self.assertEqual(combo.count(), 3) self.assertEqual(combo.itemText(0), '') self.assertEqual(combo.itemText(1), 'bbb') self.assertEqual(combo.itemText(2), 'ccc') combo.setFilters(QgsLayoutManagerProxyModel.FilterReports) self.assertEqual(combo.filters(), QgsLayoutManagerProxyModel.FilterReports) self.assertEqual(combo.count(), 2) self.assertEqual(combo.itemText(0), '') self.assertEqual(combo.itemText(1), 'ddd')
def testExportReport(self): p = QgsProject() r = QgsReport(p) # add a header r.setHeaderEnabled(True) report_header = QgsLayout(p) report_header.initializeDefaults() item1 = QgsLayoutItemShape(report_header) item1.attemptSetSceneRect(QRectF(10, 20, 100, 150)) fill = QgsSimpleFillSymbolLayer() fill_symbol = QgsFillSymbol() fill_symbol.changeSymbolLayer(0, fill) fill.setColor(Qt.green) fill.setStrokeStyle(Qt.NoPen) item1.setSymbol(fill_symbol) report_header.addItem(item1) r.setHeader(report_header) # add a footer r.setFooterEnabled(True) report_footer = QgsLayout(p) report_footer.initializeDefaults() item2 = QgsLayoutItemShape(report_footer) item2.attemptSetSceneRect(QRectF(10, 20, 100, 150)) item2.attemptMove(QgsLayoutPoint(10, 20)) fill = QgsSimpleFillSymbolLayer() fill_symbol = QgsFillSymbol() fill_symbol.changeSymbolLayer(0, fill) fill.setColor(Qt.cyan) fill.setStrokeStyle(Qt.NoPen) item2.setSymbol(fill_symbol) report_footer.addItem(item2) r.setFooter(report_footer) # setup settings settings = QgsLayoutExporter.ImageExportSettings() settings.dpi = 80 report_path = os.path.join(self.basetestpath, 'test_report') result, error = QgsLayoutExporter.exportToImage(r, report_path, 'png', settings) self.assertEqual(result, QgsLayoutExporter.Success, error) page1_path = os.path.join(self.basetestpath, 'test_report_0001.png') self.assertTrue(self.checkImage('report_page1', 'report_page1', page1_path)) page2_path = os.path.join(self.basetestpath, 'test_report_0002.png') self.assertTrue(self.checkImage('report_page2', 'report_page2', page2_path))
def testInsertChild(self): p = QgsProject() r = QgsReport(p) child1 = QgsReportSectionLayout() r.insertChild(11, child1) self.assertEqual(r.childCount(), 1) self.assertEqual(r.childSections(), [child1]) self.assertEqual(child1.parentSection(), r) self.assertEqual(child1.row(), 0) child2 = QgsReportSectionLayout() r.insertChild(-1, child2) self.assertEqual(r.childCount(), 2) self.assertEqual(r.childSections(), [child2, child1]) self.assertEqual(child2.parentSection(), r) self.assertEqual(child2.row(), 0) self.assertEqual(child1.row(), 1)
def testGenerateUniqueTitle(self): project = QgsProject() manager = QgsLayoutManager(project) self.assertEqual( manager.generateUniqueTitle(QgsMasterLayoutInterface.PrintLayout), 'Layout 1') self.assertEqual( manager.generateUniqueTitle(QgsMasterLayoutInterface.Report), 'Report 1') layout = QgsPrintLayout(project) layout.setName(manager.generateUniqueTitle()) manager.addLayout(layout) self.assertEqual(manager.generateUniqueTitle(), 'Layout 2') self.assertEqual( manager.generateUniqueTitle(QgsMasterLayoutInterface.Report), 'Report 1') layout2 = QgsPrintLayout(project) layout2.setName(manager.generateUniqueTitle()) manager.addLayout(layout2) self.assertEqual(manager.generateUniqueTitle(), 'Layout 3') report1 = QgsReport(project) report1.setName( manager.generateUniqueTitle(QgsMasterLayoutInterface.Report)) manager.addLayout(report1) self.assertEqual( manager.generateUniqueTitle(QgsMasterLayoutInterface.Report), 'Report 2') manager.clear() self.assertEqual(manager.generateUniqueTitle(), 'Layout 1') self.assertEqual( manager.generateUniqueTitle(QgsMasterLayoutInterface.Report), 'Report 1')
def testClone(self): p = QgsProject() r = QgsReport(p) child1 = QgsReportSectionLayout() child1.setHeaderEnabled(True) r.appendChild(child1) child2 = QgsReportSectionLayout() child2.setFooterEnabled(True) r.appendChild(child2) cloned = r.clone() self.assertEqual(cloned.childCount(), 2) self.assertTrue(cloned.childSection(0).headerEnabled()) self.assertFalse(cloned.childSection(0).footerEnabled()) self.assertEqual(cloned.childSection(0).parentSection(), cloned) self.assertFalse(cloned.childSection(1).headerEnabled()) self.assertTrue(cloned.childSection(1).footerEnabled()) self.assertEqual(cloned.childSection(1).parentSection(), cloned)
def testRemoveChild(self): p = QgsProject() r = QgsReport(p) child1 = QgsReportSectionLayout() r.appendChild(child1) child2 = QgsReportSectionLayout() r.appendChild(child2) r.removeChildAt(-1) r.removeChildAt(100) r.removeChild(None) self.assertEqual(r.childCount(), 2) self.assertEqual(r.childSections(), [child1, child2]) r.removeChildAt(1) self.assertEqual(r.childCount(), 1) self.assertEqual(r.childSections(), [child1]) r.removeChild(child1) self.assertEqual(r.childCount(), 0) self.assertEqual(r.childSections(), [])
def testReadWriteXml(self): p = QgsProject() ptLayer = QgsVectorLayer("Point?crs=epsg:4326&field=country:string(20)&field=state:string(20)&field=town:string(20)", "points", "memory") p.addMapLayer(ptLayer) r = QgsReport(p) r.setName('my report') # add a header r.setHeaderEnabled(True) report_header = QgsLayout(p) report_header.setUnits(QgsUnitTypes.LayoutInches) r.setHeader(report_header) # add a footer r.setFooterEnabled(True) report_footer = QgsLayout(p) report_footer.setUnits(QgsUnitTypes.LayoutMeters) r.setFooter(report_footer) # add some subsections child1 = QgsReportSectionLayout() child1_body = QgsLayout(p) child1_body.setUnits(QgsUnitTypes.LayoutPoints) child1.setBody(child1_body) child2 = QgsReportSectionLayout() child2_body = QgsLayout(p) child2_body.setUnits(QgsUnitTypes.LayoutPixels) child2.setBody(child2_body) child1.appendChild(child2) child2a = QgsReportSectionFieldGroup() child2a_body = QgsLayout(p) child2a_body.setUnits(QgsUnitTypes.LayoutInches) child2a.setBody(child2a_body) child2a.setField('my field') child2a.setLayer(ptLayer) child1.appendChild(child2a) r.appendChild(child1) doc = QDomDocument("testdoc") elem = r.writeLayoutXml(doc, QgsReadWriteContext()) r2 = QgsReport(p) self.assertTrue(r2.readLayoutXml(elem, doc, QgsReadWriteContext())) self.assertEqual(r2.name(), 'my report') self.assertTrue(r2.headerEnabled()) self.assertEqual(r2.header().units(), QgsUnitTypes.LayoutInches) self.assertTrue(r2.footerEnabled()) self.assertEqual(r2.footer().units(), QgsUnitTypes.LayoutMeters) self.assertEqual(r2.childCount(), 1) self.assertEqual(r2.childSection(0).body().units(), QgsUnitTypes.LayoutPoints) self.assertEqual(r2.childSection(0).childCount(), 2) self.assertEqual(r2.childSection(0).childSection(0).body().units(), QgsUnitTypes.LayoutPixels) self.assertEqual(r2.childSection(0).childSection(1).body().units(), QgsUnitTypes.LayoutInches) self.assertEqual(r2.childSection(0).childSection(1).field(), 'my field') self.assertEqual(r2.childSection(0).childSection(1).layer(), ptLayer)
def testProxyModel(self): project = QgsProject() manager = QgsLayoutManager(project) model = QgsLayoutManagerModel(manager) proxy = QgsLayoutManagerProxyModel() proxy.setSourceModel(model) self.assertEqual(proxy.rowCount(QModelIndex()), 0) self.assertEqual(proxy.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole), None) self.assertEqual(proxy.data(model.index(0, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), None) layout = QgsPrintLayout(project) layout.setName('ccc') self.assertTrue(manager.addLayout(layout)) self.assertEqual(proxy.rowCount(QModelIndex()), 1) self.assertEqual(proxy.data(proxy.index(0, 0, QModelIndex()), Qt.DisplayRole), 'ccc') self.assertEqual(proxy.data(proxy.index(0, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), layout) self.assertEqual(proxy.data(proxy.index(1, 0, QModelIndex()), Qt.DisplayRole), None) self.assertEqual(proxy.data(proxy.index(1, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), None) layout2 = QgsPrintLayout(project) layout2.setName('bbb') self.assertTrue(manager.addLayout(layout2)) self.assertEqual(proxy.rowCount(QModelIndex()), 2) self.assertEqual(proxy.data(proxy.index(0, 0, QModelIndex()), Qt.DisplayRole), 'bbb') self.assertEqual(proxy.data(proxy.index(0, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), layout2) self.assertEqual(proxy.data(proxy.index(1, 0, QModelIndex()), Qt.DisplayRole), 'ccc') self.assertEqual(proxy.data(proxy.index(1, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), layout) layout.setName('aaa') self.assertEqual(proxy.data(proxy.index(0, 0, QModelIndex()), Qt.DisplayRole), 'aaa') self.assertEqual(proxy.data(proxy.index(0, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), layout) self.assertEqual(proxy.data(proxy.index(1, 0, QModelIndex()), Qt.DisplayRole), 'bbb') self.assertEqual(proxy.data(proxy.index(1, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), layout2) model.setAllowEmptyLayout(True) self.assertEqual(proxy.rowCount(QModelIndex()), 3) self.assertEqual(proxy.data(proxy.index(0, 0, QModelIndex()), Qt.DisplayRole), None) self.assertEqual(proxy.data(proxy.index(0, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), None) self.assertEqual(proxy.data(proxy.index(1, 0, QModelIndex()), Qt.DisplayRole), 'aaa') self.assertEqual(proxy.data(proxy.index(1, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), layout) self.assertEqual(proxy.data(proxy.index(2, 0, QModelIndex()), Qt.DisplayRole), 'bbb') self.assertEqual(proxy.data(proxy.index(2, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), layout2) r = QgsReport(project) r.setName('ddd') manager.addLayout(r) self.assertEqual(proxy.rowCount(QModelIndex()), 4) self.assertEqual(proxy.data(proxy.index(0, 0, QModelIndex()), Qt.DisplayRole), None) self.assertEqual(proxy.data(proxy.index(0, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), None) self.assertEqual(proxy.data(proxy.index(1, 0, QModelIndex()), Qt.DisplayRole), 'aaa') self.assertEqual(proxy.data(proxy.index(1, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), layout) self.assertEqual(proxy.data(proxy.index(2, 0, QModelIndex()), Qt.DisplayRole), 'bbb') self.assertEqual(proxy.data(proxy.index(2, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), layout2) self.assertEqual(proxy.data(proxy.index(3, 0, QModelIndex()), Qt.DisplayRole), 'ddd') self.assertEqual(proxy.data(proxy.index(3, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), r) proxy.setFilters(QgsLayoutManagerProxyModel.FilterPrintLayouts) self.assertEqual(proxy.filters(), QgsLayoutManagerProxyModel.FilterPrintLayouts) self.assertEqual(proxy.rowCount(QModelIndex()), 3) self.assertEqual(proxy.data(proxy.index(0, 0, QModelIndex()), Qt.DisplayRole), None) self.assertEqual(proxy.data(proxy.index(0, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), None) self.assertEqual(proxy.data(proxy.index(1, 0, QModelIndex()), Qt.DisplayRole), 'aaa') self.assertEqual(proxy.data(proxy.index(1, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), layout) self.assertEqual(proxy.data(proxy.index(2, 0, QModelIndex()), Qt.DisplayRole), 'bbb') self.assertEqual(proxy.data(proxy.index(2, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), layout2) proxy.setFilters(QgsLayoutManagerProxyModel.FilterReports) self.assertEqual(proxy.filters(), QgsLayoutManagerProxyModel.FilterReports) self.assertEqual(proxy.rowCount(QModelIndex()), 2) self.assertEqual(proxy.data(proxy.index(0, 0, QModelIndex()), Qt.DisplayRole), None) self.assertEqual(proxy.data(proxy.index(0, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), None) self.assertEqual(proxy.data(proxy.index(1, 0, QModelIndex()), Qt.DisplayRole), 'ddd') self.assertEqual(proxy.data(proxy.index(1, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), r) proxy.setFilters(QgsLayoutManagerProxyModel.FilterPrintLayouts | QgsLayoutManagerProxyModel.FilterReports) self.assertEqual(proxy.filters(), QgsLayoutManagerProxyModel.FilterPrintLayouts | QgsLayoutManagerProxyModel.FilterReports) self.assertEqual(proxy.rowCount(QModelIndex()), 4)
def testGettersSetters(self): p = QgsProject() r = QgsReport(p) self.assertEqual(r.layoutProject(), p) self.assertEqual(r.project(), p) r.setHeaderEnabled(True) self.assertTrue(r.headerEnabled()) header = QgsLayout(p) r.setHeader(header) self.assertEqual(r.header(), header) r.setFooterEnabled(True) self.assertTrue(r.footerEnabled()) footer = QgsLayout(p) r.setFooter(footer) self.assertEqual(r.footer(), footer)
def testIteration(self): p = QgsProject() r = QgsReport(p) # empty report self.assertTrue(r.beginRender()) self.assertFalse(r.next()) # add a header r.setHeaderEnabled(True) report_header = QgsLayout(p) r.setHeader(report_header) self.assertTrue(r.beginRender()) self.assertTrue(r.next()) self.assertEqual(r.layout(), report_header) self.assertFalse(r.next()) # add a footer r.setFooterEnabled(True) report_footer = QgsLayout(p) r.setFooter(report_footer) self.assertTrue(r.beginRender()) self.assertTrue(r.next()) self.assertEqual(r.layout(), report_header) self.assertTrue(r.next()) self.assertEqual(r.layout(), report_footer) self.assertFalse(r.next()) # add a child child1 = QgsReportSectionLayout() child1_body = QgsLayout(p) child1.setBody(child1_body) r.appendChild(child1) self.assertTrue(r.beginRender()) self.assertTrue(r.next()) self.assertEqual(r.layout(), report_header) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_body) self.assertTrue(r.next()) self.assertEqual(r.layout(), report_footer) self.assertFalse(r.next()) # header and footer on child child1_header = QgsLayout(p) child1.setHeader(child1_header) child1.setHeaderEnabled(True) child1_footer = QgsLayout(p) child1.setFooter(child1_footer) child1.setFooterEnabled(True) self.assertTrue(r.beginRender()) self.assertTrue(r.next()) self.assertEqual(r.layout(), report_header) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_header) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_body) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_footer) self.assertTrue(r.next()) self.assertEqual(r.layout(), report_footer) self.assertFalse(r.next()) # add another child child2 = QgsReportSectionLayout() child2_header = QgsLayout(p) child2.setHeader(child2_header) child2.setHeaderEnabled(True) child2_footer = QgsLayout(p) child2.setFooter(child2_footer) child2.setFooterEnabled(True) r.appendChild(child2) self.assertTrue(r.beginRender()) self.assertTrue(r.next()) self.assertEqual(r.layout(), report_header) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_header) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_body) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_footer) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_header) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_footer) self.assertTrue(r.next()) self.assertEqual(r.layout(), report_footer) self.assertFalse(r.next()) # add a child to child2 child2a = QgsReportSectionLayout() child2a_header = QgsLayout(p) child2a.setHeader(child2a_header) child2a.setHeaderEnabled(True) child2a_footer = QgsLayout(p) child2a.setFooter(child2a_footer) child2a.setFooterEnabled(True) child2.appendChild(child2a) self.assertTrue(r.beginRender()) self.assertTrue(r.next()) self.assertEqual(r.layout(), report_header) self.assertEqual(r.filePath('/tmp/myreport', 'png'), '/tmp/myreport_0001.png') self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_header) self.assertEqual(r.filePath('/tmp/myreport', 'png'), '/tmp/myreport_0002.png') self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_body) self.assertEqual(r.filePath('/tmp/myreport', '.png'), '/tmp/myreport_0003.png') self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_footer) self.assertEqual(r.filePath('/tmp/myreport', 'jpg'), '/tmp/myreport_0004.jpg') self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_header) self.assertEqual(r.filePath('/tmp/myreport', 'png'), '/tmp/myreport_0005.png') self.assertTrue(r.next()) self.assertEqual(r.layout(), child2a_header) self.assertEqual(r.filePath('/tmp/myreport', 'png'), '/tmp/myreport_0006.png') self.assertTrue(r.next()) self.assertEqual(r.layout(), child2a_footer) self.assertEqual(r.filePath('/tmp/myreport', 'png'), '/tmp/myreport_0007.png') self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_footer) self.assertEqual(r.filePath('/tmp/myreport', 'png'), '/tmp/myreport_0008.png') self.assertTrue(r.next()) self.assertEqual(r.layout(), report_footer) self.assertEqual(r.filePath('/tmp/myreport', 'png'), '/tmp/myreport_0009.png') self.assertFalse(r.next())
def testProxyModel(self): project = QgsProject() manager = QgsLayoutManager(project) model = QgsLayoutManagerModel(manager) proxy = QgsLayoutManagerProxyModel() proxy.setSourceModel(model) self.assertEqual(proxy.rowCount(QModelIndex()), 0) self.assertEqual( proxy.data(model.index(0, 0, QModelIndex()), Qt.DisplayRole), None) self.assertEqual( proxy.data(model.index(0, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), None) layout = QgsPrintLayout(project) layout.setName('ccc') self.assertTrue(manager.addLayout(layout)) self.assertEqual(proxy.rowCount(QModelIndex()), 1) self.assertEqual( proxy.data(proxy.index(0, 0, QModelIndex()), Qt.DisplayRole), 'ccc') self.assertEqual( proxy.data(proxy.index(0, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), layout) self.assertEqual( proxy.data(proxy.index(1, 0, QModelIndex()), Qt.DisplayRole), None) self.assertEqual( proxy.data(proxy.index(1, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), None) layout2 = QgsPrintLayout(project) layout2.setName('bbb') self.assertTrue(manager.addLayout(layout2)) self.assertEqual(proxy.rowCount(QModelIndex()), 2) self.assertEqual( proxy.data(proxy.index(0, 0, QModelIndex()), Qt.DisplayRole), 'bbb') self.assertEqual( proxy.data(proxy.index(0, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), layout2) self.assertEqual( proxy.data(proxy.index(1, 0, QModelIndex()), Qt.DisplayRole), 'ccc') self.assertEqual( proxy.data(proxy.index(1, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), layout) layout.setName('aaa') self.assertEqual( proxy.data(proxy.index(0, 0, QModelIndex()), Qt.DisplayRole), 'aaa') self.assertEqual( proxy.data(proxy.index(0, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), layout) self.assertEqual( proxy.data(proxy.index(1, 0, QModelIndex()), Qt.DisplayRole), 'bbb') self.assertEqual( proxy.data(proxy.index(1, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), layout2) model.setAllowEmptyLayout(True) self.assertEqual(proxy.rowCount(QModelIndex()), 3) self.assertEqual( proxy.data(proxy.index(0, 0, QModelIndex()), Qt.DisplayRole), None) self.assertEqual( proxy.data(proxy.index(0, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), None) self.assertEqual( proxy.data(proxy.index(1, 0, QModelIndex()), Qt.DisplayRole), 'aaa') self.assertEqual( proxy.data(proxy.index(1, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), layout) self.assertEqual( proxy.data(proxy.index(2, 0, QModelIndex()), Qt.DisplayRole), 'bbb') self.assertEqual( proxy.data(proxy.index(2, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), layout2) r = QgsReport(project) r.setName('ddd') manager.addLayout(r) self.assertEqual(proxy.rowCount(QModelIndex()), 4) self.assertEqual( proxy.data(proxy.index(0, 0, QModelIndex()), Qt.DisplayRole), None) self.assertEqual( proxy.data(proxy.index(0, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), None) self.assertEqual( proxy.data(proxy.index(1, 0, QModelIndex()), Qt.DisplayRole), 'aaa') self.assertEqual( proxy.data(proxy.index(1, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), layout) self.assertEqual( proxy.data(proxy.index(2, 0, QModelIndex()), Qt.DisplayRole), 'bbb') self.assertEqual( proxy.data(proxy.index(2, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), layout2) self.assertEqual( proxy.data(proxy.index(3, 0, QModelIndex()), Qt.DisplayRole), 'ddd') self.assertEqual( proxy.data(proxy.index(3, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), r) proxy.setFilters(QgsLayoutManagerProxyModel.FilterPrintLayouts) self.assertEqual(proxy.filters(), QgsLayoutManagerProxyModel.FilterPrintLayouts) self.assertEqual(proxy.rowCount(QModelIndex()), 3) self.assertEqual( proxy.data(proxy.index(0, 0, QModelIndex()), Qt.DisplayRole), None) self.assertEqual( proxy.data(proxy.index(0, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), None) self.assertEqual( proxy.data(proxy.index(1, 0, QModelIndex()), Qt.DisplayRole), 'aaa') self.assertEqual( proxy.data(proxy.index(1, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), layout) self.assertEqual( proxy.data(proxy.index(2, 0, QModelIndex()), Qt.DisplayRole), 'bbb') self.assertEqual( proxy.data(proxy.index(2, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), layout2) proxy.setFilters(QgsLayoutManagerProxyModel.FilterReports) self.assertEqual(proxy.filters(), QgsLayoutManagerProxyModel.FilterReports) self.assertEqual(proxy.rowCount(QModelIndex()), 2) self.assertEqual( proxy.data(proxy.index(0, 0, QModelIndex()), Qt.DisplayRole), None) self.assertEqual( proxy.data(proxy.index(0, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), None) self.assertEqual( proxy.data(proxy.index(1, 0, QModelIndex()), Qt.DisplayRole), 'ddd') self.assertEqual( proxy.data(proxy.index(1, 0, QModelIndex()), QgsLayoutManagerModel.LayoutRole), r) proxy.setFilters(QgsLayoutManagerProxyModel.FilterPrintLayouts | QgsLayoutManagerProxyModel.FilterReports) self.assertEqual( proxy.filters(), QgsLayoutManagerProxyModel.FilterPrintLayouts | QgsLayoutManagerProxyModel.FilterReports) self.assertEqual(proxy.rowCount(QModelIndex()), 4)
def testchildSections(self): p = QgsProject() r = QgsReport(p) self.assertEqual(r.childCount(), 0) self.assertEqual(r.childSections(), []) self.assertIsNone(r.childSection(-1)) self.assertIsNone(r.childSection(1)) self.assertIsNone(r.childSection(0)) # try deleting non-existent childSections r.removeChildAt(-1) r.removeChildAt(0) r.removeChildAt(100) r.removeChild(None) # append child child1 = QgsReportSectionLayout() self.assertIsNone(child1.project()) r.appendChild(child1) self.assertEqual(r.childCount(), 1) self.assertEqual(r.childSections(), [child1]) self.assertEqual(r.childSection(0), child1) self.assertEqual(child1.parentSection(), r) self.assertEqual(child1.row(), 0) self.assertEqual(child1.project(), p) child2 = QgsReportSectionLayout() r.appendChild(child2) self.assertEqual(r.childCount(), 2) self.assertEqual(r.childSections(), [child1, child2]) self.assertEqual(r.childSection(1), child2) self.assertEqual(child2.parentSection(), r) self.assertEqual(child2.row(), 1)
def testFieldGroupMultiLayer(self): # create a layer states = QgsVectorLayer("Point?crs=epsg:4326&field=country:string(20)&field=state:string(20)", "points", "memory") attributes = [ ['Australia', 'QLD'], ['NZ', 'state1'], ['Australia', 'VIC'], ['NZ', 'state2'], ['PNG', 'state3'], ['Australia', 'NSW'] ] pr = states.dataProvider() for a in attributes: f = QgsFeature() f.initAttributes(2) f.setAttribute(0, a[0]) f.setAttribute(1, a[1]) self.assertTrue(pr.addFeature(f)) places = QgsVectorLayer("Point?crs=epsg:4326&field=state:string(20)&field=town:string(20)", "points", "memory") attributes = [ ['QLD', 'Brisbane'], ['QLD', 'Emerald'], ['state1', 'town1'], ['VIC', 'Melbourne'], ['state1', 'town2'], ['QLD', 'Beerburrum'], ['VIC', 'Geelong'], ['state3', 'town1'] ] pr = places.dataProvider() for a in attributes: f = QgsFeature() f.initAttributes(2) f.setAttribute(0, a[0]) f.setAttribute(1, a[1]) self.assertTrue(pr.addFeature(f)) p = QgsProject() r = QgsReport(p) # add a child child1 = QgsReportSectionFieldGroup() child1_body = QgsLayout(p) child1.setLayer(states) child1.setBody(child1_body) child1.setBodyEnabled(True) child1.setField('country') r.appendChild(child1) self.assertTrue(r.beginRender()) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['Australia', 'QLD']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['Australia', 'VIC']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['Australia', 'NSW']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['NZ', 'state1']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['NZ', 'state2']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child1_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['PNG', 'state3']) self.assertFalse(r.next()) # another group # remove body from child1 child1.setBodyEnabled(False) child2 = QgsReportSectionFieldGroup() child2_body = QgsLayout(p) child2.setLayer(states) child2.setBody(child2_body) child2.setBodyEnabled(True) child2.setField('state') child1.appendChild(child2) self.assertTrue(r.beginRender()) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['Australia', 'NSW']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['Australia', 'QLD']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['Australia', 'VIC']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['NZ', 'state1']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['NZ', 'state2']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['PNG', 'state3']) self.assertFalse(r.next()) # another group child3 = QgsReportSectionFieldGroup() child3_body = QgsLayout(p) child3.setLayer(places) child3.setBody(child3_body) child3.setBodyEnabled(True) child3.setField('town') child3.setSortAscending(False) child2.appendChild(child3) self.assertTrue(r.beginRender()) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['Australia', 'NSW']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['Australia', 'QLD']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['QLD', 'Emerald']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['QLD', 'Brisbane']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['QLD', 'Beerburrum']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['Australia', 'VIC']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['VIC', 'Melbourne']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['VIC', 'Geelong']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['NZ', 'state1']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['state1', 'town2']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['state1', 'town1']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['NZ', 'state2']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['PNG', 'state3']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['state3', 'town1']) self.assertFalse(r.next()) # add headers/footers child3_header = QgsLayout(p) child3.setHeader(child3_header) child3.setHeaderEnabled(True) child3_footer = QgsLayout(p) child3.setFooter(child3_footer) child3.setFooterEnabled(True) self.assertTrue(r.beginRender()) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['Australia', 'NSW']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['Australia', 'QLD']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_header) self.assertEqual(r.layout().reportContext().feature().attributes(), ['QLD', 'Emerald']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['QLD', 'Emerald']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['QLD', 'Brisbane']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['QLD', 'Beerburrum']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_footer) self.assertEqual(r.layout().reportContext().feature().attributes(), ['QLD', 'Beerburrum']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['Australia', 'VIC']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_header) self.assertEqual(r.layout().reportContext().feature().attributes(), ['VIC', 'Melbourne']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['VIC', 'Melbourne']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['VIC', 'Geelong']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_footer) self.assertEqual(r.layout().reportContext().feature().attributes(), ['VIC', 'Geelong']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['NZ', 'state1']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_header) self.assertEqual(r.layout().reportContext().feature().attributes(), ['state1', 'town2']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['state1', 'town2']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['state1', 'town1']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_footer) self.assertEqual(r.layout().reportContext().feature().attributes(), ['state1', 'town1']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['NZ', 'state2']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child2_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['PNG', 'state3']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_header) self.assertEqual(r.layout().reportContext().feature().attributes(), ['state3', 'town1']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_body) self.assertEqual(r.layout().reportContext().feature().attributes(), ['state3', 'town1']) self.assertTrue(r.next()) self.assertEqual(r.layout(), child3_footer) self.assertEqual(r.layout().reportContext().feature().attributes(), ['state3', 'town1']) self.assertFalse(r.next())