def getProject() -> _ccl.MaybeCancelled[Project]: createOpenMaybeCancelled = _askUserWhetherToCreateNewProjectOrOpenExisting( ) while not _ccl.isCancelled(createOpenMaybeCancelled): createOpen = _ccl.value(createOpenMaybeCancelled) projectMaybeCancelled = _getProjectInternal(createOpen) if not _ccl.isCancelled(projectMaybeCancelled): project = _ccl.value(projectMaybeCancelled) return _tp.cast(Project, project) # Don't know why mypy requires this cast createOpenMaybeCancelled = _askUserWhetherToCreateNewProjectOrOpenExisting( ) return _ccl.CANCELLED
def getCreateProject( startingDirectoryPath: _tp.Optional[_pl.Path] = None ) -> _ccl.MaybeCancelled[CreateProject]: projectFolderPathMaybeCancelled = getExistingEmptyDirectory( startingDirectoryPath) if _ccl.isCancelled(projectFolderPathMaybeCancelled): return _ccl.CANCELLED projectFolderPath = _ccl.value(projectFolderPathMaybeCancelled) jsonFilePath = projectFolderPath / f"{projectFolderPath.name}.json" return CreateProject(jsonFilePath)
def main(): arguments = args.getArgsOrExit() logger = log.setup_custom_logger("root", arguments.logLevel) app = QApplication(sys.argv) app.setApplicationName("Diagram Creator") maybeCancelled = _prj.getProject() if _ccl.isCancelled(maybeCancelled): return project = _ccl.value(maybeCancelled) form = _MainWindow(logger, project) form.showMaximized() form.show() form.ensureSettingsExist() form.loadTrnsysPath() tracer = trc.createTracer(arguments.shallTrace) tracer.run(lambda: app.exec())
def openFile(self): self.logger.info("Opening diagram") qmb = QMessageBox() qmb.setText( "Are you sure you want to open another project? Unsaved progress on the current one will be lost." ) qmb.setStandardButtons(QMessageBox.Yes | QMessageBox.Cancel) qmb.setDefaultButton(QMessageBox.Cancel) ret = qmb.exec() if ret == QMessageBox.Cancel: return maybeCancelled = _prj.getLoadOrMigrateProject() if _ccl.isCancelled(maybeCancelled): return project = _ccl.value(maybeCancelled) self.centralWidget = self._createDiagramEditor(project) self.setCentralWidget(self.centralWidget)
def copyToNew(self): currentProjectFolderPath = _pl.Path(self.projectFolder) startingDirectoryPath = currentProjectFolderPath.parent maybeCancelled = _prj.getExistingEmptyDirectory(startingDirectoryPath) if _ccl.isCancelled(maybeCancelled): return newProjectFolderPath = _ccl.value(maybeCancelled) oldProjectFolderPath = _pl.Path(self.projectFolder) self._copyContents(oldProjectFolderPath, newProjectFolderPath) newJsonFilePath = self._changeAndGetNewJsonFileName( newProjectFolderPath, oldProjectFolderPath) loadProject = _prj.LoadProject(newJsonFilePath) self.centralWidget = self._createDiagramEditor(loadProject) self.setCentralWidget(self.centralWidget) self.centralWidget.save(showWarning=False)
def newDia(self): messageBox = QMessageBox() messageBox.setText( "Are you sure you want to start a new project? Unsaved progress on the current one will be lost." ) messageBox.setStandardButtons(QMessageBox.Yes | QMessageBox.Cancel) messageBox.setDefaultButton(QMessageBox.Cancel) result = messageBox.exec() if result == QMessageBox.Cancel: return startingDirectoryPath = _pl.Path(self.projectFolder).parent createProjectMaybeCancelled = _prj.getCreateProject( startingDirectoryPath) if _ccl.isCancelled(createProjectMaybeCancelled): return createProject = _ccl.value(createProjectMaybeCancelled) self.centralWidget = self._createDiagramEditor(createProject) self.setCentralWidget(self.centralWidget)
def getLoadOrMigrateProject( ) -> _ccl.MaybeCancelled[_tp.Union[LoadProject, MigrateProject]]: projectFolderPathString, _ = _qtw.QFileDialog.getOpenFileName( caption="Open diagram", filter="*.json") if not projectFolderPathString: return _ccl.CANCELLED jsonFilePath = _pl.Path(projectFolderPathString) projectFolderPath = jsonFilePath.parent containingFolderIsCalledSameAsJsonFile = projectFolderPath.name == jsonFilePath.stem ddckFolder = projectFolderPath / "ddck" if not containingFolderIsCalledSameAsJsonFile or not ddckFolder.is_dir(): oldJsonFilePath = jsonFilePath messageBox = _qtw.QMessageBox() messageBox.setText( "The json you are opening does not have a proper project folder environment. " "Do you want to continue and create one?") messageBox.setStandardButtons(_qtw.QMessageBox.Yes | _qtw.QMessageBox.Cancel) messageBox.setDefaultButton(_qtw.QMessageBox.Cancel) result = messageBox.exec() if result == _qtw.QMessageBox.Cancel: return _ccl.CANCELLED maybeCancelled = getExistingEmptyDirectory( startingDirectoryPath=projectFolderPath.parent) if _ccl.isCancelled(maybeCancelled): return _ccl.CANCELLED newProjectFolderPath = _ccl.value(maybeCancelled) return MigrateProject(oldJsonFilePath, newProjectFolderPath) return LoadProject(jsonFilePath)