merge changes from master

cleanups and prepare for   pull request
This commit is contained in:
Kamil Sopko
2016-03-31 17:16:14 +02:00
parent 80d6c657d5
commit b333d136b5
4 changed files with 36 additions and 60 deletions

View File

@@ -12,7 +12,7 @@ def debug_trace():
debug_trace() debug_trace()
# all X11 calling should be thread safe otherwise we have strenght issues # all X11 calling should be thread safe otherwise we have strange issues
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_X11InitThreads) QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_X11InitThreads)
app = QtGui.QApplication(sys.argv) app = QtGui.QApplication(sys.argv)

View File

@@ -22,4 +22,4 @@ class FCShell(termwidget.TermWidget):
return True return True
def child_exec_command(self, text): def child_exec_command(self, text):
self._sysShell.exec_command(text) self._sysShell.exec_command(text)

View File

@@ -1,5 +1,6 @@
from PyQt4 import QtCore from PyQt4 import QtCore
class Worker(QtCore.QObject): class Worker(QtCore.QObject):
""" """
Implements a queue of tasks to be carried out in order Implements a queue of tasks to be carried out in order
@@ -46,17 +47,6 @@ class Worker(QtCore.QObject):
self.allow_debug() self.allow_debug()
# 'worker_name' property of task allows to target
# specific worker.
#if 'worker_name' in task and task['worker_name'] == self.name:
# task['fcn'](*task['params'])
# return
#if 'worker_name' not in task and self.name is None:
# task['fcn'](*task['params'])
# return
if ('worker_name' in task and task['worker_name'] == self.name) or \ if ('worker_name' in task and task['worker_name'] == self.name) or \
('worker_name' not in task and self.name is None): ('worker_name' not in task and self.name is None):

View File

