[Lldb-commits] [lldb] r250353 - Fix the ability to quit and use a custom exception. Also print tree items out so they are more aligned.
Greg Clayton via lldb-commits
lldb-commits at lists.llvm.org
Wed Oct 14 17:49:37 PDT 2015
Author: gclayton
Date: Wed Oct 14 19:49:36 2015
New Revision: 250353
URL: http://llvm.org/viewvc/llvm-project?rev=250353&view=rev
Log:
Fix the ability to quit and use a custom exception. Also print tree items out so they are more aligned.
Modified:
lldb/trunk/test/lldbcurses.py
Modified: lldb/trunk/test/lldbcurses.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/lldbcurses.py?rev=250353&r1=250352&r2=250353&view=diff
==============================================================================
--- lldb/trunk/test/lldbcurses.py (original)
+++ lldb/trunk/test/lldbcurses.py Wed Oct 14 19:49:36 2015
@@ -57,6 +57,10 @@ class Rect(object):
return pt.y >= self.get_min_y()
return False
+class QuitException(Exception):
+ def __init__(self):
+ super(QuitException, self).__init__('QuitException')
+
class Window(object):
def __init__(self, window, delegate = None, can_become_first_responder = True):
self.window = window
@@ -327,6 +331,9 @@ class Window(object):
def update(self):
for child in self.children:
child.update()
+
+ def quit_action(self):
+ raise QuitException
def key_event_loop(self, timeout_msec=-1, n=sys.maxint):
'''Run an event loop to receive key presses and pass them along to the
@@ -339,13 +346,14 @@ class Window(object):
n is the number of times to go through the event loop before exiting'''
self.timeout(timeout_msec)
- while n > 0:
+ done = False
+ while not done and n > 0:
c = self.window.getch()
if c != -1:
try:
self.handle_key(c)
- except:
- break
+ except QuitException:
+ done = True
n -= 1
class Panel(Window):
@@ -524,6 +532,24 @@ class Item(object):
self.title = title
self.action = action
+class TreeItemDelegate(object):
+
+ def might_have_children(self):
+ return False
+
+ def update_children(self, item):
+ '''Return a list of child Item objects'''
+ return None
+
+ def draw_item_string(self, tree_window, item, s):
+ pt = tree_window.get_cursor()
+ width = tree_window.get_size().w - 1
+ if width > pt.x:
+ tree_window.addnstr(s, width - pt.x)
+
+ def draw_item(self, tree_window, item):
+ self.draw_item_string(tree_window, item, item.title)
+
class TreeItem(object):
def __init__(self, delegate, parent = None, title = None, action = None, is_expanded = False):
self.parent = parent
@@ -531,17 +557,24 @@ class TreeItem(object):
self.action = action
self.delegate = delegate
self.is_expanded = not parent or is_expanded == True
- self.might_have_children_value = None
+ self._might_have_children = None
self.children = None
+ self._children_might_have_children = False
def get_children(self):
if self.is_expanded and self.might_have_children():
if self.children is None:
+ self._children_might_have_children = False
self.children = self.update_children()
+ for child in self.children:
+ if child.might_have_children():
+ self._children_might_have_children = True
+ break
else:
+ self._children_might_have_children = False
self.children = None
return self.children
-
+
def append_visible_items(self, items):
items.append(self)
children = self.get_children()
@@ -550,15 +583,18 @@ class TreeItem(object):
child.append_visible_items(items)
def might_have_children(self):
- if self.might_have_children_value is None:
+ if self._might_have_children is None:
if not self.parent:
# Root item always might have children
- self.might_have_children_value = True
+ self._might_have_children = True
else:
# Check with the delegate to see if the item might have children
- self.might_have_children_value = self.delegate.might_have_children()
- return self.might_have_children_value
-
+ self._might_have_children = self.delegate.might_have_children()
+ return self._might_have_children
+
+ def children_might_have_children(self):
+ return self._children_might_have_children
+
def update_children(self):
if self.is_expanded and self.might_have_children():
self.children = self.delegate.update_children(self)
@@ -584,7 +620,9 @@ class TreeItem(object):
if self.might_have_children():
tree_window.addch (curses.ACS_DIAMOND)
tree_window.addch (curses.ACS_HLINE)
-
+ elif self.parent and self.parent.children_might_have_children():
+ tree_window.addch (curses.ACS_HLINE)
+ tree_window.addch (curses.ACS_HLINE)
is_selected = tree_window.is_selected(row)
if is_selected:
tree_window.attron (curses.A_REVERSE)
More information about the lldb-commits
mailing list