Przeglądaj źródła

- minor changes in the way that the tools are installed and connected

Marius Stanciu 5 lat temu
rodzic
commit
d97d3eabd2

+ 4 - 0
CHANGELOG.md

@@ -7,6 +7,10 @@ CHANGELOG for FlatCAM beta
 
 
 =================================================
 =================================================
 
 
+8.06.2020
+
+- minor changes in the way that the tools are installed and connected
+
 7.06.2020
 7.06.2020
 
 
 - refactoring in camlib.py. Made sure that some conditions are met, if some of the parameters are None then return failure. Modifications in generate_from_geometry_2 and generate_from_multitool_geometry methods
 - refactoring in camlib.py. Made sure that some conditions are met, if some of the parameters are None then return failure. Modifications in generate_from_geometry_2 and generate_from_multitool_geometry methods

+ 7 - 7
appGUI/preferences/general/GeneralAppPrefGroupUI.py

@@ -95,7 +95,7 @@ class GeneralAppPrefGroupUI(OptionsGroupUI):
         grid0.addWidget(separator_line, 4, 0, 1, 2)
         grid0.addWidget(separator_line, 4, 0, 1, 2)
 
 
         # Application Level for FlatCAM
         # Application Level for FlatCAM
-        self.app_level_label = QtWidgets.QLabel('<span style="color:red;"><b>%s:</b></span>' % _('APP. LEVEL'))
+        self.app_level_label = QtWidgets.QLabel('<span style="color:red;"><b>%s:</b></span>' % _('APPLICATION LEVEL'))
         self.app_level_label.setToolTip(_("Choose the default level of usage for FlatCAM.\n"
         self.app_level_label.setToolTip(_("Choose the default level of usage for FlatCAM.\n"
                                           "BASIC level -> reduced functionality, best for beginner's.\n"
                                           "BASIC level -> reduced functionality, best for beginner's.\n"
                                           "ADVANCED level -> full functionality.\n\n"
                                           "ADVANCED level -> full functionality.\n\n"
@@ -104,8 +104,8 @@ class GeneralAppPrefGroupUI(OptionsGroupUI):
         self.app_level_radio = RadioSet([{'label': _('Basic'), 'value': 'b'},
         self.app_level_radio = RadioSet([{'label': _('Basic'), 'value': 'b'},
                                          {'label': _('Advanced'), 'value': 'a'}])
                                          {'label': _('Advanced'), 'value': 'a'}])
 
 
-        grid0.addWidget(self.app_level_label, 5, 0)
-        grid0.addWidget(self.app_level_radio, 5, 1)
+        grid0.addWidget(self.app_level_label, 5, 0, 1, 2)
+        grid0.addWidget(self.app_level_radio, 6, 0, 1, 2)
 
 
         # Portability for FlatCAM
         # Portability for FlatCAM
         self.portability_cb = FCCheckBox('%s' % _('Portable app'))
         self.portability_cb = FCCheckBox('%s' % _('Portable app'))
@@ -114,20 +114,20 @@ class GeneralAppPrefGroupUI(OptionsGroupUI):
                                          "which means that the preferences files will be saved\n"
                                          "which means that the preferences files will be saved\n"
                                          "in the application folder, in the lib\\config subfolder."))
                                          "in the application folder, in the lib\\config subfolder."))
 
 
-        grid0.addWidget(self.portability_cb, 6, 0, 1, 2)
+        grid0.addWidget(self.portability_cb, 7, 0, 1, 2)
 
 
         separator_line = QtWidgets.QFrame()
         separator_line = QtWidgets.QFrame()
         separator_line.setFrameShape(QtWidgets.QFrame.HLine)
         separator_line.setFrameShape(QtWidgets.QFrame.HLine)
         separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
         separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
-        grid0.addWidget(separator_line, 7, 0, 1, 2)
+        grid0.addWidget(separator_line, 8, 0, 1, 2)
 
 
         # Languages for FlatCAM
         # Languages for FlatCAM
         self.languagelabel = QtWidgets.QLabel('<b>%s</b>' % _('Languages'))
         self.languagelabel = QtWidgets.QLabel('<b>%s</b>' % _('Languages'))
         self.languagelabel.setToolTip(_("Set the language used throughout FlatCAM."))
         self.languagelabel.setToolTip(_("Set the language used throughout FlatCAM."))
         self.language_cb = FCComboBox()
         self.language_cb = FCComboBox()
 
 
