- fixed bug that did not allow joining of any object to a Geometry object

- working on solving the lost triggered signals for the Editor Toolbars buttons after changing the layout
This commit is contained in:
Marius Stanciu 2020-10-30 18:16:09 +02:00 committed by Marius
parent 46900d795d
commit fa7b965f63
5 changed files with 259 additions and 235 deletions

View File

@ -13,6 +13,8 @@ CHANGELOG for FlatCAM beta
- in Tool Subtract added an option to delete the source objects after a successful operation. Fixed issue #455
- when entering into an Editor now the Project tab is disabled and the Properties tab where the Editor is installed change the text to 'Editor' and the color is set in Red. After exiting the Tab text is reverted to previous state.
- fixed and issue where the Tab color that was changed in various states of the app was reverted back to a default color 'black'. Now it reverts to whatever color had before therefore being compatible with an usage of black theme
- fixed bug that did not allow joining of any object to a Geometry object
- working on solving the lost triggered signals for the Editor Toolbars buttons after changing the layout
29.10.2020
@ -27,7 +29,7 @@ CHANGELOG for FlatCAM beta
- fixed a small issue in GCode Editor where the signals for the buttons were attached again at each launch of the GCode Editor
- fixed issues in the Tools Database due of recent changes in how the data structure is created
- made sure that the right tools go only to the intended use, in Tools Database otherwise an error status message is created and Tools DB is closed on adding a wrong tool
- fixed the usage for Tools Database in Unix-like OS's
- fixed the usage for Tools Database in Unix-like OS's; fixed issue #453
- done some modest refactoring
- fixed the Search and Add feature in Geometry Object UI
- fixed issue with preamble not being inserted when used alone

View File

@ -230,6 +230,7 @@ class ExclusionAreas(QtCore.QObject):
self.app = app
self.app.log.debug("+ Adding Exclusion Areas")
# Storage for shapes, storage that can be used by FlatCAm tools for utility geometry
# VisPy visuals
if self.app.is_legacy is False:

View File

