Merge pull request #10198 from Ultimaker/CURA-8418_update_messages_with_new_types

Update messages to use the message_types
This commit is contained in:
Jelle Spijker 2021-07-28 11:36:49 +02:00 committed by GitHub
commit e845462e5d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
31 changed files with 183 additions and 90 deletions

View file

@ -178,7 +178,9 @@ class Account(QObject):
if self._error_message:
self._error_message.hide()
Logger.log("w", "Failed to login: %s", error_message)
self._error_message = Message(error_message, title = i18n_catalog.i18nc("@info:title", "Login failed"))
self._error_message = Message(error_message,
title = i18n_catalog.i18nc("@info:title", "Login failed"),
message_type = Message.MessageType.ERROR)
self._error_message.show()
self._logged_in = False
self.loginStateChanged.emit(False)

View file

@ -147,6 +147,8 @@ class ArrangeObjectsAllBuildPlatesJob(Job):
status_message.hide()
if not found_solution_for_all:
no_full_solution_message = Message(i18n_catalog.i18nc("@info:status", "Unable to find a location within the build volume for all objects"),
title = i18n_catalog.i18nc("@info:title", "Can't Find Location"))
no_full_solution_message = Message(i18n_catalog.i18nc("@info:status",
"Unable to find a location within the build volume for all objects"),
title = i18n_catalog.i18nc("@info:title", "Can't Find Location"),
message_type = Message.MessageType.WARNING)
no_full_solution_message.show()

View file

