- added protection against creating CNCJob from an empty Geometry object (with no geometry inside)

- changed the shortcut key for YouTube channel from F2 to key F4
- changed the way APP LEVEL is showed both in Edit -> Preferences -> General tab and in each Selected Tab. Changed the ToolTips content for this.
- added the functions for GCode View and GCode Save in Tool SolderPaste
This commit is contained in:
Marius Stanciu 2019-02-21 03:04:38 +02:00 committed by Marius S
parent 4ab2374903
commit 9557e1af60
6 changed files with 96 additions and 74 deletions

View File

@ -312,7 +312,7 @@ class App(QtCore.QObject):
"global_send_stats": self.general_defaults_form.general_app_group.send_stats_cb,
"global_project_at_startup": self.general_defaults_form.general_app_group.project_startup_cb,
"global_project_autohide": self.general_defaults_form.general_app_group.project_autohide_cb,
"global_advanced": self.general_defaults_form.general_app_group.advanced_cb,
"global_app_level": self.general_defaults_form.general_app_group.app_level_radio,
"global_compression_level": self.general_defaults_form.general_app_group.compress_combo,
"global_save_compressed": self.general_defaults_form.general_app_group.save_type_cb,
@ -531,7 +531,7 @@ class App(QtCore.QObject):
"global_send_stats": True,
"global_project_at_startup": False,
"global_project_autohide": True,
"global_advanced": False,
"global_app_level": 'b',
"global_gridx": 1.0,
"global_gridy": 1.0,

View File

@ -3009,6 +3009,16 @@ class GeneralAppPrefGroupUI(OptionsGroupUI):
self.units_radio = RadioSet([{'label': 'IN', 'value': 'IN'},
{'label': 'MM', 'value': 'MM'}])
# Application Level for FlatCAM
self.app_level_label = QtWidgets.QLabel('<b>APP. LEVEL:</b>')
self.app_level_label.setToolTip("Choose the default level of usage for FlatCAM.\n"
"BASIC level -> reduced functionality, best for beginner's.\n"
"ADVANCED level -> full functionality.\n\n"
"The choice here will influence the parameters in\n"
"the Selected Tab for all kinds of FlatCAM objects.")
self.app_level_radio = RadioSet([{'label': 'Basic', 'value': 'b'},
{'label': 'Advanced', 'value': 'a'}])
# Languages for FlatCAM
self.languagelabel = QtWidgets.QLabel('<b>Languages:</b>')
self.languagelabel.setToolTip("Set the language used throughout FlatCAM.")
@ -3099,6 +3109,7 @@ class GeneralAppPrefGroupUI(OptionsGroupUI):
# Add (label - input field) pair to the QFormLayout
self.form_box.addRow(self.unitslabel, self.units_radio)
self.form_box.addRow(self.app_level_label, self.app_level_radio)
self.form_box.addRow(self.languagelabel, self.language_cb)
self.form_box.addRow(self.languagespace, self.language_apply_btn)
@ -3122,16 +3133,6 @@ class GeneralAppPrefGroupUI(OptionsGroupUI):
# self.layout.addLayout(hlay)
# hlay.addStretch()
# Advanced CB
self.advanced_cb = FCCheckBox('Show Advanced Options')
self.advanced_cb.setToolTip(
"When checked, Advanced Options will be\n"
"displayed in the Selected Tab for all\n"
"kind of objects."
)
# self.advanced_cb.setLayoutDirection(QtCore.Qt.RightToLeft)
self.layout.addWidget(self.advanced_cb)
# Save compressed project CB
self.save_type_cb = FCCheckBox('Save Compressed Project')
self.save_type_cb.setToolTip(

View File

@ -491,8 +491,8 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
self.ui.follow_cb.stateChanged.connect(self.on_follow_cb_click)
# Show/Hide Advanced Options
if self.app.defaults["global_advanced"] is False:
self.ui.level.setText('<span style="color:green;"><b>BASIC Mode</b></span>')
if self.app.defaults["global_app_level"] == 'b':
self.ui.level.setText('<span style="color:green;"><b>Basic</b></span>')
self.ui.apertures_table_label.hide()
self.ui.aperture_table_visibility_cb.hide()
self.ui.milling_type_label.hide()
@ -501,7 +501,7 @@ class FlatCAMGerber(FlatCAMObj, Gerber):
self.ui.generate_int_iso_button.hide()
else:
self.ui.level.setText('<span style="color:red;"><b>ADVANCED Mode</b></span>')
self.ui.level.setText('<span style="color:red;"><b>Advanced</b></span>')
self.build_ui()
@ -1571,8 +1571,8 @@ class FlatCAMExcellon(FlatCAMObj, Excellon):
self.tool_offset[dia] = t_default_offset
# Show/Hide Advanced Options
if self.app.defaults["global_advanced"] is False:
self.ui.level.setText('<span style="color:green;"><b>BASIC Mode</b></span>')
if self.app.defaults["global_app_level"] == 'b':
self.ui.level.setText('<span style="color:green;"><b>Basic</b></span>')
self.ui.tools_table.setColumnHidden(4, True)
self.ui.estartz_label.hide()
@ -1586,7 +1586,7 @@ class FlatCAMExcellon(FlatCAMObj, Excellon):
self.ui.feedrate_probe_label.hide()
self.ui.feedrate_probe_entry.hide()
else:
self.ui.level.setText('<span style="color:red;"><b>ADVANCED Mode</b></span>')
self.ui.level.setText('<span style="color:red;"><b>Advanced</b></span>')
assert isinstance(self.ui, ExcellonObjectUI), \
"Expected a ExcellonObjectUI, got %s" % type(self.ui)
@ -2805,8 +2805,8 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
"Delete", lambda: self.on_tool_delete(all=None), icon=QtGui.QIcon("share/delete32.png"))
# Show/Hide Advanced Options
if self.app.defaults["global_advanced"] is False:
self.ui.level.setText('<span style="color:green;"><b>BASIC Mode</b></span>')
if self.app.defaults["global_app_level"] == 'b':
self.ui.level.setText('<span style="color:green;"><b>Basic</b></span>')
self.ui.geo_tools_table.setColumnHidden(2, True)
self.ui.geo_tools_table.setColumnHidden(3, True)
@ -2826,7 +2826,7 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
self.ui.feedrate_probe_label.hide()
self.ui.feedrate_probe_entry.hide()
else:
self.ui.level.setText('<span style="color:red;"><b>ADVANCED Mode</b></span>')
self.ui.level.setText('<span style="color:red;"><b>Advanced</b></span>')
self.ui.plot_cb.stateChanged.connect(self.on_plot_cb_click)
self.ui.generate_cnc_button.clicked.connect(self.on_generatecnc_button_click)
@ -4857,11 +4857,11 @@ class FlatCAMCNCjob(FlatCAMObj, CNCjob):
self.ui.cncplot_method_combo.set_value(self.app.defaults["cncjob_plot_kind"])
# Show/Hide Advanced Options
if self.app.defaults["global_advanced"] is False:
self.ui.level.setText('<span style="color:green;"><b>BASIC Mode</b></span>')
if self.app.defaults["global_app_level"] == 'b':
self.ui.level.setText('<span style="color:green;"><b>Basic</b></span>')
else:
self.ui.level.setText('<span style="color:red;"><b>ADVANCED Mode</b></span>')
self.ui.level.setText('<span style="color:red;"><b>Advanced</b></span>')
self.ui.updateplot_button.clicked.connect(self.on_updateplot_button_click)
self.ui.export_gcode_button.clicked.connect(self.on_exportgcode_button_click)

