- added a new menu entry in the context menu of the Tcl Shell: 'Save Log' which will save the content of the Tcl Shell browser window to a file

This commit is contained in:
Marius Stanciu 2020-04-24 04:51:55 +03:00 committed by Marius
parent ea4502b965
commit b569fa1748
5 changed files with 84 additions and 10 deletions

View File

@ -11,6 +11,8 @@ CHANGELOG for FlatCAM beta
- some PEP changes, some method descriptions updated
- added a placeholder text to 2Sided Tool
- added a new menu entry in the context menu of the Tcl Shell: 'Save Log' which will save the content of the Tcl Shell browser window to a file
23.04.2020

View File

@ -3971,7 +3971,7 @@ class App(QtCore.QObject):
self.date = ''.join(c for c in self.date if c not in ':-')
self.date = self.date.replace(' ', '_')
filter__ = "Config File (*.FlatConfig);;All Files (*.*)"
filter__ = "Config File .FlatConfig (*.FlatConfig);;All Files (*.*)"
try:
filename, _f = FCFileSaveDialog.get_saved_filename(
caption=_("Export FlatCAM Preferences"),
@ -4032,6 +4032,67 @@ class App(QtCore.QObject):
self.file_saved.emit("preferences", filename)
self.inform.emit('[success] %s: %s' % (_("Exported preferences to"), filename))
def save_to_file(self, content_to_save):
"""
Save something to a file.
:return: None
"""
self.report_usage("save_to_file")
App.log.debug("save_to_file()")
self.date = str(datetime.today()).rpartition('.')[0]
self.date = ''.join(c for c in self.date if c not in ':-')
self.date = self.date.replace(' ', '_')
filter__ = "HTML File .html (*.html);;All Files (*.*)"
path_to_save = self.defaults["global_last_save_folder"] if\
self.defaults["global_last_save_folder"] is not None else self.data_path
try:
filename, _f = FCFileSaveDialog.get_saved_filename(
caption=_("Save to file"),
directory=path_to_save + '/file_' + self.date,
filter=filter__
)
except TypeError:
filename, _f = FCFileSaveDialog.get_saved_filename(caption=_("Save to file"), filter=filter__)
filename = str(filename)
if filename == "":
self.inform.emit('[WARNING_NOTCL] %s' % _("Saving to file cancelled."))
return
else:
try:
f = open(filename, 'w')
defaults_file_content = f.read()
f.close()
except PermissionError:
self.inform.emit('[WARNING] %s' %
_("Permission denied, saving not possible.\n"
"Most likely another app is holding the file open and not accessible."))
return
except IOError:
App.log.debug('Creating a new file ...')
f = open(filename, 'w')
f.close()
except Exception:
e = sys.exc_info()[0]
App.log.error("Could not load the file.")
App.log.error(str(e))
self.inform.emit('[ERROR_NOTCL] %s' % _("Could not load the file."))
return
# Save content
try:
with open(filename, "w") as f:
f.write(content_to_save)
except Exception:
self.inform.emit('[ERROR_NOTCL] %s %s' % (_("Failed to write defaults to file."), str(filename)))
return
self.inform.emit('[success] %s: %s' % (_("Exported file to"), filename))
def save_geometry(self, x, y, width, height, notebook_width):
"""
Will save the application geometry and positions in the defaults discitionary to be restored at the next

View File

@ -2568,13 +2568,19 @@ class _BrowserTextEdit(QTextEdit):
def contextMenuEvent(self, event):
self.menu = self.createStandardContextMenu(event.pos())
clear_action = QAction("Clear", self)
if self.app:
save_action = QAction(_("Save Log"), self)
self.menu.addAction(save_action)
save_action.triggered.connect(lambda: self.save_log(app=self.app))
clear_action = QAction(_("Clear"), self)
clear_action.setShortcut(QKeySequence(Qt.Key_Delete)) # it's not working, the shortcut
self.menu.addAction(clear_action)
clear_action.triggered.connect(self.clear)
if self.app:
close_action = QAction("Close", self)
close_action = QAction(_("Close"), self)
self.menu.addAction(close_action)
close_action.triggered.connect(lambda: self.app.ui.shell_dock.hide())
@ -2588,6 +2594,10 @@ class _BrowserTextEdit(QTextEdit):
self.moveCursor(QTextCursor.End)
self.insertHtml(text)
def save_log(self, app):
html_content = self.toHtml()
app.save_to_file(content_to_save=html_content)
class _ExpandableTextEdit(QTextEdit):
"""

View File

@ -118,7 +118,7 @@ class TermWidget(QWidget):
scrollbar = self._browser.verticalScrollBar()
old_value = scrollbar.value()
scrollattheend = old_value == scrollbar.maximum()
# scrollattheend = old_value == scrollbar.maximum()
self._browser.moveCursor(QTextCursor.End)
self._browser.insertHtml(text)
@ -251,11 +251,12 @@ class FCShell(TermWidget):
self._sysShell = sysShell
def is_command_complete(self, text):
def skipQuotes(text):
quote = text[0]
text = text[1:]
endIndex = str(text).index(quote)
def skipQuotes(txt):
quote = txt[0]
text_val = txt[1:]
endIndex = str(text_val).index(quote)
return text[endIndex:]
while text:
if text[0] in ('"', "'"):
try:

View File

@ -9,7 +9,6 @@
from tclCommands.TclCommand import TclCommand
import collections
import math
import gettext
import FlatCAMTranslation as fcTranslate
@ -109,6 +108,7 @@ class TclCommandHelp(TclCommand):
displayed_text = ['> %s\n' % cmd for cmd in sorted(self.app.tcl_commands_storage)]
cmd_enum += '<br>'.join(displayed_text)
cmd_enum += '<br><br>%s<br>%s' % (_("Type help <command_name> for usage."), _("Example: help open_gerber"))
cmd_enum += '<br><br>%s<br>%s<br>' % (
_("Type help <command_name> for usage."), _("Example: help open_gerber"))
self.app.shell.append_raw(cmd_enum)