diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3d993c92..ff0adb17 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -17,6 +17,8 @@ CHANGELOG for FlatCAM beta
- Milling Tool - fixed the ever-growing list of preprocessor's
- in all Object UI's fixed the Properties section columns resize to content on expansion/collapse of the items
- in Tcl Shell Dock widget make sure that the context menu is not shown on the title bar and middle clicking on the title bar will close the widget
+- Drilling Tool - minor UI change
+- Isolation Tool - remade the 'Beginner/Advanced' Mode
8.12.2020
diff --git a/appTools/ToolDrilling.py b/appTools/ToolDrilling.py
index c5b3b2b0..f2b1f0ae 100644
--- a/appTools/ToolDrilling.py
+++ b/appTools/ToolDrilling.py
@@ -515,6 +515,8 @@ class ToolDrilling(AppTool, Excellon):
tool_data['tools_drill_toolchangexy'] = ''
tool_data['tools_drill_area_exclusion'] = False
+ self.ui.search_load_db_btn.hide()
+
self.ui.mpass_cb.hide()
self.ui.maxdepth_entry.hide()
@@ -560,6 +562,8 @@ class ToolDrilling(AppTool, Excellon):
tool_data['tools_drill_toolchangexy'] = app_defaults['tools_drill_toolchangexy']
tool_data['tools_drill_area_exclusion'] = app_defaults['tools_drill_area_exclusion']
+ self.ui.search_load_db_btn.show()
+
self.ui.mpass_cb.show()
self.ui.maxdepth_entry.show()
@@ -2606,22 +2610,18 @@ class DrillingUI:
self.grid3.addWidget(self.gen_param_label, 3, 0, 1, 2)
# Tool change
- self.toolchange_cb = FCCheckBox('%s' % _("Tool change"))
+ self.toolchange_cb = FCCheckBox('%s:' % _("Tool change Z"))
self.toolchange_cb.setToolTip(
_("Include tool-change sequence\n"
"in G-Code (Pause for tool change).")
)
self.toolchange_cb.setObjectName("e_toolchange")
- self.grid3.addWidget(self.toolchange_cb, 5, 0, 1, 2)
- # Toolchange Z
- self.toolchangez_label = QtWidgets.QLabel('%s:' % _("Tool change Z"))
- self.toolchangez_label.setToolTip(
+ self.toolchangez_entry = FCDoubleSpinner(callback=self.confirmation_message)
+ self.toolchangez_entry.setToolTip(
_("Z-axis position (height) for\n"
"tool change.")
)
-
- self.toolchangez_entry = FCDoubleSpinner(callback=self.confirmation_message)
self.toolchangez_entry.set_precision(self.decimals)
self.toolchangez_entry.setObjectName("e_toolchangez")
@@ -2632,8 +2632,9 @@ class DrillingUI:
self.toolchangez_entry.setSingleStep(0.1)
- self.grid3.addWidget(self.toolchangez_label, 7, 0)
+ self.grid3.addWidget(self.toolchange_cb, 7, 0)
self.grid3.addWidget(self.toolchangez_entry, 7, 1)
+ self.ois_tcz_e = OptionalInputSection(self.toolchange_cb, [self.toolchangez_entry])
# Start move Z:
self.estartz_label = QtWidgets.QLabel('%s:' % _("Start Z"))
diff --git a/appTools/ToolIsolation.py b/appTools/ToolIsolation.py
index 2958946e..ae8f9894 100644
--- a/appTools/ToolIsolation.py
+++ b/appTools/ToolIsolation.py
@@ -211,6 +211,8 @@ class ToolIsolation(AppTool, Gerber):
# #############################################################################
# ############################ SIGNALS ########################################
# #############################################################################
+ self.ui.level.toggled.connect(self.on_level_changed)
+
self.ui.deltool_btn.clicked.connect(self.on_tool_delete)
self.ui.find_optimal_button.clicked.connect(self.on_find_optimal_tooldia)
@@ -260,52 +262,9 @@ class ToolIsolation(AppTool, Gerber):
except Exception:
pass
- app_mode = self.app.defaults["global_app_level"]
-
# Show/Hide Advanced Options
- if app_mode == 'b':
- self.ui.level.setText('%s' % _('Basic'))
-
- self.ui.milling_type_label.hide()
- self.ui.milling_type_radio.hide()
-
- self.ui.iso_type_label.hide()
- self.ui.iso_type_radio.set_value('full')
- self.ui.iso_type_radio.hide()
-
- self.ui.rest_cb.set_value(False)
- self.ui.rest_cb.hide()
- self.ui.forced_rest_iso_cb.hide()
-
- self.ui.except_cb.set_value(False)
- self.ui.except_cb.hide()
-
- self.ui.type_excobj_radio.hide()
- self.ui.exc_obj_combo.hide()
-
- self.ui.select_combo.setCurrentIndex(0)
- self.ui.select_combo.hide()
- self.ui.select_label.hide()
- else:
- self.ui.level.setText('%s' % _('Advanced'))
-
- self.ui.milling_type_label.show()
- self.ui.milling_type_radio.show()
-
- self.ui.iso_type_label.show()
- self.ui.iso_type_radio.set_value(self.app.defaults["tools_iso_isotype"])
- self.ui.iso_type_radio.show()
-
- self.ui.rest_cb.set_value(self.app.defaults["tools_iso_rest"])
- self.ui.rest_cb.show()
- self.ui.forced_rest_iso_cb.show()
-
- self.ui.except_cb.set_value(self.app.defaults["tools_iso_isoexcept"])
- self.ui.except_cb.show()
-
- self.ui.select_combo.set_value(self.app.defaults["tools_iso_selection"])
- self.ui.select_combo.show()
- self.ui.select_label.show()
+ app_mode = self.app.defaults["global_app_level"]
+ self.change_level(app_mode)
if self.app.defaults["gerber_buffering"] == 'no':
self.ui.create_buffer_button.show()
@@ -382,6 +341,7 @@ class ToolIsolation(AppTool, Gerber):
"area_strategy": self.app.defaults["geometry_area_strategy"],
"area_overz": float(self.app.defaults["geometry_area_overz"]),
+ "tools_iso_order": self.app.defaults["tools_iso_order"],
"tools_iso_passes": self.app.defaults["tools_iso_passes"],
"tools_iso_overlap": self.app.defaults["tools_iso_overlap"],
"tools_iso_milling_type": self.app.defaults["tools_iso_milling_type"],
@@ -433,6 +393,123 @@ class ToolIsolation(AppTool, Gerber):
self.ui.tools_table.drag_drop_sig.connect(self.rebuild_ui)
+ 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)
+
+ def on_level_changed(self, checked):
+ if not checked:
+ self.ui.level.setText('%s' % _('Beginner'))
+ self.ui.level.setStyleSheet("""
+ QToolButton
+ {
+ color: green;
+ }
+ """)
+
+ # Add Tool section
+ self.ui.tool_sel_label.hide()
+ self.ui.new_tooldia_lbl.hide()
+ self.ui.new_tooldia_entry.hide()
+ self.ui.find_optimal_button.hide()
+ self.ui.search_and_add_btn.hide()
+ self.ui.addtool_from_db_btn.hide()
+ self.ui.deltool_btn.hide()
+ self.ui.add_tool_separator_line.hide()
+
+ # Tool parameters section
+ if self.iso_tools:
+ for tool in self.iso_tools:
+ tool_data = self.iso_tools[tool]['data']
+
+ tool_data['tools_iso_isotype'] = 'full'
+
+ self.ui.milling_type_label.hide()
+ self.ui.milling_type_radio.hide()
+
+ self.ui.iso_type_label.hide()
+ self.ui.iso_type_radio.set_value('full')
+ self.ui.iso_type_radio.hide()
+
+ # All param section
+ self.ui.all_param_separator_line2.hide()
+ self.ui.apply_param_to_all.hide()
+
+ # Common Parameters
+ self.ui.rest_cb.set_value(False)
+ self.ui.rest_cb.hide()
+ self.ui.forced_rest_iso_cb.hide()
+
+ self.ui.except_cb.set_value(False)
+ self.ui.except_cb.hide()
+
+ self.ui.type_excobj_radio.hide()
+ self.ui.exc_obj_combo.hide()
+
+ # Context Menu section
+ self.ui.tools_table.removeContextMenu()
+ else:
+ self.ui.level.setText('%s' % _('Advanced'))
+ self.ui.level.setStyleSheet("""
+ QToolButton
+ {
+ color: red;
+ }
+ """)
+
+ # Add Tool section
+ self.ui.tool_sel_label.show()
+ self.ui.new_tooldia_lbl.show()
+ self.ui.new_tooldia_entry.show()
+ self.ui.find_optimal_button.show()
+ self.ui.search_and_add_btn.show()
+ self.ui.addtool_from_db_btn.show()
+ self.ui.deltool_btn.show()
+ self.ui.add_tool_separator_line.show()
+
+ # Tool parameters section
+ app_defaults = self.app.defaults
+ if self.iso_tools:
+ for tool in self.iso_tools:
+ tool_data = self.iso_tools[tool]['data']
+ tool_data['tools_iso_isotype'] = app_defaults['tools_iso_isotype']
+ tool_data['tools_iso_rest'] = app_defaults['tools_iso_rest']
+ tool_data['tools_iso_isoexcept'] = app_defaults['tools_iso_isoexcept']
+
+ self.ui.milling_type_label.show()
+ self.ui.milling_type_radio.show()
+
+ self.ui.iso_type_label.show()
+ self.ui.iso_type_radio.set_value(app_defaults['tools_iso_isotype'])
+ self.ui.iso_type_radio.show()
+
+ # All param section
+ self.ui.all_param_separator_line2.show()
+ self.ui.apply_param_to_all.show()
+
+ # Common Parameters
+ self.ui.rest_cb.set_value(app_defaults['tools_iso_rest'])
+ self.ui.rest_cb.show()
+ self.ui.forced_rest_iso_cb.show()
+
+ self.ui.except_cb.set_value(app_defaults['tools_iso_isoexcept'])
+ self.ui.except_cb.show()
+
+ self.ui.type_excobj_radio.show()
+ self.ui.exc_obj_combo.show()
+
+ # Context Menu section
+ self.ui.tools_table.setupContextMenu()
+
def rebuild_ui(self):
# read the table tools uid
currenuid_list = []
@@ -1152,6 +1229,7 @@ class ToolIsolation(AppTool, Gerber):
def on_tool_add(self, custom_dia=None):
self.blockSignals(True)
+ self.ui_disconnect()
filename = self.app.tools_database_path()
@@ -1166,18 +1244,13 @@ class ToolIsolation(AppTool, Gerber):
new_tools_dict = deepcopy(self.default_data)
updated_tooldia = None
- tool_dias = []
- for k, v in self.iso_tools.items():
- for tool_v in v.keys():
- if tool_v == 'tooldia':
- tool_dias.append(self.app.dec_format(v['tooldia'], self.decimals))
-
# determine the new tool diameter
if tool_dia is None or tool_dia == 0:
self.build_ui()
self.app.inform.emit('[WARNING_NOTCL] %s' % _("Please enter a tool diameter with non-zero value, "
"in Float format."))
self.blockSignals(False)
+ self.ui_connect()
return
truncated_tooldia = self.app.dec_format(tool_dia, self.decimals)
@@ -1195,6 +1268,7 @@ class ToolIsolation(AppTool, Gerber):
self.app.log.error("Could not load tools DB file.")
self.app.inform.emit('[ERROR] %s' % _("Could not load Tools DB file."))
self.blockSignals(False)
+ self.ui_connect()
self.on_tool_default_add(dia=tool_dia)
return
@@ -1206,6 +1280,7 @@ class ToolIsolation(AppTool, Gerber):
self.app.log.error(str(e))
self.app.inform.emit('[ERROR] %s' % _("Failed to parse Tools DB file."))
self.blockSignals(False)
+ self.ui_connect()
self.on_tool_default_add(dia=tool_dia)
return
@@ -1259,6 +1334,7 @@ class ToolIsolation(AppTool, Gerber):
self.app.inform.emit('[WARNING_NOTCL] %s' % _("Tool not in Tools Database. Adding a default tool."))
self.on_tool_default_add(dia=tool_dia)
self.blockSignals(False)
+ self.ui_connect()
return
if tool_found > 1:
@@ -1266,6 +1342,7 @@ class ToolIsolation(AppTool, Gerber):
'[WARNING_NOTCL] %s' % _("Cancelled.\n"
"Multiple tools for one tool diameter found in Tools Database."))
self.blockSignals(False)
+ self.ui_connect()
return
# if new tool diameter found in Tools Database already in the Tool List then abort
@@ -1287,6 +1364,7 @@ class ToolIsolation(AppTool, Gerber):
}
})
self.blockSignals(False)
+ self.ui_connect()
self.build_ui()
# select the tool just added
@@ -3095,7 +3173,7 @@ class IsoUI:
self.title_box.addWidget(title_label)
# App Level label
- self.level = FCLabel("")
+ self.level = QtWidgets.QToolButton()
self.level.setToolTip(
_(
"BASIC is suitable for a beginner. Many parameters\n"
@@ -3106,7 +3184,8 @@ class IsoUI:
"'APP. LEVEL' radio button."
)
)
- self.level.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
+ # self.level.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)
+ self.level.setCheckable(True)
self.title_box.addWidget(self.level)
self.obj_combo_label = FCLabel('%s:' % _("GERBER"))
@@ -3285,10 +3364,10 @@ class IsoUI:
button_grid.addWidget(self.deltool_btn, 0, 1, 2, 1)
# #############################################################################################################
- separator_line = QtWidgets.QFrame()
- separator_line.setFrameShape(QtWidgets.QFrame.HLine)
- separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
- self.grid3.addWidget(separator_line, 11, 0, 1, 2)
+ self.add_tool_separator_line = QtWidgets.QFrame()
+ self.add_tool_separator_line.setFrameShape(QtWidgets.QFrame.HLine)
+ self.add_tool_separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
+ self.grid3.addWidget(self.add_tool_separator_line, 11, 0, 1, 2)
self.tool_data_label = FCLabel(
"%s: %s %d" % (_('Parameters for'), _("Tool"), int(1)))
@@ -3381,10 +3460,10 @@ class IsoUI:
)
self.grid3.addWidget(self.apply_param_to_all, 22, 0, 1, 2)
- separator_line = QtWidgets.QFrame()
- separator_line.setFrameShape(QtWidgets.QFrame.HLine)
- separator_line.setFrameShadow(QtWidgets.QFrame.Sunken)
- self.grid3.addWidget(separator_line, 23, 0, 1, 2)
+ self.all_param_separator_line2 = QtWidgets.QFrame()
+ self.all_param_separator_line2.setFrameShape(QtWidgets.QFrame.HLine)
+ self.all_param_separator_line2.setFrameShadow(QtWidgets.QFrame.Sunken)
+ self.grid3.addWidget(self.all_param_separator_line2, 23, 0, 1, 2)
# General Parameters
self.gen_param_label = FCLabel('%s' % _("Common Parameters"))
diff --git a/appTools/ToolMilling.py b/appTools/ToolMilling.py
index 5b2a5f84..82ee3e42 100644
--- a/appTools/ToolMilling.py
+++ b/appTools/ToolMilling.py
@@ -524,6 +524,9 @@ class ToolMilling(AppTool, Excellon):
self.ui.level.setChecked(False)
def on_level_changed(self, checked):
+
+ self.target_obj = self.app.collection.get_by_name(self.ui.object_combo.get_value())
+
if not checked:
self.ui.level.setText('%s' % _('Beginner'))
self.ui.level.setStyleSheet("""