@ -111,15 +111,15 @@ class Backup:
return archive
except (IOError, OSError, BadZipfile) as error:
Logger.log("e", "Could not create archive from user data directory: %s", error)
self._showMessage(
self.catalog.i18nc("@info:backup_failed",
"Could not create archive from user data directory: {}".format(error)))
self._showMessage(self.catalog.i18nc("@info:backup_failed",
"Could not create archive from user data directory: {}".format(error)),
message_type = Message.MessageType.ERROR)
return None
def _showMessage(self, message: str) -> None:
def _showMessage(self, message: str, message_type: Message.MessageType = Message.MessageType.NEUTRAL) -> None:
"""Show a UI message."""
Message(message, title=self.catalog.i18nc("@info:title", "Backup"), lifetime=30).show()
Message(message, title=self.catalog.i18nc("@info:title", "Backup"), message_type = message_type).show()
def restore(self) -> bool:
"""Restore this back-up.
@ -130,9 +130,9 @@ class Backup:
if not self.zip_file or not self.meta_data or not self.meta_data.get("cura_release", None):
# We can restore without the minimum required information.
Logger.log("w", "Tried to restore a Cura backup without having proper data or meta data.")
self._showMessage(
self.catalog.i18nc("@info:backup_failed",
"Tried to restore a Cura backup without having proper data or meta data."))
self._showMessage(self.catalog.i18nc("@info:backup_failed",
"Tried to restore a Cura backup without having proper data or meta data."),
message_type = Message.MessageType.ERROR)
return False
current_version = Version(self._application.getVersion())
@ -141,9 +141,9 @@ class Backup:
if current_version < version_to_restore:
# Cannot restore version newer than current because settings might have changed.
Logger.log("d", "Tried to restore a Cura backup of version {version_to_restore} with cura version {current_version}".format(version_to_restore = version_to_restore, current_version = current_version))
self._showMessage(
self.catalog.i18nc("@info:backup_failed",
"Tried to restore a Cura backup that is higher than the current version."))
self._showMessage(self.catalog.i18nc("@info:backup_failed",
"Tried to restore a Cura backup that is higher than the current version."),
message_type = Message.MessageType.ERROR)
return False
# Get the current secrets and store since the back-up doesn't contain those
@ -154,7 +154,11 @@ class Backup:
archive = ZipFile(io.BytesIO(self.zip_file), "r")
except LookupError as e:
Logger.log("d", f"The following error occurred while trying to restore a Cura backup: {str(e)}")
self._showMessage(self.catalog.i18nc("@info:backup_failed", "The following error occurred while trying to restore a Cura backup:") + str(e))
Message(self.catalog.i18nc("@info:backup_failed",
"The following error occurred while trying to restore a Cura backup:") + str(e),
title = self.catalog.i18nc("@info:title", "Backup"),
message_type = Message.MessageType.ERROR).show()
return False
extracted = self._extractArchive(archive, version_data_dir)

View file

@ -1798,8 +1798,10 @@ class CuraApplication(QtApplication):
if extension in self._non_sliceable_extensions:
message = Message(
self._i18n_catalog.i18nc("@info:status",
"Only one G-code file can be loaded at a time. Skipped importing {0}",
filename), title = self._i18n_catalog.i18nc("@info:title", "Warning"))
"Only one G-code file can be loaded at a time. Skipped importing {0}",
filename),
title = self._i18n_catalog.i18nc("@info:title", "Warning"),
message_type = Message.MessageType.WARNING)
message.show()
return
# If file being loaded is non-slicable file, then prevent loading of any other files
@ -1808,8 +1810,10 @@ class CuraApplication(QtApplication):
if extension in self._non_sliceable_extensions:
message = Message(
self._i18n_catalog.i18nc("@info:status",
"Can't open any other file if G-code is loading. Skipped importing {0}",
filename), title = self._i18n_catalog.i18nc("@info:title", "Error"))
"Can't open any other file if G-code is loading. Skipped importing {0}",
filename),
title = self._i18n_catalog.i18nc("@info:title", "Error"),
message_type = Message.MessageType.ERROR)
message.show()
return

View file

@ -74,5 +74,6 @@ class MultiplyObjectsJob(Job):
if not found_solution_for_all:
no_full_solution_message = Message(
i18n_catalog.i18nc("@info:status", "Unable to find a location within the build volume for all objects"),
title = i18n_catalog.i18nc("@info:title", "Placing Object"))
title = i18n_catalog.i18nc("@info:title", "Placing Object"),
message_type = Message.MessageType.WARNING)
no_full_solution_message.show()

View file

@ -186,8 +186,10 @@ class AuthorizationService:
self._server.start(verification_code, state)
except OSError:
Logger.logException("w", "Unable to create authorization request server")
Message(i18n_catalog.i18nc("@info", "Unable to start a new sign in process. Check if another sign in attempt is still active."),
title=i18n_catalog.i18nc("@info:title", "Warning")).show()
Message(i18n_catalog.i18nc("@info",
"Unable to start a new sign in process. Check if another sign in attempt is still active."),
title=i18n_catalog.i18nc("@info:title", "Warning"),
message_type = Message.MessageType.WARNING).show()
return
auth_url = self._generate_auth_url(query_parameters_dict, force_browser_logout)
@ -241,7 +243,10 @@ class AuthorizationService:
if self._unable_to_get_data_message is not None:
self._unable_to_get_data_message.hide()
self._unable_to_get_data_message = Message(i18n_catalog.i18nc("@info", "Unable to reach the Ultimaker account server."), title = i18n_catalog.i18nc("@info:title", "Warning"))
self._unable_to_get_data_message = Message(i18n_catalog.i18nc("@info",
"Unable to reach the Ultimaker account server."),
title = i18n_catalog.i18nc("@info:title", "Warning"),
message_type = Message.MessageType.ERROR)
self._unable_to_get_data_message.show()
except (ValueError, TypeError):
Logger.logException("w", "Could not load auth data from preferences")

View file

@ -141,20 +141,29 @@ class CuraContainerRegistry(ContainerRegistry):
success = profile_writer.write(file_name, container_list)
except Exception as e:
Logger.log("e", "Failed to export profile to %s: %s", file_name, str(e))
m = Message(catalog.i18nc("@info:status Don't translate the XML tags <filename> or <message>!", "Failed to export profile to <filename>{0}</filename>: <message>{1}</message>", file_name, str(e)),
m = Message(catalog.i18nc("@info:status Don't translate the XML tags <filename> or <message>!",
"Failed to export profile to <filename>{0}</filename>: <message>{1}</message>",
file_name, str(e)),
lifetime = 0,
title = catalog.i18nc("@info:title", "Error"))
title = catalog.i18nc("@info:title", "Error"),
message_type = Message.MessageType.ERROR)
m.show()
return False
if not success:
Logger.log("w", "Failed to export profile to %s: Writer plugin reported failure.", file_name)
m = Message(catalog.i18nc("@info:status Don't translate the XML tag <filename>!", "Failed to export profile to <filename>{0}</filename>: Writer plugin reported failure.", file_name),
m = Message(catalog.i18nc("@info:status Don't translate the XML tag <filename>!",
"Failed to export profile to <filename>{0}</filename>: Writer plugin reported failure.",
file_name),
lifetime = 0,
title = catalog.i18nc("@info:title", "Error"))
title = catalog.i18nc("@info:title", "Error"),
message_type = Message.MessageType.ERROR)
m.show()
return False
m = Message(catalog.i18nc("@info:status Don't translate the XML tag <filename>!", "Exported profile to <filename>{0}</filename>", file_name),
title = catalog.i18nc("@info:title", "Export succeeded"))
m = Message(catalog.i18nc("@info:status Don't translate the XML tag <filename>!",
"Exported profile to <filename>{0}</filename>",
file_name),
title = catalog.i18nc("@info:title", "Export succeeded"),
message_type = Message.MessageType.POSITIVE)
m.show()
return True

View file

@ -853,7 +853,8 @@ class MachineManager(QObject):
self._global_container_stack.userChanges.setProperty(setting_key, "value", self._default_extruder_position)
if add_user_changes:
caution_message = Message(
catalog.i18nc("@info:message Followed by a list of settings.", "Settings have been changed to match the current availability of extruders:") + " [{settings_list}]".format(settings_list = ", ".join(add_user_changes)),
catalog.i18nc("@info:message Followed by a list of settings.",
"Settings have been changed to match the current availability of extruders:") + " [{settings_list}]".format(settings_list = ", ".join(add_user_changes)),
lifetime = 0,
title = catalog.i18nc("@info:title", "Settings updated"))
caution_message.show()

View file

@ -540,7 +540,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
"Project file <filename>{0}</filename> contains an unknown machine type"
" <message>{1}</message>. Cannot import the machine."
" Models will be imported instead.", file_name, machine_definition_id),
title = i18n_catalog.i18nc("@info:title", "Open Project File"))
title = i18n_catalog.i18nc("@info:title", "Open Project File"),
message_type = Message.MessageType.WARNING)
message.show()
Logger.log("i", "Could unknown machine definition %s in project file %s, cannot import it.",
@ -637,14 +638,16 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
except EnvironmentError as e:
message = Message(i18n_catalog.i18nc("@info:error Don't translate the XML tags <filename> or <message>!",
"Project file <filename>{0}</filename> is suddenly inaccessible: <message>{1}</message>.", file_name, str(e)),
title = i18n_catalog.i18nc("@info:title", "Can't Open Project File"))
title = i18n_catalog.i18nc("@info:title", "Can't Open Project File"),
message_type = Message.MessageType.ERROR)
message.show()
self.setWorkspaceName("")
return [], {}
except zipfile.BadZipFile as e:
message = Message(i18n_catalog.i18nc("@info:error Don't translate the XML tags <filename> or <message>!",
"Project file <filename>{0}</filename> is corrupt: <message>{1}</message>.", file_name, str(e)),
title = i18n_catalog.i18nc("@info:title", "Can't Open Project File"))
title = i18n_catalog.i18nc("@info:title", "Can't Open Project File"),
message_type = Message.MessageType.ERROR)
message.show()
self.setWorkspaceName("")
return [], {}
@ -696,7 +699,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader):
if not global_stacks:
message = Message(i18n_catalog.i18nc("@info:error Don't translate the XML tag <filename>!",
"Project file <filename>{0}</filename> is made using profiles that"
" are unknown to this version of Ultimaker Cura.", file_name))
" are unknown to this version of Ultimaker Cura.", file_name),
message_type = Message.MessageType.ERROR)
message.show()
self.setWorkspaceName("")
return [], {}

View file

@ -43,7 +43,9 @@ class CreateBackupJob(Job):
"""After the job completes, an empty string indicates success. Othrerwise, the value is a translated message."""
def run(self) -> None:
upload_message = Message(catalog.i18nc("@info:backup_status", "Creating your backup..."), title = self.MESSAGE_TITLE, progress = -1)
upload_message = Message(catalog.i18nc("@info:backup_status", "Creating your backup..."),
title = self.MESSAGE_TITLE,
progress = -1)
upload_message.show()
CuraApplication.getInstance().processEvents()
cura_api = CuraApplication.getInstance().getCuraAPI()

View file

@ -114,13 +114,17 @@ class DrivePluginExtension(QObject, Extension):
self.restoringStateChanged.emit()
if error_message:
self.backupIdBeingRestored = ""
Message(error_message, title = catalog.i18nc("@info:title", "Backup")).show()
Message(error_message,
title = catalog.i18nc("@info:title", "Backup"),
message_type = Message.MessageType.ERROR).show()
def _onCreatingStateChanged(self, is_creating: bool = False, error_message: str = None) -> None:
self._is_creating_backup = is_creating
self.creatingStateChanged.emit()
if error_message:
Message(error_message, title = catalog.i18nc("@info:title", "Backup")).show()
Message(error_message,
title = catalog.i18nc("@info:title", "Backup"),
message_type = Message.MessageType.ERROR).show()
else:
self._storeBackupDate()
if not is_creating and not error_message:

View file

@ -391,7 +391,9 @@ class CuraEngineBackend(QObject, Backend):
if job.getResult() == StartJobResult.MaterialIncompatible:
if application.platformActivity:
self._error_message = Message(catalog.i18nc("@info:status",
"Unable to slice with the current material as it is incompatible with the selected machine or configuration."), title = catalog.i18nc("@info:title", "Unable to slice"))
"Unable to slice with the current material as it is incompatible with the selected machine or configuration."),
title = catalog.i18nc("@info:title", "Unable to slice"),
message_type = Message.MessageType.WARNING)
self._error_message.show()
self.setState(BackendState.Error)
self.backendError.emit(job)
@ -421,8 +423,10 @@ class CuraEngineBackend(QObject, Backend):
continue
error_labels.add(definitions[0].label)
self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice with the current settings. The following settings have errors: {0}").format(", ".join(error_labels)),
title = catalog.i18nc("@info:title", "Unable to slice"))
self._error_message = Message(catalog.i18nc("@info:status",
"Unable to slice with the current settings. The following settings have errors: {0}").format(", ".join(error_labels)),
title = catalog.i18nc("@info:title", "Unable to slice"),
message_type = Message.MessageType.WARNING)
self._error_message.show()
self.setState(BackendState.Error)
self.backendError.emit(job)
@ -445,8 +449,10 @@ class CuraEngineBackend(QObject, Backend):
Logger.log("e", "When checking settings for errors, unable to find definition for key {key} in per-object stack.".format(key = key))
continue
errors[key] = definition[0].label
self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}").format(error_labels = ", ".join(errors.values())),
title = catalog.i18nc("@info:title", "Unable to slice"))
self._error_message = Message(catalog.i18nc("@info:status",
"Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}").format(error_labels = ", ".join(errors.values())),
title = catalog.i18nc("@info:title", "Unable to slice"),
message_type = Message.MessageType.WARNING)
self._error_message.show()
self.setState(BackendState.Error)
self.backendError.emit(job)
@ -454,8 +460,10 @@ class CuraEngineBackend(QObject, Backend):
if job.getResult() == StartJobResult.BuildPlateError:
if application.platformActivity:
self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice because the prime tower or prime position(s) are invalid."),
title = catalog.i18nc("@info:title", "Unable to slice"))
self._error_message = Message(catalog.i18nc("@info:status",
"Unable to slice because the prime tower or prime position(s) are invalid."),
title = catalog.i18nc("@info:title", "Unable to slice"),
message_type = Message.MessageType.WARNING)
self._error_message.show()
self.setState(BackendState.Error)
self.backendError.emit(job)
@ -463,8 +471,10 @@ class CuraEngineBackend(QObject, Backend):
self.setState(BackendState.NotStarted)
if job.getResult() == StartJobResult.ObjectsWithDisabledExtruder:
self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice because there are objects associated with disabled Extruder %s.") % job.getMessage(),
title = catalog.i18nc("@info:title", "Unable to slice"))
self._error_message = Message(catalog.i18nc("@info:status",
"Unable to slice because there are objects associated with disabled Extruder %s.") % job.getMessage(),
title = catalog.i18nc("@info:title", "Unable to slice"),
message_type = Message.MessageType.WARNING)
self._error_message.show()
self.setState(BackendState.Error)
self.backendError.emit(job)
@ -476,7 +486,8 @@ class CuraEngineBackend(QObject, Backend):
"\n- Fit within the build volume"
"\n- Are assigned to an enabled extruder"
"\n- Are not all set as modifier meshes"),
title = catalog.i18nc("@info:title", "Unable to slice"))
title = catalog.i18nc("@info:title", "Unable to slice"),
message_type = Message.MessageType.WARNING)
self._error_message.show()
self.setState(BackendState.Error)
self.backendError.emit(job)

View file

@ -257,10 +257,10 @@ class ProcessSlicedLayersJob(Job):
if self.isRunning():
if Application.getInstance().getController().getActiveView().getPluginId() == "SimulationView":
if not self._progress_message:
self._progress_message = Message(catalog.i18nc("@info:status", "Processing Layers"), 0, False, 0, catalog.i18nc("@info:title", "Information"))
self._progress_message = Message(catalog.i18nc("@info:status", "Processing Layers"), 0, False, 0,
catalog.i18nc("@info:title", "Information"))
if self._progress_message.getProgress() != 100:
self._progress_message.show()
else:
if self._progress_message:
self._progress_message.hide()

View file

@ -73,6 +73,7 @@ class DFFileExportAndUploadManager:
text = "Your {} uploaded to '{}'.".format("file was" if len(self._file_upload_job_metadata) <= 1 else "files were", self._library_project_name),
title = "Upload successful",
lifetime = 0,
message_type = Message.MessageType.POSITIVE
)
self._generic_success_message.addAction(
"open_df_project",
@ -81,8 +82,6 @@ class DFFileExportAndUploadManager:
)
self._generic_success_message.actionTriggered.connect(self._onMessageActionTriggered)
def _onCuraProjectFileExported(self, job: ExportFileJob) -> None:
"""Handler for when the DF Library workspace file (3MF) has been created locally.
@ -221,7 +220,8 @@ class DFFileExportAndUploadManager:
self._file_upload_job_metadata[filename]["file_upload_failed_message"] = Message(
text = "Failed to export the file '{}'. The upload process is aborted.".format(filename),
title = "Export error",
lifetime = 0
lifetime = 0,
message_type = Message.MessageType.ERROR
)
self._on_upload_error()
self._onFileUploadFinished(filename)
@ -243,7 +243,8 @@ class DFFileExportAndUploadManager:
self._file_upload_job_metadata[filename_3mf]["file_upload_failed_message"] = Message(
text = "Failed to upload the file '{}' to '{}'. {}".format(filename_3mf, self._library_project_name, human_readable_error),
title = "File upload error",
lifetime = 0
lifetime = 0,
message_type = Message.MessageType.ERROR
)
self._on_upload_error()
self._onFileUploadFinished(filename_3mf)
@ -265,7 +266,8 @@ class DFFileExportAndUploadManager:
self._file_upload_job_metadata[filename_ufp]["file_upload_failed_message"] = Message(
title = "File upload error",
text = "Failed to upload the file '{}' to '{}'. {}".format(filename_ufp, self._library_project_name, human_readable_error),
lifetime = 0
lifetime = 0,
message_type = Message.MessageType.ERROR
)
self._on_upload_error()
self._onFileUploadFinished(filename_ufp)
@ -301,7 +303,8 @@ class DFFileExportAndUploadManager:
self._file_upload_job_metadata[filename]["file_upload_failed_message"] = Message(
title = "File upload error",
text = "Failed to upload the file '{}' to '{}'. {}".format(self._file_name, self._library_project_name, human_readable_error),
lifetime = 0
lifetime = 0,
message_type = Message.MessageType.ERROR
)
self._on_upload_error()
@ -338,11 +341,13 @@ class DFFileExportAndUploadManager:
text = "'{}' was uploaded to '{}'.".format(filename_3mf, self._library_project_name),
title = "Upload successful",
lifetime = 0,
message_type = Message.MessageType.POSITIVE
),
"file_upload_failed_message": Message(
text = "Failed to upload the file '{}' to '{}'.".format(filename_3mf, self._library_project_name),
title = "File upload error",
lifetime = 0
lifetime = 0,
message_type = Message.MessageType.ERROR
)
}
job_3mf = ExportFileJob(self._file_handlers["3mf"], self._nodes, self._file_name, "3mf")
@ -360,11 +365,13 @@ class DFFileExportAndUploadManager:
text = "'{}' was uploaded to '{}'.".format(filename_ufp, self._library_project_name),
title = "Upload successful",
lifetime = 0,
message_type = Message.MessageType.POSITIVE
),
"file_upload_failed_message": Message(
text = "Failed to upload the file '{}' to '{}'.".format(filename_ufp, self._library_project_name),
title = "File upload error",
lifetime = 0
lifetime = 0,
message_type = Message.MessageType.ERROR
)
}
job_ufp = ExportFileJob(self._file_handlers["ufp"], self._nodes, self._file_name, "ufp")

