diff --git a/README.md b/README.md index a196be6e..fa51f802 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ CAD program, and create G-Code for Isolation routing. - fix for plotting Excellon objects if the color is changed and then the object is moved - laying the GUI for a new Tool: Punch Gerber Tool which will add holes in the Gerber apertures - fixed bugs in Minimum Distance Tool +- update in the GUI for the Punch Gerber Tool 22.01.2020 diff --git a/flatcamTools/ToolPunchGerber.py b/flatcamTools/ToolPunchGerber.py index 17fa3a80..9938b14a 100644 --- a/flatcamTools/ToolPunchGerber.py +++ b/flatcamTools/ToolPunchGerber.py @@ -92,10 +92,10 @@ class ToolPunchGerber(FlatCAMTool): self.method_label = QtWidgets.QLabel('%s:' % _("Method")) self.method_label.setToolTip( _("The punch hole source can be:\n" - "- Excellon -> an Excellon holes center will serve as reference.\n" - "- Fixed Diameter -> will try to use the pads center as reference.\n" - "- Fixed Annular Ring -> will try to use the pads center as reference.\n" - "- Proportional -> will try to use the pads center as reference.\n") + "- Excellon Object-> the Excellon object drills center will serve as reference.\n" + "- Fixed Diameter -> will try to use the pads center as reference adding fixed diameter holes.\n" + "- Fixed Annular Ring -> will try to keep a set annular ring.\n" + "- Proportional -> will make a Gerber punch hole having the diameter a percentage of the pad diameter.\n") ) self.method_punch = RadioSet( [ @@ -162,12 +162,6 @@ class ToolPunchGerber(FlatCAMTool): self.ring_box.setContentsMargins(0, 0, 0, 0) self.ring_frame.setLayout(self.ring_box) - # ## Grid Layout - grid1 = QtWidgets.QGridLayout() - grid1.setColumnStretch(0, 0) - grid1.setColumnStretch(1, 1) - self.ring_box.addLayout(grid1) - # Annular Ring value self.ring_label = QtWidgets.QLabel('%s' % _("Fixed Annular Ring")) self.ring_label.setToolTip( @@ -175,11 +169,21 @@ class ToolPunchGerber(FlatCAMTool): "The copper sliver between the drill hole exterior\n" "and the margin of the copper pad.") ) - grid1.addWidget(self.ring_label, 0, 0, 1, 2) + self.ring_box.addWidget(self.ring_label) + + # Select all + self.select_all_cb = FCCheckBox('%s' % _("ALL")) + self.ring_box.addWidget(self.select_all_cb) + + # ## Grid Layout + self.grid1 = QtWidgets.QGridLayout() + self.grid1.setColumnStretch(0, 0) + self.grid1.setColumnStretch(1, 1) + self.ring_box.addLayout(self.grid1) # Circular Annular Ring Value - self.circular_ring_label = QtWidgets.QLabel('%s:' % _("Circular")) - self.circular_ring_label.setToolTip( + self.circular_ring_cb = FCCheckBox('%s:' % _("Circular")) + self.circular_ring_cb.setToolTip( _("The size of annular ring for circular pads.") ) @@ -187,12 +191,14 @@ class ToolPunchGerber(FlatCAMTool): self.circular_ring_entry.set_precision(self.decimals) self.circular_ring_entry.set_range(0.0000, 9999.9999) - grid1.addWidget(self.circular_ring_label, 1, 0) - grid1.addWidget(self.circular_ring_entry, 1, 1) + self.c_ois = OptionalInputSection(self.circular_ring_cb, [self.circular_ring_entry]) + + self.grid1.addWidget(self.circular_ring_cb, 3, 0) + self.grid1.addWidget(self.circular_ring_entry, 3, 1) # Oblong Annular Ring Value - self.oblong_ring_label = QtWidgets.QLabel('%s:' % _("Oblong")) - self.oblong_ring_label.setToolTip( + self.oblong_ring_cb= FCCheckBox('%s:' % _("Oblong")) + self.oblong_ring_cb.setToolTip( _("The size of annular ring for oblong pads.") ) @@ -200,12 +206,14 @@ class ToolPunchGerber(FlatCAMTool): self.oblong_ring_entry.set_precision(self.decimals) self.oblong_ring_entry.set_range(0.0000, 9999.9999) - grid1.addWidget(self.oblong_ring_label, 2, 0) - grid1.addWidget(self.oblong_ring_entry, 2, 1) + self.o_ois = OptionalInputSection(self.oblong_ring_cb, [self.oblong_ring_entry]) + + self.grid1.addWidget(self.oblong_ring_cb, 4, 0) + self.grid1.addWidget(self.oblong_ring_entry, 4, 1) # Square Annular Ring Value - self.square_ring_label = QtWidgets.QLabel('%s:' % _("Square")) - self.square_ring_label.setToolTip( + self.square_ring_cb = FCCheckBox('%s:' % _("Square")) + self.square_ring_cb.setToolTip( _("The size of annular ring for square pads.") ) @@ -213,12 +221,14 @@ class ToolPunchGerber(FlatCAMTool): self.square_ring_entry.set_precision(self.decimals) self.square_ring_entry.set_range(0.0000, 9999.9999) - grid1.addWidget(self.square_ring_label, 3, 0) - grid1.addWidget(self.square_ring_entry, 3, 1) + self.s_ois = OptionalInputSection(self.square_ring_cb, [self.square_ring_entry]) + + self.grid1.addWidget(self.square_ring_cb, 5, 0) + self.grid1.addWidget(self.square_ring_entry, 5, 1) # Rectangular Annular Ring Value - self.rectangular_ring_label = QtWidgets.QLabel('%s:' % _("Rectangular")) - self.rectangular_ring_label.setToolTip( + self.rectangular_ring_cb = FCCheckBox('%s:' % _("Rectangular")) + self.rectangular_ring_cb.setToolTip( _("The size of annular ring for rectangular pads.") ) @@ -226,12 +236,14 @@ class ToolPunchGerber(FlatCAMTool): self.rectangular_ring_entry.set_precision(self.decimals) self.rectangular_ring_entry.set_range(0.0000, 9999.9999) - grid1.addWidget(self.rectangular_ring_label, 4, 0) - grid1.addWidget(self.rectangular_ring_entry, 4, 1) + self.r_ois = OptionalInputSection(self.rectangular_ring_cb, [self.rectangular_ring_entry]) + + self.grid1.addWidget(self.rectangular_ring_cb, 6, 0) + self.grid1.addWidget(self.rectangular_ring_entry, 6, 1) # Others Annular Ring Value - self.other_ring_label = QtWidgets.QLabel('%s:' % _("Others")) - self.other_ring_label.setToolTip( + self.other_ring_cb = FCCheckBox('%s:' % _("Others")) + self.other_ring_cb.setToolTip( _("The size of annular ring for other pads.") ) @@ -239,8 +251,10 @@ class ToolPunchGerber(FlatCAMTool): self.other_ring_entry.set_precision(self.decimals) self.other_ring_entry.set_range(0.0000, 9999.9999) - grid1.addWidget(self.other_ring_label, 5, 0) - grid1.addWidget(self.other_ring_entry, 5, 1) + self.ot_ois = OptionalInputSection(self.other_ring_cb, [self.other_ring_entry]) + + self.grid1.addWidget(self.other_ring_cb, 7, 0) + self.grid1.addWidget(self.other_ring_entry, 7, 1) separator_line = QtWidgets.QFrame() separator_line.setFrameShape(QtWidgets.QFrame.HLine) @@ -302,8 +316,12 @@ class ToolPunchGerber(FlatCAMTool): self.units = self.app.defaults['units'] - # ## Signals + self.cb_items = [ + self.grid1.itemAt(w).widget() for w in range(self.grid1.count()) + if isinstance(self.grid1.itemAt(w).widget(), FCCheckBox) + ] + # ## Signals self.method_punch.activated_custom.connect(self.on_method) self.reset_button.clicked.connect(self.set_tool_ui) @@ -341,7 +359,25 @@ class ToolPunchGerber(FlatCAMTool): def set_tool_ui(self): self.reset_fields() + self.ui_connect() self.method_punch.set_value('exc') + self.select_all_cb.set_value(True) + + def on_select_all(self, state): + self.ui_disconnect() + if state: + self.circular_ring_cb.setChecked(True) + self.oblong_ring_cb.setChecked(True) + self.square_ring_cb.setChecked(True) + self.rectangular_ring_cb.setChecked(True) + self.other_ring_cb.setChecked(True) + else: + self.circular_ring_cb.setChecked(False) + self.oblong_ring_cb.setChecked(False) + self.square_ring_cb.setChecked(False) + self.rectangular_ring_cb.setChecked(False) + self.other_ring_cb.setChecked(False) + self.ui_connect() def on_method(self, val): self.exc_label.setEnabled(False) @@ -368,6 +404,42 @@ class ToolPunchGerber(FlatCAMTool): self.factor_label.setEnabled(True) self.factor_entry.setEnabled(True) + def on_ring_cb_toggled(self): + sum_cb = 0 + for it in self.cb_items: + if it.get_value(): + sum_cb += 1 + + self.ui_disconnect() + if sum_cb == 5: + self.select_all_cb.set_value(True) + else: + self.select_all_cb.set_value(False) + self.ui_connect() + + def ui_connect(self): + self.select_all_cb.stateChanged.connect(self.on_select_all) + + for it in self.cb_items: + try: + it.stateChanged.connect(self.on_ring_cb_toggled) + except (AttributeError, TypeError): + pass + + def ui_disconnect(self): + try: + self.select_all_cb.stateChanged.disconnect() + except (AttributeError, TypeError): + pass + + for it in self.cb_items: + try: + it.stateChanged.disconnect() + except (AttributeError, TypeError): + pass + def reset_fields(self): self.gerber_object_combo.setRootModelIndex(self.app.collection.index(0, 0, QtCore.QModelIndex())) self.exc_combo.setRootModelIndex(self.app.collection.index(1, 0, QtCore.QModelIndex())) + self.ui_disconnect() +