diff --git a/FlatCAMApp.py b/FlatCAMApp.py index 59335235..c510b742 100644 --- a/FlatCAMApp.py +++ b/FlatCAMApp.py @@ -476,7 +476,7 @@ class App(QtCore.QObject): self.ui.menuviewdisableall.triggered.connect(self.disable_plots) self.ui.menuviewdisableother.triggered.connect(lambda: self.disable_plots(except_current=True)) self.ui.menuviewenable.triggered.connect(self.enable_all_plots) - self.ui.menutoolshell.triggered.connect(lambda: self.shell.show()) + self.ui.menutoolshell.triggered.connect(self.on_toggle_shell) self.ui.menuhelp_about.triggered.connect(self.on_about) self.ui.menuhelp_home.triggered.connect(lambda: webbrowser.open(self.app_url)) self.ui.menuhelp_manual.triggered.connect(lambda: webbrowser.open(self.manual_url)) @@ -490,7 +490,7 @@ class App(QtCore.QObject): self.ui.editgeo_btn.triggered.connect(self.edit_geometry) self.ui.updategeo_btn.triggered.connect(self.editor2geometry) self.ui.delete_btn.triggered.connect(self.on_delete) - self.ui.shell_btn.triggered.connect(lambda: self.shell.show()) + self.ui.shell_btn.triggered.connect(self.on_toggle_shell) # Object list self.collection.view.activated.connect(self.on_row_activated) # Options @@ -525,14 +525,24 @@ class App(QtCore.QObject): self.shell = FCShell(self) self.shell.setWindowIcon(self.ui.app_icon) self.shell.setWindowTitle("FlatCAM Shell") - if self.defaults["shell_at_startup"]: - self.shell.show() self.shell.resize(*self.defaults["shell_shape"]) self.shell.append_output("FlatCAM %s\n(c) 2014-2015 Juan Pablo Caram\n\n" % self.version) self.shell.append_output("Type help to get started.\n\n") self.tcl = Tkinter.Tcl() self.setup_shell() + self.ui.shell_dock = QtGui.QDockWidget("FlatCAM TCL Shell") + self.ui.shell_dock.setWidget(self.shell) + self.ui.shell_dock.setAllowedAreas(QtCore.Qt.AllDockWidgetAreas) + self.ui.shell_dock.setFeatures(QtGui.QDockWidget.DockWidgetMovable | + QtGui.QDockWidget.DockWidgetFloatable | QtGui.QDockWidget.DockWidgetClosable) + self.ui.addDockWidget(QtCore.Qt.BottomDockWidgetArea, self.ui.shell_dock) + + if self.defaults["shell_at_startup"]: + self.ui.shell_dock.show() + else: + self.ui.shell_dock.hide() + if self.cmd_line_shellfile: try: with open(self.cmd_line_shellfile, "r") as myfile: @@ -1009,6 +1019,16 @@ class App(QtCore.QObject): if not silent: self.inform.emit("Defaults saved.") + def on_toggle_shell(self): + """ + toggle shell if is visible close it if closed open it + :return: + """ + if self.ui.shell_dock.isVisible(): + self.ui.shell_dock.hide() + else: + self.ui.shell_dock.show() + def on_edit_join(self): """ Callback for Edit->Join. Joins the selected geometry objects into diff --git a/termwidget.py b/termwidget.py index d6309fd3..b2e4fdba 100644 --- a/termwidget.py +++ b/termwidget.py @@ -19,13 +19,13 @@ class _ExpandableTextEdit(QTextEdit): historyNext = pyqtSignal() historyPrev = pyqtSignal() - def __init__(self, termWidget, *args): + def __init__(self, termwidget, *args): QTextEdit.__init__(self, *args) self.setStyleSheet("font: 9pt \"Courier\";") self._fittedHeight = 1 self.textChanged.connect(self._fit_to_document) self._fit_to_document() - self._termWidget = termWidget + self._termWidget = termwidget def sizeHint(self): """ @@ -39,10 +39,10 @@ class _ExpandableTextEdit(QTextEdit): """ Update widget height to fit all text """ - documentSize = self.document().size().toSize() - self._fittedHeight = documentSize.height() + (self.height() - self.viewport().height()) + documentsize = self.document().size().toSize() + self._fittedHeight = documentsize.height() + (self.height() - self.viewport().height()) self.setMaximumHeight(self._fittedHeight) - self.updateGeometry(); + self.updateGeometry() def keyPressEvent(self, event): """ @@ -55,30 +55,34 @@ class _ExpandableTextEdit(QTextEdit): return elif event.matches(QKeySequence.MoveToNextLine): text = self.toPlainText() - cursorPos = self.textCursor().position() - textBeforeEnd = text[cursorPos:] + cursor_pos = self.textCursor().position() + textBeforeEnd = text[cursor_pos:] # if len(textBeforeEnd.splitlines()) <= 1: if len(textBeforeEnd.split('\n')) <= 1: self.historyNext.emit() return elif event.matches(QKeySequence.MoveToPreviousLine): text = self.toPlainText() - cursorPos = self.textCursor().position() - textBeforeStart = text[:cursorPos] + cursor_pos = self.textCursor().position() + text_before_start = text[:cursor_pos] # lineCount = len(textBeforeStart.splitlines()) - lineCount = len(textBeforeStart.split('\n')) - if len(textBeforeStart) > 0 and \ - (textBeforeStart[-1] == '\n' or textBeforeStart[-1] == '\r'): - lineCount += 1 - if lineCount <= 1: + line_count = len(text_before_start.split('\n')) + if len(text_before_start) > 0 and \ + (text_before_start[-1] == '\n' or text_before_start[-1] == '\r'): + line_count += 1 + if line_count <= 1: self.historyPrev.emit() return elif event.matches(QKeySequence.MoveToNextPage) or \ - event.matches(QKeySequence.MoveToPreviousPage): + event.matches(QKeySequence.MoveToPreviousPage): return self._termWidget.browser().keyPressEvent(event) QTextEdit.keyPressEvent(self, event) + def insertFromMimeData(self, mime_data): + # Paste only plain text. + self.insertPlainText(mime_data.text()) + class TermWidget(QWidget): """ @@ -94,8 +98,9 @@ class TermWidget(QWidget): self._browser = QTextEdit(self) self._browser.setStyleSheet("font: 9pt \"Courier\";") self._browser.setReadOnly(True) - self._browser.document().setDefaultStyleSheet(self._browser.document().defaultStyleSheet() + - "span {white-space:pre;}") + self._browser.document().setDefaultStyleSheet( + self._browser.document().defaultStyleSheet() + + "span {white-space:pre;}") self._edit = _ExpandableTextEdit(self, self) self._edit.historyNext.connect(self._on_history_next) @@ -120,30 +125,12 @@ class TermWidget(QWidget): assert style in ('in', 'out', 'err') text = cgi.escape(text) - text = text.replace('\n', '
') - if style != 'out': - def_bg = self._browser.palette().color(QPalette.Base) - h, s, v, a = def_bg.getHsvF() - - if style == 'in': - if v > 0.5: # white background - v = v - (v / 8) # make darker - else: - v = v + ((1 - v) / 4) # make ligher - else: # err - if v < 0.5: - v = v + ((1 - v) / 4) # make ligher - - if h == -1: # make red - h = 0 - s = .4 - else: - h = h + ((1 - h) * 0.5) # make more red - - bg = QColor.fromHsvF(h, s, v).name() - text = '%s' % (str(bg), text) + if style == 'in': + text = '%s' % text + elif style == 'err': + text = '%s' % text else: text = '%s' % text # without span
is ignored!!!