- fixed bug in FlatCAMObj.FlatCAMGeometry.ui_disconnect(); the widgets signals were not disconnected from handlers when required therefore the signals were connected in an exponential way

- some changes in the widgets used in the Selected tab for Geometry object
- some PEP8 cleanup in FlatCAMObj.py
This commit is contained in:
Marius Stanciu
2019-07-19 21:46:11 +03:00
parent 86287ea10f
commit 2797a58165
17 changed files with 300 additions and 270 deletions

View File

@@ -181,7 +181,7 @@ class FlatCAMObj(QtCore.QObject):
# self.app.ui.selected_layout.addWidget(self.ui)
try:
self.app.ui.selected_scroll_area.takeWidget()
except:
except Exception as e:
self.app.log.debug("Nothing to remove")
self.app.ui.selected_scroll_area.setWidget(self.ui)
@@ -198,7 +198,7 @@ class FlatCAMObj(QtCore.QObject):
self.app.myKeywords.append(new_name)
self.app.shell._edit.set_model_data(self.app.myKeywords)
self.app.ui.code_editor.set_model_data(self.app.myKeywords)
except:
except Exception as e:
log.debug("on_name_activate() --> Could not remove the old object name from auto-completer model list")
self.options["name"] = self.ui.name_entry.get_value()
@@ -242,7 +242,7 @@ class FlatCAMObj(QtCore.QObject):
for option in self.options:
try:
self.set_form_item(option)
except:
except Exception as e:
self.app.log.warning("Unexpected error:", sys.exc_info())
def read_form(self):
@@ -256,7 +256,7 @@ class FlatCAMObj(QtCore.QObject):
for option in self.options:
try:
self.read_form_item(option)
except:
except Exception as e:
self.app.log.warning("Unexpected error:", sys.exc_info())
def set_form_item(self, option):
@@ -581,7 +581,7 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
try:
# if connected, disconnect the signal from the slot on item_changed as it creates issues
self.ui.apertures_table.itemChanged.disconnect()
except Exception as e:
except TypeError:
pass
self.apertures_row = 0
@@ -725,12 +725,12 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
for row in range(self.ui.apertures_table.rowCount()):
try:
self.ui.apertures_table.cellWidget(row, 5).clicked.disconnect()
except:
except TypeError:
pass
try:
self.ui.mark_all_cb.clicked.disconnect(self.on_mark_all_click)
except:
except TypeError:
pass
def on_generatenoncopper_button_click(self, *args):
@@ -767,7 +767,7 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
def on_ext_iso_button_click(self, *args):
if self.ui.follow_cb.get_value() == True:
if self.ui.follow_cb.get_value() is True:
obj = self.app.collection.get_active()
obj.follow()
# in the end toggle the visibility of the origin object so we can see the generated Geometry
@@ -1278,7 +1278,7 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
:return: Gerber_code
"""
def tz_format(x, y ,fac):
def tz_format(x, y, fac):
x_c = x * fac
y_c = y * fac
@@ -1501,7 +1501,7 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
else:
x_formatted, y_formatted = lz_format(coord[0], coord[1], factor)
gerber_code += "X{xform}Y{yform}D01*\n".format(xform=x_formatted,
yform=y_formatted)
yform=y_formatted)
prev_coord = coord
# gerber_code += "D02*\n"
@@ -1585,7 +1585,7 @@ class FlatCAMExcellon(FlatCAMObj, Excellon):
self.tool_cbs = {}
# dict to hold the tool number as key and tool offset as value
self.tool_offset ={}
self.tool_offset = {}
# variable to store the total amount of drills per job
self.tot_drill_cnt = 0
@@ -1790,7 +1790,7 @@ class FlatCAMExcellon(FlatCAMObj, Excellon):
try:
# if connected, disconnect the signal from the slot on item_changed as it creates issues
self.ui.tools_table.itemChanged.disconnect()
except Exception as e:
except TypeError:
pass
n = len(self.tools)
@@ -1857,7 +1857,8 @@ class FlatCAMExcellon(FlatCAMObj, Excellon):
else:
t_offset = self.tool_offset[float('%.4f' % float(self.tools[tool_no]['C']))]
except KeyError:
t_offset = self.app.defaults['excellon_offset']
t_offset = self.app.defaults['excellon_offset']
tool_offset_item = QtWidgets.QTableWidgetItem('%s' % str(t_offset))
plot_item = FCCheckBox()
@@ -2075,12 +2076,12 @@ class FlatCAMExcellon(FlatCAMObj, Excellon):
for row in range(self.ui.tools_table.rowCount()):
try:
self.ui.tools_table.cellWidget(row, 5).clicked.disconnect()
except Exception as e:
except TypeError:
pass
try:
self.ui.plot_cb.stateChanged.disconnect()
except Exception as e:
except TypeError:
pass
def on_tool_offset_edit(self):
@@ -2854,7 +2855,7 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
if option is not 'name':
try:
geo_final.options[option] = geo.options[option]
except:
except Exception as e:
log.warning("Failed to copy option.", option)
# Expand lists
@@ -2879,6 +2880,7 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
geo_final_uid_list = []
for key in geo_final.tools:
geo_final_uid_list.append(int(key))
try:
max_uid = max(geo_final_uid_list, key=int)
except ValueError:
@@ -3022,7 +3024,6 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
self.ser_attrs += ['options', 'kind', 'tools', 'multigeo']
def build_ui(self):
self.ui_disconnect()
FlatCAMObj.build_ui(self)
@@ -3089,7 +3090,7 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
try:
self.ui.tool_offset_entry.set_value(tooluid_value['offset_value'])
except:
except Exception as e:
log.debug("build_ui() --> Could not set the 'offset_value' key in self.tools")
# make the diameter column editable
@@ -3384,23 +3385,31 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
return
def ui_connect(self):
# on any change to the widgets that matter it will be called self.gui_form_to_storage which will save the
# changes in geometry UI
for i in range(self.ui.grid3.count()):
try:
# works for CheckBoxes
self.ui.grid3.itemAt(i).widget().stateChanged.connect(self.gui_form_to_storage)
except Exception as e:
# works for ComboBoxes
try:
self.ui.grid3.itemAt(i).widget().currentIndexChanged.connect(self.gui_form_to_storage)
except Exception as e2:
# works for Entry
try:
self.ui.grid3.itemAt(i).widget().editingFinished.connect(self.gui_form_to_storage)
except Exception as e3:
pass
# try:
# # works for CheckBoxes
# self.ui.grid3.itemAt(i).widget().stateChanged.connect(self.gui_form_to_storage)
# except Exception as e:
# # works for ComboBoxes
# try:
# self.ui.grid3.itemAt(i).widget().currentIndexChanged.connect(self.gui_form_to_storage)
# except Exception as e2:
# # works for Entry
# try:
# self.ui.grid3.itemAt(i).widget().editingFinished.connect(self.gui_form_to_storage)
# except Exception as e3:
# pass
current_widget = self.ui.grid3.itemAt(i).widget()
if isinstance(current_widget, FCCheckBox):
current_widget.stateChanged.connect(self.gui_form_to_storage)
elif isinstance(current_widget, FCComboBox):
current_widget.currentIndexChanged.connect(self.gui_form_to_storage)
elif isinstance(current_widget, FloatEntry) or isinstance(current_widget, LengthEntry) or \
isinstance(current_widget, FCEntry) or isinstance(current_widget, IntEntry):
current_widget.editingFinished.connect(self.gui_form_to_storage)
for row in range(self.ui.geo_tools_table.rowCount()):
for col in [2, 3, 4]:
@@ -3423,70 +3432,87 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
def ui_disconnect(self):
try:
# on any change to the widgets that matter it will be called self.gui_form_to_storage which will save the
# changes in geometry UI
for i in range(self.ui.grid3.count()):
if isinstance(self.ui.grid3.itemAt(i).widget(), FCCheckBox):
self.ui.grid3.itemAt(i).widget().stateChanged.disconnect()
# on any change to the widgets that matter it will be called self.gui_form_to_storage which will save the
# changes in geometry UI
for i in range(self.ui.grid3.count()):
# try:
# # works for CheckBoxes
# self.ui.grid3.itemAt(i).widget().stateChanged.disconnect(self.gui_form_to_storage)
# except Exception as e:
# # works for ComboBoxes
# try:
# self.ui.grid3.itemAt(i).widget().currentIndexChanged.disconnect(self.gui_form_to_storage)
# except Exception as e2:
# # works for Entry
# try:
# self.ui.grid3.itemAt(i).widget().editingFinished.disconnect(self.gui_form_to_storage)
# except Exception as e3:
# pass
if isinstance(self.ui.grid3.itemAt(i).widget(), FCComboBox):
self.ui.grid3.itemAt(i).widget().currentIndexChanged.disconnect()
current_widget = self.ui.grid3.itemAt(i).widget()
if isinstance(current_widget, FCCheckBox):
try:
self.ui.grid3.itemAt(i).widget().stateChanged.disconnect(self.gui_form_to_storage)
except TypeError:
pass
elif isinstance(current_widget, FCComboBox):
try:
self.ui.grid3.itemAt(i).widget().currentIndexChanged.disconnect(self.gui_form_to_storage)
except TypeError:
pass
elif isinstance(current_widget, LengthEntry) or isinstance(current_widget, IntEntry) or \
isinstance(current_widget, FCEntry) or isinstance(current_widget, FloatEntry):
try:
self.ui.grid3.itemAt(i).widget().editingFinished.disconnect(self.gui_form_to_storage)
except TypeError:
pass
if isinstance(self.ui.grid3.itemAt(i).widget(), LengthEntry) or \
isinstance(self.ui.grid3.itemAt(i).widget(), IntEntry) or \
isinstance(self.ui.grid3.itemAt(i).widget(), FCEntry):
self.ui.grid3.itemAt(i).widget().editingFinished.disconnect()
except Exception as e:
pass
try:
for row in range(self.ui.geo_tools_table.rowCount()):
for col in [2, 3, 4]:
for row in range(self.ui.geo_tools_table.rowCount()):
for col in [2, 3, 4]:
try:
self.ui.geo_tools_table.cellWidget(row, col).currentIndexChanged.disconnect()
except Exception as e:
pass
except TypeError:
pass
# I use lambda's because the connected functions have parameters that could be used in certain scenarios
try:
self.ui.addtool_btn.clicked.disconnect()
except Exception as e:
except TypeError:
pass
try:
self.ui.copytool_btn.clicked.disconnect()
except Exception as e:
except TypeError:
pass
try:
self.ui.deltool_btn.clicked.disconnect()
except Exception as e:
except TypeError:
pass
try:
self.ui.geo_tools_table.currentItemChanged.disconnect()
except Exception as e:
except TypeError:
pass
try:
self.ui.geo_tools_table.itemChanged.disconnect()
except Exception as e:
except TypeError:
pass
try:
self.ui.tool_offset_entry.editingFinished.disconnect()
except Exception as e:
except TypeError:
pass
for row in range(self.ui.geo_tools_table.rowCount()):
try:
self.ui.geo_tools_table.cellWidget(row, 6).clicked.disconnect()
except Exception as e:
except TypeError:
pass
try:
self.ui.plot_cb.stateChanged.disconnect()
except Exception as e:
except TypeError:
pass
def on_tool_add(self, dia=None):
@@ -3581,7 +3607,7 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
# we do this HACK to make sure the tools attribute to be serialized is updated in the self.ser_attrs list
try:
self.ser_attrs.remove('tools')
except Exception as e:
except TypeError:
pass
self.ser_attrs.append('tools')
@@ -3655,7 +3681,7 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
# we do this HACK to make sure the tools attribute to be serialized is updated in the self.ser_attrs list
try:
self.ser_attrs.remove('tools')
except:
except Exception as e:
pass
self.ser_attrs.append('tools')
@@ -3690,7 +3716,7 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
try:
self.ser_attrs.remove('tools')
self.ser_attrs.append('tools')
except Exception as e:
except TypeError:
pass
self.app.inform.emit(_(
@@ -3749,7 +3775,7 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
# we do this HACK to make sure the tools attribute to be serialized is updated in the self.ser_attrs list
try:
self.ser_attrs.remove('tools')
except Exception as e:
except TypeError:
pass
self.ser_attrs.append('tools')
@@ -3838,7 +3864,6 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
self.update_cutz()
except Exception as e:
log.debug("FlatCAMObj ---> update_ui() " + str(e))
self.ui_connect()
def ui_update_v_shape(self, tool_type_txt):
@@ -3951,7 +3976,6 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
self.ui.ois_tcz_geo.on_cb_change()
def gui_form_to_storage(self):
self.ui_disconnect()
widget_changed = self.sender()
try:
@@ -4345,7 +4369,7 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
if diadict_key == 'data':
for data_key, data_value in diadict_value.items():
if data_key == "multidepth":
if data_key == "multidepth":
multidepth = data_value
if data_key == "depthperpass":
depthpercut = data_value
@@ -5459,7 +5483,7 @@ class FlatCAMCNCjob(FlatCAMObj, CNCjob):
try:
self.ui.annotation_cb.stateChanged.disconnect(self.on_annotation_change)
except:
except TypeError:
pass
self.ui.annotation_cb.stateChanged.connect(self.on_annotation_change)
@@ -5503,7 +5527,7 @@ class FlatCAMCNCjob(FlatCAMObj, CNCjob):
self.ui.cnc_tools_table.cellWidget(row, 6).clicked.disconnect(self.on_plot_cb_click_table)
try:
self.ui.plot_cb.stateChanged.disconnect(self.on_plot_cb_click)
except Exception as e:
except TypeError:
pass
def on_updateplot_button_click(self, *args):