View file

@ -530,7 +530,8 @@ class DigitalFactoryController(QObject):
Message(
text = "Failed to write to temporary file for '{}'.".format(file_name),
title = "File-system error",
lifetime = 10
lifetime = 10,
message_type=Message.MessageType.ERROR
).show()
return
@ -544,7 +545,8 @@ class DigitalFactoryController(QObject):
Message(
text = "Failed Digital Library download for '{}'.".format(f),
title = "Network error {}".format(error),
lifetime = 10
lifetime = 10,
message_type=Message.MessageType.ERROR
).show()
download_manager = HttpRequestManager.getInstance()
@ -589,7 +591,10 @@ class DigitalFactoryController(QObject):
if filename == "":
Logger.log("w", "The file name cannot be empty.")
Message(text = "Cannot upload file with an empty name to the Digital Library", title = "Empty file name provided", lifetime = 0).show()
Message(text = "Cannot upload file with an empty name to the Digital Library",
title = "Empty file name provided",
lifetime = 0,
message_type = Message.MessageType.ERROR).show()
return
self._saveFileToSelectedProjectHelper(filename, formats)

View file

@ -500,7 +500,8 @@ class FlavorParser:
"@info:generic",
"Make sure the g-code is suitable for your printer and printer configuration before sending the file to it. The g-code representation may not be accurate."),
lifetime=0,
title = catalog.i18nc("@info:title", "G-code Details"))
title = catalog.i18nc("@info:title", "G-code Details"),
message_type = Message.MessageType.WARNING)
caution_message.show()
# The "save/print" button's state is bound to the backend state.