-        grid0.addWidget(self.languagelabel, 8, 0, 1, 2)
-        grid0.addWidget(self.language_cb, 9, 0, 1, 2)
+        grid0.addWidget(self.languagelabel, 9, 0, 1, 2)
+        grid0.addWidget(self.language_cb, 10, 0, 1, 2)
 
 
         self.language_apply_btn = FCButton(_("Apply Language"))
         self.language_apply_btn = FCButton(_("Apply Language"))
         self.language_apply_btn.setToolTip(_("Set the language used throughout FlatCAM.\n"
         self.language_apply_btn.setToolTip(_("Set the language used throughout FlatCAM.\n"

+ 6 - 2
appGUI/preferences/general/GeneralGUIPrefGroupUI.py

@@ -531,8 +531,12 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI):
         # add all the actions to the toolbars
         # add all the actions to the toolbars
         self.app.ui.populate_toolbars()
         self.app.ui.populate_toolbars()
 
 
-        # reconnect all the signals to the toolbar actions
-        self.app.connect_toolbar_signals()
+        try:
+            # reconnect all the signals to the toolbar actions
+            self.app.connect_toolbar_signals(ui=self.app.ui)
+        except Exception as e:
+            self.app.log.debug(
+                "appGUI.preferences.general.GeneralGUIPrefGroupUI.on_layout() - connect toolbar signals -> %s" % str(e))
 
 
         self.app.ui.grid_snap_btn.setChecked(True)
         self.app.ui.grid_snap_btn.setChecked(True)
 
 

+ 3 - 0
appTools/ToolShell.py

@@ -295,6 +295,9 @@ class FCShell(TermWidget):
         self._append_to_browser('in', "FlatCAM %s - " % version)
         self._append_to_browser('in', "FlatCAM %s - " % version)
         self.append_output('%s\n\n' % _("Type >help< to get started"))
         self.append_output('%s\n\n' % _("Type >help< to get started"))
 
 
+        self.app.ui.shell_dock.setWidget(self)
+        self.app.log.debug("TCL Shell has been initialized.")
+
     def init_tcl(self):
     def init_tcl(self):
         if hasattr(self, 'tcl') and self.tcl is not None:
         if hasattr(self, 'tcl') and self.tcl is not None:
             # self.tcl = None
             # self.tcl = None

+ 73 - 67
app_Main.py

@@ -920,7 +920,7 @@ class App(QtCore.QObject):
         self.ui.menuprojectproperties.triggered.connect(self.obj_properties)
         self.ui.menuprojectproperties.triggered.connect(self.obj_properties)
 
 
         # ToolBar signals
         # ToolBar signals
-        self.connect_toolbar_signals()
+        self.connect_toolbar_signals(ui=self.ui)
 
 
         # Notebook and Plot Tab Area signals
         # Notebook and Plot Tab Area signals
         # make the right click on the notebook tab and plot tab area tab raise a menu
         # make the right click on the notebook tab and plot tab area tab raise a menu
@@ -1317,25 +1317,12 @@ class App(QtCore.QObject):
         self.autocomplete_kw_list = self.defaults['util_autocomplete_keywords'].replace(' ', '').split(',')
         self.autocomplete_kw_list = self.defaults['util_autocomplete_keywords'].replace(' ', '').split(',')
         self.myKeywords = self.tcl_commands_list + self.autocomplete_kw_list + self.tcl_keywords
         self.myKeywords = self.tcl_commands_list + self.autocomplete_kw_list + self.tcl_keywords
 
 
-        # ###########################################################################################################
-        # ############################################## Shell SETUP ################################################
-        # ###########################################################################################################
-
-        self.shell = FCShell(app=self, version=self.version)
-
-        self.ui.shell_dock.setWidget(self.shell)
-        self.log.debug("TCL Shell has been initialized.")
-
-        # show TCL shell at start-up based on the Menu -? Edit -> Preferences setting.
-        if self.defaults["global_shell_at_startup"]:
-            self.ui.shell_dock.show()
-        else:
-            self.ui.shell_dock.hide()
-
         # ###########################################################################################################
         # ###########################################################################################################
         # ########################################## Tools and Plugins ##############################################
         # ########################################## Tools and Plugins ##############################################
         # ###########################################################################################################
         # ###########################################################################################################
 
 
+
+        self.shell = None
         self.dblsidedtool = None
         self.dblsidedtool = None
         self.distance_tool = None
         self.distance_tool = None
         self.distance_min_tool = None
         self.distance_min_tool = None
@@ -1398,6 +1385,15 @@ class App(QtCore.QObject):
         # self.f_parse = ParseFont(self)
         # self.f_parse = ParseFont(self)
         # self.parse_system_fonts()
         # self.parse_system_fonts()
 
 
+        # ###########################################################################################################
+        # ############################################## Shell SETUP ################################################
+        # ###########################################################################################################
+        # show TCL shell at start-up based on the Menu -? Edit -> Preferences setting.
+        if self.defaults["global_shell_at_startup"]:
+            self.ui.shell_dock.show()
+        else:
+            self.ui.shell_dock.hide()
+
         # ###########################################################################################################
         # ###########################################################################################################
         # ######################################### Check for updates ###############################################
         # ######################################### Check for updates ###############################################
         # ###########################################################################################################
         # ###########################################################################################################
@@ -1869,6 +1865,10 @@ class App(QtCore.QObject):
 
 
         :return: None
         :return: None
         """
         """
+
+        # shell tool has t obe initialized always first because other tools print messages in the Shell Dock
+        self.shell = FCShell(app=self, version=self.version)
+
         self.distance_tool = Distance(self)
         self.distance_tool = Distance(self)
         self.distance_tool.install(icon=QtGui.QIcon(self.resource_location + '/distance16.png'), pos=self.ui.menuedit,
         self.distance_tool.install(icon=QtGui.QIcon(self.resource_location + '/distance16.png'), pos=self.ui.menuedit,
                                    before=self.ui.menueditorigin,
                                    before=self.ui.menueditorigin,
@@ -2041,7 +2041,35 @@ class App(QtCore.QObject):
     #     self.worker_task.emit({'fcn': self.f_parse.get_fonts_by_types,
     #     self.worker_task.emit({'fcn': self.f_parse.get_fonts_by_types,
     #                            'params': []})
     #                            'params': []})
 
 
-    def connect_toolbar_signals(self):
+    def connect_tools_signals_to_toolbar(self, ui):
+        ui.dblsided_btn.triggered.connect(lambda: self.dblsidedtool.run(toggle=True))
+        ui.cal_btn.triggered.connect(lambda: self.cal_exc_tool.run(toggle=True))
+        ui.align_btn.triggered.connect(lambda: self.align_objects_tool.run(toggle=True))
+        ui.extract_btn.triggered.connect(lambda: self.edrills_tool.run(toggle=True))
+
+        ui.cutout_btn.triggered.connect(lambda: self.cutout_tool.run(toggle=True))
+        ui.ncc_btn.triggered.connect(lambda: self.ncclear_tool.run(toggle=True))
+        ui.paint_btn.triggered.connect(lambda: self.paint_tool.run(toggle=True))
+        ui.isolation_btn.triggered.connect(lambda: self.isolation_tool.run(toggle=True))
+
+        ui.panelize_btn.triggered.connect(lambda: self.panelize_tool.run(toggle=True))
+        ui.film_btn.triggered.connect(lambda: self.film_tool.run(toggle=True))
+        ui.solder_btn.triggered.connect(lambda: self.paste_tool.run(toggle=True))
+        ui.sub_btn.triggered.connect(lambda: self.sub_tool.run(toggle=True))
+        ui.rules_btn.triggered.connect(lambda: self.rules_tool.run(toggle=True))
+        ui.optimal_btn.triggered.connect(lambda: self.optimal_tool.run(toggle=True))
+
+        ui.calculators_btn.triggered.connect(lambda: self.calculator_tool.run(toggle=True))
+        ui.transform_btn.triggered.connect(lambda: self.transform_tool.run(toggle=True))
+        ui.qrcode_btn.triggered.connect(lambda: self.qrcode_tool.run(toggle=True))
+        ui.copperfill_btn.triggered.connect(lambda: self.copper_thieving_tool.run(toggle=True))
+        ui.fiducials_btn.triggered.connect(lambda: self.fiducial_tool.run(toggle=True))
+        ui.punch_btn.triggered.connect(lambda: self.punch_tool.run(toggle=True))
+        ui.invert_btn.triggered.connect(lambda: self.invert_tool.run(toggle=True))
+        ui.corners_tool_btn.triggered.connect(lambda: self.corners_tool.run(toggle=True))
+        ui.etch_btn.triggered.connect(lambda: self.etch_tool.run(toggle=True))
+
+    def connect_toolbar_signals(self, ui):
         """
         """
         Reconnect the signals to the actions in the toolbar.
         Reconnect the signals to the actions in the toolbar.
         This has to be done each time after the FlatCAM tools are removed/installed.
         This has to be done each time after the FlatCAM tools are removed/installed.
@@ -2052,66 +2080,44 @@ class App(QtCore.QObject):
         # Toolbar
         # Toolbar
 
 
         # File Toolbar Signals
         # File Toolbar Signals
-        # self.ui.file_new_btn.triggered.connect(self.on_file_new)
-        self.ui.file_open_btn.triggered.connect(self.on_file_openproject)
-        self.ui.file_save_btn.triggered.connect(self.on_file_saveproject)
-        self.ui.file_open_gerber_btn.triggered.connect(self.on_fileopengerber)
-        self.ui.file_open_excellon_btn.triggered.connect(self.on_fileopenexcellon)
+        # ui.file_new_btn.triggered.connect(self.on_file_new)
+        ui.file_open_btn.triggered.connect(self.on_file_openproject)
+        ui.file_save_btn.triggered.connect(self.on_file_saveproject)
+        ui.file_open_gerber_btn.triggered.connect(self.on_fileopengerber)
+        ui.file_open_excellon_btn.triggered.connect(self.on_fileopenexcellon)
 
 
         # View Toolbar Signals
         # View Toolbar Signals
-        self.ui.clear_plot_btn.triggered.connect(self.clear_plots)
-        self.ui.replot_btn.triggered.connect(self.plot_all)
-        self.ui.zoom_fit_btn.triggered.connect(self.on_zoom_fit)
-        self.ui.zoom_in_btn.triggered.connect(lambda: self.plotcanvas.zoom(1 / 1.5))
-        self.ui.zoom_out_btn.triggered.connect(lambda: self.plotcanvas.zoom(1.5))
+        ui.clear_plot_btn.triggered.connect(self.clear_plots)
+        ui.replot_btn.triggered.connect(self.plot_all)
+        ui.zoom_fit_btn.triggered.connect(self.on_zoom_fit)
+        ui.zoom_in_btn.triggered.connect(lambda: self.plotcanvas.zoom(1 / 1.5))
+        ui.zoom_out_btn.triggered.connect(lambda: self.plotcanvas.zoom(1.5))
 
 
         # Edit Toolbar Signals
         # Edit Toolbar Signals
-        self.ui.editgeo_btn.triggered.connect(self.object2editor)
-        self.ui.update_obj_btn.triggered.connect(lambda: self.editor2object())
-        self.ui.copy_btn.triggered.connect(self.on_copy_command)
-        self.ui.delete_btn.triggered.connect(self.on_delete)
+        ui.editgeo_btn.triggered.connect(self.object2editor)
+        ui.update_obj_btn.triggered.connect(lambda: self.editor2object())
+        ui.copy_btn.triggered.connect(self.on_copy_command)
+        ui.delete_btn.triggered.connect(self.on_delete)
 
 
-        self.ui.distance_btn.triggered.connect(lambda: self.distance_tool.run(toggle=True))
-        self.ui.distance_min_btn.triggered.connect(lambda: self.distance_min_tool.run(toggle=True))
-        self.ui.origin_btn.triggered.connect(self.on_set_origin)
-        self.ui.move2origin_btn.triggered.connect(self.on_move2origin)
+        ui.distance_btn.triggered.connect(lambda: self.distance_tool.run(toggle=True))
+        ui.distance_min_btn.triggered.connect(lambda: self.distance_min_tool.run(toggle=True))
+        ui.origin_btn.triggered.connect(self.on_set_origin)
+        ui.move2origin_btn.triggered.connect(self.on_move2origin)
 
 
-        self.ui.jmp_btn.triggered.connect(self.on_jump_to)
-        self.ui.locate_btn.triggered.connect(lambda: self.on_locate(obj=self.collection.get_active()))
+        ui.jmp_btn.triggered.connect(self.on_jump_to)
+        ui.locate_btn.triggered.connect(lambda: self.on_locate(obj=self.collection.get_active()))
 
 
         # Scripting Toolbar Signals
         # Scripting Toolbar Signals
-        self.ui.shell_btn.triggered.connect(self.ui.toggle_shell_ui)
-        self.ui.new_script_btn.triggered.connect(self.on_filenewscript)
-        self.ui.open_script_btn.triggered.connect(self.on_fileopenscript)
-        self.ui.run_script_btn.triggered.connect(self.on_filerunscript)
+        ui.shell_btn.triggered.connect(ui.toggle_shell_ui)
+        ui.new_script_btn.triggered.connect(self.on_filenewscript)
+        ui.open_script_btn.triggered.connect(self.on_fileopenscript)
+        ui.run_script_btn.triggered.connect(self.on_filerunscript)
 
 
         # Tools Toolbar Signals
         # Tools Toolbar Signals
-        self.ui.dblsided_btn.triggered.connect(lambda: self.dblsidedtool.run(toggle=True))
-        self.ui.cal_btn.triggered.connect(lambda: self.cal_exc_tool.run(toggle=True))
-        self.ui.align_btn.triggered.connect(lambda: self.align_objects_tool.run(toggle=True))
-        self.ui.extract_btn.triggered.connect(lambda: self.edrills_tool.run(toggle=True))
-
-        self.ui.cutout_btn.triggered.connect(lambda: self.cutout_tool.run(toggle=True))
-        self.ui.ncc_btn.triggered.connect(lambda: self.ncclear_tool.run(toggle=True))
-        self.ui.paint_btn.triggered.connect(lambda: self.paint_tool.run(toggle=True))
-        self.ui.isolation_btn.triggered.connect(lambda: self.isolation_tool.run(toggle=True))
-
-        self.ui.panelize_btn.triggered.connect(lambda: self.panelize_tool.run(toggle=True))
-        self.ui.film_btn.triggered.connect(lambda: self.film_tool.run(toggle=True))
-        self.ui.solder_btn.triggered.connect(lambda: self.paste_tool.run(toggle=True))
-        self.ui.sub_btn.triggered.connect(lambda: self.sub_tool.run(toggle=True))
-        self.ui.rules_btn.triggered.connect(lambda: self.rules_tool.run(toggle=True))
-        self.ui.optimal_btn.triggered.connect(lambda: self.optimal_tool.run(toggle=True))
-
-        self.ui.calculators_btn.triggered.connect(lambda: self.calculator_tool.run(toggle=True))
-        self.ui.transform_btn.triggered.connect(lambda: self.transform_tool.run(toggle=True))
-        self.ui.qrcode_btn.triggered.connect(lambda: self.qrcode_tool.run(toggle=True))
-        self.ui.copperfill_btn.triggered.connect(lambda: self.copper_thieving_tool.run(toggle=True))
-        self.ui.fiducials_btn.triggered.connect(lambda: self.fiducial_tool.run(toggle=True))
-        self.ui.punch_btn.triggered.connect(lambda: self.punch_tool.run(toggle=True))
-        self.ui.invert_btn.triggered.connect(lambda: self.invert_tool.run(toggle=True))
-        self.ui.corners_tool_btn.triggered.connect(lambda: self.corners_tool.run(toggle=True))
-        self.ui.etch_btn.triggered.connect(lambda: self.etch_tool.run(toggle=True))
+        try:
+            self.connect_tools_signals_to_toolbar(ui=ui)
+        except Exception as err:
+            log.debug("App.connect_toolbar_signals() tools signals -> %s" % str(err))
 
 
     def object2editor(self):
     def object2editor(self):
         """
         """