- added a Toggle Code Editor Menu and key shortcut

- added the ability to open FlatConfig configuration files in COde Editor, Modify them and then save them.
- added ability to double click the FlatConfig files and open them in the FlatCAM Code Editor (to be verified)
This commit is contained in:
Marius Stanciu 2019-02-23 20:27:26 +02:00 committed by Marius S
parent 6d0ed52308
commit 88c9001784
4 changed files with 126 additions and 5 deletions

View File

@ -1174,6 +1174,8 @@ class App(QtCore.QObject):
self.ui.menufileopenexcellon.triggered.connect(self.on_fileopenexcellon)
self.ui.menufileopengcode.triggered.connect(self.on_fileopengcode)
self.ui.menufileopenproject.triggered.connect(self.on_file_openproject)
self.ui.menufileopenconfig.triggered.connect(self.on_file_openconfig)
self.ui.menufilerunscript.triggered.connect(self.on_filerunscript)
self.ui.menufileimportsvg.triggered.connect(lambda: self.on_file_importsvg("geometry"))
@ -1238,6 +1240,7 @@ class App(QtCore.QObject):
self.ui.menuview_zoom_fit.triggered.connect(self.on_zoom_fit)
self.ui.menuview_zoom_in.triggered.connect(lambda: self.plotcanvas.zoom(1 / 1.5))
self.ui.menuview_zoom_out.triggered.connect(lambda: self.plotcanvas.zoom(1.5))
self.ui.menuview_toggle_code_editor.triggered.connect(self.on_toggle_code_editor)
self.ui.menuview_toggle_fscreen.triggered.connect(self.on_fullscreen)
self.ui.menuview_toggle_parea.triggered.connect(self.on_toggle_plotarea)
self.ui.menuview_toggle_notebook.triggered.connect(self.on_toggle_notebook)
@ -1541,6 +1544,9 @@ class App(QtCore.QObject):
# Variable to store the status of the fullscreen event
self.toggle_fscreen = False
# Variable to store the status of the code editor
self.toggle_codeeditor = False
self.cursor = None
# Variable to store the GCODE that was edited
@ -1602,6 +1608,19 @@ class App(QtCore.QObject):
except Exception as e:
log.debug("Could not open FlatCAM project file as App parameter due: %s" % str(e))
if '.FlatConfig' in argument:
try:
file_name = str(argument)
if file_name == "":
self.inform.emit("Open Config file failed.")
else:
run_from_arg = True
self.worker_task.emit({'fcn': self.open_config_file,
'params': [file_name, run_from_arg]})
except Exception as e:
log.debug("Could not open FlatCAM Config file as App parameter due: %s" % str(e))
def defaults_read_form(self):
for option in self.defaults_form_fields:
try:
@ -3141,6 +3160,27 @@ class App(QtCore.QObject):
self.ui.grid_snap_btn.trigger()
def on_toggle_code_editor(self):
self.report_usage("on_toggle_code_editor()")
if self.toggle_codeeditor is False:
# add the tab if it was closed
self.ui.plot_tab_area.addTab(self.ui.cncjob_tab, "Code Editor")
self.ui.cncjob_tab.setObjectName('cncjob_tab')
# first clear previous text in text editor (if any)
self.ui.code_editor.clear()
# Switch plot_area to CNCJob tab
self.ui.plot_tab_area.setCurrentWidget(self.ui.cncjob_tab)
self.toggle_codeeditor = True
else:
for idx in range(self.ui.plot_tab_area.count()):
if self.ui.plot_tab_area.widget(idx).objectName() == "cncjob_tab":
self.ui.plot_tab_area.closeTab(idx)
break
self.toggle_codeeditor = False
def on_options_combo_change(self, sel):
"""
Called when the combo box to choose between application defaults and
@ -3619,12 +3659,20 @@ class App(QtCore.QObject):
# self.ui.buttonPreview.setEnabled(enable)
pass
def handleSaveGCode(self):
def handleSaveGCode(self, signal, name=None, filt=None):
self.report_usage("handleSaveGCode()")
if name:
obj_name = name
else:
try:
obj_name = self.collection.get_active().options['name']
except AttributeError:
obj_name = 'file'
obj_name = self.collection.get_active().options['name']
_filter_ = " G-Code Files (*.nc);; G-Code Files (*.txt);; G-Code Files (*.tap);; G-Code Files (*.cnc);; " \
if filt:
_filter_ = filt
else:
_filter_ = " G-Code Files (*.nc);; G-Code Files (*.txt);; G-Code Files (*.tap);; G-Code Files (*.cnc);; " \
"All Files (*.*)"
try:
filename = str(QtWidgets.QFileDialog.getSaveFileName(
@ -4884,6 +4932,7 @@ class App(QtCore.QObject):
obj.on_exportgcode_button_click()
elif type(obj) == FlatCAMGerber:
self.on_file_exportgerber()
def on_view_source(self):
try:
@ -5049,6 +5098,27 @@ class App(QtCore.QObject):
# thread safe. The new_project()
self.open_project(filename)
def on_file_openconfig(self):
"""
File menu callback for opening a config file.
:return: None
"""
self.report_usage("on_file_openconfig")
App.log.debug("on_file_openconfig()")
_filter_ = "FlatCAM Config (*.FlatConfig);;FlatCAM Config (*.json);;All Files (*.*)"
try:
filename, _ = QtWidgets.QFileDialog.getOpenFileName(caption="Open Configuration File",
directory=self.data_path, filter=_filter_)
except TypeError:
filename, _ = QtWidgets.QFileDialog.getOpenFileName(caption="Open Configuration File", filter = _filter_)
if filename == "":
self.inform.emit("[WARNING_NOTCL]Open COnfig cancelled.")
else:
self.open_config_file(filename)
def on_file_exportsvg(self):
"""
Callback for menu item File->Export SVG.
@ -6265,6 +6335,37 @@ class App(QtCore.QObject):
self.inform.emit("[success] Opened: " + filename)
self.progress.emit(100)
def open_config_file(self, filename, run_from_arg=None):
"""
Loads a config file from the specified file.
:param filename: Name of the file from which to load.
:type filename: str
:return: None
"""
App.log.debug("Opening config file: " + filename)
# add the tab if it was closed
self.ui.plot_tab_area.addTab(self.ui.cncjob_tab, "Code Editor")
# first clear previous text in text editor (if any)
self.ui.code_editor.clear()
# Switch plot_area to CNCJob tab
self.ui.plot_tab_area.setCurrentWidget(self.ui.cncjob_tab)
try:
if filename:
f = QtCore.QFile(filename)
if f.open(QtCore.QIODevice.ReadOnly):
stream = QtCore.QTextStream(f)
gcode_edited = stream.readAll()
self.ui.code_editor.setPlainText(gcode_edited)
f.close()
except IOError:
App.log.error("Failed to open config file: %s" % filename)
self.inform.emit("[ERROR_NOTCL] Failed to open config file: %s" % filename)
return
def open_project(self, filename, run_from_arg=None):
"""
Loads a project from the specified file.

View File

@ -83,6 +83,12 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.menufileopenproject = QtWidgets.QAction(QtGui.QIcon('share/folder16.png'), 'Open &Project ...', self)
self.menufile_open.addAction(self.menufileopenproject)
self.menufile_open.addSeparator()
# Open Config File...
self.menufileopenconfig = QtWidgets.QAction(QtGui.QIcon('share/folder16.png'), 'Open Config ...', self)
self.menufile_open.addAction(self.menufileopenconfig)
# Recent
self.recent = self.menufile.addMenu(QtGui.QIcon('share/recent_files.png'), "Recent files")
@ -299,7 +305,10 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.menuview_zoom_fit = self.menuview.addAction(QtGui.QIcon('share/zoom_fit32.png'), "&Zoom Fit\tV")
self.menuview_zoom_in = self.menuview.addAction(QtGui.QIcon('share/zoom_in32.png'), "&Zoom In\t-")
self.menuview_zoom_out = self.menuview.addAction(QtGui.QIcon('share/zoom_out32.png'), "&Zoom Out\t=")
self.menuview.addSeparator()
self.menuview_toggle_code_editor = self.menuview.addAction(QtGui.QIcon('share/code_editor32.png'),
'Toggle Code Editor\tCTRL+E')
self.menuview.addSeparator()
self.menuview_toggle_fscreen = self.menuview.addAction(
QtGui.QIcon('share/fscreen32.png'), "&Toggle FullScreen\tALT+F10")
@ -715,6 +724,7 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
self.geometry_tab_lay.addWidget(self.geometry_scroll_area)
self.cncjob_tab = QtWidgets.QWidget()
self.cncjob_tab.setObjectName("cncjob_tab")
self.pref_tab_area.addTab(self.cncjob_tab, "CNC-JOB")
self.cncjob_tab_lay = QtWidgets.QVBoxLayout()
self.cncjob_tab_lay.setContentsMargins(2, 2, 2, 2)
@ -941,6 +951,10 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
<td height="20"><strong>SHIFT+C</strong></td>
<td>&nbsp;Copy Obj_Name</td>
</tr>
<tr height="20">
<td height="20"><strong>SHIFT+E</strong></td>
<td>&nbsp;Toggle Code Editor</td>
</tr>
<tr height="20">
<td height="20"><strong>SHIFT+G</strong></td>
<td>&nbsp;Toggle the axis</td>
@ -1692,11 +1706,14 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
return
elif modifiers == QtCore.Qt.ShiftModifier:
# Copy Object Name
# Copy Object Name
if key == QtCore.Qt.Key_C:
self.app.on_copy_name()
# Toggle Code Editor
if key == QtCore.Qt.Key_E:
self.app.on_toggle_code_editor()
# Toggle axis
if key == QtCore.Qt.Key_G:
if self.app.toggle_axis is False:

View File

@ -13,6 +13,9 @@ CAD program, and create G-Code for Isolation routing.
- fixed a small bug in the Tool Solder Paste: the App don't take into consideration pads already filled with solder paste.
- prettified the defaults files and the recent file. Now they are ordered and human readable
- added a Toggle Code Editor Menu and key shortcut
- added the ability to open FlatConfig configuration files in COde Editor, Modify them and then save them.
- added ability to double click the FlatConfig files and open them in the FlatCAM Code Editor (to be verified)
23.02.2019

BIN
share/code_editor32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 B