View file

@ -28,7 +28,8 @@ class ModelChecker(QObject, Extension):
self._caution_message = Message("", #Message text gets set when the message gets shown, to display the models in question.
lifetime = 0,
title = catalog.i18nc("@info:title", "3D Model Assistant"))
title = catalog.i18nc("@info:title", "3D Model Assistant"),
message_type = Message.MessageType.WARNING)
self._change_timer = QTimer()
self._change_timer.setInterval(200)

View file

@ -93,7 +93,9 @@ class RemovableDriveOutputDevice(OutputDevice):
job.progress.connect(self._onProgress)
job.finished.connect(self._onFinished)
message = Message(catalog.i18nc("@info:progress Don't translate the XML tags <filename>!", "Saving to Removable Drive <filename>{0}</filename>").format(self.getName()), 0, False, -1, catalog.i18nc("@info:title", "Saving"))
message = Message(catalog.i18nc("@info:progress Don't translate the XML tags <filename>!",
"Saving to Removable Drive <filename>{0}</filename>").format(self.getName()),
0, False, -1, catalog.i18nc("@info:title", "Saving"))
message.show()
self.writeStarted.emit(self)
@ -136,7 +138,8 @@ class RemovableDriveOutputDevice(OutputDevice):
except:
Logger.logException("w", "An execption occured while trying to write to removable drive.")
message = Message(catalog.i18nc("@info:status", "Could not save to removable drive {0}: {1}").format(self.getName(),str(job.getError())),
title = catalog.i18nc("@info:title", "Error"))
title = catalog.i18nc("@info:title", "Error"),
message_type = Message.MessageType.ERROR)
message.show()
self.writeError.emit(self)
return
@ -144,13 +147,19 @@ class RemovableDriveOutputDevice(OutputDevice):
self._writing = False
self.writeFinished.emit(self)
if job.getResult():
message = Message(catalog.i18nc("@info:status", "Saved to Removable Drive {0} as {1}").format(self.getName(), os.path.basename(job.getFileName())), title = catalog.i18nc("@info:title", "File Saved"))
message = Message(catalog.i18nc("@info:status", "Saved to Removable Drive {0} as {1}").format(self.getName(), os.path.basename(job.getFileName())),
title = catalog.i18nc("@info:title", "File Saved"),
message_type = Message.MessageType.POSITIVE)
message.addAction("eject", catalog.i18nc("@action:button", "Eject"), "eject", catalog.i18nc("@action", "Eject removable device {0}").format(self.getName()))
message.actionTriggered.connect(self._onActionTriggered)
message.show()
self.writeSuccess.emit(self)
else:
message = Message(catalog.i18nc("@info:status", "Could not save to removable drive {0}: {1}").format(self.getName(), str(job.getError())), title = catalog.i18nc("@info:title", "Warning"))
message = Message(catalog.i18nc("@info:status",
"Could not save to removable drive {0}: {1}").format(self.getName(),
str(job.getError())),
title = catalog.i18nc("@info:title", "Error"),
message_type = Message.MessageType.ERROR)
message.show()
self.writeError.emit(self)
job.getStream().close()
@ -159,8 +168,12 @@ class RemovableDriveOutputDevice(OutputDevice):
if action == "eject":
if Application.getInstance().getOutputDeviceManager().getOutputDevicePlugin("RemovableDriveOutputDevice").ejectDevice(self):
message.hide()
eject_message = Message(catalog.i18nc("@info:status", "Ejected {0}. You can now safely remove the drive.").format(self.getName()), title = catalog.i18nc("@info:title", "Safely Remove Hardware"))
eject_message = Message(catalog.i18nc("@info:status",
"Ejected {0}. You can now safely remove the drive.").format(self.getName()),
title = catalog.i18nc("@info:title", "Safely Remove Hardware"))
else:
eject_message = Message(catalog.i18nc("@info:status", "Failed to eject {0}. Another program may be using the drive.").format(self.getName()), title = catalog.i18nc("@info:title", "Warning"))
eject_message = Message(catalog.i18nc("@info:status",
"Failed to eject {0}. Another program may be using the drive.").format(self.getName()),
title = catalog.i18nc("@info:title", "Warning"),
message_type = Message.MessageType.ERROR)
eject_message.show()

