- 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 - some PEP changes, some method descriptions updated
- added a placeholder text to 2Sided Tool - 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 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 = ''.join(c for c in self.date if c not in ':-')
self.date = self.date.replace(' ', '_') self.date = self.date.replace(' ', '_')
filter__ = "Config File (*.FlatConfig);;All Files (*.*)" filter__ = "Config File .FlatConfig (*.FlatConfig);;All Files (*.*)"
try: try:
filename, _f = FCFileSaveDialog.get_saved_filename( filename, _f = FCFileSaveDialog.get_saved_filename(
caption=_("Export FlatCAM Preferences"), caption=_("Export FlatCAM Preferences"),
@@ -4032,6 +4032,67 @@ class App(QtCore.QObject):
self.file_saved.emit("preferences", filename) self.file_saved.emit("preferences", filename)
self.inform.emit('[success] %s: %s' % (_("Exported preferences to"), 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): 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 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): def contextMenuEvent(self, event):
self.menu = self.createStandardContextMenu(event.pos()) 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 clear_action.setShortcut(QKeySequence(Qt.Key_Delete)) # it's not working, the shortcut
self.menu.addAction(clear_action) self.menu.addAction(clear_action)
clear_action.triggered.connect(self.clear) clear_action.triggered.connect(self.clear)
if self.app: if self.app:
close_action = QAction("Close", self) close_action = QAction(_("Close"), self)
self.menu.addAction(close_action) self.menu.addAction(close_action)
close_action.triggered.connect(lambda: self.app.ui.shell_dock.hide()) close_action.triggered.connect(lambda: self.app.ui.shell_dock.hide())
@@ -2588,6 +2594,10 @@ class _BrowserTextEdit(QTextEdit):
self.moveCursor(QTextCursor.End) self.moveCursor(QTextCursor.End)
self.insertHtml(text) self.insertHtml(text)
def save_log(self, app):
html_content = self.toHtml()
app.save_to_file(content_to_save=html_content)
class _ExpandableTextEdit(QTextEdit): class _ExpandableTextEdit(QTextEdit):
""" """

View File

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

View File

@@ -9,7 +9,6 @@
from tclCommands.TclCommand import TclCommand from tclCommands.TclCommand import TclCommand
import collections import collections
import math
import gettext import gettext
import FlatCAMTranslation as fcTranslate 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)] displayed_text = ['> %s\n' % cmd for cmd in sorted(self.app.tcl_commands_storage)]
cmd_enum += '<br>'.join(displayed_text) 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) self.app.shell.append_raw(cmd_enum)