Ver Fonte

- fixed a minor issue that when saving a project with CNCJob objects, the variable that holds the origin of the CNCJob object was not saved in the project. Added to the serializable objects also the exc_cnc_tools dictionary
- some changes in the File menu

Marius Stanciu há 6 anos atrás
pai
commit
58054f71b3
4 ficheiros alterados com 92 adições e 92 exclusões
  1. 7 28
      FlatCAMObj.py
  2. 2 0
      README.md
  3. 3 3
      camlib.py
  4. 80 61
      flatcamGUI/FlatCAMGUI.py

+ 7 - 28
FlatCAMObj.py

@@ -3302,7 +3302,6 @@ class FlatCAMExcellon(FlatCAMObj, Excellon):
             job_obj.options['type'] = 'Excellon'
             job_obj.options['type'] = 'Excellon'
             job_obj.options['ppname_e'] = pp_excellon_name
             job_obj.options['ppname_e'] = pp_excellon_name
 
 
-            app_obj.progress.emit(20)
             job_obj.z_cut = float(self.options["drillz"])
             job_obj.z_cut = float(self.options["drillz"])
             job_obj.tool_offset = self.tool_offset
             job_obj.tool_offset = self.tool_offset
             job_obj.z_move = float(self.options["travelz"])
             job_obj.z_move = float(self.options["travelz"])
@@ -3325,27 +3324,8 @@ class FlatCAMExcellon(FlatCAMObj, Excellon):
             job_obj.options['xmax'] = xmax
             job_obj.options['xmax'] = xmax
             job_obj.options['ymax'] = ymax
             job_obj.options['ymax'] = ymax
 
 
-            try:
-                job_obj.z_pdepth = float(self.options["z_pdepth"])
-            except ValueError:
-                # try to convert comma to decimal point. if it's still not working error message and return
-                try:
-                    job_obj.z_pdepth = float(self.options["z_pdepth"].replace(',', '.'))
-                except ValueError:
-                    self.app.inform.emit('[ERROR_NOTCL] %s' %
-                                         _('Wrong value format for self.defaults["z_pdepth"] '
-                                           'or self.options["z_pdepth"]'))
-
-            try:
-                job_obj.feedrate_probe = float(self.options["feedrate_probe"])
-            except ValueError:
-                # try to convert comma to decimal point. if it's still not working error message and return
-                try:
-                    job_obj.feedrate_rapid = float(self.options["feedrate_probe"].replace(',', '.'))
-                except ValueError:
-                    self.app.inform.emit('[ERROR_NOTCL] %s' %
-                                         _('Wrong value format for self.defaults["feedrate_probe"] or '
-                                           'self.options["feedrate_probe"]'))
+            job_obj.z_pdepth = float(self.options["z_pdepth"])
+            job_obj.feedrate_probe = float(self.options["feedrate_probe"])
 
 
             # There could be more than one drill size...
             # There could be more than one drill size...
             # job_obj.tooldia =   # TODO: duplicate variable!
             # job_obj.tooldia =   # TODO: duplicate variable!
@@ -3364,14 +3344,10 @@ class FlatCAMExcellon(FlatCAMObj, Excellon):
 
 
             if ret_val == 'fail':
             if ret_val == 'fail':
                 return 'fail'
                 return 'fail'
-            app_obj.progress.emit(50)
-            job_obj.gcode_parse()
 
 
-            app_obj.progress.emit(60)
+            job_obj.gcode_parse()
             job_obj.create_geometry()
             job_obj.create_geometry()
 
 
-            app_obj.progress.emit(80)
-
         # To be run in separate thread
         # To be run in separate thread
         def job_thread(app_obj):
         def job_thread(app_obj):
             with self.app.proc_container.new(_("Generating CNC Code")):
             with self.app.proc_container.new(_("Generating CNC Code")):
@@ -6078,6 +6054,9 @@ class FlatCAMCNCjob(FlatCAMObj, CNCjob):
         # (like the one in the TCL Command), False
         # (like the one in the TCL Command), False
         self.multitool = False
         self.multitool = False
 
 
