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

This commit is contained in:
Marius Stanciu
2020-06-08 19:28:39 +03:00
committed by Marius
parent c915ea8f6d
commit d97d3eabd2
5 changed files with 93 additions and 76 deletions

View File

@@ -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

View File

@@ -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_label, 5, 0, 1, 2)
grid0.addWidget(self.app_level_radio, 5, 1) 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.languagelabel, 9, 0, 1, 2)
grid0.addWidget(self.language_cb, 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"

View File

@@ -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 try:
self.app.connect_toolbar_signals() # 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)

View File

@@ -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

View File

@@ -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) # ui.file_new_btn.triggered.connect(self.on_file_new)
self.ui.file_open_btn.triggered.connect(self.on_file_openproject) ui.file_open_btn.triggered.connect(self.on_file_openproject)
self.ui.file_save_btn.triggered.connect(self.on_file_saveproject) ui.file_save_btn.triggered.connect(self.on_file_saveproject)
self.ui.file_open_gerber_btn.triggered.connect(self.on_fileopengerber) ui.file_open_gerber_btn.triggered.connect(self.on_fileopengerber)
self.ui.file_open_excellon_btn.triggered.connect(self.on_fileopenexcellon) 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) ui.clear_plot_btn.triggered.connect(self.clear_plots)
self.ui.replot_btn.triggered.connect(self.plot_all) ui.replot_btn.triggered.connect(self.plot_all)
self.ui.zoom_fit_btn.triggered.connect(self.on_zoom_fit) ui.zoom_fit_btn.triggered.connect(self.on_zoom_fit)
self.ui.zoom_in_btn.triggered.connect(lambda: self.plotcanvas.zoom(1 / 1.5)) 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.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) ui.editgeo_btn.triggered.connect(self.object2editor)
self.ui.update_obj_btn.triggered.connect(lambda: self.editor2object()) ui.update_obj_btn.triggered.connect(lambda: self.editor2object())
self.ui.copy_btn.triggered.connect(self.on_copy_command) ui.copy_btn.triggered.connect(self.on_copy_command)
self.ui.delete_btn.triggered.connect(self.on_delete) ui.delete_btn.triggered.connect(self.on_delete)
self.ui.distance_btn.triggered.connect(lambda: self.distance_tool.run(toggle=True)) 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)) ui.distance_min_btn.triggered.connect(lambda: self.distance_min_tool.run(toggle=True))
self.ui.origin_btn.triggered.connect(self.on_set_origin) ui.origin_btn.triggered.connect(self.on_set_origin)
self.ui.move2origin_btn.triggered.connect(self.on_move2origin) ui.move2origin_btn.triggered.connect(self.on_move2origin)
self.ui.jmp_btn.triggered.connect(self.on_jump_to) 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.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) ui.shell_btn.triggered.connect(ui.toggle_shell_ui)
self.ui.new_script_btn.triggered.connect(self.on_filenewscript) ui.new_script_btn.triggered.connect(self.on_filenewscript)
self.ui.open_script_btn.triggered.connect(self.on_fileopenscript) ui.open_script_btn.triggered.connect(self.on_fileopenscript)
self.ui.run_script_btn.triggered.connect(self.on_filerunscript) 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)) try:
self.ui.cal_btn.triggered.connect(lambda: self.cal_exc_tool.run(toggle=True)) self.connect_tools_signals_to_toolbar(ui=ui)
self.ui.align_btn.triggered.connect(lambda: self.align_objects_tool.run(toggle=True)) except Exception as err:
self.ui.extract_btn.triggered.connect(lambda: self.edrills_tool.run(toggle=True)) log.debug("App.connect_toolbar_signals() tools signals -> %s" % str(err))
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))
def object2editor(self): def object2editor(self):
""" """