Exemplo n.º 1
0
 def close_application(self):
     choice = QMessageBox.question(self, 'exit', "Exit program?",
                                 QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No)
     if choice == QMessageBox.StandardButton.Yes:
         self.parent().deleteLater()
         self.parent().close()
     else:
         pass
Exemplo n.º 2
0
def pop_exit_dialog(parent) -> bool:
    return (QMessageBox.question(
        parent,
        "Exiting...",
        "Are you sure?",
        QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No,
        QMessageBox.StandardButton.No,
    ) == QMessageBox.StandardButton.Yes)
Exemplo n.º 3
0
 def on_click(self):
     buttonReply = QMessageBox.question(
         self, 'PyQt6', 'Do you like PyQt6?',
         QMessageBox.StandardButtons.Yes | QMessageBox.StandardButtons.No,
         QMessageBox.StandardButtons.Yes)
     if buttonReply == QMessageBox.StandardButtons.Yes:
         self.statusBar().showMessage('You clicked Yes. That' 's good.')
     else:
         self.statusBar().showMessage('You clicked No. Why are you here?')
Exemplo n.º 4
0
 def _actionTriggered(self, _, action_id):
     if action_id == "reset":
         result = QMessageBox.question(
             None, i18n_catalog.i18nc("@title:window", "Reset to factory"),
             i18n_catalog.i18nc(
                 "@label",
                 "Reset will remove all your current printers and profiles! Are you sure you want to reset?"
             ))
         if result == QMessageBox.StandardButton.Yes:
             Resources.factoryReset()
             self._application.closeApplication()
Exemplo n.º 5
0
    def closeEvent(self, event):

        reply = QMessageBox.question(self, 'Message',
                    "Are you sure to quit?", QMessageBox.StandardButton.Yes |
                    QMessageBox.StandardButton.No, QMessageBox.StandardButton.No)

        if reply == QMessageBox.StandardButton.Yes:

            event.accept()
        else:

            event.ignore()
Exemplo n.º 6
0
    def load_config(self, config: dict, bypass_question: bool = False) -> None:
        for key in ['name', 'dirpath', 'platforms', 'warnings']:
            if key not in config.keys():
                return

        if not bypass_question:
            # noinspection PyTypeChecker
            if QMessageBox.StandardButton.Yes != QMessageBox.question(
                    self, "Load Configuration?",
                    "Configuration File Detected. Load File?",
                    QMessageBox.StandardButton.Yes
                    | QMessageBox.StandardButton.No,
                    QMessageBox.StandardButton.No):
                return

        self.header_name_input.setText(config['name'])
        self.header_output_path_input.setText(config['dirpath'])
        self.platforms.clear()

        for p in config['platforms']:
            self.platforms.append(Platform(p['type'], p['name']))

        self.warnings.clear()

        for i in range(len(config['warnings'])):
            item: Dict[str, str] = {'Name': config['warnings'][i]['Name']}

            for platform in self.platforms:
                if platform.platform_name in config['warnings'][i].keys():
                    item[platform.platform_name] = str(
                        config['warnings'][i][platform.platform_name])
                else:
                    item[platform.platform_name] = ''

            self.warnings.append(item)

        # self.configuration_save_button.setEnabled(True)

        self.__loaded_configuration = config.copy()
        self.configuration_save_button.clicked.connect(
            lambda: self.save_to_file(self.get_current_configuration(), self.
                                      __loaded_configuration_path))

        self.update_platform_headers(bypass_save_enable=True)
Exemplo n.º 7
0
    def deleteSelectedGroup(self):
        file_path = os.path.join(self.experiment_file_directory,
                                 self.experiment_file_name + '.hdf5')
        group_path = h5io.getPathFromTreeItem(
            self.groupTree.selectedItems()[0])
        group_name = group_path.split('/')[-1]

        buttonReply = QMessageBox.question(
            self, 'Delete series',
            "Are you sure you want to delete group {}?".format(group_name),
            QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No,
            QMessageBox.StandardButton.No)
        if buttonReply == QMessageBox.StandardButton.Yes:
            h5io.deleteGroup(file_path=file_path, group_path=group_path)
            print('Deleted group {}'.format(group_name))
            self.updateExistingRoiSetList()
            self.populateGroups()
        else:
            print('Delete aborted')
