[pypy-svn] r7642 - pypy/trunk/src/pypy/translator/tool/pygame

mgedmin at codespeak.net mgedmin at codespeak.net
Tue Nov 23 18:58:02 CET 2004


Author: mgedmin
Date: Tue Nov 23 18:58:00 2004
New Revision: 7642

Modified:
   pypy/trunk/src/pypy/translator/tool/pygame/drawgraph.py
   pypy/trunk/src/pypy/translator/tool/pygame/graphdisplay.py
Log:
Added search for the previous occurrence (bound to p) in the graph viewer.
This changes the binding of 'p' which used to be layout_back, I hope nobody
minds that.



Modified: pypy/trunk/src/pypy/translator/tool/pygame/drawgraph.py
==============================================================================
--- pypy/trunk/src/pypy/translator/tool/pygame/drawgraph.py	(original)
+++ pypy/trunk/src/pypy/translator/tool/pygame/drawgraph.py	Tue Nov 23 18:58:00 2004
@@ -448,23 +448,15 @@
         for cmd in self.draw_commands():
             cmd()
 
-    def _search_for(self, items, searchstr, start_at=None):
-        """Find an object that contains a search string."""
-        it = iter(items)
-        if start_at is not None:
-            # Skip all items up to and including 'start_at'
-            for item in it:
-                if item is start_at:
-                    break
-        for item in it:
+    def findall(self, searchstr):
+        """Return an iterator for all nodes and edges that contain a searchstr.
+        """
+        for item in self.graphlayout.nodes.itervalues():
             if item.label and searchstr in item.label:
-                return item
-        return None
-
-    def search(self, searchstr, start_at=None):
-        """Find a node or an edge that contains a search string."""
-        items = self.graphlayout.nodes.values() + self.graphlayout.edges
-        return self._search_for(items, searchstr, start_at)
+                yield item
+        for item in self.graphlayout.edges:
+            if item.label and searchstr in item.label:
+                yield item
 
     def at_position(self, (x, y)):
         """Figure out the word under the cursor."""

Modified: pypy/trunk/src/pypy/translator/tool/pygame/graphdisplay.py
==============================================================================
--- pypy/trunk/src/pypy/translator/tool/pygame/graphdisplay.py	(original)
+++ pypy/trunk/src/pypy/translator/tool/pygame/graphdisplay.py	Tue Nov 23 18:58:00 2004
@@ -84,11 +84,11 @@
              'quit' : 'quit',
         'meta right' : 'layout_forward',
         'meta left': 'layout_back',
-        'p' : 'layout_back',
         'backspace' : 'layout_back',
         'f': 'search',
         '/': 'search',
         'n': 'find_next',
+        'p': 'find_prev',
         'left' : ('pan', (-1, 0)),
         'right' : ('pan', (1, 0)),
         'up' : ('pan', (0, -1)),
@@ -117,6 +117,7 @@
 
         F or /          Search for text
         N               Find next occurrence
+        P               Find previous occurrence
 
         F1, H or ?      This help message
 
@@ -143,7 +144,8 @@
         self.ascii_key_cache = {}
         self.status_bar_height = 0
         self.searchstr = None
-        self.searchpos = None
+        self.searchpos = 0
+        self.searchresults = []
         self.initialize_keys()
         self.setlayout(layout)
 
@@ -277,17 +279,29 @@
         if not searchstr:
             return
         self.searchstr = searchstr
-        self.searchpos = None
+        self.searchpos = -1
+        self.searchresults = list(self.viewer.findall(self.searchstr))
         self.find_next()
 
     def find_next(self):
         if not self.searchstr:
             return
-        item = self.viewer.search(self.searchstr, start_at=self.searchpos)
-        if item is None:
+        if self.searchpos + 1 >= len(self.searchresults):
             self.setstatusbar('Not found: %s' % self.searchstr)
             return
-        self.searchpos = item
+        self.searchpos += 1
+        self.highlight_found_item(self.searchresults[self.searchpos])
+
+    def find_prev(self):
+        if not self.searchstr:
+            return
+        if self.searchpos - 1 < 0:
+            self.setstatusbar('Not found: %s' % self.searchstr)
+            return
+        self.searchpos -= 1
+        self.highlight_found_item(self.searchresults[self.searchpos])
+
+    def highlight_found_item(self, item):
         self.sethighlight(obj=item)
         if isinstance(item, Node):
             self.setstatusbar('Found node containing %s' % self.searchstr)
@@ -305,7 +319,8 @@
             del self.forward_viewers_history[:]
         self.layout = layout
         self.viewer = GraphRenderer(self.screen, layout)
-        self.searchpos = None
+        self.searchpos = 0
+        self.searchresults = []
         self.zoom_to_fit()
 
     def zoom_actual_size(self):



More information about the Pypy-commit mailing list