+        # determine if the GCode was generated out of a Excellon object or a Geometry object
+        self.origin_kind = None
+
         # used for parsing the GCode lines to adjust the GCode when the GCode is offseted or scaled
         # used for parsing the GCode lines to adjust the GCode when the GCode is offseted or scaled
         gcodex_re_string = r'(?=.*(X[-\+]?\d*\.\d*))'
         gcodex_re_string = r'(?=.*(X[-\+]?\d*\.\d*))'
         self.g_x_re = re.compile(gcodex_re_string)
         self.g_x_re = re.compile(gcodex_re_string)
@@ -6097,7 +6076,7 @@ class FlatCAMCNCjob(FlatCAMObj, CNCjob):
         # Attributes to be included in serialization
         # Attributes to be included in serialization
         # Always append to it because it carries contents
         # Always append to it because it carries contents
         # from predecessors.
         # from predecessors.
-        self.ser_attrs += ['options', 'kind', 'cnc_tools', 'multitool']
+        self.ser_attrs += ['options', 'kind', 'origin_kind', 'cnc_tools', 'exc_cnc_tools', 'multitool']
 
 
         if self.app.is_legacy is False:
         if self.app.is_legacy is False:
             self.text_col = self.app.plotcanvas.new_text_collection()
             self.text_col = self.app.plotcanvas.new_text_collection()

+ 2 - 0
README.md

@@ -13,6 +13,8 @@ CAD program, and create G-Code for Isolation routing.
 
 
 - more updates to the Preferences window and in some other parts of the GUI
 - more updates to the Preferences window and in some other parts of the GUI
 - updated the translations (less Russian)
 - updated the translations (less Russian)
+- fixed a minor issue that when saving a project with CNCJob objects, the variable that holds the origin of the CNCJob object was not saved in the project. Added to the serializable objects also the exc_cnc_tools dictionary 
+- some changes in the File menu
 
 
 28.12.2019
 28.12.2019
 
 

+ 3 - 3
camlib.py

@@ -2239,7 +2239,6 @@ class CNCjob(Geometry):
         Geometry.__init__(self, geo_steps_per_circle=self.steps_per_circle)
         Geometry.__init__(self, geo_steps_per_circle=self.steps_per_circle)
 
 
         self.kind = kind
         self.kind = kind
-        self.origin_kind = None
 
 
         self.units = units
         self.units = units
 
 
@@ -4155,7 +4154,7 @@ class CNCjob(Geometry):
                                 kind = ['C', 'F']
                                 kind = ['C', 'F']
                                 geometry.append(
                                 geometry.append(
                                     {
                                     {
-                                        "geom": Point(current_drill_point_coords).buffer(dia/2).exterior,
+                                        "geom": Point(current_drill_point_coords).buffer(dia/2.0).exterior,
                                         "kind": kind
                                         "kind": kind
                                     }
                                     }
                                 )
                                 )
@@ -4465,11 +4464,12 @@ class CNCjob(Geometry):
                 #         if geo['kind'][0] == 'C':
                 #         if geo['kind'][0] == 'C':
                 #             obj.add_shape(shape=poly, color=color['C'][1], face_color=color['C'][0],
                 #             obj.add_shape(shape=poly, color=color['C'][1], face_color=color['C'][0],
                 #                           visible=visible, layer=1)
                 #                           visible=visible, layer=1)
+
             try:
             try:
                 obj.annotation.set(text=text, pos=pos, visible=obj.options['plot'],
                 obj.annotation.set(text=text, pos=pos, visible=obj.options['plot'],
                                    font_size=self.app.defaults["cncjob_annotation_fontsize"],
                                    font_size=self.app.defaults["cncjob_annotation_fontsize"],
                                    color=self.app.defaults["cncjob_annotation_fontcolor"])
                                    color=self.app.defaults["cncjob_annotation_fontcolor"])
-            except Exception as e:
+            except Exception:
                 pass
                 pass
 
 
     def create_geometry(self):
     def create_geometry(self):

