Changeset 875 for trunk/Monitoring/Watch/repo-state
- Timestamp:
- 06/11/13 15:05:18 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Monitoring/Watch/repo-state
r871 r875 1 1 #!/usr/bin/env python 2 3 # --- ncurses sample 14 5 #import curses6 #from curses import panel7 #8 #class Menu(object):9 #10 # def __init__(self, items, stdscreen):11 # self.window = stdscreen.subwin(0,0)12 # self.window.keypad(1)13 # self.panel = panel.new_panel(self.window)14 # self.panel.hide()15 # panel.update_panels()16 #17 # self.position = 018 # self.items = items19 # self.items.append(('exit','exit'))20 #21 # def navigate(self, n):22 # self.position += n23 # if self.position < 0:24 # self.position = 025 # elif self.position >= len(self.items):26 # self.position = len(self.items)-127 #28 # def display(self):29 # self.panel.top()30 # self.panel.show()31 # self.window.clear()32 #33 #34 # while True:35 # self.window.refresh()36 # curses.doupdate()37 # for index, item in enumerate(self.items):38 # if index == self.position:39 # mode = curses.A_REVERSE40 # else:41 # mode = curses.A_NORMAL42 #43 # msg = '%d. %s' % (index, item[0])44 # self.window.addstr(1+index, 1, msg, mode)45 #46 # key = self.window.getch()47 #48 # if key in [curses.KEY_ENTER, ord('\n')]:49 # if self.position == len(self.items)-1:50 # break51 # else:52 # self.items[self.position][1]()53 #54 # elif key == curses.KEY_UP:55 # self.navigate(-1)56 #57 # elif key == curses.KEY_DOWN:58 # self.navigate(1)59 #60 # self.window.clear()61 # self.panel.hide()62 # panel.update_panels()63 # curses.doupdate()64 #65 #66 #class MyApp(object):67 #68 # def __init__(self, stdscreen):69 # self.screen = stdscreen70 # curses.curs_set(0)71 #72 # submenu_items = [73 # ('beep', curses.beep),74 # ('flash', curses.flash)75 # ]76 # submenu = Menu(submenu_items, self.screen)77 #78 # main_menu_items = [79 # ('beep', curses.beep),80 # ('flash', curses.flash),81 # ('submenu', submenu.display)82 # ]83 # main_menu = Menu(main_menu_items, self.screen)84 # main_menu.display()85 86 #if __name__ == '__main__':87 # curses.wrapper(MyApp)88 89 90 91 92 93 # --- ncurses sample 294 95 # Author: Nikolai Tschacher96 # Date: 02.06.201397 #98 #class BoxSelector:99 # """ Originally designed for accman.py.100 # Display options build from a list of strings in a (unix) terminal.101 # The user can browser though the textboxes and select one with enter.102 # """103 #104 # def __init__(self, L):105 # """ Create a BoxSelector object.106 # L is a list of strings. Each string is used to build107 # a textbox.108 # """109 # self.L = L110 # # Element parameters. Change them here.111 # self.TEXTBOX_WIDTH = 50112 # self.TEXTBOX_HEIGHT = 6113 #114 # self.PAD_WIDTH = 400115 # self.PAD_HEIGHT = 10000116 #117 # def pick(self):118 # """ Just run this when you want to spawn the selction process. """119 # self._init_curses()120 # self._create_pad()121 #122 # windows = self._make_textboxes()123 # picked = self._select_textbox(windows)124 #125 # self._end_curses()126 #127 # return picked128 #129 # def _init_curses(self):130 # """ Inits the curses appliation """131 # # initscr() returns a window object representing the entire screen.132 # self.stdscr = curses.initscr()133 # # turn off automatic echoing of keys to the screen134 # curses.noecho()135 # # Enable non-blocking mode. Keys are read directly, without hitting enter.136 # curses.cbreak()137 # # Disable the mouse cursor.138 # curses.curs_set(0)139 # self.stdscr.keypad(1)140 # # Enable colorous output.141 # curses.start_color()142 # curses.init_pair(1, curses.COLOR_BLACK, curses.COLOR_GREEN)143 # curses.init_pair(2, curses.COLOR_WHITE, curses.COLOR_BLACK)144 # self.stdscr.bkgd(curses.color_pair(2))145 # self.stdscr.refresh()146 #147 # def _end_curses(self):148 # """ Terminates the curses application. """149 # curses.nocbreak()150 # self.stdscr.keypad(0)151 # curses.echo()152 # curses.endwin()153 #154 # def _create_pad(self):155 # """ Creates a big self.pad to place the textboxes in. """156 # self.pad = curses.newpad(self.PAD_HEIGHT, self.PAD_WIDTH)157 # self.pad.box()158 #159 # def _make_textboxes(self):160 # """ Build the textboxes in the pad center and put them in the161 # horizontal middle of the pad. """162 # # Get the actual screensize.163 # maxy, maxx = self.stdscr.getmaxyx()164 #165 # windows = []166 # i = 1167 # for s in self.L:168 # windows.append(self.pad.derwin(self.TEXTBOX_HEIGHT,169 # self.TEXTBOX_WIDTH, i, self.PAD_WIDTH//2-self.TEXTBOX_WIDTH//2))170 # i += self.TEXTBOX_HEIGHT171 #172 # for k in range(len(windows)):173 # windows[k].box()174 # windows[k].addstr(4, 4, '0x{0:X} - {1}'.format(k, self.L[k]))175 #176 # return windows177 #178 # def _center_view(self, window):179 # """ Centers and aligns the view according to the window argument given.180 # Returns the (y, x) coordinates of the centered window. """181 # # The refresh() and noutrefresh() methods of a self.pad require 6 arguments182 # # to specify the part of the self.pad to be displayed and the location on183 # # the screen to be used for the display. The arguments are pminrow,184 # # pmincol, sminrow, smincol, smaxrow, smaxcol; the p arguments refer185 # # to the upper left corner of the self.pad region to be displayed and the186 # # s arguments define a clipping box on the screen within which the187 # # self.pad region is to be displayed.188 # cy, cx = window.getbegyx()189 # maxy, maxx = self.stdscr.getmaxyx()190 # self.pad.refresh(cy, cx, 1, maxx//2 - self.TEXTBOX_WIDTH//2, maxy-1, maxx-1)191 # return (cy, cx)192 #193 # def _select_textbox(self, windows):194 # # See at the root textbox.195 # topy, topx = self._center_view(windows[0])196 #197 # current_selected = 0198 # last = 1199 # top_textbox = windows[0]200 #201 # while True:202 # # Highligth the selected one, the last selected textbox should203 # # become normal again.204 # windows[current_selected].bkgd(curses.color_pair(1))205 # windows[last].bkgd(curses.color_pair(2))206 #207 # # While the textbox can be displayed on the page with the current208 # # top_textbox, don't alter the view. When this becomes impossible,209 # # center the view to last displayable textbox on the previous view.210 # maxy, maxx = self.stdscr.getmaxyx()211 # cy, cx = windows[current_selected].getbegyx()212 #213 # # The current window is to far down. Switch the top textbox.214 # if ((topy + maxy - self.TEXTBOX_HEIGHT) <= cy):215 # top_textbox = windows[current_selected]216 #217 # # The current window is to far up. There is a better way though...218 # if topy >= cy + self.TEXTBOX_HEIGHT:219 # top_textbox = windows[current_selected]220 #221 # if last != current_selected:222 # last = current_selected223 #224 # topy, topx = self._center_view(top_textbox)225 #226 # c = self.stdscr.getch()227 #228 # # Vim like KEY_UP/KEY_DOWN with j(DOWN) and k(UP).229 # if c == ord('j'):230 # if current_selected >= len(windows)-1:231 # current_selected = 0 # wrap around.232 # else:233 # current_selected += 1234 # elif c == ord('k'):235 # if current_selected <= 0:236 # current_selected = len(windows)-1 # wrap around.237 # else:238 # current_selected -= 1239 # elif c == ord('q'): # Quit without selecting.240 # break241 # # At hitting enter, return the index of the selected list element.242 # elif c == curses.KEY_ENTER or c == 10:243 # return int(current_selected)244 #245 #246 #if __name__ == '__main__':247 # # As simple as that.248 # L = [249 # 'I wish I was a wizard',250 # 'Sometimes it all just makes sense',251 # 'This string is here because I need it',252 # 'Being or not being!',253 # 'Python is worse then PHP ;)',254 # 'a -> b <=> if a then b'255 # ]256 #257 # choice = BoxSelector(L).pick()258 # print('[+] Your choice was "{0}"'.format(L[choice]))259 260 261 262 263 264 265 266 # --- ncurses sample 3267 268 269 2 270 3 import sys … … 279 12 280 13 14 # init 15 16 # set pad height/width 17 padhlines = 4 18 padwcols = 30 19 20 # add margin 21 padhlines += 2 22 padwcols += 2 23 24 25 26 281 27 repo_io.init() # open DB connection 282 28 … … 285 31 simulations=repo_io.retrieve_simulations() 286 32 287 mylines = ["Line {0} ".format(id)*3 for id in range(1,11)]288 33 289 34 35 def display_simulation_list(mydata): 36 37 hlines = begin_y = begin_x = 5 38 39 # stuff 40 mypad.scrollok(1) 41 mypad.idlok(1) 42 43 mypad.border(0) # clear border 44 45 y=padhlines-1 46 47 # write strings 48 for line in mydata: 49 mypad.addstr(y,1, line) 50 mypad.scroll(1) 51 52 53 mypad.border(0) # clear border 54 55 56 57 # refresh the pads 58 mypad.refresh(0,0, begin_y,begin_x, begin_y+hlines, begin_x+padwcols) 59 60 61 mypad.touchwin() # pretend the all stuff has been changed 62 63 64 # better way 65 290 66 def main(stdscr): 291 hlines = begin_y = begin_x = 5 ; wcols = 10292 # calculate total content size293 padhlines = len(mylines)294 padwcols = 0295 for line in mylines:296 if len(line) > padwcols: padwcols = len(line)297 padhlines += 2 ; padwcols += 2 # allow border298 #stdscr.addstr("padhlines "+str(padhlines)+" padwcols "+str(padwcols)+"; ")299 # both newpad and subpad are <class '_curses.curses window'>:300 mypadn = curses.newpad(padhlines, padwcols)301 mypads = stdscr.subpad(padhlines, padwcols, begin_y, begin_x+padwcols+4)302 #stdscr.addstr(str(type(mypadn))+" "+str(type(mypads)) + "\n")303 mypadn.scrollok(1)304 mypadn.idlok(1)305 mypads.scrollok(1)306 mypads.idlok(1)307 67 308 mypadn.border(0) # first ... 309 mypads.border(0) # ... border 68 """ 69 window test 310 70 311 for line in mylines: 312 mypadn.addstr(padhlines-1,1, line) 313 mypadn.scroll(1) 314 mypads.addstr(padhlines-1,1, line) 315 mypads.scroll(1) 71 begin_x = 20 ; begin_y = 7 72 height = 5 ; width = 40 73 win = curses.newwin(height, width, begin_y, begin_x) 74 """ 316 75 317 mypadn.border(0) # second ... 318 mypads.border(0) # ... border 76 # create pad 77 global mypad 78 mypad=curses.newpad(padhlines, padwcols) 319 79 320 # refresh parent first, to render the texts on top 321 #~ stdscr.refresh() 322 323 # refresh the pads next 324 mypadn.refresh(0,0, begin_y,begin_x, begin_y+hlines, begin_x+padwcols) 325 mypads.refresh() 326 mypads.touchwin() 327 mypadn.touchwin() 328 stdscr.touchwin() # no real effect here 329 #stdscr.refresh() # not here! overwrites newpad! 330 mypadn.getch() 331 # even THIS command erases newpad! 332 # (unless stdscr.refresh() previously): 333 stdscr.getch() 334 335 curses.wrapper(main) 80 # what to display 81 data = [s.name+" "+s.status for s in simulations] 82 83 84 display_simulation_list(data) 336 85 337 86 338 87 339 88 340 repo_io.free() # close DB connection 89 90 91 while True: 92 c = mypad.getch() # even THIS command erases newpad! 93 #stdscr.getch() 94 95 if c in (curses.KEY_ENTER,): 96 # => doesn't work... 97 98 break 99 elif c in (ord('q'),ord('Q')): 100 # => works... 101 102 break 103 104 elif c in (ord('r'),ord('R')): 105 106 # debug 107 #stdscr.addstr() 108 109 mypad.erase() 110 111 display_simulation_list(data) 112 113 # pretend the all stuff has been changed 114 # no real effect here 115 #stdscr.touchwin() 116 117 stdscr.refresh() # refresh parent first, to render the texts on top 118 119 341 120 342 121 … … 348 127 349 128 350 # --- urwid sample 1351 129 352 #import urwid 353 # 354 #txt = urwid.Text(u"Hello World") 355 #fill = urwid.Filler(txt, 'top') 356 #loop = urwid.MainLoop(fill) 357 #loop.run() 130 curses.wrapper(main) 358 131 359 360 # --- urwid sample 2 361 362 #import urwid 363 # 364 #def show_or_exit(key): 365 # if key in ('q', 'Q'): 366 # raise urwid.ExitMainLoop() 367 # txt.set_text(repr(key)) 368 # 369 #txt = urwid.Text(u"Hello World") 370 #fill = urwid.Filler(txt, 'top') 371 #loop = urwid.MainLoop(fill, unhandled_input=show_or_exit) 372 #loop.run() 373 132 repo_io.free() # close DB connection
Note: See TracChangeset
for help on using the changeset viewer.