View file

@ -125,10 +125,17 @@ class SimulationView(CuraView):
self._only_show_top_layers = bool(Application.getInstance().getPreferences().getValue("view/only_show_top_layers"))
self._compatibility_mode = self._evaluateCompatibilityMode()
self._wireprint_warning_message = Message(catalog.i18nc("@info:status", "Cura does not accurately display layers when Wire Printing is enabled."),
title = catalog.i18nc("@info:title", "Simulation View"))
self._slice_first_warning_message = Message(catalog.i18nc("@info:status", "Nothing is shown because you need to slice first."), title = catalog.i18nc("@info:title", "No layers to show"),
option_text = catalog.i18nc("@info:option_text", "Do not show this message again"), option_state = False)
self._wireprint_warning_message = Message(catalog.i18nc("@info:status",
"Cura does not accurately display layers when Wire Printing is enabled."),
title = catalog.i18nc("@info:title", "Simulation View"),
message_type = Message.MessageType.WARNING)
self._slice_first_warning_message = Message(catalog.i18nc("@info:status",
"Nothing is shown because you need to slice first."),
title = catalog.i18nc("@info:title", "No layers to show"),
option_text = catalog.i18nc("@info:option_text",
"Do not show this message again"),
option_state = False,
message_type = Message.MessageType.WARNING)
self._slice_first_warning_message.optionToggled.connect(self._onDontAskMeAgain)
CuraApplication.getInstance().getPreferences().addPreference(self._no_layers_warning_preference, True)

