Przeglądaj źródła

- 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.)

Marius Stanciu 7 lat temu
rodzic
commit
367d6f3155
4 zmienionych plików z 44 dodań i 30 usunięć
  1. 17 4
      FlatCAMApp.py
  2. 22 26
      FlatCAMGUI.py
  3. 4 0
      ObjectCollection.py
  4. 1 0
      README.md

+ 17 - 4
FlatCAMApp.py

@@ -111,6 +111,10 @@ class App(QtCore.QObject):
 
 
     should_we_quit = True
     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   ##
     ##    Signals   ##
     ##################
     ##################
@@ -1651,6 +1655,8 @@ class App(QtCore.QObject):
         self.ui.plot_tab_area.protectTab(0)
         self.ui.plot_tab_area.protectTab(0)
         self.inform.emit("[WARNING_NOTCL]Editor is activated ...")
         self.inform.emit("[WARNING_NOTCL]Editor is activated ...")
 
 
+        self.should_we_save = True
+
     def editor2object(self):
     def editor2object(self):
         """
         """
         Transfers the Geometry or Excellon from the editor to the current object.
         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.")
             self.inform.emit("Factory defaults saved.")
 
 
     def final_save(self):
     def final_save(self):
-        if self.collection.get_list():
+        if self.should_we_save and self.collection.get_list():
             msgbox = QtWidgets.QMessageBox()
             msgbox = QtWidgets.QMessageBox()
             # msgbox.setText("<B>Save changes ...</B>")
             # msgbox.setText("<B>Save changes ...</B>")
-            msgbox.setText("There are files/objects opened in FlatCAM. "
+            msgbox.setText("There are files/objects modified in FlatCAM. "
                            "\n"
                            "\n"
                            "Do you want to Save the project?")
                            "Do you want to Save the project?")
             msgbox.setWindowTitle("Save changes")
             msgbox.setWindowTitle("Save changes")
@@ -4626,7 +4632,7 @@ class App(QtCore.QObject):
                                       layer=0, tolerance=None)
                                       layer=0, tolerance=None)
 
 
     def on_file_new_click(self):
     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 = QtWidgets.QMessageBox()
             # msgbox.setText("<B>Save changes ...</B>")
             # msgbox.setText("<B>Save changes ...</B>")
             msgbox.setText("There are files/objects opened in FlatCAM.\n"
             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.file_saved.emit("project", self.project_filename)
 
 
+        self.should_we_save = False
+
     def on_file_saveprojectas(self, make_copy=False, thread=True):
     def on_file_saveprojectas(self, make_copy=False, thread=True):
         """
         """
         Callback for menu item File->Save Project As... Opens a file
         Callback for menu item File->Save Project As... Opens a file
@@ -5194,7 +5202,7 @@ class App(QtCore.QObject):
         except IOError:
         except IOError:
             exists = False
             exists = False
 
 
-        msg = "File exists. Overwrite?"
+        msg = "Project file exists. Overwrite?"
         if exists:
         if exists:
             msgbox = QtWidgets.QMessageBox()
             msgbox = QtWidgets.QMessageBox()
             msgbox.setInformativeText(msg)
             msgbox.setInformativeText(msg)
@@ -5217,6 +5225,8 @@ class App(QtCore.QObject):
         if not make_copy:
         if not make_copy:
             self.project_filename = filename
             self.project_filename = filename
 
 
+        self.should_we_save = False
+
     def export_svg(self, obj_name, filename, scale_factor=0.00):
     def export_svg(self, obj_name, filename, scale_factor=0.00):
         """
         """
         Exports a Geometry Object to an SVG file.
         Exports a Geometry Object to an SVG file.
@@ -6083,6 +6093,9 @@ class App(QtCore.QObject):
 
 
         # self.plot_all()
         # self.plot_all()
         self.inform.emit("[success] Project loaded from: " + filename)
         self.inform.emit("[success] Project loaded from: " + filename)
+
+        self.should_we_save = False
+
         App.log.debug("Project loaded")
         App.log.debug("Project loaded")
 
 
     def propagate_defaults(self, silent=False):
     def propagate_defaults(self, silent=False):

+ 22 - 26
FlatCAMGUI.py

@@ -3632,28 +3632,6 @@ class ExcellonExpPrefGroupUI(OptionsGroupUI):
 
 
         form.addRow(self.excellon_units_label, self.excellon_units_radio)
         form.addRow(self.excellon_units_label, self.excellon_units_radio)
 
 
-        # Select the Excellon Format
-        self.format_label = QtWidgets.QLabel("<b>Format:</b>")
-        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
         # Excellon non-decimal format
         self.digits_label = QtWidgets.QLabel("<b>Int/Decimals:</b>")
         self.digits_label = QtWidgets.QLabel("<b>Int/Decimals:</b>")
         self.digits_label.setToolTip(
         self.digits_label.setToolTip(
@@ -3692,6 +3670,28 @@ class ExcellonExpPrefGroupUI(OptionsGroupUI):
 
 
         form.addRow(self.digits_label, hlay1)
         form.addRow(self.digits_label, hlay1)
 
 
+        # Select the Excellon Format
+        self.format_label = QtWidgets.QLabel("<b>Format:</b>")
+        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
         # Excellon Zeros
         self.zeros_label = QtWidgets.QLabel('<b>Zeros</b>:')
         self.zeros_label = QtWidgets.QLabel('<b>Zeros</b>:')
         self.zeros_label.setAlignment(QtCore.Qt.AlignLeft)
         self.zeros_label.setAlignment(QtCore.Qt.AlignLeft)
@@ -3720,13 +3720,9 @@ class ExcellonExpPrefGroupUI(OptionsGroupUI):
 
 
     def optimization_selection(self):
     def optimization_selection(self):
         if self.format_radio.get_value() == 'dec':
         if self.format_radio.get_value() == 'dec':
-            self.digits_label.setDisabled(True)
-
             self.zeros_label.setDisabled(True)
             self.zeros_label.setDisabled(True)
             self.zeros_radio.setDisabled(True)
             self.zeros_radio.setDisabled(True)
         else:
         else:
-            self.digits_label.setDisabled(False)
-
             self.zeros_label.setDisabled(False)
             self.zeros_label.setDisabled(False)
             self.zeros_radio.setDisabled(False)
             self.zeros_radio.setDisabled(False)
 
 

+ 4 - 0
ObjectCollection.py

@@ -679,6 +679,8 @@ class ObjectCollection(QtCore.QAbstractItemModel):
         if group.child_count() is 1:
         if group.child_count() is 1:
             self.view.setExpanded(group_index, True)
             self.view.setExpanded(group_index, True)
 
 
+        self.app.should_we_save = True
+
         # decide if to show or hide the Notebook side of the screen
         # decide if to show or hide the Notebook side of the screen
         if self.app.defaults["global_project_autohide"] is True:
         if self.app.defaults["global_project_autohide"] is True:
             # always open the notebook on object added to collection
             # 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
         # 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.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
         # decide if to show or hide the Notebook side of the screen
         if self.app.defaults["global_project_autohide"] is True:
         if self.app.defaults["global_project_autohide"] is True:
             # hide the notebook if there are no objects in the collection
             # hide the notebook if there are no objects in the collection

+ 1 - 0
README.md

@@ -16,6 +16,7 @@ CAD program, and create G-Code for Isolation routing.
 - started to work in using the Excellon Export parameters
 - started to work in using the Excellon Export parameters
 - remade the Excellon export function to work with parameters entered in Edit -> Preferences -> Excellon Export
 - 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
 - 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
 14.02.2019