File: CmdInput.py

package info (click to toggle)
python-pyqtgraph 0.13.7-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 8,068 kB
  • sloc: python: 54,043; makefile: 129; ansic: 40; sh: 2
file content (49 lines) | stat: -rw-r--r-- 1,457 bytes parent folder | download
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])