diff --git a/src/Mod/CAM/Path/Main/Gui/JobDlg.py b/src/Mod/CAM/Path/Main/Gui/JobDlg.py index a2d3b6b398..f22226a66c 100644 --- a/src/Mod/CAM/Path/Main/Gui/JobDlg.py +++ b/src/Mod/CAM/Path/Main/Gui/JobDlg.py @@ -75,20 +75,20 @@ class JobCreate: """Dynamically discover which unit schemas support velocity in minutes.""" internal_names = FreeCAD.Units.listSchemas() minute_based_schemes = [] - + # Create a test velocity quantity q = FreeCAD.Units.Quantity(1, FreeCAD.Units.Velocity) - + for i, key in enumerate(internal_names): try: label = FreeCAD.Units.listSchemas(i) r = FreeCAD.Units.schemaTranslate(q, i) - if '/min' in r[2]: - minute_based_schemes.append({'id': i, 'label': label}) + if "/min" in r[2]: + minute_based_schemes.append({"id": i, "label": label}) except (IndexError, TypeError): # Skip invalid schema indices continue - + return minute_based_schemes def _currentSchemaUsesMinutes(self): @@ -96,12 +96,12 @@ class JobCreate: try: # Create a test velocity quantity q = FreeCAD.Units.Quantity(1, FreeCAD.Units.Velocity) - + # Get current schema's representation of velocity - current_representation = q.getUserPreferred()[2] - + current_representation = q.getUserPreferred()[2] + # Check if the current representation contains '/min' - return '/min' in current_representation + return "/min" in current_representation except Exception: # If we can't determine, assume it doesn't use minutes return False @@ -123,122 +123,132 @@ class JobCreate: dialog.setWindowTitle(translate("CAM_Job", "Warning: Incompatible Unit Schema")) dialog.setModal(True) dialog.resize(500, 400) - + layout = QtGui.QVBoxLayout(dialog) - + # Warning message warning_label = QtGui.QLabel() - warning_label.setText(translate( - "CAM_Job", - "This document uses an improper unit schema which can result in " - "dangerous situations and machine crashes!" - )) + warning_label.setText( + translate( + "CAM_Job", + "This document uses an improper unit schema which can result in " + "dangerous situations and machine crashes!", + ) + ) warning_label.setWordWrap(True) warning_label.setStyleSheet("color: red; font-weight: bold; margin-bottom: 10px;") layout.addWidget(warning_label) - + # Current schema info current_info = QtGui.QLabel() - current_info.setText(translate( - "CAM_Job", - "Current unit schema '{}' expresses velocity in values per second." - ).format(FreeCAD.ActiveDocument.UnitSystem)) + current_info.setText( + translate( + "CAM_Job", + "Current unit schema '{}' expresses velocity in values per second.", + ).format(FreeCAD.ActiveDocument.UnitSystem) + ) current_info.setWordWrap(True) layout.addWidget(current_info) - + # Recommendation recommendation = QtGui.QLabel() - recommendation.setText(translate( - "CAM_Job", - "Please select a unit schema that expresses feed rates per minute instead:" - )) + recommendation.setText( + translate( + "CAM_Job", + "Please select a unit schema that expresses feed rates per minute instead:", + ) + ) recommendation.setWordWrap(True) layout.addWidget(recommendation) - + # Unit schema selection schema_group = QtGui.QGroupBox(translate("CAM_Job", "Recommended Unit Schemas")) schema_layout = QtGui.QVBoxLayout(schema_group) - + self.schema_buttons = [] for i, schema in enumerate(minute_based_schemes): - radio = QtGui.QRadioButton(schema['label']) - radio.setProperty('schema_id', schema['id']) # Store the schema ID + radio = QtGui.QRadioButton(schema["label"]) + radio.setProperty("schema_id", schema["id"]) # Store the schema ID if i == 0: # Select first (most preferred) by default radio.setChecked(True) self.schema_buttons.append(radio) schema_layout.addWidget(radio) - + layout.addWidget(schema_group) - + # Additional info info_label = QtGui.QLabel() - info_label.setText(translate( - "CAM_Job", - "Keeping the current unit schema can result in dangerous G-code errors. " - "For details please refer to the " - "Units section " - "of the CAM Workbench's wiki page." - )) + info_label.setText( + translate( + "CAM_Job", + "Keeping the current unit schema can result in dangerous G-code errors. " + "For details please refer to the " + "Units section " + "of the CAM Workbench's wiki page.", + ) + ) info_label.setWordWrap(True) info_label.setOpenExternalLinks(True) layout.addWidget(info_label) - + # Buttons button_layout = QtGui.QHBoxLayout() - + change_button = QtGui.QPushButton(translate("CAM_Job", "Change Unit Schema")) change_button.setDefault(True) change_button.clicked.connect(lambda: self._applyUnitSchema(dialog)) - + keep_button = QtGui.QPushButton(translate("CAM_Job", "Keep Current Schema")) keep_button.clicked.connect(dialog.reject) - + dont_show_button = QtGui.QPushButton(translate("CAM_Job", "Don't Show Again")) dont_show_button.clicked.connect(lambda: self._suppressWarning(dialog)) - + button_layout.addWidget(change_button) button_layout.addWidget(keep_button) button_layout.addWidget(dont_show_button) - + layout.addLayout(button_layout) - + dialog.exec_() - + def _applyUnitSchema(self, dialog): """Apply the selected unit schema to the document.""" selected_schema_id = None selected_schema_label = None for button in self.schema_buttons: if button.isChecked(): - selected_schema_id = button.property('schema_id') + selected_schema_id = button.property("schema_id") selected_schema_label = button.text() break - + if selected_schema_id is not None: try: FreeCAD.ActiveDocument.UnitSystem = selected_schema_id FreeCAD.ActiveDocument.recompute() - + # Show success message QtGui.QMessageBox.information( dialog, translate("CAM_Job", "Unit Schema Changed"), - translate("CAM_Job", "Unit schema successfully changed to '{}'.").format(selected_schema_label) + translate("CAM_Job", "Unit schema successfully changed to '{}'.").format( + selected_schema_label + ), ) dialog.accept() except Exception as e: QtGui.QMessageBox.critical( dialog, translate("CAM_Job", "Error"), - translate("CAM_Job", "Failed to change unit schema: {}").format(str(e)) + translate("CAM_Job", "Failed to change unit schema: {}").format(str(e)), ) else: QtGui.QMessageBox.warning( dialog, translate("CAM_Job", "No Selection"), - translate("CAM_Job", "Please select a unit schema.") + translate("CAM_Job", "Please select a unit schema."), ) - + def _suppressWarning(self, dialog): """Suppress future warnings and close dialog.""" Path.Preferences.preferences().SetBool(Path.Preferences.WarningSuppressVelocity, True)