예제 #1
0
    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()
예제 #2
0
    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_()