diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8ce46dbc..28a8e9a2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -14,6 +14,7 @@ CHANGELOG for FlatCAM beta
- Cutout Tool - remade the 'Beginner/Advanced' Mode
- minor changes to the UI to all Tools with 'Beginner/Advanced' Mode
- Film Tool - remade the 'Beginner/Advanced' Mode
+- 2Sided Tool - remade the 'Beginner/Advanced' Mode
9.11.2020
diff --git a/appTools/ToolDblSided.py b/appTools/ToolDblSided.py
index 01735459..b990cebf 100644
--- a/appTools/ToolDblSided.py
+++ b/appTools/ToolDblSided.py
@@ -41,34 +41,7 @@ class DblSidedTool(AppTool):
# ############################################################################################################
# ######################################### Signals ##########################################################
# ############################################################################################################
- self.ui.object_type_radio.activated_custom.connect(self.on_object_type)
-
- self.ui.add_point_button.clicked.connect(self.on_point_add)
- self.ui.add_drill_point_button.clicked.connect(self.on_drill_add)
- self.ui.delete_drill_point_button.clicked.connect(self.on_drill_delete_last)
- self.ui.box_type_radio.activated_custom.connect(self.on_combo_box_type)
-
- self.ui.axis_location.group_toggle_fn = self.on_toggle_pointbox
-
- self.ui.point_entry.textChanged.connect(lambda val: self.ui.align_ref_label_val.set_value(val))
- self.ui.pick_hole_button.clicked.connect(self.on_pick_hole)
- self.ui.mirror_button.clicked.connect(self.on_mirror)
-
- self.ui.xmin_btn.clicked.connect(self.on_xmin_clicked)
- self.ui.ymin_btn.clicked.connect(self.on_ymin_clicked)
- self.ui.xmax_btn.clicked.connect(self.on_xmax_clicked)
- self.ui.ymax_btn.clicked.connect(self.on_ymax_clicked)
-
- self.ui.center_btn.clicked.connect(
- lambda: self.ui.point_entry.set_value(self.ui.center_entry.get_value())
- )
-
- self.ui.create_alignment_hole_button.clicked.connect(self.on_create_alignment_holes)
- self.ui.calculate_bb_button.clicked.connect(self.on_bbox_coordinates)
-
- self.app.proj_selection_changed.connect(self.on_object_selection_changed)
-
- self.ui.reset_button.clicked.connect(self.set_tool_ui)
+ self.connect_signals_at_init()
# ############################################################################################################
self.drill_values = ""
@@ -130,6 +103,41 @@ class DblSidedTool(AppTool):
self.app.ui.notebook.setTabText(2, _("2-Sided Tool"))
+ def connect_signals_at_init(self):
+ # #############################################################################
+ # ############################ SIGNALS ########################################
+ # #############################################################################
+ self.ui.level.toggled.connect(self.on_level_changed)
+
+ self.ui.object_type_radio.activated_custom.connect(self.on_object_type)
+
+ self.ui.add_point_button.clicked.connect(self.on_point_add)
+ self.ui.add_drill_point_button.clicked.connect(self.on_drill_add)
+ self.ui.delete_drill_point_button.clicked.connect(self.on_drill_delete_last)
+ self.ui.box_type_radio.activated_custom.connect(self.on_combo_box_type)
+
+ self.ui.axis_location.group_toggle_fn = self.on_toggle_pointbox
+
+ self.ui.point_entry.textChanged.connect(lambda val: self.ui.align_ref_label_val.set_value(val))
+ self.ui.pick_hole_button.clicked.connect(self.on_pick_hole)
+ self.ui.mirror_button.clicked.connect(self.on_mirror)
+
+ self.ui.xmin_btn.clicked.connect(self.on_xmin_clicked)
+ self.ui.ymin_btn.clicked.connect(self.on_ymin_clicked)
+ self.ui.xmax_btn.clicked.connect(self.on_xmax_clicked)
+ self.ui.ymax_btn.clicked.connect(self.on_ymax_clicked)
+
+ self.ui.center_btn.clicked.connect(
+ lambda: self.ui.point_entry.set_value(self.ui.center_entry.get_value())
+ )
+
+ self.ui.create_alignment_hole_button.clicked.connect(self.on_create_alignment_holes)
+ self.ui.calculate_bb_button.clicked.connect(self.on_bbox_coordinates)
+
+ self.app.proj_selection_changed.connect(self.on_object_selection_changed)
+
+ self.ui.reset_button.clicked.connect(self.set_tool_ui)
+
def set_tool_ui(self):
self.reset_fields()
@@ -158,6 +166,77 @@ class DblSidedTool(AppTool):
if self.local_connected is True:
self.disconnect_events()
+ # Show/Hide Advanced Options
+ app_mode = self.app.defaults["global_app_level"]
+ self.change_level(app_mode)
+
+ def change_level(self, level):
+ """
+
+ :param level: application level: either 'b' or 'a'
+ :type level: str
+ :return:
+ """
+
+ if level == 'a':
+ self.ui.level.setChecked(True)
+ else:
+ self.ui.level.setChecked(False)
+ self.on_level_changed(self.ui.level.isChecked())
+
+ def on_level_changed(self, checked):
+ if not checked:
+ self.ui.level.setText('%s' % _('Beginner'))
+ self.ui.level.setStyleSheet("""
+ QToolButton
+ {
+ color: green;
+ }
+ """)
+
+ self.ui.bv_label.hide()
+
+ self.ui.xmin_entry.hide()
+ self.ui.xmin_btn.hide()
+ self.ui.ymin_entry.hide()
+ self.ui.ymin_btn.hide()
+ self.ui.xmax_entry.hide()
+ self.ui.xmax_btn.hide()
+ self.ui.ymax_entry.hide()
+ self.ui.ymax_btn.hide()
+
+ self.ui.center_entry.hide()
+ self.ui.center_btn.hide()
+
+ self.ui.calculate_bb_button.hide()
+ self.ui.bounds_separator_line.hide()
+
+ else:
+ self.ui.level.setText('%s' % _('Advanced'))
+ self.ui.level.setStyleSheet("""
+ QToolButton
+ {
+ color: red;
+ }
+ """)
+
+ self.ui.bv_label.show()
+
+ self.ui.xmin_entry.show()
+ self.ui.xmin_btn.show()
+ self.ui.ymin_entry.show()
+ self.ui.ymin_btn.show()
+ self.ui.xmax_entry.show()
+ self.ui.xmax_btn.show()
+ self.ui.ymax_entry.show()
+ self.ui.ymax_btn.show()
+
+ self.ui.center_entry.show()
+ self.ui.center_btn.show()
+
+ self.ui.calculate_bb_button.show()
+ self.ui.bounds_separator_line.show()
+
def on_object_type(self, val):
obj_type = {'grb': 0, 'exc': 1, 'geo': 2}[val]
self.ui.object_combo.setRootModelIndex(self.app.collection.index(obj_type, 0, QtCore.QModelIndex()))
@@ -532,23 +611,54 @@ class DsidedUI:
self.decimals = self.app.decimals
self.layout = layout
+ self.tools_frame = QtWidgets.QFrame()
+ self.tools_frame.setContentsMargins(0, 0, 0, 0)
+ self.layout.addWidget(self.tools_frame)
+
+ self.tools_box = QtWidgets.QVBoxLayout()
+ self.tools_box.setContentsMargins(0, 0, 0, 0)
+ self.tools_frame.setLayout(self.tools_box)
+
+ self.title_box = QtWidgets.QHBoxLayout()
+ self.tools_box.addLayout(self.title_box)
+
# ## Title
title_label = FCLabel("%s" % self.toolName)
title_label.setStyleSheet("""
- QLabel
- {
- font-size: 16px;
- font-weight: bold;
- }
- """)
- self.layout.addWidget(title_label)
- self.layout.addWidget(FCLabel(""))
+ QLabel
+ {
+ font-size: 16px;
+ font-weight: bold;
+ }
+ """)
+ title_label.setToolTip(
+ _("Create a Geometry object with\n"
+ "toolpaths to cover the space outside the copper pattern.")
+ )
+
+ self.title_box.addWidget(title_label)
+
+ # App Level label
+ self.level = QtWidgets.QToolButton()
+ self.level.setToolTip(
+ _(
+ "BASIC is suitable for a beginner. Many parameters\n"
+ "are hidden from the user in this mode.\n"
+ "ADVANCED mode will make available all parameters.\n\n"
+ "To change the application LEVEL, go to:\n"
+ "Edit -> Preferences -> General and check:\n"
+ "'APP. LEVEL' radio button."
+ )
+ )
+ # self.level.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
+ self.level.setCheckable(True)
+ self.title_box.addWidget(self.level)
# ## Grid Layout
grid_lay = QtWidgets.QGridLayout()
grid_lay.setColumnStretch(0, 1)
grid_lay.setColumnStretch(1, 0)
- self.layout.addLayout(grid_lay)
+ self.tools_box.addLayout(grid_lay)
# Objects to be mirrored
self.m_objects_label = FCLabel("%s:" % _("Source Object"))
@@ -590,7 +700,7 @@ class DsidedUI:
grid0 = QtWidgets.QGridLayout()
grid0.setColumnStretch(0, 0)
grid0.setColumnStretch(1, 1)
- self.layout.addLayout(grid0)
+ self.tools_box.addLayout(grid0)
# ## Title Bounds Values
self.bv_label = FCLabel("%s:" % _('Bounds Values'))
@@ -685,10 +795,10 @@ class DsidedUI:
""")
grid0.addWidget(self.calculate_bb_button, 13, 0, 1, 2)
- separator_line = QtWidgets.QFrame()
- separator_line.setFrameShape(QtWidgets.QFrame.HLine)
- separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
- grid0.addWidget(separator_line, 14, 0, 1, 2)
+ self.bounds_separator_line = QtWidgets.QFrame()
+ self.bounds_separator_line.setFrameShape(QtWidgets.QFrame.HLine)
+ self.bounds_separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
+ grid0.addWidget(self.bounds_separator_line, 14, 0, 1, 2)
# #############################################################################################################
# ########## MIRROR OPERATION ###########################################################################
@@ -696,7 +806,7 @@ class DsidedUI:
grid1 = QtWidgets.QGridLayout()
grid1.setColumnStretch(0, 0)
grid1.setColumnStretch(1, 1)
- self.layout.addLayout(grid1)
+ self.tools_box.addLayout(grid1)
self.param_label = FCLabel("%s:" % _("Mirror Operation"))
self.param_label.setToolTip('%s.' % _("Parameters for the mirror operation"))
@@ -752,12 +862,12 @@ class DsidedUI:
"The (x, y) coordinates are captured by pressing SHIFT key\n"
"and left mouse button click on canvas or you can enter the coordinates manually.")
)
- self.add_point_button.setStyleSheet("""
- QPushButton
- {
- font-weight: bold;
- }
- """)
+ # self.add_point_button.setStyleSheet("""
+ # QPushButton
+ # {
+ # font-weight: bold;
+ # }
+ # """)
self.add_point_button.setMinimumWidth(60)
grid1.addWidget(self.point_entry, 7, 0, 1, 2)
@@ -850,7 +960,7 @@ class DsidedUI:
grid4 = QtWidgets.QGridLayout()
grid4.setColumnStretch(0, 0)
grid4.setColumnStretch(1, 1)
- self.layout.addLayout(grid4)
+ self.tools_box.addLayout(grid4)
# ## Alignment holes
self.alignment_label = FCLabel("%s:" % _('PCB Alignment'))
@@ -914,7 +1024,7 @@ class DsidedUI:
grid4.addWidget(self.align_ref_label_val, 6, 1)
grid5 = QtWidgets.QGridLayout()
- self.layout.addLayout(grid5)
+ self.tools_box.addLayout(grid5)
# ## Alignment holes
self.ah_label = FCLabel("%s:" % _('Alignment Drill Coordinates'))
@@ -976,9 +1086,9 @@ class DsidedUI:
font-weight: bold;
}
""")
- self.layout.addWidget(self.create_alignment_hole_button)
+ self.tools_box.addWidget(self.create_alignment_hole_button)
- self.layout.addStretch()
+ self.tools_box.addStretch(1)
# ## Reset Tool
self.reset_button = FCButton(_("Reset Tool"))
@@ -992,7 +1102,7 @@ class DsidedUI:
font-weight: bold;
}
""")
- self.layout.addWidget(self.reset_button)
+ self.tools_box.addWidget(self.reset_button)
# #################################### FINSIHED GUI ###########################
# #############################################################################