[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