Merged marius_stanciu/flatcam_beta/Beta_8.994 into Beta
This commit is contained in:
commit
6055c725cf
|
@ -16,6 +16,8 @@ CHANGELOG for FlatCAM beta
|
|||
- 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
|
||||
- fixed issue #454; trigger signals for Editor Toolbars lost after changing the layout
|
||||
- updated the translation strings
|
||||
- more bugs that were introduced by recent changes done to solve other bugs and so on: fixed issues with the Editors and Delete shortcut
|
||||
|
||||
29.10.2020
|
||||
|
||||
|
|
|
@ -1529,43 +1529,6 @@ class AppExcEditor(QtCore.QObject):
|
|||
self.decimals = self.app.decimals
|
||||
|
||||
self.e_ui = AppExcEditorUI(app=self.app)
|
||||
|
||||
# #############################################################################################################
|
||||
# ######################### Excellon Editor Signals ###########################################################
|
||||
# #############################################################################################################
|
||||
|
||||
# connect the toolbar signals
|
||||
self.connect_exc_toolbar_signals()
|
||||
|
||||
self.e_ui.convert_slots_btn.clicked.connect(self.on_slots_conversion)
|
||||
self.app.ui.delete_drill_btn.triggered.connect(self.on_delete_btn)
|
||||
self.e_ui.name_entry.returnPressed.connect(self.on_name_activate)
|
||||
self.e_ui.addtool_btn.clicked.connect(self.on_tool_add)
|
||||
self.e_ui.addtool_entry.editingFinished.connect(self.on_tool_add)
|
||||
self.e_ui.deltool_btn.clicked.connect(self.on_tool_delete)
|
||||
# self.e_ui.tools_table_exc.selectionModel().currentChanged.connect(self.on_row_selected)
|
||||
self.e_ui.tools_table_exc.cellPressed.connect(self.on_row_selected)
|
||||
|
||||
self.e_ui.array_type_combo.currentIndexChanged.connect(self.on_array_type_combo)
|
||||
self.e_ui.slot_array_type_combo.currentIndexChanged.connect(self.on_slot_array_type_combo)
|
||||
|
||||
self.e_ui.drill_axis_radio.activated_custom.connect(self.on_linear_angle_radio)
|
||||
self.e_ui.slot_axis_radio.activated_custom.connect(self.on_slot_angle_radio)
|
||||
|
||||
self.e_ui.slot_array_axis_radio.activated_custom.connect(self.on_slot_array_linear_angle_radio)
|
||||
|
||||
self.app.ui.exc_add_array_drill_menuitem.triggered.connect(self.exc_add_drill_array)
|
||||
self.app.ui.exc_add_drill_menuitem.triggered.connect(self.exc_add_drill)
|
||||
|
||||
self.app.ui.exc_add_array_slot_menuitem.triggered.connect(self.exc_add_slot_array)
|
||||
self.app.ui.exc_add_slot_menuitem.triggered.connect(self.exc_add_slot)
|
||||
|
||||
self.app.ui.exc_resize_drill_menuitem.triggered.connect(self.exc_resize_drills)
|
||||
self.app.ui.exc_copy_drill_menuitem.triggered.connect(self.exc_copy_drills)
|
||||
self.app.ui.exc_delete_drill_menuitem.triggered.connect(self.on_delete_btn)
|
||||
|
||||
self.app.ui.exc_move_drill_menuitem.triggered.connect(self.exc_move_drills)
|
||||
self.e_ui.exit_editor_button.clicked.connect(lambda: self.app.editor2object())
|
||||
|
||||
self.exc_obj = None
|
||||
|
||||
|
@ -1679,9 +1642,6 @@ class AppExcEditor(QtCore.QObject):
|
|||
|
||||
self.tool_row = 0
|
||||
|
||||
# store the status of the editor so the Delete at object level will not work until the edit is finished
|
||||
self.editor_active = False
|
||||
|
||||
# def entry2option(option, entry):
|
||||
# self.options[option] = float(entry.text())
|
||||
|
||||
|
@ -1690,8 +1650,43 @@ class AppExcEditor(QtCore.QObject):
|
|||
self.mm = None
|
||||
self.mr = None
|
||||
|
||||
# store the status of the editor so the Delete at object level will not work until the edit is finished
|
||||
self.editor_active = False
|
||||
# #############################################################################################################
|
||||
# ######################### Excellon Editor Signals ###########################################################
|
||||
# #############################################################################################################
|
||||
|
||||
# connect the toolbar signals
|
||||
self.connect_exc_toolbar_signals()
|
||||
|
||||
self.e_ui.convert_slots_btn.clicked.connect(self.on_slots_conversion)
|
||||
self.app.ui.delete_drill_btn.triggered.connect(self.on_delete_btn)
|
||||
self.e_ui.name_entry.returnPressed.connect(self.on_name_activate)
|
||||
self.e_ui.addtool_btn.clicked.connect(self.on_tool_add)
|
||||
self.e_ui.addtool_entry.editingFinished.connect(self.on_tool_add)
|
||||
self.e_ui.deltool_btn.clicked.connect(self.on_tool_delete)
|
||||
# self.e_ui.tools_table_exc.selectionModel().currentChanged.connect(self.on_row_selected)
|
||||
self.e_ui.tools_table_exc.cellPressed.connect(self.on_row_selected)
|
||||
|
||||
self.e_ui.array_type_combo.currentIndexChanged.connect(self.on_array_type_combo)
|
||||
self.e_ui.slot_array_type_combo.currentIndexChanged.connect(self.on_slot_array_type_combo)
|
||||
|
||||
self.e_ui.drill_axis_radio.activated_custom.connect(self.on_linear_angle_radio)
|
||||
self.e_ui.slot_axis_radio.activated_custom.connect(self.on_slot_angle_radio)
|
||||
|
||||
self.e_ui.slot_array_axis_radio.activated_custom.connect(self.on_slot_array_linear_angle_radio)
|
||||
|
||||
self.app.ui.exc_add_array_drill_menuitem.triggered.connect(self.exc_add_drill_array)
|
||||
self.app.ui.exc_add_drill_menuitem.triggered.connect(self.exc_add_drill)
|
||||
|
||||
self.app.ui.exc_add_array_slot_menuitem.triggered.connect(self.exc_add_slot_array)
|
||||
self.app.ui.exc_add_slot_menuitem.triggered.connect(self.exc_add_slot)
|
||||
|
||||
self.app.ui.exc_resize_drill_menuitem.triggered.connect(self.exc_resize_drills)
|
||||
self.app.ui.exc_copy_drill_menuitem.triggered.connect(self.exc_copy_drills)
|
||||
self.app.ui.exc_delete_drill_menuitem.triggered.connect(self.on_delete_btn)
|
||||
|
||||
self.app.ui.exc_move_drill_menuitem.triggered.connect(self.exc_move_drills)
|
||||
self.e_ui.exit_editor_button.clicked.connect(lambda: self.app.editor2object())
|
||||
|
||||
log.debug("Initialization of the Excellon Editor is finished ...")
|
||||
|
||||
def make_callback(self, thetool):
|
||||
|
@ -2295,9 +2290,6 @@ class AppExcEditor(QtCore.QObject):
|
|||
self.app.ui.g_editor_cmenu.menuAction().setVisible(False)
|
||||
self.app.ui.grb_editor_cmenu.menuAction().setVisible(False)
|
||||
|
||||
# Tell the App that the editor is active
|
||||
self.editor_active = True
|
||||
|
||||
# show the UI
|
||||
self.e_ui.drills_frame.show()
|
||||
|
||||
|
@ -2330,9 +2322,6 @@ class AppExcEditor(QtCore.QObject):
|
|||
self.tool_shape.enabled = False
|
||||
# self.app.app_cursor.enabled = False
|
||||
|
||||
# Tell the app that the editor is no longer active
|
||||
self.editor_active = False
|
||||
|
||||
self.app.ui.exc_editor_menu.setDisabled(True)
|
||||
self.app.ui.exc_editor_menu.menuAction().setVisible(False)
|
||||
|
||||
|
|
|
@ -3455,8 +3455,6 @@ class AppGeoEditor(QtCore.QObject):
|
|||
self.mm = None
|
||||
self.mr = None
|
||||
|
||||
# store the status of the editor so the Delete at object level will not work until the edit is finished
|
||||
self.editor_active = False
|
||||
log.debug("Initialization of the Geometry Editor is finished ...")
|
||||
|
||||
def make_callback(self, thetool):
|
||||
|
@ -3661,9 +3659,6 @@ class AppGeoEditor(QtCore.QObject):
|
|||
# for w in sel_tab_widget_list:
|
||||
# w.setEnabled(False)
|
||||
|
||||
# Tell the App that the editor is active
|
||||
self.editor_active = True
|
||||
|
||||
self.item_selected.connect(self.on_geo_elem_selected)
|
||||
|
||||
# ## appGUI Events
|
||||
|
@ -3713,9 +3708,6 @@ class AppGeoEditor(QtCore.QObject):
|
|||
self.app.ui.g_editor_cmenu.setEnabled(False)
|
||||
self.app.ui.e_editor_cmenu.setEnabled(False)
|
||||
|
||||
# Tell the app that the editor is no longer active
|
||||
self.editor_active = False
|
||||
|
||||
self.app.ui.popmenu_disable.setVisible(True)
|
||||
self.app.ui.cmenu_newmenu.menuAction().setVisible(True)
|
||||
self.app.ui.popmenu_properties.setVisible(True)
|
||||
|
|
|
@ -3034,9 +3034,6 @@ class AppGerberEditor(QtCore.QObject):
|
|||
# a QThread for the edit process
|
||||
self.thread = QtCore.QThread()
|
||||
|
||||
# store the status of the editor so the Delete at object level will not work until the edit is finished
|
||||
self.editor_active = False
|
||||
|
||||
# def entry2option(option, entry):
|
||||
# self.options[option] = float(entry.text())
|
||||
|
||||
|
@ -3090,9 +3087,6 @@ class AppGerberEditor(QtCore.QObject):
|
|||
|
||||
self.mp_finished.connect(self.on_multiprocessing_finished)
|
||||
|
||||
# store the status of the editor so the Delete at object level will not work until the edit is finished
|
||||
self.editor_active = False
|
||||
|
||||
self.conversion_factor = 1
|
||||
|
||||
self.apertures_row = 0
|
||||
|
@ -3730,9 +3724,6 @@ class AppGerberEditor(QtCore.QObject):
|
|||
self.app.ui.popmenu_properties.setVisible(False)
|
||||
self.app.ui.grb_editor_cmenu.menuAction().setVisible(True)
|
||||
|
||||
# Tell the App that the editor is active
|
||||
self.editor_active = True
|
||||
|
||||
def deactivate_grb_editor(self):
|
||||
try:
|
||||
QtGui.QGuiApplication.restoreOverrideCursor()
|
||||
|
@ -3763,9 +3754,6 @@ class AppGerberEditor(QtCore.QObject):
|
|||
self.tool_shape.enabled = False
|
||||
# self.app.app_cursor.enabled = False
|
||||
|
||||
# Tell the app that the editor is no longer active
|
||||
self.editor_active = False
|
||||
|
||||
self.app.ui.grb_editor_menu.setDisabled(True)
|
||||
self.app.ui.grb_editor_menu.menuAction().setVisible(False)
|
||||
|
||||
|
|
|
@ -43,9 +43,6 @@ class AppGCodeEditor(QtCore.QObject):
|
|||
self.gcode_obj = None
|
||||
self.code_edited = ''
|
||||
|
||||
# store the status of the editor so the Delete at object level will not work until the edit is finished
|
||||
self.editor_active = False
|
||||
|
||||
# #################################################################################
|
||||
# ################### SIGNALS #####################################################
|
||||
# #################################################################################
|
||||
|
@ -611,11 +608,9 @@ class AppGCodeEditor(QtCore.QObject):
|
|||
file.close()
|
||||
|
||||
def activate(self):
|
||||
self.editor_active = True
|
||||
self.app.call_source = 'gcode_editor'
|
||||
|
||||
def deactivate(self):
|
||||
self.editor_active = False
|
||||
self.app.call_source = 'app'
|
||||
|
||||
def on_name_activate(self):
|
||||
|
|
|
@ -38,10 +38,7 @@ class ToolsSubPrefGroupUI(OptionsGroupUI):
|
|||
self.close_paths_cb = FCCheckBox(_("Close paths"))
|
||||
self.close_paths_cb.setToolTip(_("Checking this will close the paths cut by the Geometry substractor object."))
|
||||
self.layout.addWidget(self.close_paths_cb)
|
||||
self.delete_sources_cb = FCCheckBox(_("Delete source"))
|
||||
self.delete_sources_cb.setToolTip(
|
||||
_("If checked will delete the source objects.")
|
||||
)
|
||||
|
||||
self.delete_sources_cb = FCCheckBox(_("Delete source"))
|
||||
self.delete_sources_cb.setToolTip(
|
||||
_("When checked will delete the source objects\n"
|
||||
|
|
|
@ -433,7 +433,7 @@ class ToolPunchGerber(AppTool):
|
|||
else:
|
||||
grb_solid_geometry.append(el_geo['solid'])
|
||||
|
||||
target_geometry = MultiPolygon(target_geometry)
|
||||
target_geometry = MultiPolygon(target_geometry).buffer(0)
|
||||
|
||||
# create the punched Gerber solid_geometry
|
||||
punched_target_geometry = target_geometry.difference(exc_solid_geometry)
|
||||
|
|
14
app_Main.py
14
app_Main.py
|
@ -281,6 +281,11 @@ class App(QtCore.QObject):
|
|||
|
||||
self.qapp = qapp
|
||||
|
||||
# App Editors will be instantiated further below
|
||||
self.exc_editor = None
|
||||
self.grb_editor = None
|
||||
self.geo_editor = None
|
||||
|
||||
# ############################################################################################################
|
||||
# ################# Setup the listening thread for another instance launching with args ######################
|
||||
# ############################################################################################################
|
||||
|
@ -3554,7 +3559,7 @@ class App(QtCore.QObject):
|
|||
"""
|
||||
|
||||
# close editors before quiting the app, if they are open
|
||||
if self.geo_editor.editor_active is True:
|
||||
if self.call_source == 'geo_editor':
|
||||
self.geo_editor.deactivate()
|
||||
try:
|
||||
self.geo_editor.disconnect()
|
||||
|
@ -3562,7 +3567,7 @@ class App(QtCore.QObject):
|
|||
pass
|
||||
self.log.debug("App.quit_application() --> Geo Editor deactivated.")
|
||||
|
||||
if self.exc_editor.editor_active is True:
|
||||
if self.call_source == 'exc_editor':
|
||||
self.exc_editor.deactivate()
|
||||
try:
|
||||
self.grb_editor.disconnect()
|
||||
|
@ -3570,7 +3575,7 @@ class App(QtCore.QObject):
|
|||
pass
|
||||
self.log.debug("App.quit_application() --> Excellon Editor deactivated.")
|
||||
|
||||
if self.grb_editor.editor_active is True:
|
||||
if self.call_source == 'grb_editor':
|
||||
self.grb_editor.deactivate_grb_editor()
|
||||
try:
|
||||
self.exc_editor.disconnect()
|
||||
|
@ -4705,8 +4710,7 @@ class App(QtCore.QObject):
|
|||
|
||||
# Make sure that the deletion will happen only after the Editor is no longer active otherwise we might delete
|
||||
# a geometry object before we update it.
|
||||
if self.geo_editor.editor_active is False and self.exc_editor.editor_active is False \
|
||||
and self.grb_editor.editor_active is False and self.gcode_editor.editor_active is False:
|
||||
if self.call_source == 'app':
|
||||
if self.defaults["global_delete_confirmation"] is True and force_deletion is False:
|
||||
msgbox = QtWidgets.QMessageBox()
|
||||
msgbox.setWindowTitle(_("Delete objects"))
|
||||
|
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue