def import_plans(self): dial = QFileDialog(self, "Import calculation plans") dial.setFileMode(QFileDialog.ExistingFile) dial.setAcceptMode(QFileDialog.AcceptOpen) dial.setDirectory( self.settings.get("io.open_directory", str(Path.home()))) dial.setNameFilter("Calculation plans (*.json)") dial.setDefaultSuffix("json") dial.setHistory(dial.history() + self.settings.get_path_history()) if dial.exec_(): file_path = dial.selectedFiles()[0] plans, err = self.settings.load_part(file_path) self.settings.set("io.batch_plan_directory", os.path.dirname(file_path)) self.settings.add_path_history(os.path.dirname(file_path)) if err: QMessageBox.warning( self, "Import error", "error during importing, part of data were filtered.") choose = ImportDialog(plans, self.settings.batch_plans, PlanPreview) if choose.exec_(): for original_name, final_name in choose.get_import_list(): self.settings.batch_plans[final_name] = plans[ original_name] self.update_plan_list()
def export_plans(self): choose = ExportDialog(self.settings.batch_plans, PlanPreview) if not choose.exec_(): return dial = QFileDialog(self, "Export calculation plans") dial.setFileMode(QFileDialog.AnyFile) dial.setAcceptMode(QFileDialog.AcceptSave) dial.setDirectory( dial.setDirectory( self.settings.get("io.batch_plan_directory", str(Path.home())))) dial.setNameFilter("Calculation plans (*.json)") dial.setDefaultSuffix("json") dial.selectFile("calculation_plans.json") dial.setHistory(dial.history() + self.settings.get_path_history()) if dial.exec_(): file_path = str(dial.selectedFiles()[0]) self.settings.set("io.batch_plan_directory", os.path.dirname(file_path)) self.settings.add_path_history(os.path.dirname(file_path)) data = { x: self.settings.batch_plans[x] for x in choose.get_export_list() } with open(file_path, "w") as ff: json.dump(data, ff, cls=self.settings.json_encoder_class, indent=2)
def export_measurement_profiles(self): exp = ExportDialog(self.settings.measurement_profiles, StringViewer) if not exp.exec_(): return dial = QFileDialog(self, "Export settings profiles") dial.setDirectory(self.settings.get("io.export_directory", "")) dial.setFileMode(QFileDialog.AnyFile) dial.setAcceptMode(QFileDialog.AcceptSave) dial.setNameFilter("measurement profile (*.json)") dial.setDefaultSuffix("json") dial.selectFile("measurements_profile.json") if dial.exec_(): file_path = str(dial.selectedFiles()[0]) self.settings.set("io.export_directory", file_path) data = { x: self.settings.measurement_profiles[x] for x in exp.get_export_list() } with open(file_path, "w") as ff: json.dump(data, ff, cls=self.settings.json_encoder_class, indent=2) self.settings.set("io.save_directory", os.path.dirname(file_path))
def export_pipeline(self): exp = ExportDialog(self._settings.segmentation_pipelines, ProfileDictViewer) if not exp.exec_(): return dial = QFileDialog(self, "Export pipeline segment") dial.setFileMode(QFileDialog.AnyFile) dial.setAcceptMode(QFileDialog.AcceptSave) dial.setDirectory(self._settings.get("io.save_directory", "")) dial.setNameFilter("Segment pipeline (*.json)") dial.setDefaultSuffix("json") dial.selectFile("segment_pipeline.json") dial.setHistory(dial.history() + self._settings.get_path_history()) if dial.exec_(): file_path = dial.selectedFiles()[0] data = { x: self._settings.segmentation_pipelines[x] for x in exp.get_export_list() } with open(file_path, "w") as ff: json.dump(data, ff, cls=self._settings.json_encoder_class, indent=2) self._settings.set("io.save_directory", os.path.dirname(file_path)) self._settings.add_path_history(os.path.dirname(file_path))
def open_a_file_dialog(parent=None, default_suffix=None, directory=None, file_filter=None, accept_mode=None, file_mode=None): """ Open a dialog asking for a file location and name to and return it :param parent: QWidget; The parent QWidget of the created dialog :param default_suffix: String; The default suffix to be passed :param directory: String; Directory to which the dialog will open :param file_filter: String; The filter name and file type e.g. "Python files (*.py)" :param accept_mode: enum AcceptMode; Defines the AcceptMode of the dialog, check QFileDialog Class for details :param file_mode: enum FileMode; Defines the FileMode of the dialog, check QFileDialog Class for details :return: String; The filename that was selected, it is possible to return a directory so look out for that """ global _LAST_SAVE_DIRECTORY dialog = QFileDialog(parent) # It is the intention to only save the user's last used directory until workbench is restarted similar to other # applications (VSCode, Gedit etc) if _LAST_SAVE_DIRECTORY is not None and directory is None: dialog.setDirectory(_LAST_SAVE_DIRECTORY) elif directory is not None: dialog.setDirectory(directory) else: dialog.setDirectory(os.path.expanduser("~")) if file_filter is not None: dialog.setFilter(QDir.Files) dialog.setNameFilter(file_filter) if default_suffix is not None: dialog.setDefaultSuffix(default_suffix) if file_mode is not None: dialog.setFileMode(file_mode) if accept_mode is not None: dialog.setAcceptMode(accept_mode) # Connect the actual filename setter dialog.fileSelected.connect(_set_last_save) # Wait for dialog to finish before allowing continuation of code if dialog.exec_() == QDialog.Rejected: return None filename = _LAST_SAVE_DIRECTORY # Make sure that the _LAST_SAVE_DIRECTORY is set as a directory if _LAST_SAVE_DIRECTORY is not None and not os.path.isdir( _LAST_SAVE_DIRECTORY): # Remove the file for last directory _LAST_SAVE_DIRECTORY = os.path.dirname( os.path.abspath(_LAST_SAVE_DIRECTORY)) return filename
def open_a_file_dialog(parent=None, default_suffix=None, directory=None, file_filter=None, accept_mode=None, file_mode=None): """ Open a dialog asking for a file location and name to and return it :param parent: QWidget; The parent QWidget of the created dialog :param default_suffix: String; The default suffix to be passed :param directory: String; Directory to which the dialog will open :param file_filter: String; The filter name and file type e.g. "Python files (*.py)" :param accept_mode: enum AcceptMode; Defines the AcceptMode of the dialog, check QFileDialog Class for details :param file_mode: enum FileMode; Defines the FileMode of the dialog, check QFileDialog Class for details :return: String; The filename that was selected, it is possible to return a directory so look out for that """ global _LAST_SAVE_DIRECTORY dialog = QFileDialog(parent) # It is the intention to only save the user's last used directory until workbench is restarted similar to other # applications (VSCode, Gedit etc) if _LAST_SAVE_DIRECTORY is not None and directory is None: dialog.setDirectory(_LAST_SAVE_DIRECTORY) elif directory is not None: dialog.setDirectory(directory) else: dialog.setDirectory(os.path.expanduser("~")) if file_filter is not None: dialog.setFilter(QDir.Files) dialog.setNameFilter(file_filter) if default_suffix is not None: dialog.setDefaultSuffix(default_suffix) if file_mode is not None: dialog.setFileMode(file_mode) if accept_mode is not None: dialog.setAcceptMode(accept_mode) # Connect the actual filename setter dialog.fileSelected.connect(_set_last_save) # Wait for dialog to finish before allowing continuation of code if dialog.exec_() == QDialog.Rejected: return None filename = _LAST_SAVE_DIRECTORY # Make sure that the _LAST_SAVE_DIRECTORY is set as a directory if _LAST_SAVE_DIRECTORY is not None and not os.path.isdir(_LAST_SAVE_DIRECTORY): # Remove the file for last directory _LAST_SAVE_DIRECTORY = os.path.dirname(os.path.abspath(_LAST_SAVE_DIRECTORY)) return filename