+ 80 - 61
flatcamGUI/FlatCAMGUI.py

@@ -81,26 +81,31 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
         self.menufilenewgeo.setToolTip(
         self.menufilenewgeo.setToolTip(
             _("Will create a new, empty Geometry Object.")
             _("Will create a new, empty Geometry Object.")
         )
         )
-        self.menufilenewgrb = self.menufilenew.addAction(QtGui.QIcon(self.app.resource_location + '/new_file_grb16.png'), _('Gerber\tB'))
+        self.menufilenewgrb = self.menufilenew.addAction(
+            QtGui.QIcon(self.app.resource_location + '/new_file_grb16.png'), _('Gerber\tB'))
         self.menufilenewgrb.setToolTip(
         self.menufilenewgrb.setToolTip(
             _("Will create a new, empty Gerber Object.")
             _("Will create a new, empty Gerber Object.")
         )
         )
-        self.menufilenewexc = self.menufilenew.addAction(QtGui.QIcon(self.app.resource_location + '/new_file_exc16.png'), _('Excellon\tL'))
+        self.menufilenewexc = self.menufilenew.addAction(
+            QtGui.QIcon(self.app.resource_location + '/new_file_exc16.png'), _('Excellon\tL'))
         self.menufilenewexc.setToolTip(
         self.menufilenewexc.setToolTip(
             _("Will create a new, empty Excellon Object.")
             _("Will create a new, empty Excellon Object.")
         )
         )
         self.menufilenew.addSeparator()
         self.menufilenew.addSeparator()
 
 
-        self.menufilenewdoc = self.menufilenew.addAction(QtGui.QIcon(self.app.resource_location + '/notes16_1.png'), _('Document\tD'))
+        self.menufilenewdoc = self.menufilenew.addAction(
+            QtGui.QIcon(self.app.resource_location + '/notes16_1.png'), _('Document\tD'))
         self.menufilenewdoc.setToolTip(
         self.menufilenewdoc.setToolTip(
             _("Will create a new, empty Document Object.")
             _("Will create a new, empty Document Object.")
         )
         )
 
 
-        self.menufile_open = self.menufile.addMenu(QtGui.QIcon(self.app.resource_location + '/folder32_bis.png'), _('Open'))
+        self.menufile_open = self.menufile.addMenu(
+            QtGui.QIcon(self.app.resource_location + '/folder32_bis.png'), _('Open'))
         self.menufile_open.setToolTipsVisible(True)
         self.menufile_open.setToolTipsVisible(True)
 
 
         # Open Project ...
         # Open Project ...
-        self.menufileopenproject = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/folder16.png'), _('Open &Project ...'), self)
+        self.menufileopenproject = QtWidgets.QAction(
+            QtGui.QIcon(self.app.resource_location + '/folder16.png'), _('Open &Project ...'), self)
         self.menufile_open.addAction(self.menufileopenproject)
         self.menufile_open.addAction(self.menufileopenproject)
         self.menufile_open.addSeparator()
         self.menufile_open.addSeparator()
 
 
@@ -115,30 +120,37 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
         self.menufile_open.addAction(self.menufileopenexcellon)
         self.menufile_open.addAction(self.menufileopenexcellon)
 
 
         # Open G-Code ...
         # Open G-Code ...
-        self.menufileopengcode = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/code.png'), _('Open G-&Code ...'), self)
+        self.menufileopengcode = QtWidgets.QAction(
+            QtGui.QIcon(self.app.resource_location + '/code.png'), _('Open G-&Code ...'), self)
         self.menufile_open.addAction(self.menufileopengcode)
         self.menufile_open.addAction(self.menufileopengcode)
 
 
         self.menufile_open.addSeparator()
         self.menufile_open.addSeparator()
 
 
         # Open Config File...
         # Open Config File...
-        self.menufileopenconfig = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/folder16.png'), _('Open Config ...'), self)
+        self.menufileopenconfig = QtWidgets.QAction(
+            QtGui.QIcon(self.app.resource_location + '/folder16.png'), _('Open Config ...'), self)
         self.menufile_open.addAction(self.menufileopenconfig)
         self.menufile_open.addAction(self.menufileopenconfig)
 
 
         # Recent
         # Recent
