1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
from ..Qt import QtCore, QtWidgets
class CmdInput(QtWidgets.QLineEdit):
sigExecuteCmd = QtCore.Signal(object)
def __init__(self, parent):
QtWidgets.QLineEdit.__init__(self, parent)
self.ps1 = ">>> "
self.ps2 = "... "
self.history = [""]
self.ptr = 0
self.setMultiline(False)
def setMultiline(self, ml):
if ml:
self.setPlaceholderText(self.ps2)
else:
self.setPlaceholderText(self.ps1)
def keyPressEvent(self, ev):
if ev.key() == QtCore.Qt.Key.Key_Up:
if self.ptr < len(self.history) - 1:
self.setHistory(self.ptr+1)
ev.accept()
return
elif ev.key() == QtCore.Qt.Key.Key_Down:
if self.ptr > 0:
self.setHistory(self.ptr-1)
ev.accept()
return
elif ev.key() in (QtCore.Qt.Key.Key_Return, QtCore.Qt.Key.Key_Enter):
self.execCmd()
else:
super().keyPressEvent(ev)
self.history[0] = self.text()
def execCmd(self):
cmd = self.text()
if len(self.history) == 1 or cmd != self.history[1]:
self.history.insert(1, cmd)
self.history[0] = ""
self.setHistory(0)
self.sigExecuteCmd.emit(cmd)
def setHistory(self, num):
self.ptr = num
self.setText(self.history[self.ptr])
|