@@ -4,8 +4,7 @@ Shows intput and output text. Allows to enter commands. Supports history.
""" """
import cgi import cgi
from PyQt4 import QtCore from PyQt4.QtCore import pyqtSignal, Qt
from PyQt4.QtCore import pyqtSignal
from PyQt4.QtGui import QColor, QKeySequence, QLineEdit, QPalette, \ from PyQt4.QtGui import QColor, QKeySequence, QLineEdit, QPalette, \
QSizePolicy, QTextCursor, QTextEdit, \ QSizePolicy, QTextCursor, QTextEdit, \
QVBoxLayout, QWidget QVBoxLayout, QWidget
@@ -19,13 +18,13 @@ class _ExpandableTextEdit(QTextEdit):
historyNext = pyqtSignal() historyNext = pyqtSignal()
historyPrev = pyqtSignal() historyPrev = pyqtSignal()
def __init__(self, termWidget, *args): def __init__(self, termwidget, *args):
QTextEdit.__init__(self, *args) QTextEdit.__init__(self, *args)
self.setStyleSheet("font: 9pt \"Courier\";") self.setStyleSheet("font: 9pt \"Courier\";")
self._fittedHeight = 1 self._fittedHeight = 1
self.textChanged.connect(self._fit_to_document) self.textChanged.connect(self._fit_to_document)
self._fit_to_document() self._fit_to_document()
self._termWidget = termWidget self._termWidget = termwidget
def sizeHint(self): def sizeHint(self):
""" """
@@ -39,10 +38,10 @@ class _ExpandableTextEdit(QTextEdit):
""" """
Update widget height to fit all text Update widget height to fit all text
""" """
documentSize = self.document().size().toSize() documentsize = self.document().size().toSize()
self._fittedHeight = documentSize.height() + (self.height() - self.viewport().height()) self._fittedHeight = documentsize.height() + (self.height() - self.viewport().height())
self.setMaximumHeight(self._fittedHeight) self.setMaximumHeight(self._fittedHeight)
self.updateGeometry(); self.updateGeometry()
def keyPressEvent(self, event): def keyPressEvent(self, event):
""" """
@@ -55,30 +54,33 @@ class _ExpandableTextEdit(QTextEdit):
return return
elif event.matches(QKeySequence.MoveToNextLine): elif event.matches(QKeySequence.MoveToNextLine):
text = self.toPlainText() text = self.toPlainText()
cursorPos = self.textCursor().position() cursor_pos = self.textCursor().position()
textBeforeEnd = text[cursorPos:] textBeforeEnd = text[cursor_pos:]
# if len(textBeforeEnd.splitlines()) <= 1: # if len(textBeforeEnd.splitlines()) <= 1:
if len(textBeforeEnd.split('\n')) <= 1: if len(textBeforeEnd.split('\n')) <= 1:
self.historyNext.emit() self.historyNext.emit()
return return
elif event.matches(QKeySequence.MoveToPreviousLine): elif event.matches(QKeySequence.MoveToPreviousLine):
text = self.toPlainText() text = self.toPlainText()
cursorPos = self.textCursor().position() cursor_pos = self.textCursor().position()
textBeforeStart = text[:cursorPos] text_before_start = text[:cursor_pos]
# lineCount = len(textBeforeStart.splitlines()) # lineCount = len(textBeforeStart.splitlines())
lineCount = len(textBeforeStart.split('\n')) line_count = len(text_before_start.split('\n'))
if len(textBeforeStart) > 0 and \ if len(text_before_start) > 0 and \
(textBeforeStart[-1] == '\n' or textBeforeStart[-1] == '\r'): (text_before_start[-1] == '\n' or text_before_start[-1] == '\r'):
lineCount += 1 line_count += 1
if lineCount <= 1: if line_count <= 1:
self.historyPrev.emit() self.historyPrev.emit()
return return
elif event.matches(QKeySequence.MoveToNextPage) or \ elif event.matches(QKeySequence.MoveToNextPage) or \
event.matches(QKeySequence.MoveToPreviousPage): event.matches(QKeySequence.MoveToPreviousPage):
return self._termWidget.browser().keyPressEvent(event) return self._termWidget.browser().keyPressEvent(event)
QTextEdit.keyPressEvent(self, event) QTextEdit.keyPressEvent(self, event)
def insertFromMimeData(self, mime_data):
# Paste only plain text.
self.insertPlainText(mime_data.text())
class TermWidget(QWidget): class TermWidget(QWidget):
""" """
@@ -94,8 +96,9 @@ class TermWidget(QWidget):
self._browser = QTextEdit(self) self._browser = QTextEdit(self)
self._browser.setStyleSheet("font: 9pt \"Courier\";") self._browser.setStyleSheet("font: 9pt \"Courier\";")
self._browser.setReadOnly(True) self._browser.setReadOnly(True)
self._browser.document().setDefaultStyleSheet(self._browser.document().defaultStyleSheet() + self._browser.document().setDefaultStyleSheet(
"span {white-space:pre;}") self._browser.document().defaultStyleSheet() +
"span {white-space:pre;}")
self._edit = _ExpandableTextEdit(self, self) self._edit = _ExpandableTextEdit(self, self)
self._edit.historyNext.connect(self._on_history_next) self._edit.historyNext.connect(self._on_history_next)
@@ -116,11 +119,13 @@ class TermWidget(QWidget):
def open_proccessing(self, detail=None): def open_proccessing(self, detail=None):
""" """
Open processing and disable using shell commands again until all commands are finished Open processing and disable using shell commands again until all commands are finished
:return:
:param detail: text detail about what is currently called from TCL to python
:return: None
""" """
self._edit.setTextColor(QtCore.Qt.white) self._edit.setTextColor(Qt.white)
self._edit.setTextBackgroundColor(QtCore.Qt.darkGreen) self._edit.setTextBackgroundColor(Qt.darkGreen)
if detail is None: if detail is None:
self._edit.setPlainText("...proccessing...") self._edit.setPlainText("...proccessing...")
else: else:
@@ -134,8 +139,8 @@ class TermWidget(QWidget):
:return: :return:
""" """
self._edit.setTextColor(QtCore.Qt.black) self._edit.setTextColor(Qt.black)
self._edit.setTextBackgroundColor(QtCore.Qt.white) self._edit.setTextBackgroundColor(Qt.white)
self._edit.setPlainText('') self._edit.setPlainText('')
self._edit.setDisabled(False) self._edit.setDisabled(False)
@@ -146,30 +151,12 @@ class TermWidget(QWidget):
assert style in ('in', 'out', 'err') assert style in ('in', 'out', 'err')
text = cgi.escape(text) text = cgi.escape(text)
text = text.replace('\n', '<br/>') text = text.replace('\n', '<br/>')
if style != 'out': if style == 'in':
def_bg = self._browser.palette().color(QPalette.Base) text = '<span style="font-weight: bold;">%s</span>' % text
h, s, v, a = def_bg.getHsvF() elif style == 'err':
text = '<span style="font-weight: bold; color: red;">%s</span>' % text
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 = '<span style="background-color: %s; font-weight: bold;">%s</span>' % (str(bg), text)
else: else:
text = '<span>%s</span>' % text # without span <br/> is ignored!!! text = '<span>%s</span>' % text # without span <br/> is ignored!!!
@@ -264,4 +251,3 @@ class TermWidget(QWidget):
self._historyIndex -= 1 self._historyIndex -= 1
self._edit.setPlainText(self._history[self._historyIndex]) self._edit.setPlainText(self._history[self._historyIndex])
self._edit.moveCursor(QTextCursor.End) self._edit.moveCursor(QTextCursor.End)