-        self.recent_projects = self.menufile.addMenu(QtGui.QIcon(self.app.resource_location + '/recent_files.png'), _("Recent projects"))
-        self.recent = self.menufile.addMenu(QtGui.QIcon(self.app.resource_location + '/recent_files.png'), _("Recent files"))
+        self.recent_projects = self.menufile.addMenu(
+            QtGui.QIcon(self.app.resource_location + '/recent_files.png'), _("Recent projects"))
+        self.recent = self.menufile.addMenu(
+            QtGui.QIcon(self.app.resource_location + '/recent_files.png'), _("Recent files"))
 
 
         # Separator
         # Separator
         self.menufile.addSeparator()
         self.menufile.addSeparator()
 
 
         # Scripting
         # Scripting
-        self.menufile_scripting = self.menufile.addMenu(QtGui.QIcon(self.app.resource_location + '/script16.png'), _('Scripting'))
+        self.menufile_scripting = self.menufile.addMenu(
+            QtGui.QIcon(self.app.resource_location + '/script16.png'), _('Scripting'))
         self.menufile_scripting.setToolTipsVisible(True)
         self.menufile_scripting.setToolTipsVisible(True)
 
 
-        self.menufilenewscript = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/script_new16.png'), _('New Script ...'), self)
-        self.menufileopenscript = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/open_script32.png'), _('Open Script ...'), self)
-        self.menufilerunscript = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/script16.png'),
-                                                   '%s\tSHIFT+S' % _('Run Script ...'), self)
+        self.menufilenewscript = QtWidgets.QAction(
+            QtGui.QIcon(self.app.resource_location + '/script_new16.png'), _('New Script ...'), self)
+        self.menufileopenscript = QtWidgets.QAction(
+            QtGui.QIcon(self.app.resource_location + '/open_script32.png'), _('Open Script ...'), self)
+        self.menufilerunscript = QtWidgets.QAction(
+            QtGui.QIcon(self.app.resource_location + '/script16.png'), '%s\tSHIFT+S' % _('Run Script ...'), self)
         self.menufilerunscript.setToolTip(
         self.menufilerunscript.setToolTip(
            _("Will run the opened Tcl Script thus\n"
            _("Will run the opened Tcl Script thus\n"
              "enabling the automation of certain\n"
              "enabling the automation of certain\n"
@@ -153,40 +165,45 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
         self.menufile.addSeparator()
         self.menufile.addSeparator()
 
 
         # Import ...
         # Import ...
-        self.menufileimport = self.menufile.addMenu(QtGui.QIcon(self.app.resource_location + '/import.png'), _('Import'))
-        self.menufileimportsvg = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/svg16.png'),
-                                                   _('&SVG as Geometry Object ...'), self)
+        self.menufileimport = self.menufile.addMenu(
+            QtGui.QIcon(self.app.resource_location + '/import.png'), _('Import'))
+        self.menufileimportsvg = QtWidgets.QAction(
+            QtGui.QIcon(self.app.resource_location + '/svg16.png'), _('&SVG as Geometry Object ...'), self)
         self.menufileimport.addAction(self.menufileimportsvg)
         self.menufileimport.addAction(self.menufileimportsvg)
-        self.menufileimportsvg_as_gerber = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/svg16.png'),
-                                                             _('&SVG as Gerber Object ...'), self)
+        self.menufileimportsvg_as_gerber = QtWidgets.QAction(
+            QtGui.QIcon(self.app.resource_location + '/svg16.png'), _('&SVG as Gerber Object ...'), self)
         self.menufileimport.addAction(self.menufileimportsvg_as_gerber)
         self.menufileimport.addAction(self.menufileimportsvg_as_gerber)
         self.menufileimport.addSeparator()
         self.menufileimport.addSeparator()
 
 
-        self.menufileimportdxf = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/dxf16.png'),
-                                                   _('&DXF as Geometry Object ...'), self)
+        self.menufileimportdxf = QtWidgets.QAction(
+            QtGui.QIcon(self.app.resource_location + '/dxf16.png'), _('&DXF as Geometry Object ...'), self)
         self.menufileimport.addAction(self.menufileimportdxf)
         self.menufileimport.addAction(self.menufileimportdxf)
-        self.menufileimportdxf_as_gerber = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/dxf16.png'),
-                                                             _('&DXF as Gerber Object ...'), self)
+        self.menufileimportdxf_as_gerber = QtWidgets.QAction(
+            QtGui.QIcon(self.app.resource_location + '/dxf16.png'), _('&DXF as Gerber Object ...'), self)
         self.menufileimport.addAction(self.menufileimportdxf_as_gerber)
         self.menufileimport.addAction(self.menufileimportdxf_as_gerber)
         self.menufileimport.addSeparator()
         self.menufileimport.addSeparator()