View File

@ -32,6 +32,19 @@ class ObjectUI(QtWidgets.QWidget):
self.title_label.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)
self.title_box.addWidget(self.title_label, stretch=1)
## App Level label
self.level = QtWidgets.QLabel("")
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.title_box.addWidget(self.level)
## Box box for custom widgets
# This gets populated in offspring implementations.
self.custom_box = QtWidgets.QVBoxLayout()
@ -108,16 +121,6 @@ class GerberObjectUI(ObjectUI):
def __init__(self, parent=None):
ObjectUI.__init__(self, title='Gerber Object', parent=parent)
self.level = QtWidgets.QLabel("")
self.level.setToolTip(
"In the BASIC mode certain functionality's\n"
"are hidden from the user.\n"
"To enable them, go to:\n"
"Edit -> Preferences -> General and check:\n"
"'Show Advanced Options' checkbox."
)
self.custom_box.addWidget(self.level)
# Plot options
grid0 = QtWidgets.QGridLayout()
grid0.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)
@ -442,16 +445,6 @@ class ExcellonObjectUI(ObjectUI):
icon_file='share/drill32.png',
parent=parent)
self.level = QtWidgets.QLabel("")
self.level.setToolTip(
"In the BASIC mode certain functionality's\n"
"are hidden from the user.\n"
"To enable them, go to:\n"
"Edit -> Preferences -> General and check:\n"
"'Show Advanced Options' checkbox."
)
self.custom_box.addWidget(self.level)
#### Plot options ####
hlay_plot = QtWidgets.QHBoxLayout()
self.custom_box.addLayout(hlay_plot)
@ -775,16 +768,6 @@ class GeometryObjectUI(ObjectUI):
def __init__(self, parent=None):
super(GeometryObjectUI, self).__init__(title='Geometry Object', icon_file='share/geometry32.png', parent=parent)
self.level = QtWidgets.QLabel("")
self.level.setToolTip(
"In the BASIC mode certain functionality's\n"
"are hidden from the user.\n"
"To enable them, go to:\n"
"Edit -> Preferences -> General and check:\n"
"'Show Advanced Options' checkbox."
)
self.custom_box.addWidget(self.level)
# Plot options
self.plot_options_label = QtWidgets.QLabel("<b>Plot Options:</b>")
self.custom_box.addWidget(self.plot_options_label)
@ -1213,16 +1196,6 @@ class CNCObjectUI(ObjectUI):
ObjectUI.__init__(self, title='CNC Job Object', icon_file='share/cnc32.png', parent=parent)
self.level = QtWidgets.QLabel("")
self.level.setToolTip(
"In the BASIC mode certain functionality's\n"
"are hidden from the user.\n"
"To enable them, go to:\n"
"Edit -> Preferences -> General and check:\n"
"'Show Advanced Options' checkbox."
)
self.custom_box.addWidget(self.level)
# Scale and offset ans skew are not available for CNCJob objects.
# Hiding from the GUI.
for i in range(0, self.scale_grid.count()):

