[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