Package vqt :: Module cli
[hide private]
[frames] | no frames]

Source Code for Module vqt.cli

  1  import os 
  2  from PyQt4 import QtCore, QtGui 
  3  
 
  4  import envi.cli as e_cli 
  5  import envi.qt.memory as e_q_memory 
  6  import envi.qt.memcanvas as e_q_memcanvas 
  7  
 
  8  from envi.threads import firethread 
  9  
 
 10  import vqt.colors as vq_colors 
 11  import vqt.shortcut as vq_shortcut 
 12  
 
 13  from vqt.basics import * 
 14  from vqt.main import idlethread 
15 16 -class VQCli(QtGui.QWidget):
17 ''' 18 A Qt class to wrap and emulate a Cmd object. 19 ''' 20 21 __canvas_class__ = e_q_memcanvas.VQMemoryCanvas 22 23 sigCliQuit = QtCore.pyqtSignal() 24
25 - def __init__(self, cli, parent=None):
26 QtGui.QWidget.__init__(self, parent=parent) 27 self.cli = cli 28 29 self.input = QtGui.QLineEdit(self) 30 31 # Create our output window... 32 self.output = QtGui.QTextEdit(self) 33 # If it's an EnviCli, let's over-ride the canvas right away. 34 if isinstance(cli, e_cli.EnviCli): 35 self.output.close() 36 self.output = self.__canvas_class__(cli.memobj, syms=cli.symobj, parent=self) 37 self.output.setScrolledCanvas(True) 38 cli.setCanvas(self.output) 39 40 self.setStyleSheet( vq_colors.getDefaultColors() ) 41 42 # Create they vertical layout and add widgets... 43 vbox = VBox( self.output, self.input ) 44 self.setLayout(vbox) 45 46 self.connect(self.input, QtCore.SIGNAL('returnPressed()'), self.returnPressedSlot) 47 48 vq_shortcut.addShortCut(self.input, QtCore.Qt.Key_Up, self.keyCodeUp) 49 vq_shortcut.addShortCut(self.input, QtCore.Qt.Key_Down, self.keyCodeDown) 50 51 self.history = [] 52 self.histidx = 0 53 54 self.resize(250, 150)
55
56 - def returnPressedSlot(self):
57 cmd = str(self.input.text()) 58 self.input.clear() 59 self.addHistory(cmd) 60 self.output.addText('> %s\n' % cmd) 61 firethread(self.onecmd)(cmd)
62
63 - def onecmd(self, cmdline):
64 if self.cli.onecmd( cmdline ): 65 self._emit_quit()
66 67 @idlethread
68 - def _emit_quit(self):
69 # A way to emit the "quit" signal from threads other than the 70 # qt main thread. 71 self.sigCliQuit.emit()
72
73 - def useHistory(self, delta):
74 75 if delta < 0 and self.histidx == 0: 76 return 77 78 if delta > 0 and len(self.history) <= self.histidx+delta: 79 self.histidx = len(self.history) 80 self.input.clear() 81 return 82 83 self.histidx += delta 84 htext = self.history[self.histidx] 85 self.input.setText(htext)
86 #self.input.selectAll() 87
88 - def addHistory(self, histcmd):
89 if histcmd: 90 self.history.append(histcmd) 91 self.histidx = len(self.history)
92
93 - def keyCodeUp(self,*args):
94 self.useHistory(-1)
95
96 - def keyCodeDown(self):
97 self.useHistory(1)
98
99 - def loadHistory(self, filename):
100 if os.path.isfile(filename): 101 hist = file(filename, 'r').readlines()[-1000:] 102 self.history = [ x.strip() for x in hist ] 103 self.histidx = len(self.history)
104
105 - def saveHistory(self, filename):
106 # Only save the last 1000 commands 107 # (gotta put a limit somewhere...) 108 histbuf = '\n'.join( self.history[-1000:] ) 109 file(filename, 'w').write( histbuf )
110