More unit tests
[codimension.git] / thirdparty / pyqtermwidget / demo.py
blob3e3fec2927088c972fbbbe0a4dff3f3ea0e28159
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 import sys
4 import os
6 from PyQt4.QtCore import QTimer
7 from PyQt4.QtGui import QApplication, QTabWidget, QPushButton
9 from pyqterm import TerminalWidget
10 from pyqterm.procinfo import ProcessInfo
13 class TabbedTerminal(QTabWidget):
15 def __init__(self, parent=None):
16 super(TabbedTerminal, self).__init__(parent)
17 self.proc_info = ProcessInfo()
18 self.setTabPosition(QTabWidget.South)
19 self._new_button = QPushButton(self)
20 self._new_button.setText("New")
21 self._new_button.clicked.connect(self.new_terminal)
22 self.setCornerWidget(self._new_button)
23 self.setTabsClosable(True)
24 self.setMovable(True)
25 self.setWindowTitle("Terminal")
26 self.resize(800, 600)
27 self._terms = []
28 self.tabCloseRequested[int].connect(self._on_close_request)
29 self.currentChanged[int].connect(self._on_current_changed)
30 QTimer.singleShot(0, self.new_terminal) # create lazy on idle
31 self.startTimer(1000)
33 def _on_close_request(self, idx):
34 term = self.widget(idx)
35 term.stop()
37 def _on_current_changed(self, idx):
38 term = self.widget(idx)
39 self._update_title(term)
41 def new_terminal(self):
42 term = TerminalWidget(self)
43 term.session_closed.connect(self._on_session_closed)
44 self.addTab(term, "Terminal")
45 self._terms.append(term)
46 self.setCurrentWidget(term)
47 term.setFocus()
49 def timerEvent(self, event):
50 self._update_title(self.currentWidget())
52 def _update_title(self, term):
53 if term is None:
54 self.setWindowTitle("Terminal")
55 return
56 idx = self.indexOf(term)
57 pid = term.pid()
58 self.proc_info.update()
59 child_pids = [pid] + self.proc_info.all_children(pid)
60 for pid in reversed(child_pids):
61 cwd = self.proc_info.cwd(pid)
62 if cwd:
63 break
64 try:
65 cmd = self.proc_info.commands[pid]
66 title = "%s: %s" % (os.path.basename(cwd), cmd)
67 except:
68 title = "Terminal"
69 self.setTabText(idx, title)
70 self.setWindowTitle(title)
72 def _on_session_closed(self):
73 term = self.sender()
74 try:
75 self._terms.remove(term)
76 except:
77 pass
78 self.removeTab(self.indexOf(term))
79 widget = self.currentWidget()
80 if widget:
81 widget.setFocus()
82 if self.count() == 0:
83 self.new_terminal()
86 if __name__ == "__main__":
87 app = QApplication(sys.argv)
88 win = TabbedTerminal()
89 win.show()
90 app.exec_()