Exemplo n.º 8
0
 def saveRois(self):
     file_path = os.path.join(self.experiment_file_directory,
                              self.experiment_file_name + '.hdf5')
     roi_set_name = self.le_roiSetName.text()
     if roi_set_name in h5io.getAvailableRoiSetNames(
             file_path, self.series_number):
         buttonReply = QMessageBox.question(
             self, 'Overwrite roi set',
             "Are you sure you want to overwrite roi set: {}?".format(
                 roi_set_name),
             QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No,
             QMessageBox.StandardButton.No)
         if buttonReply == QMessageBox.StandardButton.Yes:
             self.plugin.saveRoiSet(file_path,
                                    series_number=self.series_number,
                                    roi_set_name=roi_set_name,
                                    roi_mask=self.roi_mask,
                                    roi_response=self.roi_response,
                                    roi_image=self.roi_image,
                                    roi_path=self.roi_path)
             print('Saved roi set {} to series {}'.format(
                 roi_set_name, self.series_number))
             self.populateGroups()
             self.updateExistingRoiSetList()
         else:
             print('Overwrite aborted - pick a unique roi set name')
     else:
         self.plugin.saveRoiSet(file_path,
                                series_number=self.series_number,
                                roi_set_name=roi_set_name,
                                roi_mask=self.roi_mask,
                                roi_response=self.roi_response,
                                roi_image=self.roi_image,
                                roi_path=self.roi_path)
         print('Saved roi set {} to series {}'.format(
             roi_set_name, self.series_number))
         self.populateGroups()
         self.updateExistingRoiSetList()
