Merge pull request #8001 from Ultimaker/CURA-5479_job_name_template

Add a print job name setting to general preferences
This commit is contained in:
Konstantinos Karmas 2020-07-01 16:57:43 +02:00 committed by GitHub
commit e2486d79c4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 63 additions and 24 deletions

View File

@ -533,7 +533,7 @@ class CuraApplication(QtApplication):
preferences.addPreference("cura/active_mode", "simple")
preferences.addPreference("cura/categories_expanded", "")
preferences.addPreference("cura/jobname_prefix", True)
preferences.addPreference("cura/job_name_template", "{machine_name_short}_{project_name}")
preferences.addPreference("cura/select_models_on_load", False)
preferences.addPreference("view/center_on_select", False)
preferences.addPreference("mesh/scale_to_fit", False)

View File

@ -252,11 +252,11 @@ class PrintInformation(QObject):
self.materialNamesChanged.emit()
def _onPreferencesChanged(self, preference: str) -> None:
if preference != "cura/material_settings":
return
for build_plate_number in range(self._multi_build_plate_model.maxBuildPlate + 1):
self._calculateInformation(build_plate_number)
if preference == "cura/job_name_template":
self._updateJobName()
elif preference == "cura/material_settings":
for build_plate_number in range(self._multi_build_plate_model.maxBuildPlate + 1):
self._calculateInformation(build_plate_number)
def _onActiveBuildPlateChanged(self) -> None:
new_active_build_plate = self._multi_build_plate_model.activeBuildPlate
@ -305,12 +305,8 @@ class PrintInformation(QObject):
# Only update the job name when it's not user-specified.
if not self._is_user_specified_job_name:
if self._application.getInstance().getPreferences().getValue("cura/jobname_prefix") and not self._pre_sliced:
# Don't add abbreviation if it already has the exact same abbreviation.
if base_name.startswith(self._abbr_machine + "_"):
self._job_name = base_name
else:
self._job_name = self._abbr_machine + "_" + base_name
if not self._pre_sliced:
self._job_name = self.parseTemplate()
else:
self._job_name = base_name
@ -440,3 +436,28 @@ class PrintInformation(QObject):
"""Listen to scene changes to check if we need to reset the print information"""
self.setToZeroPrintInformation(self._active_build_plate)
def parseTemplate(self) -> str:
"""Generate a print job name from the job name template
The template is a user preference: "cura/job_name_template"
"""
template = self._application.getInstance().getPreferences().getValue("cura/job_name_template")
output = template
output = output.replace("{machine_name_short}", self._abbr_machine)
if "{machine_name}" in template:
global_container_stack = self._application.getGlobalContainerStack()
active_machine_type_name = global_container_stack.definition.getName() \
if global_container_stack \
else "no_machine"
active_machine_type_name = active_machine_type_name.replace(" ", "_")
output = output.replace("{machine_name}", active_machine_type_name)
if "{project_name}" in template:
base_name = self._stripAccents(self._base_name)
output = output.replace("{project_name}", base_name)
return output

View File

@ -85,8 +85,8 @@ UM.PreferencesPage
scaleTinyCheckbox.checked = boolCheck(UM.Preferences.getValue("mesh/scale_tiny_meshes"))
UM.Preferences.resetPreference("cura/select_models_on_load")
selectModelsOnLoadCheckbox.checked = boolCheck(UM.Preferences.getValue("cura/select_models_on_load"))
UM.Preferences.resetPreference("cura/jobname_prefix")
prefixJobNameCheckbox.checked = boolCheck(UM.Preferences.getValue("cura/jobname_prefix"))
UM.Preferences.resetPreference("cura/job_name_template")
jobnameTemplateTextField.text = UM.Preferences.getValue("cura/job_name_template")
UM.Preferences.resetPreference("view/show_overhang");
showOverhangCheckbox.checked = boolCheck(UM.Preferences.getValue("view/show_overhang"))
UM.Preferences.resetPreference("view/show_xray_warning");
@ -627,14 +627,25 @@ UM.PreferencesPage
{
width: childrenRect.width
height: childrenRect.height
text: catalog.i18nc("@info:tooltip", "Should a prefix based on the printer name be added to the print job name automatically?")
text: catalog.i18nc("@info:tooltip. Note variable names themselves (ie. machine_name_short, project_name) should not be translated", "Variables: machine_name_short, machine_name, project_name")
CheckBox
Column
{
id: prefixJobNameCheckbox
text: catalog.i18nc("@option:check", "Add machine prefix to job name")
checked: boolCheck(UM.Preferences.getValue("cura/jobname_prefix"))
onCheckedChanged: UM.Preferences.setValue("cura/jobname_prefix", checked)
spacing: 4 * screenScaleFactor
Label
{
id: jobNameTemplateLabel
text: catalog.i18nc("@label","Print job template:")
}
TextField
{
id: jobNameTemplateTextField
width: 250 * screenScaleFactor
text: UM.Preferences.getValue("cura/job_name_template")
onTextChanged: UM.Preferences.setValue("cura/job_name_template", text)
}
}
}
@ -670,7 +681,7 @@ UM.PreferencesPage
ComboBox
{
id: choiceOnOpenProjectDropDownButton
width: 200 * screenScaleFactor
width: 250 * screenScaleFactor
model: ListModel
{
@ -736,7 +747,7 @@ UM.PreferencesPage
ComboBox
{
id: choiceOnProfileOverrideDropDownButton
width: 200 * screenScaleFactor
width: 250 * screenScaleFactor
model: ListModel
{

View File

@ -140,7 +140,7 @@ A new performance enhancement that limits re-rendering of the application interf
Previous versions used different ways of handling HTTP requests. This version uses a unified method, for better performance.
* Job names less sensitive to being touched.
A contribution from fieldOfview has fixed an issue where the jobname in the bottom-left of the scene is no longer made static by clicking on it. If you load a model and change to another printer, the prefix is now correctly updated.
A contribution from fieldOfview has fixed an issue where the job name in the bottom-left of the scene is no longer made static by clicking on it. If you load a model and change to another printer, the prefix is now correctly updated.
* Property checks on instance containers.
A new speed optimization for reading setting values from profiles.

View File

@ -8,6 +8,13 @@ from unittest.mock import MagicMock, patch
from UM.MimeTypeDatabase import MimeTypeDatabase, MimeType
def preferencesGetValue(key: str):
if key == "cura/job_name_template":
return "{machine_name_short}_{project_name}"
return '{"omgzomg": {"spool_weight": 10, "spool_cost": 9}}'
def getPrintInformation(printer_name) -> PrintInformation:
mock_application = MagicMock(name = "mock_application")
@ -19,7 +26,7 @@ def getPrintInformation(printer_name) -> PrintInformation:
mocked_extruder_stack.material = mocked_material
mock_application.getInstance = MagicMock(return_value = mock_application)
mocked_preferences.getValue = MagicMock(return_value = '{"omgzomg": {"spool_weight": 10, "spool_cost": 9}}')
mocked_preferences.getValue = MagicMock(side_effect = preferencesGetValue)
global_container_stack = MagicMock()
global_container_stack.definition.getName = MagicMock(return_value = printer_name)