@ -2128,6 +2128,7 @@ class MainGUI(QtWidgets.QMainWindow):
:return: None
"""
self.app.log.debug(" -> Add actions to new Toolbars")
# ########################################################################
# ## File Toolbar # ##

View File

@ -326,7 +326,7 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI):
self.proj_color_entry.editingFinished.connect(self.on_proj_color_entry)
self.proj_color_dis_entry.editingFinished.connect(self.on_proj_color_dis_entry)
self.layout_combo.activated.connect(self.on_layout)
self.layout_combo.activated.connect(self.app.on_layout)
@staticmethod
def handle_style(style):
@ -407,143 +407,3 @@ class GeneralGUIPrefGroupUI(OptionsGroupUI):
def on_proj_color_dis_entry(self):
self.app.defaults['global_proj_item_dis_color'] = self.proj_color_dis_entry.get_value()
def on_layout(self, index=None, lay=None):
"""
Set the toolbars layout (location)
:param index:
:param lay: Type of layout to be set on the toolbard
:return: None
"""
self.app.defaults.report_usage("on_layout()")
if lay:
current_layout = lay
else:
current_layout = self.layout_combo.get_value()
lay_settings = QSettings("Open Source", "FlatCAM")
lay_settings.setValue('layout', current_layout)
# This will write the setting to the platform specific storage.
del lay_settings
# first remove the toolbars:
try:
self.app.ui.removeToolBar(self.app.ui.toolbarfile)
self.app.ui.removeToolBar(self.app.ui.toolbaredit)
self.app.ui.removeToolBar(self.app.ui.toolbarview)
self.app.ui.removeToolBar(self.app.ui.toolbarshell)
self.app.ui.removeToolBar(self.app.ui.toolbartools)
self.app.ui.removeToolBar(self.app.ui.exc_edit_toolbar)
self.app.ui.removeToolBar(self.app.ui.geo_edit_toolbar)
self.app.ui.removeToolBar(self.app.ui.grb_edit_toolbar)
self.app.ui.removeToolBar(self.app.ui.toolbarshell)
except Exception:
pass
if current_layout == 'compact':
# ## TOOLBAR INSTALLATION # ##
self.app.ui.toolbarfile = QtWidgets.QToolBar('File Toolbar')
self.app.ui.toolbarfile.setObjectName('File_TB')
self.app.ui.addToolBar(Qt.LeftToolBarArea, self.app.ui.toolbarfile)
self.app.ui.toolbaredit = QtWidgets.QToolBar('Edit Toolbar')
self.app.ui.toolbaredit.setObjectName('Edit_TB')
self.app.ui.addToolBar(Qt.LeftToolBarArea, self.app.ui.toolbaredit)
self.app.ui.toolbarshell = QtWidgets.QToolBar('Shell Toolbar')
self.app.ui.toolbarshell.setObjectName('Shell_TB')
self.app.ui.addToolBar(Qt.LeftToolBarArea, self.app.ui.toolbarshell)
self.app.ui.toolbartools = QtWidgets.QToolBar('Tools Toolbar')
self.app.ui.toolbartools.setObjectName('Tools_TB')
self.app.ui.addToolBar(Qt.LeftToolBarArea, self.app.ui.toolbartools)
self.app.ui.geo_edit_toolbar = QtWidgets.QToolBar('Geometry Editor Toolbar')
# self.app.ui.geo_edit_toolbar.setVisible(False)
self.app.ui.geo_edit_toolbar.setObjectName('GeoEditor_TB')
self.app.ui.addToolBar(Qt.RightToolBarArea, self.app.ui.geo_edit_toolbar)
self.app.ui.toolbarview = QtWidgets.QToolBar('View Toolbar')
self.app.ui.toolbarview.setObjectName('View_TB')
self.app.ui.addToolBar(Qt.RightToolBarArea, self.app.ui.toolbarview)
self.app.ui.addToolBarBreak(area=Qt.RightToolBarArea)
self.app.ui.grb_edit_toolbar = QtWidgets.QToolBar('Gerber Editor Toolbar')
# self.app.ui.grb_edit_toolbar.setVisible(False)
self.app.ui.grb_edit_toolbar.setObjectName('GrbEditor_TB')
self.app.ui.addToolBar(Qt.RightToolBarArea, self.app.ui.grb_edit_toolbar)
self.app.ui.exc_edit_toolbar = QtWidgets.QToolBar('Excellon Editor Toolbar')
self.app.ui.exc_edit_toolbar.setObjectName('ExcEditor_TB')
self.app.ui.addToolBar(Qt.RightToolBarArea, self.app.ui.exc_edit_toolbar)
else:
# ## TOOLBAR INSTALLATION # ##
self.app.ui.toolbarfile = QtWidgets.QToolBar('File Toolbar')
self.app.ui.toolbarfile.setObjectName('File_TB')
self.app.ui.addToolBar(self.app.ui.toolbarfile)
self.app.ui.toolbaredit = QtWidgets.QToolBar('Edit Toolbar')
self.app.ui.toolbaredit.setObjectName('Edit_TB')
self.app.ui.addToolBar(self.app.ui.toolbaredit)
self.app.ui.toolbarview = QtWidgets.QToolBar('View Toolbar')
self.app.ui.toolbarview.setObjectName('View_TB')
self.app.ui.addToolBar(self.app.ui.toolbarview)
self.app.ui.toolbarshell = QtWidgets.QToolBar('Shell Toolbar')
self.app.ui.toolbarshell.setObjectName('Shell_TB')
self.app.ui.addToolBar(self.app.ui.toolbarshell)
self.app.ui.toolbartools = QtWidgets.QToolBar('Tools Toolbar')
self.app.ui.toolbartools.setObjectName('Tools_TB')
self.app.ui.addToolBar(self.app.ui.toolbartools)
self.app.ui.exc_edit_toolbar = QtWidgets.QToolBar('Excellon Editor Toolbar')
# self.app.ui.exc_edit_toolbar.setVisible(False)
self.app.ui.exc_edit_toolbar.setObjectName('ExcEditor_TB')
self.app.ui.addToolBar(self.app.ui.exc_edit_toolbar)
self.app.ui.addToolBarBreak()
self.app.ui.geo_edit_toolbar = QtWidgets.QToolBar('Geometry Editor Toolbar')
# self.app.ui.geo_edit_toolbar.setVisible(False)
self.app.ui.geo_edit_toolbar.setObjectName('GeoEditor_TB')
self.app.ui.addToolBar(self.app.ui.geo_edit_toolbar)
self.app.ui.grb_edit_toolbar = QtWidgets.QToolBar('Gerber Editor Toolbar')
# self.app.ui.grb_edit_toolbar.setVisible(False)
self.app.ui.grb_edit_toolbar.setObjectName('GrbEditor_TB')
self.app.ui.addToolBar(self.app.ui.grb_edit_toolbar)
if current_layout == 'minimal':
self.app.ui.toolbarview.setVisible(False)
self.app.ui.toolbarshell.setVisible(False)
self.app.ui.geo_edit_toolbar.setVisible(False)
self.app.ui.grb_edit_toolbar.setVisible(False)
self.app.ui.exc_edit_toolbar.setVisible(False)
self.app.ui.lock_toolbar(lock=True)
# add all the actions to the toolbars
self.app.ui.populate_toolbars()
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.corner_snap_btn.setVisible(False)
self.app.ui.snap_magnet.setVisible(False)
self.app.ui.grid_gap_x_entry.setText(str(self.app.defaults["global_gridx"]))
self.app.ui.grid_gap_y_entry.setText(str(self.app.defaults["global_gridy"]))
self.app.ui.snap_max_dist_entry.setText(str(self.app.defaults["global_snap_max"]))
self.app.ui.grid_gap_link_cb.setChecked(True)

View File

@ -281,9 +281,6 @@ class App(QtCore.QObject):
self.qapp = qapp
# declare it here so there is a reference
self.f_handlers = lambda: None
# ############################################################################################################
# ################# Setup the listening thread for another instance launching with args ######################
# ############################################################################################################
@ -610,23 +607,6 @@ class App(QtCore.QObject):
# When the self.defaults dictionary changes will update the Preferences GUI forms
self.defaults.set_change_callback(self.on_defaults_dict_change)
# ###########################################################################################################
# ##################################### FIRST RUN SECTION ###################################################
# ################################ It's done only once after install #####################################
# ###########################################################################################################
if self.defaults["first_run"] is True:
# ONLY AT FIRST STARTUP INIT THE GUI LAYOUT TO 'minimal'
initial_lay = 'minimal'
self.ui.general_defaults_form.general_gui_group.on_layout(lay=initial_lay)
# Set the combobox in Preferences to the current layout
idx = self.ui.general_defaults_form.general_gui_group.layout_combo.findText(initial_lay)
self.ui.general_defaults_form.general_gui_group.layout_combo.setCurrentIndex(idx)
# after the first run, this object should be False
self.defaults["first_run"] = False
self.preferencesUiManager.save_defaults(silent=True)
# ###########################################################################################################
# ############################################ Data #########################################################
# ###########################################################################################################
@ -1284,7 +1264,10 @@ class App(QtCore.QObject):
self.log.debug("Finished adding FlatCAM Editor's.")
self.ui.set_ui_title(name=_("New Project - Not saved"))
# ###########################################################################################################
# ########################################## Install OPTIMIZATIONS for GCode generation #####################
# ###########################################################################################################
current_platform = platform.architecture()[0]
if current_platform != '64bit':
# set Excellon path optimizations algorithm to TSA if the app is run on a 32bit platform
@ -1311,6 +1294,25 @@ class App(QtCore.QObject):
# this is calculated in the class above (somehow?)
self.defaults["root_folder_path"] = self.app_home
# ###########################################################################################################
# ##################################### FIRST RUN SECTION ###################################################
# ################################ It's done only once after install #####################################
# ###########################################################################################################
if self.defaults["first_run"] is True:
# ONLY AT FIRST STARTUP INIT THE GUI LAYOUT TO 'minimal'
self.log.debug("-> First Run: Setting up the first Layout" )
initial_lay = 'minimal'
self.on_layout(lay=initial_lay)
# Set the combobox in Preferences to the current layout
idx = self.ui.general_defaults_form.general_gui_group.layout_combo.findText(initial_lay)
self.ui.general_defaults_form.general_gui_group.layout_combo.setCurrentIndex(idx)
# after the first run, this object should be False
self.defaults["first_run"] = False
self.log.debug("-> First Run: Updating the Defaults file with Factory Defaults")
self.preferencesUiManager.save_defaults(silent=True)
# ###########################################################################################################
# ############################################### SYS TRAY ##################################################
# ###########################################################################################################
@ -1497,7 +1499,7 @@ class App(QtCore.QObject):
self.ui.menuprojectproperties.triggered.connect(self.obj_properties)
# ToolBar signals
self.connect_toolbar_signals(ui=self.ui)
self.connect_toolbar_signals()
# Context Menu
self.ui.popmenu_disable.triggered.connect(lambda: self.toggle_plots(self.collection.get_selected()))
@ -2103,85 +2105,254 @@ class App(QtCore.QObject):
# self.worker_task.emit({'fcn': self.f_parse.get_fonts_by_types,
# 'params': []})
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))
def connect_tools_signals_to_toolbar(self):
self.log.debug(" -> Connecting Tools Toolbar Signals")
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.drill_btn.triggered.connect(lambda: self.drilling_tool.run(toggle=True))
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))
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))
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.drill_btn.triggered.connect(lambda: self.drilling_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))
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))
def connect_toolbar_signals(self, ui):
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 connect_editors_signals_to_toolbar(self):
self.log.debug(" -> Connecting Editors Toolbar Signals")
# Geometry Editor Toolbar Signals
for tool in self.geo_editor.tools:
self.geo_editor.tools[tool]["button"].triggered.connect(lambda: self.geo_editor.on_tool_select(tool))
self.geo_editor.tools[tool]["button"].setCheckable(True)
# Gerber Editor Toolbar Signals
for tool in self.grb_editor.tools_gerber:
self.grb_editor.tools_gerber[tool]["button"].triggered.connect(lambda: self.grb_editor.on_tool_select(tool))
self.grb_editor.tools_gerber[tool]["button"].setCheckable(True)
# Excellon Editor Toolbar Signals
for tool in self.exc_editor.tools_exc:
self.exc_editor.tools_exc[tool]["button"].triggered.connect(lambda: self.exc_editor.on_tool_select(tool))
self.exc_editor.tools_exc[tool]["button"].setCheckable(True)
def connect_toolbar_signals(self):
"""
Reconnect the signals to the actions in the toolbar.
This has to be done each time after the FlatCAM tools are removed/installed.
:return: None
"""
self.log.debug(" -> Connecting Toolbar Signals")
# Toolbar
# File Toolbar Signals
# ui.file_new_btn.triggered.connect(self.on_file_new)
ui.file_open_btn.triggered.connect(self.f_handlers.on_file_openproject)
ui.file_save_btn.triggered.connect(self.f_handlers.on_file_saveproject)
ui.file_open_gerber_btn.triggered.connect(self.f_handlers.on_fileopengerber)
ui.file_open_excellon_btn.triggered.connect(self.f_handlers.on_fileopenexcellon)
self.ui.file_open_btn.triggered.connect(self.f_handlers.on_file_openproject)
self.ui.file_save_btn.triggered.connect(self.f_handlers.on_file_saveproject)
self.ui.file_open_gerber_btn.triggered.connect(self.f_handlers.on_fileopengerber)
self.ui.file_open_excellon_btn.triggered.connect(self.f_handlers.on_fileopenexcellon)
# View Toolbar Signals
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))
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))
# Edit Toolbar Signals
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.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.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.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.jmp_btn.triggered.connect(self.on_jump_to)
ui.locate_btn.triggered.connect(lambda: self.on_locate(obj=self.collection.get_active()))
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()))
# Scripting Toolbar Signals
ui.shell_btn.triggered.connect(ui.toggle_shell_ui)
ui.new_script_btn.triggered.connect(self.f_handlers.on_filenewscript)
ui.open_script_btn.triggered.connect(self.f_handlers.on_fileopenscript)
ui.run_script_btn.triggered.connect(self.f_handlers.on_filerunscript)
self.ui.shell_btn.triggered.connect(self.ui.toggle_shell_ui)
self.ui.new_script_btn.triggered.connect(self.f_handlers.on_filenewscript)
self.ui.open_script_btn.triggered.connect(self.f_handlers.on_fileopenscript)
self.ui.run_script_btn.triggered.connect(self.f_handlers.on_filerunscript)
# Tools Toolbar Signals
try:
self.connect_tools_signals_to_toolbar(ui=ui)
self.connect_tools_signals_to_toolbar()
except Exception as err:
self.log.debug("App.connect_toolbar_signals() tools signals -> %s" % str(err))
# Editor Toolbars Signals
try:
self.connect_editors_signals_to_toolbar()
except Exception as err:
self.log.debug("App.connect_toolbar_signals() editor signals -> %s" % str(err))
def on_layout(self, index=None, lay=None):
"""
Set the toolbars layout (location)
:param index:
:param lay: Type of layout to be set on the toolbard
:return: None
"""
self.defaults.report_usage("on_layout()")
self.log.debug(" ---> New Layout")
if lay:
current_layout = lay
else:
current_layout = self.ui.general_defaults_form.general_gui_group.layout_combo.get_value()
lay_settings = QSettings("Open Source", "FlatCAM")
lay_settings.setValue('layout', current_layout)
# This will write the setting to the platform specific storage.
del lay_settings
# first remove the toolbars:
self.log.debug(" -> Remove Toolbars")
try:
self.ui.removeToolBar(self.ui.toolbarfile)
self.ui.removeToolBar(self.ui.toolbaredit)
self.ui.removeToolBar(self.ui.toolbarview)
self.ui.removeToolBar(self.ui.toolbarshell)
self.ui.removeToolBar(self.ui.toolbartools)
self.ui.removeToolBar(self.ui.exc_edit_toolbar)
self.ui.removeToolBar(self.ui.geo_edit_toolbar)
self.ui.removeToolBar(self.ui.grb_edit_toolbar)
self.ui.removeToolBar(self.ui.toolbarshell)
except Exception:
pass
self.log.debug(" -> Add New Toolbars")
if current_layout == 'compact':
# ## TOOLBAR INSTALLATION # ##
self.ui.toolbarfile = QtWidgets.QToolBar('File Toolbar')
self.ui.toolbarfile.setObjectName('File_TB')
self.ui.addToolBar(Qt.LeftToolBarArea, self.ui.toolbarfile)
self.ui.toolbaredit = QtWidgets.QToolBar('Edit Toolbar')
self.ui.toolbaredit.setObjectName('Edit_TB')
self.ui.addToolBar(Qt.LeftToolBarArea, self.ui.toolbaredit)
self.ui.toolbarshell = QtWidgets.QToolBar('Shell Toolbar')
self.ui.toolbarshell.setObjectName('Shell_TB')
self.ui.addToolBar(Qt.LeftToolBarArea, self.ui.toolbarshell)
self.ui.toolbartools = QtWidgets.QToolBar('Tools Toolbar')
self.ui.toolbartools.setObjectName('Tools_TB')
self.ui.addToolBar(Qt.LeftToolBarArea, self.ui.toolbartools)
self.ui.geo_edit_toolbar = QtWidgets.QToolBar('Geometry Editor Toolbar')
# self.ui.geo_edit_toolbar.setVisible(False)
self.ui.geo_edit_toolbar.setObjectName('GeoEditor_TB')
self.ui.addToolBar(Qt.RightToolBarArea, self.ui.geo_edit_toolbar)
self.ui.toolbarview = QtWidgets.QToolBar('View Toolbar')
self.ui.toolbarview.setObjectName('View_TB')
self.ui.addToolBar(Qt.RightToolBarArea, self.ui.toolbarview)
self.ui.addToolBarBreak(area=Qt.RightToolBarArea)
self.ui.grb_edit_toolbar = QtWidgets.QToolBar('Gerber Editor Toolbar')
# self.ui.grb_edit_toolbar.setVisible(False)
self.ui.grb_edit_toolbar.setObjectName('GrbEditor_TB')
self.ui.addToolBar(Qt.RightToolBarArea, self.ui.grb_edit_toolbar)
self.ui.exc_edit_toolbar = QtWidgets.QToolBar('Excellon Editor Toolbar')
self.ui.exc_edit_toolbar.setObjectName('ExcEditor_TB')
self.ui.addToolBar(Qt.RightToolBarArea, self.ui.exc_edit_toolbar)
else:
# ## TOOLBAR INSTALLATION # ##
self.ui.toolbarfile = QtWidgets.QToolBar('File Toolbar')
self.ui.toolbarfile.setObjectName('File_TB')
self.ui.addToolBar(self.ui.toolbarfile)
self.ui.toolbaredit = QtWidgets.QToolBar('Edit Toolbar')
self.ui.toolbaredit.setObjectName('Edit_TB')
self.ui.addToolBar(self.ui.toolbaredit)
self.ui.toolbarview = QtWidgets.QToolBar('View Toolbar')
self.ui.toolbarview.setObjectName('View_TB')
self.ui.addToolBar(self.ui.toolbarview)
self.ui.toolbarshell = QtWidgets.QToolBar('Shell Toolbar')
self.ui.toolbarshell.setObjectName('Shell_TB')
self.ui.addToolBar(self.ui.toolbarshell)
self.ui.toolbartools = QtWidgets.QToolBar('Tools Toolbar')
self.ui.toolbartools.setObjectName('Tools_TB')
self.ui.addToolBar(self.ui.toolbartools)
self.ui.exc_edit_toolbar = QtWidgets.QToolBar('Excellon Editor Toolbar')
# self.ui.exc_edit_toolbar.setVisible(False)
self.ui.exc_edit_toolbar.setObjectName('ExcEditor_TB')
self.ui.addToolBar(self.ui.exc_edit_toolbar)
self.ui.addToolBarBreak()
self.ui.geo_edit_toolbar = QtWidgets.QToolBar('Geometry Editor Toolbar')
# self.ui.geo_edit_toolbar.setVisible(False)
self.ui.geo_edit_toolbar.setObjectName('GeoEditor_TB')
self.ui.addToolBar(self.ui.geo_edit_toolbar)
self.ui.grb_edit_toolbar = QtWidgets.QToolBar('Gerber Editor Toolbar')
# self.ui.grb_edit_toolbar.setVisible(False)
self.ui.grb_edit_toolbar.setObjectName('GrbEditor_TB')
self.ui.addToolBar(self.ui.grb_edit_toolbar)
if current_layout == 'minimal':
self.ui.toolbarview.setVisible(False)
self.ui.toolbarshell.setVisible(False)
self.ui.geo_edit_toolbar.setVisible(False)
self.ui.grb_edit_toolbar.setVisible(False)
self.ui.exc_edit_toolbar.setVisible(False)
self.ui.lock_toolbar(lock=True)
# add all the actions to the toolbars
self.ui.populate_toolbars()
try:
# reconnect all the signals to the toolbar actions
self.connect_toolbar_signals()
except Exception as e:
self.log.debug(
"App.on_layout() - connect toolbar signals -> %s" % str(e))
self.ui.grid_snap_btn.setChecked(True)
self.ui.corner_snap_btn.setVisible(False)
self.ui.snap_magnet.setVisible(False)
self.ui.grid_gap_x_entry.setText(str(self.defaults["global_gridx"]))
self.ui.grid_gap_y_entry.setText(str(self.defaults["global_gridy"]))
self.ui.snap_max_dist_entry.setText(str(self.defaults["global_snap_max"]))
self.ui.grid_gap_link_cb.setChecked(True)
def object2editor(self):
"""
Send the current Geometry, Gerber, Excellon object or CNCJob (if any) into the it's editor.
@ -3653,12 +3824,12 @@ class App(QtCore.QObject):
# register all keys in the Preferences window
for ext in exc_list:
new_k = new_reg_path + '.%s' % ext
set_reg('', root_path=root_path, new_reg_path=new_k, value='FlatCAM')
set_reg('', root_pth=root_path, new_reg_path_par=new_k, value='FlatCAM')
# and unregister those that are no longer in the Preferences windows but are in the file
for ext in self.defaults["fa_excellon"].replace(' ', '').split(','):
if ext not in exc_list:
delete_reg(root_path=root_path, reg_path=new_reg_path, key_to_del='.%s' % ext)
delete_reg(root_pth=root_path, reg_path=new_reg_path, key_to_del='.%s' % ext)
# now write the updated extensions to the self.defaults
# new_ext = ''
@ -3674,18 +3845,13 @@ class App(QtCore.QObject):
# register all keys in the Preferences window
for ext in gco_list:
new_k = new_reg_path + '.%s' % ext
set_reg('', root_path=root_path, new_reg_path=new_k, value='FlatCAM')
set_reg('', root_pth=root_path, new_reg_path_par=new_k, value='FlatCAM')
# and unregister those that are no longer in the Preferences windows but are in the file
for ext in self.defaults["fa_gcode"].replace(' ', '').split(','):
if ext not in gco_list:
delete_reg(root_path=root_path, reg_path=new_reg_path, key_to_del='.%s' % ext)
delete_reg(root_pth=root_path, reg_path=new_reg_path, key_to_del='.%s' % ext)
# now write the updated extensions to the self.defaults
# new_ext = ''
# for ext in gco_list:
# new_ext = new_ext + ext + ', '
# self.defaults["fa_gcode"] = new_ext
self.inform.emit('[success] %s' %
_("Selected GCode file extensions registered with FlatCAM."))
@ -3696,20 +3862,14 @@ class App(QtCore.QObject):
# register all keys in the Preferences window
for ext in grb_list:
new_k = new_reg_path + '.%s' % ext
set_reg('', root_path=root_path, new_reg_path=new_k, value='FlatCAM')
set_reg('', root_pth=root_path, new_reg_path_par=new_k, value='FlatCAM')
# and unregister those that are no longer in the Preferences windows but are in the file
for ext in self.defaults["fa_gerber"].replace(' ', '').split(','):
if ext not in grb_list:
delete_reg(root_path=root_path, reg_path=new_reg_path, key_to_del='.%s' % ext)
delete_reg(root_pth=root_path, reg_path=new_reg_path, key_to_del='.%s' % ext)
# now write the updated extensions to the self.defaults
# new_ext = ''
# for ext in grb_list:
# new_ext = new_ext + ext + ', '
# self.defaults["fa_gerber"] = new_ext
self.inform.emit('[success] %s' %
_("Selected Gerber file extensions registered with FlatCAM."))
self.inform.emit('[success] %s' % _("Selected Gerber file extensions registered with FlatCAM."))
def add_extension(self, ext_type):
"""
@ -3919,7 +4079,7 @@ class App(QtCore.QObject):
# if at least one True object is in the list then due of the previous check, all list elements are True objects
if True in geo_type_set:
def initialize(geo_obj, app):
GeometryObject.merge(geo_list=objs, geo_final=geo_obj, multigeo=True, fuse_tools=fuse_tools)
GeometryObject.merge(geo_list=objs, geo_final=geo_obj, multi_geo=True, fuse_tools=fuse_tools)
app.inform.emit('[success] %s.' % _("Geometry merging finished"))
# rename all the ['name] key in obj.tools[tooluid]['data'] to the obj_name_multi
@ -3929,7 +4089,7 @@ class App(QtCore.QObject):
self.app_obj.new_object("geometry", obj_name_multi, initialize)
else:
def initialize(geo_obj, app):
GeometryObject.merge(geo_list=objs, geo_final=geo_obj, multigeo=False, fuse_tools=fuse_tools)
GeometryObject.merge(geo_list=objs, geo_final=geo_obj, multi_geo=False, fuse_tools=fuse_tools)
app.inform.emit('[success] %s.' % _("Geometry merging finished"))
# rename all the ['name] key in obj.tools[tooluid]['data'] to the obj_name_multi