Exemplo n.º 9
0
    def requestWrite(self, nodes, file_name = None, limit_mimetypes = None, file_handler = None, **kwargs):
        """Request the specified nodes to be written to a file.

        :param nodes: A collection of scene nodes that should be written to the
        file.
        :param file_name: A suggestion for the file name to write
        to. Can be freely ignored if providing a file name makes no sense.
        :param limit_mimetypes: Should we limit the available MIME types to the
        MIME types available to the currently active machine?
        :param kwargs: Keyword arguments.
        """

        if self._writing:
            raise OutputDeviceError.DeviceBusyError()

        # Set up and display file dialog
        dialog = QFileDialog()

        dialog.setWindowTitle(catalog.i18nc("@title:window", "Save to Disk"))
        dialog.setFileMode(QFileDialog.FileMode.AnyFile)
        dialog.setAcceptMode(QFileDialog.AcceptMode.AcceptSave)

        # Ensure platform never ask for overwrite confirmation since we do this ourselves
        dialog.setOption(QFileDialog.Option.DontConfirmOverwrite)

        filters = []
        mime_types = []
        selected_filter = None

        if "preferred_mimetypes" in kwargs and kwargs["preferred_mimetypes"] is not None:
            preferred_mimetypes = kwargs["preferred_mimetypes"]
        else:
            preferred_mimetypes = Application.getInstance().getPreferences().getValue("local_file/last_used_type")
        preferred_mimetype_list = preferred_mimetypes.split(";")

        if not file_handler:
            file_handler = Application.getInstance().getMeshFileHandler()

        file_types = file_handler.getSupportedFileTypesWrite()

        file_types.sort(key = lambda k: k["description"])
        if limit_mimetypes:
            file_types = list(filter(lambda i: i["mime_type"] in limit_mimetypes, file_types))

        file_types = [ft for ft in file_types if not ft["hide_in_file_dialog"]]

        if len(file_types) == 0:
            Logger.log("e", "There are no file types available to write with!")
            raise OutputDeviceError.WriteRequestFailedError(catalog.i18nc("@info:warning", "There are no file types available to write with!"))

        # Find the first available preferred mime type
        preferred_mimetype = None
        for mime_type in preferred_mimetype_list:
            if any(ft["mime_type"] == mime_type for ft in file_types):
                preferred_mimetype = mime_type
                break

        extension_added = False
        for item in file_types:
            type_filter = "{0} (*.{1})".format(item["description"], item["extension"])
            filters.append(type_filter)
            mime_types.append(item["mime_type"])
            if preferred_mimetype == item["mime_type"]:
                selected_filter = type_filter
                if file_name and not extension_added:
                    extension_added = True
                    file_name += "." + item["extension"]

        # CURA-6411: This code needs to be before dialog.selectFile and the filters, because otherwise in macOS (for some reason) the setDirectory call doesn't work.
        stored_directory = Application.getInstance().getPreferences().getValue("local_file/dialog_save_path")

        if stored_directory and stored_directory != "" and os.path.exists(stored_directory):
            dialog.setDirectory(stored_directory)

        # Add the file name before adding the extension to the dialog
        if file_name is not None:
            dialog.selectFile(file_name)

        dialog.setNameFilters(filters)
        if selected_filter is not None:
            dialog.selectNameFilter(selected_filter)

        if not dialog.exec():
            raise OutputDeviceError.UserCanceledError()

        save_path = dialog.directory().absolutePath()
        Application.getInstance().getPreferences().setValue("local_file/dialog_save_path", save_path)

        selected_type = file_types[filters.index(dialog.selectedNameFilter())]
        Application.getInstance().getPreferences().setValue("local_file/last_used_type", selected_type["mime_type"])

        # Get file name from file dialog
        file_name = dialog.selectedFiles()[0]
        Logger.log("d", "Writing to [%s]..." % file_name)

        if os.path.exists(file_name):
            result = QMessageBox.question(None, catalog.i18nc("@title:window", "File Already Exists"), catalog.i18nc("@label Don't translate the XML tag <filename>!", "The file <filename>{0}</filename> already exists. Are you sure you want to overwrite it?").format(file_name))
            if result == QMessageBox.StandardButton.No:
                raise OutputDeviceError.UserCanceledError()

        # Actually writing file
        if file_handler:
            file_writer = file_handler.getWriter(selected_type["id"])
        else:
            file_writer = Application.getInstance().getMeshFileHandler().getWriter(selected_type["id"])

        if isinstance(file_writer, WorkspaceWriter):
            self.setLastOutputName(file_name)
        self.writeStarted.emit(self)

        try:
            mode = selected_type["mode"]
            if mode == MeshWriter.OutputMode.TextMode:
                Logger.log("d", "Writing to Local File %s in text mode", file_name)
                stream = open(file_name, "wt", encoding = "utf-8")
            elif mode == MeshWriter.OutputMode.BinaryMode:
                Logger.log("d", "Writing to Local File %s in binary mode", file_name)
                stream = open(file_name, "wb")
            else:
                Logger.log("e", "Unrecognised OutputMode.")
                return None

            job = WriteFileJob(file_writer, stream, nodes, mode)
            job.setFileName(file_name)
            job.setAddToRecentFiles(True)  # The file will be added into the "recent files" list upon success
            job.progress.connect(self._onJobProgress)
            job.finished.connect(self._onWriteJobFinished)

            message = Message(catalog.i18nc("@info:progress Don't translate the XML tags <filename>!",
                                            "Saving to <filename>{0}</filename>").format(file_name),
                              0, False, -1 , catalog.i18nc("@info:title", "Saving"))
            message.show()

            job.setMessage(message)
            self._writing = True
            job.start()
        except PermissionError as e:
            Logger.log("e", "Permission denied when trying to write to %s: %s", file_name, str(e))
            raise OutputDeviceError.PermissionDeniedError(catalog.i18nc("@info:status Don't translate the XML tags <filename>!", "Permission denied when trying to save <filename>{0}</filename>").format(file_name)) from e
        except OSError as e:
            Logger.log("e", "Operating system would not let us write to %s: %s", file_name, str(e))
            raise OutputDeviceError.WriteRequestFailedError(catalog.i18nc("@info:status Don't translate the XML tags <filename> or <message>!", "Could not save to <filename>{0}</filename>: <message>{1}</message>").format(file_name, str(e))) from e