View file

@ -72,7 +72,8 @@ class SolidView(View):
lifetime = 60 * 5, # leave message for 5 minutes
title = catalog.i18nc("@info:title", "Model Errors"),
option_text = catalog.i18nc("@info:option_text", "Do not show this message again"),
option_state = False
option_state = False,
message_type=Message.MessageType.WARNING
)
self._xray_warning_message.optionToggled.connect(self._onDontAskMeAgain)
application.getPreferences().addPreference(self._show_xray_warning_preference, True)

View file

@ -15,10 +15,9 @@ class RestartApplicationPresenter:
def present(self) -> None:
app_name = self._app.getApplicationDisplayName()
message = Message(self._i18n_catalog.i18nc(
"@info:generic",
"You need to quit and restart {} before changes have effect.", app_name
))
message = Message(self._i18n_catalog.i18nc("@info:generic",
"You need to quit and restart {} before changes have effect.",
app_name))
message.addAction("quit",
name="Quit " + app_name,

View file

@ -111,4 +111,4 @@ class SyncOrchestrator(Extension):
"""Logs an error and shows it to the user"""
Logger.error(text)
Message(text, lifetime=0).show()
Message(text, lifetime = 0, message_type = Message.MessageType.ERROR).show()

View file

@ -230,7 +230,8 @@ class CloudOutputDeviceManager:
),
progress = 0,
lifetime = 0,
image_source = image_path
image_source = image_path,
message_type = Message.MessageType.POSITIVE
)
message.show()
@ -316,7 +317,8 @@ class CloudOutputDeviceManager:
"A cloud connection is not available for a printer",
"A cloud connection is not available for some printers",
len(self.reported_device_ids)
)
),
message_type = Message.MessageType.WARNING
)
device_names = "".join(["<li>{} ({})</li>".format(self._um_cloud_printers[device].name, self._um_cloud_printers[device].definition.name) for device in self.reported_device_ids])
message_text = self.i18n_catalog.i18ncp(

View file

@ -19,7 +19,8 @@ class LegacyDeviceNoLongerSupportedMessage(Message):
"running Ultimaker Connect. Please update the printer to the "
"latest firmware."),
title = I18N_CATALOG.i18nc("@info:title", "Update your printer"),
lifetime = 10
lifetime = 10,
message_type = Message.MessageType.WARNING
)
def show(self) -> None:

