From 367d6f3155b882d6f893f9f1ccfc3b920f538a19 Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Sat, 16 Feb 2019 00:29:54 +0200 Subject: [PATCH] - reworked the offer to save a project so it is done only if there are objects in the project but those objects are new and/or are modified since last project load (if an old project was loaded.) --- FlatCAMApp.py | 21 ++++++++++++++++---- FlatCAMGUI.py | 48 +++++++++++++++++++++------------------------ ObjectCollection.py | 4 ++++ README.md | 1 + 4 files changed, 44 insertions(+), 30 deletions(-) diff --git a/FlatCAMApp.py b/FlatCAMApp.py index a092cc84..6733dad9 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -111,6 +111,10 @@ class App(QtCore.QObject): should_we_quit = True + # this variable will hold the project status + # if True it will mean that the project was modified and not saved + should_we_save = False + ################## ## Signals ## ################## @@ -1651,6 +1655,8 @@ class App(QtCore.QObject): self.ui.plot_tab_area.protectTab(0) self.inform.emit("[WARNING_NOTCL]Editor is activated ...") + self.should_we_save = True + def editor2object(self): """ Transfers the Geometry or Excellon from the editor to the current object. @@ -2643,10 +2649,10 @@ class App(QtCore.QObject): self.inform.emit("Factory defaults saved.") def final_save(self): - if self.collection.get_list(): + if self.should_we_save and self.collection.get_list(): msgbox = QtWidgets.QMessageBox() # msgbox.setText("Save changes ...") - msgbox.setText("There are files/objects opened in FlatCAM. " + msgbox.setText("There are files/objects modified in FlatCAM. " "\n" "Do you want to Save the project?") msgbox.setWindowTitle("Save changes") @@ -4626,7 +4632,7 @@ class App(QtCore.QObject): layer=0, tolerance=None) def on_file_new_click(self): - if self.collection.get_list(): + if self.collection.get_list() and self.should_we_save: msgbox = QtWidgets.QMessageBox() # msgbox.setText("Save changes ...") msgbox.setText("There are files/objects opened in FlatCAM.\n" @@ -5161,6 +5167,8 @@ class App(QtCore.QObject): self.file_saved.emit("project", self.project_filename) + self.should_we_save = False + def on_file_saveprojectas(self, make_copy=False, thread=True): """ Callback for menu item File->Save Project As... Opens a file @@ -5194,7 +5202,7 @@ class App(QtCore.QObject): except IOError: exists = False - msg = "File exists. Overwrite?" + msg = "Project file exists. Overwrite?" if exists: msgbox = QtWidgets.QMessageBox() msgbox.setInformativeText(msg) @@ -5217,6 +5225,8 @@ class App(QtCore.QObject): if not make_copy: self.project_filename = filename + self.should_we_save = False + def export_svg(self, obj_name, filename, scale_factor=0.00): """ Exports a Geometry Object to an SVG file. @@ -6083,6 +6093,9 @@ class App(QtCore.QObject): # self.plot_all() self.inform.emit("[success] Project loaded from: " + filename) + + self.should_we_save = False + App.log.debug("Project loaded") def propagate_defaults(self, silent=False): diff --git a/FlatCAMGUI.py b/FlatCAMGUI.py index 3b33b030..cf7fb730 100644 --- a/FlatCAMGUI.py +++ b/FlatCAMGUI.py @@ -3632,28 +3632,6 @@ class ExcellonExpPrefGroupUI(OptionsGroupUI): form.addRow(self.excellon_units_label, self.excellon_units_radio) - # Select the Excellon Format - self.format_label = QtWidgets.QLabel("Format:") - self.format_label.setToolTip( - "Select the kind of coordinates format used.\n" - "Coordinates can be saved with decimal point or without.\n" - "When there is no decimal point, it is required to specify\n" - "the number of digits for integer part and the number of decimals.\n" - "Also it will have to be specified if LZ = leading zeros are kept\n" - "or TZ = trailing zeros are kept." - ) - self.format_radio = RadioSet([{'label': 'Decimal', 'value': 'dec'}, {'label': 'No-Decimal', 'value': 'ndec'}]) - self.format_radio.setToolTip( - "Select the kind of coordinates format used.\n" - "Coordinates can be saved with decimal point or without.\n" - "When there is no decimal point, it is required to specify\n" - "the number of digits for integer part and the number of decimals.\n" - "Also it will have to be specified if LZ = leading zeros are kept\n" - "or TZ = trailing zeros are kept." - ) - - form.addRow(self.format_label, self.format_radio) - # Excellon non-decimal format self.digits_label = QtWidgets.QLabel("Int/Decimals:") self.digits_label.setToolTip( @@ -3692,6 +3670,28 @@ class ExcellonExpPrefGroupUI(OptionsGroupUI): form.addRow(self.digits_label, hlay1) + # Select the Excellon Format + self.format_label = QtWidgets.QLabel("Format:") + self.format_label.setToolTip( + "Select the kind of coordinates format used.\n" + "Coordinates can be saved with decimal point or without.\n" + "When there is no decimal point, it is required to specify\n" + "the number of digits for integer part and the number of decimals.\n" + "Also it will have to be specified if LZ = leading zeros are kept\n" + "or TZ = trailing zeros are kept." + ) + self.format_radio = RadioSet([{'label': 'Decimal', 'value': 'dec'}, {'label': 'No-Decimal', 'value': 'ndec'}]) + self.format_radio.setToolTip( + "Select the kind of coordinates format used.\n" + "Coordinates can be saved with decimal point or without.\n" + "When there is no decimal point, it is required to specify\n" + "the number of digits for integer part and the number of decimals.\n" + "Also it will have to be specified if LZ = leading zeros are kept\n" + "or TZ = trailing zeros are kept." + ) + + form.addRow(self.format_label, self.format_radio) + # Excellon Zeros self.zeros_label = QtWidgets.QLabel('Zeros:') self.zeros_label.setAlignment(QtCore.Qt.AlignLeft) @@ -3720,13 +3720,9 @@ class ExcellonExpPrefGroupUI(OptionsGroupUI): def optimization_selection(self): if self.format_radio.get_value() == 'dec': - self.digits_label.setDisabled(True) - self.zeros_label.setDisabled(True) self.zeros_radio.setDisabled(True) else: - self.digits_label.setDisabled(False) - self.zeros_label.setDisabled(False) self.zeros_radio.setDisabled(False) diff --git a/ObjectCollection.py b/ObjectCollection.py index e9d9c740..b9e11c2d 100644 --- a/ObjectCollection.py +++ b/ObjectCollection.py @@ -679,6 +679,8 @@ class ObjectCollection(QtCore.QAbstractItemModel): if group.child_count() is 1: self.view.setExpanded(group_index, True) + self.app.should_we_save = True + # decide if to show or hide the Notebook side of the screen if self.app.defaults["global_project_autohide"] is True: # always open the notebook on object added to collection @@ -776,6 +778,8 @@ class ObjectCollection(QtCore.QAbstractItemModel): # always go to the Project Tab after object deletion as it may be done with a shortcut key self.app.ui.notebook.setCurrentWidget(self.app.ui.project_tab) + self.app.should_we_save = True + # decide if to show or hide the Notebook side of the screen if self.app.defaults["global_project_autohide"] is True: # hide the notebook if there are no objects in the collection diff --git a/README.md b/README.md index 945cfe77..475c36fa 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ CAD program, and create G-Code for Isolation routing. - started to work in using the Excellon Export parameters - remade the Excellon export function to work with parameters entered in Edit -> Preferences -> Excellon Export - added a new entry in the Project Context Menu named 'Save'. It will actually work for Geometry and it will do Export DXF and for Excellon and it will do Export Excellon +- reworked the offer to save a project so it is done only if there are objects in the project but those objects are new and/or are modified since last project load (if an old project was loaded.) 14.02.2019