-        self.menufileimport_hpgl2_as_geo = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/dxf16.png'),
-                                                             _('HPGL2 as Geometry Object ...'), self)
+        self.menufileimport_hpgl2_as_geo = QtWidgets.QAction(
+            QtGui.QIcon(self.app.resource_location + '/dxf16.png'), _('HPGL2 as Geometry Object ...'), self)
         self.menufileimport.addAction(self.menufileimport_hpgl2_as_geo)
         self.menufileimport.addAction(self.menufileimport_hpgl2_as_geo)
         self.menufileimport.addSeparator()
         self.menufileimport.addSeparator()
 
 
         # Export ...
         # Export ...
-        self.menufileexport = self.menufile.addMenu(QtGui.QIcon(self.app.resource_location + '/export.png'), _('Export'))
+        self.menufileexport = self.menufile.addMenu(
+            QtGui.QIcon(self.app.resource_location + '/export.png'), _('Export'))
         self.menufileexport.setToolTipsVisible(True)
         self.menufileexport.setToolTipsVisible(True)
 
 
-        self.menufileexportsvg = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/export.png'), _('Export &SVG ...'), self)
+        self.menufileexportsvg = QtWidgets.QAction(
+            QtGui.QIcon(self.app.resource_location + '/export.png'), _('Export &SVG ...'), self)
         self.menufileexport.addAction(self.menufileexportsvg)
         self.menufileexport.addAction(self.menufileexportsvg)
 
 
-        self.menufileexportdxf = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/export.png'), _('Export DXF ...'), self)
+        self.menufileexportdxf = QtWidgets.QAction(
+            QtGui.QIcon(self.app.resource_location + '/export.png'), _('Export DXF ...'), self)
         self.menufileexport.addAction(self.menufileexportdxf)
         self.menufileexport.addAction(self.menufileexportdxf)
 
 
         self.menufileexport.addSeparator()
         self.menufileexport.addSeparator()
 
 