View file

@ -25,8 +25,7 @@ class MaterialSyncMessage(Message):
"on the host printer of group {0}.", device.name),
title = I18N_CATALOG.i18nc("@info:title", "Sending materials to printer"),
lifetime = 10,
dismissable = True
)
dismissable = True)
def show(self) -> None:
if MaterialSyncMessage.__is_visible:

View file

@ -29,7 +29,8 @@ class NotClusterHostMessage(Message):
"it as a group host.", device.name),
title = I18N_CATALOG.i18nc("@info:title", "Not a group host"),
lifetime = 0,
dismissable = True
dismissable = True,
message_type = Message.MessageType.ERROR
)
self._address = device.address
self.addAction("", I18N_CATALOG.i18nc("@action", "Configure group"), "", "")

View file

@ -14,5 +14,6 @@ class PrintJobUploadBlockedMessage(Message):
super().__init__(
text = I18N_CATALOG.i18nc("@info:status", "Please wait until the current job has been sent."),
title = I18N_CATALOG.i18nc("@info:title", "Print error"),
lifetime = 10
lifetime = 10,
message_type = Message.MessageType.ERROR
)

View file

@ -13,5 +13,6 @@ class PrintJobUploadErrorMessage(Message):
def __init__(self, message: str = None) -> None:
super().__init__(
text = message or I18N_CATALOG.i18nc("@info:text", "Could not upload the data to the printer."),
title = I18N_CATALOG.i18nc("@info:title", "Network error")
title = I18N_CATALOG.i18nc("@info:title", "Network error"),
message_type=Message.MessageType.ERROR
)

