- added ability to create new scripts and open scripts in FlatCAM Script Editor

This commit is contained in:
Marius Stanciu
2019-03-18 22:59:13 +02:00
parent b79c26ec4b
commit 74d1765a95
11 changed files with 664 additions and 594 deletions

View File

@@ -90,8 +90,8 @@ class App(QtCore.QObject):
log.addHandler(handler) log.addHandler(handler)
# Version # Version
version = 8.912 version = 8.913
version_date = "2019/03/17" version_date = "2019/03/23"
beta = True beta = True
# current date now # current date now
@@ -1240,6 +1240,9 @@ class App(QtCore.QObject):
self.ui.menufileopenproject.triggered.connect(self.on_file_openproject) self.ui.menufileopenproject.triggered.connect(self.on_file_openproject)
self.ui.menufileopenconfig.triggered.connect(self.on_file_openconfig) self.ui.menufileopenconfig.triggered.connect(self.on_file_openconfig)
self.ui.menufilenewscript.triggered.connect(self.on_filenewscript)
self.ui.menufileopenscript.triggered.connect(self.on_fileopenscript)
self.ui.menufilerunscript.triggered.connect(self.on_filerunscript) self.ui.menufilerunscript.triggered.connect(self.on_filerunscript)
self.ui.menufileimportsvg.triggered.connect(lambda: self.on_file_importsvg("geometry")) self.ui.menufileimportsvg.triggered.connect(lambda: self.on_file_importsvg("geometry"))
@@ -1422,6 +1425,7 @@ class App(QtCore.QObject):
self.ui.cncjob_defaults_form.cncjob_adv_opt_group.tc_variable_combo.currentIndexChanged[str].connect( self.ui.cncjob_defaults_form.cncjob_adv_opt_group.tc_variable_combo.currentIndexChanged[str].connect(
self.on_cnc_custom_parameters) self.on_cnc_custom_parameters)
# Modify G-CODE Plot Area TAB # Modify G-CODE Plot Area TAB
self.ui.code_editor.textChanged.connect(self.handleTextChanged) self.ui.code_editor.textChanged.connect(self.handleTextChanged)
self.ui.buttonOpen.clicked.connect(self.handleOpen) self.ui.buttonOpen.clicked.connect(self.handleOpen)
@@ -3374,7 +3378,7 @@ class App(QtCore.QObject):
if self.toggle_codeeditor is False: if self.toggle_codeeditor is False:
# add the tab if it was closed # add the tab if it was closed
self.ui.plot_tab_area.addTab(self.ui.cncjob_tab, "Code Editor") self.ui.plot_tab_area.addTab(self.ui.cncjob_tab, _("Code Editor"))
self.ui.cncjob_tab.setObjectName('cncjob_tab') self.ui.cncjob_tab.setObjectName('cncjob_tab')
# first clear previous text in text editor (if any) # first clear previous text in text editor (if any)
self.ui.code_editor.clear() self.ui.code_editor.clear()
@@ -3863,7 +3867,7 @@ class App(QtCore.QObject):
filter_group = " G-Code Files (*.nc);; G-Code Files (*.txt);; G-Code Files (*.tap);; G-Code Files (*.cnc);; " \ filter_group = " G-Code Files (*.nc);; G-Code Files (*.txt);; G-Code Files (*.tap);; G-Code Files (*.cnc);; " \
"All Files (*.*)" "All Files (*.*)"
path, _ = QtWidgets.QFileDialog.getOpenFileName( path, _f = QtWidgets.QFileDialog.getOpenFileName(
caption=_('Open file'), directory=self.get_last_folder(), filter=filter_group) caption=_('Open file'), directory=self.get_last_folder(), filter=filter_group)
if path: if path:
file = QtCore.QFile(path) file = QtCore.QFile(path)
@@ -5299,9 +5303,11 @@ class App(QtCore.QObject):
return 'fail' return 'fail'
# add the tab if it was closed # add the tab if it was closed
self.ui.plot_tab_area.addTab(self.ui.cncjob_tab, _("Code Editor")) self.ui.plot_tab_area.addTab(self.ui.cncjob_tab, _("Source Editor"))
self.ui.cncjob_tab.setObjectName('cncjob_tab')
# first clear previous text in text editor (if any) # first clear previous text in text editor (if any)
self.ui.code_editor.clear() self.ui.code_editor.clear()
self.toggle_codeeditor = True
# Switch plot_area to CNCJob tab # Switch plot_area to CNCJob tab
self.ui.plot_tab_area.setCurrentWidget(self.ui.cncjob_tab) self.ui.plot_tab_area.setCurrentWidget(self.ui.cncjob_tab)
@@ -5783,19 +5789,23 @@ class App(QtCore.QObject):
self.worker_task.emit({'fcn': self.import_dxf, self.worker_task.emit({'fcn': self.import_dxf,
'params': [filename, type_of_obj]}) 'params': [filename, type_of_obj]})
def on_filerunscript(self): def on_filenewscript(self):
""" # add the tab if it was closed
File menu callback for loading and running a TCL script. self.ui.plot_tab_area.addTab(self.ui.cncjob_tab, _("Script Editor"))
self.ui.cncjob_tab.setObjectName('cncjob_tab')
# first clear previous text in text editor (if any)
self.ui.code_editor.clear()
:return: None # Switch plot_area to CNCJob tab
""" self.ui.plot_tab_area.setCurrentWidget(self.ui.cncjob_tab)
self.report_usage("on_filerunscript") self.toggle_codeeditor = True
App.log.debug("on_file_runscript()")
_filter_ = "TCL script (*.TCL);;TCL script (*.TXT);;All Files (*.*)" def on_fileopenscript(self):
_filter_ = "TCL script (*.FlatScript);;TCL script (*.TCL);;TCL script (*.TXT);;All Files (*.*)"
try: try:
filename, _f = QtWidgets.QFileDialog.getOpenFileName(caption=_("Open TCL script"), filename, _f = QtWidgets.QFileDialog.getOpenFileName(caption=_("Open TCL script"),
directory=self.get_last_folder(), filter=_filter_) directory=self.get_last_folder(), filter=_filter_)
except TypeError: except TypeError:
filename, _f = QtWidgets.QFileDialog.getOpenFileName(caption=_("Open TCL script"), filter=_filter_) filename, _f = QtWidgets.QFileDialog.getOpenFileName(caption=_("Open TCL script"), filter=_filter_)
@@ -5806,13 +5816,58 @@ class App(QtCore.QObject):
if filename == "": if filename == "":
self.inform.emit(_("[WARNING_NOTCL]Open TCL script cancelled.")) self.inform.emit(_("[WARNING_NOTCL]Open TCL script cancelled."))
else:
self.on_filenewscript()
try:
with open(filename, "r") as opened_script:
try:
for line in opened_script:
proc_line = str(line).strip('\n')
self.ui.code_editor.append(proc_line)
except Exception as e:
log.debug('App.on_fileopenscript() -->%s' % str(e))
self.inform.emit(_('[ERROR]App.on_fileopenscript() -->%s') % str(e))
return
self.ui.code_editor.moveCursor(QtGui.QTextCursor.Start)
self.handleTextChanged()
self.ui.show()
except Exception as e:
log.debug("App.on_fileopenscript() -> %s" % str(e))
def on_filerunscript(self):
"""
File menu callback for loading and running a TCL script.
:return: None
"""
self.report_usage("on_filerunscript")
App.log.debug("on_file_runscript()")
_filter_ = "TCL script (*.FlatScript);;TCL script (*.TCL);;TCL script (*.TXT);;All Files (*.*)"
try:
filename, _f = QtWidgets.QFileDialog.getOpenFileName(caption=_("Run TCL script"),
directory=self.get_last_folder(), filter=_filter_)
except TypeError:
filename, _f = QtWidgets.QFileDialog.getOpenFileName(caption=_("Run TCL script"), filter=_filter_)
# The Qt methods above will return a QString which can cause problems later.
# So far json.dump() will fail to serialize it.
# TODO: Improve the serialization methods and remove this fix.
filename = str(filename)
if filename == "":
self.inform.emit(_("[WARNING_NOTCL]Run TCL script cancelled."))
else: else:
try: try:
with open(filename, "r") as tcl_script: with open(filename, "r") as tcl_script:
cmd_line_shellfile_content = tcl_script.read() cmd_line_shellfile_content = tcl_script.read()
self.shell._sysShell.exec_command(cmd_line_shellfile_content) self.shell._sysShell.exec_command(cmd_line_shellfile_content)
except Exception as ext: except Exception as e:
print("ERROR: ", ext) log.debug("App.on_filerunscript() -> %s" % str(e))
sys.exit(2) sys.exit(2)
def on_file_saveproject(self): def on_file_saveproject(self):

