def load_content(self): super().load_content() # add layer-groups in specific order for group_name in [ self.nullfall_group, self.planfall_group, self.results_group, self.study_group ]: ProjectLayer.add_group(f'{self.layer_group}/{group_name}', prepend=False) self.centers = Centers.features() if len(self.centers.filter(nutzerdefiniert=0)) == 0: QMessageBox.warning( self.ui, 'Hinweis', 'Das Projekt wurde scheinbar mit einer alten ' 'Projekt-Check-Version erstellt. Bitte legen Sie eine neues ' 'Projekt an, um die Standortkonkurrenz dort nutzen zu können.') self.markets = Markets.features(create=True) self.relations = MarketCellRelations.features(create=True) self.nullfall_edit.load_content() self.planfall_edit.load_content() self.changed_edit.load_content() self.center_edit.load_content()
def change_project(self, project): ''' set given project as the active project. Only one project can be active at a time. Reloads the definition and domain widgets. ''' if not project: self.ui.domain_button.setEnabled(False) self.ui.definition_button.setEnabled(False) return projektrahmendaten = Projektrahmendaten.features(project=project)[0] version = projektrahmendaten.basisdaten_version success = self.project_manager.load_basedata(version=version) # check the availability of the base data the project was created with if not success: server_versions = self.project_manager.server_versions available = [v['version'] for v in server_versions] v_repr = f' (v{version})' if version else '' if version not in available: QMessageBox.warning( self.ui, 'Fehler', f'Die Basisdaten{v_repr}, mit denen das Projekt erstellt ' 'wurde sind nicht mehr online verfügbar.\n\n' 'Sie können das Projekt leider nicht weiterverwenden. ' 'Bitte erstellen Sie ein neues Projekt.') else: reply = QMessageBox.question( self.ui, 'Basisdaten herunterladen', f'Die Basisdaten{v_repr}, mit denen das Projekt erstellt ' 'wurde, wurden lokal nicht gefunden.\n\n' 'Möchten Sie diese Daten jetzt herunterladen? ', QMessageBox.Yes, QMessageBox.No) if reply == QMessageBox.Yes: settings = SettingsDialog(self) settings.download_basedata(version=version) self.ui.project_combo.setCurrentIndex(0) return try: if getattr(self, 'project_definitions', None): self.project_definitions.unload() del (self.project_definitions) for domain in self.domains: domain.unload() del (domain) # ToDo: put that in project.close() and get # workspaces of this project only for ws in Workspace.get_instances(): if not ws.database.read_only: ws.close() self.project_manager.active_project = project self.setup_definitions() self.setup_domains() # append groups to force initial order of layers ProjectLayer.add_group(self.project_definitions.layer_group, prepend=True) for domain in self.domains: group = ProjectLayer.add_group(domain.layer_group, prepend=False) group.setItemVisibilityChecked(False) parent = group.parent() # in case parent is sub-group of project group, hide as well if parent.name() != self.project.groupname: parent.setItemVisibilityChecked(False) # check active project, uncheck other projects layer_root = QgsProject.instance().layerTreeRoot() for p in self.project_manager.projects: group = layer_root.findGroup(p.groupname) if group: group.setItemVisibilityChecked( p.groupname == project.groupname) # show area layers self.project_definitions.show_outputs(zoom=True) backgroundOSM = OSMBackgroundLayer(groupname='Hintergrundkarten') backgroundOSM.draw(checked=False) backgroundGrey = TerrestrisBackgroundLayer( groupname='Hintergrundkarten') backgroundGrey.draw() self.ui.domain_button.setEnabled(True) self.ui.definition_button.setEnabled(True) # ToDo: show last active widget except FileNotFoundError as e: message = QMessageBox() message.setIcon(QMessageBox.Warning) message.setText(f'Das Projekt "{project.name}" ist beschädigt.') message.setInformativeText('Bitte löschen Sie das Projekt oder ' 'wenden Sie sich an den Administrator') message.setWindowTitle('Fehler') message.setDetailedText(str(e)) message.exec_()