View file

@ -15,5 +15,6 @@ class PrintJobUploadQueueFullMessage(Message):
super().__init__(
text = I18N_CATALOG.i18nc("@info:status", "Print job queue is full. The printer can't accept a new job."),
title = I18N_CATALOG.i18nc("@info:title", "Queue Full"),
lifetime = 10
lifetime = 10,
message_type=Message.MessageType.ERROR
)

View file

@ -13,5 +13,6 @@ class PrintJobUploadSuccessMessage(Message):
def __init__(self) -> None:
super().__init__(
text = I18N_CATALOG.i18nc("@info:status", "Print job was successfully sent to the printer."),
title = I18N_CATALOG.i18nc("@info:title", "Data Sent")
title = I18N_CATALOG.i18nc("@info:title", "Data Sent"),
message_type = Message.MessageType.POSITIVE
)

View file

@ -131,7 +131,10 @@ class USBPrinterOutputDevice(PrinterOutputDevice):
"""
if self._is_printing:
message = Message(text = catalog.i18nc("@message", "A print is still in progress. Cura cannot start another print via USB until the previous print has completed."), title = catalog.i18nc("@message", "Print in Progress"))
message = Message(text = catalog.i18nc("@message",
"A print is still in progress. Cura cannot start another print via USB until the previous print has completed."),
title = catalog.i18nc("@message", "Print in Progress"),
message_type = Message.MessageType.ERROR)
message.show()
return # Already printing
self.writeStarted.emit(self)