diff options
author | Ben Langmuir <ben.langmuir@intel.com> | 2013-10-16 02:00:21 +0000 |
---|---|---|
committer | Ben Langmuir <ben.langmuir@intel.com> | 2013-10-16 02:00:21 +0000 |
commit | ac20991f1d43305d4e227e0efb39a3c7c5f81801 (patch) | |
tree | 25fbf8a04980b65987e6792095ca71d31521bf37 | |
parent | 0018a59d01406d145c96fc45a7063ee915f95649 (diff) | |
download | bcm5719-llvm-ac20991f1d43305d4e227e0efb39a3c7c5f81801.tar.gz bcm5719-llvm-ac20991f1d43305d4e227e0efb39a3c7c5f81801.zip |
Add a ListWin to cui to show scrollabled lists
Author: Paul Redmond <paul.redmond@intel.com>
llvm-svn: 192765
-rw-r--r-- | lldb/utils/lui/breakwin.py | 27 | ||||
-rwxr-xr-x | lldb/utils/lui/cui.py | 59 | ||||
-rwxr-xr-x | lldb/utils/lui/sandbox.py | 29 | ||||
-rw-r--r-- | lldb/utils/lui/statuswin.py | 9 |
4 files changed, 102 insertions, 22 deletions
diff --git a/lldb/utils/lui/breakwin.py b/lldb/utils/lui/breakwin.py index 7f675254ccf..3bdd44b1aea 100644 --- a/lldb/utils/lui/breakwin.py +++ b/lldb/utils/lui/breakwin.py @@ -11,27 +11,40 @@ import cui import curses import lldb, lldbutil -class BreakWin(cui.TitledWin): +class BreakWin(cui.ListWin): def __init__(self, driver, x, y, w, h): - super(BreakWin, self).__init__(x, y, w, h, 'Breakpoints') - self.win.scrollok(1) - super(BreakWin, self).draw() + super(BreakWin, self).__init__(x, y, w, h) self.driver = driver + self.update() def handleEvent(self, event): if isinstance(event, lldb.SBEvent): if lldb.SBBreakpoint.EventIsBreakpointEvent(event): self.update() + if isinstance(event, int): + if event == ord('d'): + self.deleteSelected() + super(BreakWin, self).handleEvent(event) + + def deleteSelected(self): + if self.getSelected() == -1: + return + target = self.driver.getTarget() + if not target.IsValid(): + return + bp = target.GetBreakpointAtIndex(self.getSelected()) + target.BreakpointDelete(bp.id) def update(self): target = self.driver.getTarget() if not target.IsValid(): return - self.win.addstr(0, 0, '') + selected = self.getSelected() + self.clearItems() for i in range(0, target.GetNumBreakpoints()): bp = target.GetBreakpointAtIndex(i) if bp.IsInternal(): continue text = lldbutil.get_description(bp) - self.win.addstr(text) - self.win.addstr('\n') + self.addItem(text) + self.setSelected(selected) diff --git a/lldb/utils/lui/cui.py b/lldb/utils/lui/cui.py index 3532f195c7d..f6e67c60d55 100755 --- a/lldb/utils/lui/cui.py +++ b/lldb/utils/lui/cui.py @@ -72,6 +72,65 @@ class TitledWin(CursesWin): self.title_win.draw() self.win.noutrefresh() +class ListWin(CursesWin): + def __init__(self, x, y, w, h): + super(ListWin, self).__init__(x, y, w, h) + self.items = [] + self.selected = 0 + self.first_drawn = 0 + + def draw(self): + h, w = self.win.getmaxyx() + if self.selected < self.first_drawn: + self.first_drawn = self.selected + if self.selected >= self.first_drawn + h: + self.first_drawn = self.selected - h + 1 + + self.win.clear() + + begin = self.first_drawn + end = begin + h + for i, item in enumerate(self.items[begin:end]): + text = item + if i + begin == self.selected: + attr = curses.A_REVERSE + text = '{0:{width}}'.format(text, width=w-1) + else: + attr = curses.A_NORMAL + self.win.addstr(i, 0, text, attr) + self.win.noutrefresh() + + def getSelected(self): + if self.items: + return self.selected + return -1 + + def setSelected(self, selected): + self.selected = selected + if self.selected < 0: + self.selected = 0 + elif self.selected >= len(self.items): + self.selected = len(self.items) - 1 + + def handleEvent(self, event): + if isinstance(event, int): + if len(self.items) > 0: + if event == curses.KEY_UP: + self.setSelected(self.selected - 1) + if event == curses.KEY_DOWN: + self.setSelected(self.selected + 1) + if event == curses.ascii.NL: + self.handleSelect(self.selected) + + def addItem(self, item): + self.items.append(item) + + def clearItems(self): + self.items = [] + + def handleSelect(self, index): + return + class InputHandler(threading.Thread): def __init__(self, screen, queue): super(InputHandler, self).__init__() diff --git a/lldb/utils/lui/sandbox.py b/lldb/utils/lui/sandbox.py index 09ee4cec9ea..5a3a64cba69 100755 --- a/lldb/utils/lui/sandbox.py +++ b/lldb/utils/lui/sandbox.py @@ -31,28 +31,33 @@ class SandboxUI(cui.CursesUI): h2 = height / 2 self.wins = [] + #self.wins.append(cui.TitledWin(w2, h2, w2, h2, "Test Window 4")) + list_win = cui.ListWin(w2, h2, w2, h2) + for i in range(0, 40): + list_win.addItem('Item %s' % i) + self.wins.append(list_win) self.wins.append(cui.TitledWin( 0, 0, w2, h2, "Test Window 1")) self.wins.append(cui.TitledWin(w2, 0, w2, h2, "Test Window 2")) self.wins.append(cui.TitledWin( 0, h2, w2, h2, "Test Window 3")) - self.wins.append(cui.TitledWin(w2, h2, w2, h2, "Test Window 4")) - def callback(s, content): - self.wins[0].win.scroll(1) - self.wins[0].win.addstr(10, 0, '%s: %s' % (s, content)) - self.wins[0].win.scroll(1) - self.el.showPrompt(10, 0) + #def callback(s, content): + # self.wins[0].win.scroll(1) + # self.wins[0].win.addstr(10, 0, '%s: %s' % (s, content)) + # self.wins[0].win.scroll(1) + # self.el.showPrompt(10, 0) - self.wins[0].win.scrollok(1) - self.el = cui.CursesEditLine(self.wins[0].win, None, - lambda c: callback('got', c), lambda c: callback('tab', c)) - self.el.prompt = '>>> ' - self.el.showPrompt(10, 0) + #self.wins[0].win.scrollok(1) + #self.el = cui.CursesEditLine(self.wins[0].win, None, + # lambda c: callback('got', c), lambda c: callback('tab', c)) + #self.el.prompt = '>>> ' + #self.el.showPrompt(10, 0) def handleEvent(self, event): if isinstance(event, int): if event == ord('q'): sys.exit(0) - self.el.handleEvent(event) + #self.el.handleEvent(event) + super(SandboxUI, self).handleEvent(event) def main(screen): global event_queue diff --git a/lldb/utils/lui/statuswin.py b/lldb/utils/lui/statuswin.py index 546d32480cd..c6f6c990b34 100644 --- a/lldb/utils/lui/statuswin.py +++ b/lldb/utils/lui/statuswin.py @@ -18,10 +18,13 @@ class StatusWin(cui.TextWin): self.keys = [#('F1', 'Help', curses.KEY_F1), ('F3', 'Cycle-focus', curses.KEY_F3), ('F10', 'Quit', curses.KEY_F10)] - text = '' + + def draw(self): + self.win.addstr(0, 0, '') for key in self.keys: - text = text + '{0} {1} '.format(key[0], key[1]) - self.setText(text) + self.win.addstr('{0}'.format(key[0]), curses.A_REVERSE) + self.win.addstr(' {0} '.format(key[1]), curses.A_NORMAL) + super(StatusWin, self).draw() def handleEvent(self, event): if isinstance(event, int): |