-        self.menufileexportpng = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/export_png32.png'), _('Export &PNG ...'), self)
+        self.menufileexportpng = QtWidgets.QAction(
+            QtGui.QIcon(self.app.resource_location + '/export_png32.png'), _('Export &PNG ...'), self)
         self.menufileexportpng.setToolTip(
         self.menufileexportpng.setToolTip(
             _("Will export an image in PNG format,\n"
             _("Will export an image in PNG format,\n"
               "the saved image will contain the visual \n"
               "the saved image will contain the visual \n"
@@ -196,8 +213,8 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
 
 
         self.menufileexport.addSeparator()
         self.menufileexport.addSeparator()
 
 
-        self.menufileexportexcellon = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/drill32.png'),
-                                                        _('Export &Excellon ...'), self)
+        self.menufileexportexcellon = QtWidgets.QAction(
+            QtGui.QIcon(self.app.resource_location + '/drill32.png'), _('Export &Excellon ...'), self)
         self.menufileexportexcellon.setToolTip(
         self.menufileexportexcellon.setToolTip(
            _("Will export an Excellon Object as Excellon file,\n"
            _("Will export an Excellon Object as Excellon file,\n"
              "the coordinates format, the file units and zeros\n"
              "the coordinates format, the file units and zeros\n"
@@ -205,8 +222,8 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
         )
         )
         self.menufileexport.addAction(self.menufileexportexcellon)
         self.menufileexport.addAction(self.menufileexportexcellon)
 
 
-        self.menufileexportgerber = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/flatcam_icon32.png'),
-                                                      _('Export &Gerber ...'), self)
+        self.menufileexportgerber = QtWidgets.QAction(
+            QtGui.QIcon(self.app.resource_location + '/flatcam_icon32.png'), _('Export &Gerber ...'), self)
         self.menufileexportgerber.setToolTip(
         self.menufileexportgerber.setToolTip(
             _("Will export an Gerber Object as Gerber file,\n"
             _("Will export an Gerber Object as Gerber file,\n"
               "the coordinates format, the file units and zeros\n"
               "the coordinates format, the file units and zeros\n"
@@ -217,27 +234,29 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
         # Separator
         # Separator
         self.menufile.addSeparator()
         self.menufile.addSeparator()
 
 
-        # Save Defaults
-        self.menufilesavedefaults = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/defaults.png'),
-                                                      _('Save Preferences'), self)
-        self.menufile.addAction(self.menufilesavedefaults)
-
-        # Separator
-        self.menufile.addSeparator()
-
-        self.menufile_backup = self.menufile.addMenu(QtGui.QIcon(self.app.resource_location + '/backup24.png'),
-                                                     _('Backup'))
+        self.menufile_backup = self.menufile.addMenu(
+            QtGui.QIcon(self.app.resource_location + '/backup24.png'), _('Backup'))
 
 
         # Import Preferences
         # Import Preferences
-        self.menufileimportpref = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/backup_import24.png'),
-                                                    _('Import Preferences from file ...'), self)
+        self.menufileimportpref = QtWidgets.QAction(
+            QtGui.QIcon(self.app.resource_location + '/backup_import24.png'),
+            _('Import Preferences from file ...'), self
+        )
         self.menufile_backup.addAction(self.menufileimportpref)
         self.menufile_backup.addAction(self.menufileimportpref)
 
 
         # Export Preferences
         # Export Preferences
-        self.menufileexportpref = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/backup_export24.png'),
-                                                    _('Export Preferences to file ...'), self)
+        self.menufileexportpref = QtWidgets.QAction(
+            QtGui.QIcon(self.app.resource_location + '/backup_export24.png'), _('Export Preferences to file ...'), self)
         self.menufile_backup.addAction(self.menufileexportpref)
         self.menufile_backup.addAction(self.menufileexportpref)
 
 
+        # Separator
+        self.menufile_backup.addSeparator()
+
+        # Save Defaults
+        self.menufilesavedefaults = QtWidgets.QAction(
+            QtGui.QIcon(self.app.resource_location + '/defaults.png'), _('Save Preferences'), self)
+        self.menufile_backup.addAction(self.menufilesavedefaults)
+
         # Separator
         # Separator
         self.menufile.addSeparator()
         self.menufile.addSeparator()
         self.menufile_print = QtWidgets.QAction(
         self.menufile_print = QtWidgets.QAction(
@@ -247,18 +266,18 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
         self.menufile_save = self.menufile.addMenu(QtGui.QIcon(self.app.resource_location + '/save_as.png'), _('Save'))
         self.menufile_save = self.menufile.addMenu(QtGui.QIcon(self.app.resource_location + '/save_as.png'), _('Save'))
 
 
         # Save Project
         # Save Project
-        self.menufilesaveproject = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/floppy16.png'),
-                                                     _('&Save Project ...'), self)
+        self.menufilesaveproject = QtWidgets.QAction(
+            QtGui.QIcon(self.app.resource_location + '/floppy16.png'), _('&Save Project ...'), self)
         self.menufile_save.addAction(self.menufilesaveproject)
         self.menufile_save.addAction(self.menufilesaveproject)
 
 
         # Save Project As ...
         # Save Project As ...
-        self.menufilesaveprojectas = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/save_as.png'),
-                                                       _('Save Project &As ...\tCTRL+S'), self)
+        self.menufilesaveprojectas = QtWidgets.QAction(
+            QtGui.QIcon(self.app.resource_location + '/save_as.png'), _('Save Project &As ...\tCTRL+S'), self)
         self.menufile_save.addAction(self.menufilesaveprojectas)
         self.menufile_save.addAction(self.menufilesaveprojectas)
 
 
         # Save Project Copy ...
         # Save Project Copy ...
-        self.menufilesaveprojectcopy = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/floppy16.png'),
-                                                         _('Save Project C&opy ...'), self)
+        self.menufilesaveprojectcopy = QtWidgets.QAction(
+            QtGui.QIcon(self.app.resource_location + '/floppy16.png'), _('Save Project C&opy ...'), self)
         self.menufile_save.addAction(self.menufilesaveprojectcopy)
         self.menufile_save.addAction(self.menufilesaveprojectcopy)
 
 
         self.menufile_save.addSeparator()
         self.menufile_save.addSeparator()
@@ -267,8 +286,8 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
         self.menufile.addSeparator()
         self.menufile.addSeparator()
 
 
         # Quit
         # Quit
-        self.menufile_exit = QtWidgets.QAction(QtGui.QIcon(self.app.resource_location + '/power16.png'),
-                                               _('E&xit'), self)
+        self.menufile_exit = QtWidgets.QAction(
+            QtGui.QIcon(self.app.resource_location + '/power16.png'), _('E&xit'), self)
         # exitAction.setShortcut('Ctrl+Q')
         # exitAction.setShortcut('Ctrl+Q')
         # exitAction.setStatusTip('Exit application')
         # exitAction.setStatusTip('Exit application')
         self.menufile.addAction(self.menufile_exit)
         self.menufile.addAction(self.menufile_exit)
@@ -279,10 +298,10 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
         self.menuedit = self.menu.addMenu(_('Edit'))
         self.menuedit = self.menu.addMenu(_('Edit'))
         # Separator
         # Separator
         self.menuedit.addSeparator()
         self.menuedit.addSeparator()
-        self.menueditedit = self.menuedit.addAction(QtGui.QIcon(self.app.resource_location + '/edit16.png'),
-                                                    _('Edit Object\tE'))
-        self.menueditok = self.menuedit.addAction(QtGui.QIcon(self.app.resource_location + '/edit_ok16.png'),
-                                                  _('Close Editor\tCTRL+S'))
+        self.menueditedit = self.menuedit.addAction(
+            QtGui.QIcon(self.app.resource_location + '/edit16.png'), _('Edit Object\tE'))
+        self.menueditok = self.menuedit.addAction(
+            QtGui.QIcon(self.app.resource_location + '/edit_ok16.png'), _('Close Editor\tCTRL+S'))
 
 
         # adjust the initial state of the menu entries related to the editor
         # adjust the initial state of the menu entries related to the editor
         self.menueditedit.setDisabled(False)
         self.menueditedit.setDisabled(False)
@@ -290,8 +309,8 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
 
 
         # Separator
         # Separator
         self.menuedit.addSeparator()
         self.menuedit.addSeparator()
-        self.menuedit_convert = self.menuedit.addMenu(QtGui.QIcon(self.app.resource_location + '/convert24.png'),
-                                                      _('Conversion'))
+        self.menuedit_convert = self.menuedit.addMenu(
+            QtGui.QIcon(self.app.resource_location + '/convert24.png'), _('Conversion'))
         self.menuedit_convertjoin = self.menuedit_convert.addAction(
         self.menuedit_convertjoin = self.menuedit_convert.addAction(
             QtGui.QIcon(self.app.resource_location + '/join16.png'), _('&Join Geo/Gerber/Exc -> Geo'))
             QtGui.QIcon(self.app.resource_location + '/join16.png'), _('&Join Geo/Gerber/Exc -> Geo'))
         self.menuedit_convertjoin.setToolTip(
         self.menuedit_convertjoin.setToolTip(