View File

@ -12,7 +12,9 @@ CAD program, and create G-Code for Isolation routing.
21.02.2019
- added protection against creating CNCJob from an empty Geometry object (with no geometry inside)
- changed the shortcut key for YOuTube channel from F2 to key F4
- changed the shortcut key for YouTube channel from F2 to key F4
- changed the way APP LEVEL is showed both in Edit -> Preferences -> General tab and in each Selected Tab. Changed the ToolTips content for this.
- added the functions for GCode View and GCode Save in Tool SolderPaste
20.02.2019

View File

@ -854,18 +854,24 @@ class ToolSolderPaste(FlatCAMTool):
# self.app.ui.notebook.setCurrentWidget(self.app.ui.project_tab)
def on_view_gcode(self):
name = self.obj_combo.currentText()
# add the tab if it was closed
self.app.ui.plot_tab_area.addTab(self.app.ui.cncjob_tab, "Code Editor")
# Switch plot_area to CNCJob tab
self.app.ui.plot_tab_area.setCurrentWidget(self.app.ui.cncjob_tab)
name = self.cnc_obj_combo.currentText()
obj = self.app.collection.get_by_name(name)
# then append the text from GCode to the text editor
try:
file = StringIO(obj.gcode)
except:
pass
self.app.inform.emit("[ERROR_NOTCL] No Gcode in the object...")
return
try:
for line in file:
print(line)
proc_line = str(line).strip('\n')
self.app.ui.code_editor.append(proc_line)
except Exception as e:
@ -879,14 +885,54 @@ class ToolSolderPaste(FlatCAMTool):
self.app.ui.show()
def on_save_gcode(self):
name = self.obj_combo.currentText()
time_str = "{:%A, %d %B %Y at %H:%M}".format(datetime.now())
name = self.cnc_obj_combo.currentText()
obj = self.app.collection.get_by_name(name)
def geo_init(geo_obj, app_obj):
pass
_filter_ = "G-Code Files (*.nc);;G-Code Files (*.txt);;G-Code Files (*.tap);;G-Code Files (*.cnc);;" \
"G-Code Files (*.g-code);;All Files (*.*)"
# self.app.new_object("geometry", name + "_cutout", geo_init)
# self.app.inform.emit("[success] Rectangular CutOut operation finished.")
# self.app.ui.notebook.setCurrentWidget(self.app.ui.project_tab)
try:
dir_file_to_save = self.app.get_last_save_folder() + '/' + str(name)
filename, _ = QtWidgets.QFileDialog.getSaveFileName(
caption="Export GCode ...",
directory=dir_file_to_save,
filter=_filter_
)
except TypeError:
filename, _ = QtWidgets.QFileDialog.getSaveFileName(caption="Export Machine Code ...", filter=_filter_)
if filename == '':
self.app.inform.emit("[WARNING_NOTCL]Export Machine Code cancelled ...")
return
gcode = '(G-CODE GENERATED BY FLATCAM v%s - www.flatcam.org - Version Date: %s)\n' % \
(str(self.app.version), str(self.app.version_date)) + '\n'
gcode += '(Name: ' + str(name) + ')\n'
gcode += '(Type: ' + "G-code from " + str(obj.options['type']) + " for Solder Paste dispenser" + ')\n'
# if str(p['options']['type']) == 'Excellon' or str(p['options']['type']) == 'Excellon Geometry':
# gcode += '(Tools in use: ' + str(p['options']['Tools_in_use']) + ')\n'
gcode += '(Units: ' + self.units.upper() + ')\n' + "\n"
gcode += '(Created on ' + time_str + ')\n' + '\n'
gcode += obj.gcode
lines = StringIO(gcode)
## Write
if filename is not None:
try:
with open(filename, 'w') as f:
for line in lines:
f.write(line)
except FileNotFoundError:
self.app.inform.emit("[WARNING_NOTCL] No such file or directory")
return
self.app.file_saved.emit("gcode", filename)
self.app.inform.emit("[success] Solder paste dispenser GCode file saved to: %s" % filename)
def on_create_gcode(self, use_thread=True):
"""