source: trunk/Monitoring/Watch/repo-state @ 866

Last change on this file since 866 was 866, checked in by jripsl, 11 years ago

Add demo scenarios.

  • Property svn:executable set to *
File size: 1.7 KB
Line 
1#!/usr/bin/env python
2
3import curses
4from curses import panel
5
6class Menu(object):
7
8        def __init__(self, items, stdscreen):
9                self.window = stdscreen.subwin(0,0)
10                self.window.keypad(1)
11                self.panel = panel.new_panel(self.window)
12                self.panel.hide()
13                panel.update_panels()
14
15                self.position = 0
16                self.items = items
17                self.items.append(('exit','exit'))
18
19        def navigate(self, n):
20                self.position += n
21                if self.position < 0:
22                        self.position = 0
23                elif self.position >= len(self.items):
24                        self.position = len(self.items)-1
25
26        def display(self):
27                self.panel.top()
28                self.panel.show()
29                self.window.clear()
30
31
32                while True:
33                        self.window.refresh()
34                        curses.doupdate()
35                        for index, item in enumerate(self.items):
36                                if index == self.position:
37                                        mode = curses.A_REVERSE
38                                else:
39                                        mode = curses.A_NORMAL
40
41                                msg = '%d. %s' % (index, item[0])
42                                self.window.addstr(1+index, 1, msg, mode)
43
44                        key = self.window.getch()
45
46                        if key in [curses.KEY_ENTER, ord('\n')]:
47                                if self.position == len(self.items)-1:
48                                        break
49                                else:
50                                        self.items[self.position][1]()
51
52                        elif key == curses.KEY_UP:
53                                self.navigate(-1)
54
55                        elif key == curses.KEY_DOWN:
56                                self.navigate(1)
57
58                self.window.clear()
59                self.panel.hide()
60                panel.update_panels()
61                curses.doupdate()
62
63
64class MyApp(object):
65
66        def __init__(self, stdscreen):
67                self.screen = stdscreen
68                curses.curs_set(0)
69
70                submenu_items = [
71                                ('beep', curses.beep),
72                                ('flash', curses.flash)
73                                ]
74                submenu = Menu(submenu_items, self.screen)
75
76                main_menu_items = [
77                                ('beep', curses.beep),
78                                ('flash', curses.flash),
79                                ('submenu', submenu.display)
80                                ]
81                main_menu = Menu(main_menu_items, self.screen)
82                main_menu.display()
83
84if __name__ == '__main__':
85        curses.wrapper(MyApp)
Note: See TracBrowser for help on using the repository browser.