View File

@@ -9,6 +9,11 @@ CAD program, and create G-Code for Isolation routing.
================================================= =================================================
18.03.2019
- added ability to create new scripts and open scripts in FlatCAM Script Editor
17.03.2019 17.03.2019
- remade the layout in 2Sided Tool - remade the layout in 2Sided Tool

View File

@@ -107,7 +107,14 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
# Separator # Separator
self.menufile.addSeparator() self.menufile.addSeparator()
# Run Scripts # Scripting
self.menufile_scripting = self.menufile.addMenu(QtGui.QIcon('share/script16.png'), _('Scripting'))
self.menufile_scripting.setToolTipsVisible(True)
self.menufilenewscript = QtWidgets.QAction(QtGui.QIcon('share/script_new16.png'), _('New Script ...'),
self)
self.menufileopenscript = QtWidgets.QAction(QtGui.QIcon('share/script_open16.png'), _('Open Script ...'),
self)
self.menufilerunscript = QtWidgets.QAction(QtGui.QIcon('share/script16.png'), _('Run Script ...\tSHIFT+S'), self.menufilerunscript = QtWidgets.QAction(QtGui.QIcon('share/script16.png'), _('Run Script ...\tSHIFT+S'),
self) self)
self.menufilerunscript.setToolTip( self.menufilerunscript.setToolTip(
@@ -115,7 +122,10 @@ class FlatCAMGUI(QtWidgets.QMainWindow):
"enabling the automation of certain\n" "enabling the automation of certain\n"
"functions of FlatCAM.") "functions of FlatCAM.")
) )
self.menufile.addAction(self.menufilerunscript) self.menufile_scripting.addAction(self.menufilenewscript)
self.menufile_scripting.addAction(self.menufileopenscript)
self.menufile_scripting.addSeparator()
self.menufile_scripting.addAction(self.menufilerunscript)
# Separator # Separator
self.menufile.addSeparator() self.menufile.addSeparator()

View File

@@ -190,7 +190,7 @@ class DblSidedTool(FlatCAMTool):
## Alignment holes ## Alignment holes
self.ah_label = QtWidgets.QLabel("<b%s</b>" % _('Alignment Drill Coordinates:')) self.ah_label = QtWidgets.QLabel("<b>%s</b>" % _('Alignment Drill Coordinates:'))
self.ah_label.setToolTip( self.ah_label.setToolTip(
_( "Alignment holes (x1, y1), (x2, y2), ... " _( "Alignment holes (x1, y1), (x2, y2), ... "
"on one side of the mirror axis. For each set of (x, y) coordinates\n" "on one side of the mirror axis. For each set of (x, y) coordinates\n"

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

BIN
share/script_new16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 B

BIN
share/script_open16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 341 B