Changeset 95
- Timestamp:
- 12/18/07 18:20:46
- Files:
-
- action_groups/trunk/AccDecorator.py (modified) (1 diff)
- action_groups/trunk/ActionModel.py (modified) (4 diffs)
- action_groups/trunk/ActionTree.py (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
action_groups/trunk/AccDecorator.py
r94 r95 199 199 if child_acc is None: continue 200 200 self.dumpAccTree(child_acc, level) 201 202 def isScrollableSelection(self): 203 return self.isSelection() \ 204 and self.parent.getRole() == pyatspi.ROLE_SCROLL_PANE 205 def isScrollableList(self): 206 return self.isScrollableSelection() and self.hasRoleIn(pyatspi.ROLE_TABLE) action_groups/trunk/ActionModel.py
r94 r95 8 8 9 9 _ = lambda x: x 10 11 def AccFactory(acc): 12 if acc.is_group and acc.isScrollableSelection(): 13 obj = ScrollableSelection(acc) 14 else: 15 obj = acc 16 return obj 10 17 11 18 class ActionGroup(object): … … 21 28 22 29 def _findInterestingChildren(self, parent_acc, items): 23 # isSelection = parent_acc.isSelection()30 is_list = parent_acc.isScrollableList() 24 31 for child_acc in parent_acc: 25 32 if child_acc is None: continue 26 33 child = AccDecorator(child_acc) 27 # child.is_group = not isSelection and self._isActionGroup(child)28 34 child.is_group = self._isActionGroup(child) 29 child.is_interactive = self._isInteractive(child) 35 is_list_item = is_list and child.hasRoleIn(pyatspi.ROLE_TABLE_CELL) 36 child.is_interactive = self._isInteractive(child) or is_list_item 30 37 if child.is_interactive or child.is_group: 31 items.append( child)38 items.append(AccFactory(child)) 32 39 print '%s %s%s ' % (child._acc, ('i' if child.is_interactive else ''), 33 40 ('g' if child.is_group else '')) … … 98 105 return acc.isSelectable() or acc.isActionable() or acc.isEditable() 99 106 100 101 107 class ActionModel(gtk.TreeStore): 102 108 COL_NAME = 0 … … 221 227 return False 222 228 223 class scrollable(): 224 def __init__(self, pane): 225 self._pane=pane 226 v_scrollbar = pane.self.childAtIndex(pane.childCount-1) 227 if v_scrollbar.getRole() <> pyatspi.ROLE_SCROLL_BAR: 228 raise Exception() 229 self.v_scrollbar = v_scrollbar.queryValue() 229 class Scrollable(AccDecorator): 230 def __init__(self, acc): 231 AccDecorator.__init__(self, acc) 232 def getScrollbar(self): 233 try: 234 pane = self._acc.parent 235 print 'p', len(pane) 236 scrollbar = pane[len(pane)-1] 237 return scrollbar.queryValue() 238 except NotImplementedError: 239 return None 230 240 def scrollIntoView(y): 231 self.v_scrollbar.currentValue = y 232 233 #class List(Scrollable): 234 # def __init__(self, pane): 241 self.getScrollbar().currentValue = y 242 243 class ScrollableSelection(Scrollable): 244 def __init__(self, selection): 245 Scrollable.__init__(self, selection) 246 def showItem(self, index): 247 selection = self.querySelection() 248 scrollbar = self.getScrollbar() 249 max_value = scrollbar.maximumValue 250 nitems = len(self) - 1 # ignore header for now 251 new_value = index * (max_value / (nitems-1)) 252 print index, max_value, new_value 253 scrollbar.currentValue = new_value 254 def scrollToFirstItem(self): 255 first = self[1] # ignore header 256 self.scrollAccIntoView(first) 257 def scrollAccIntoView(self, acc): 258 # assert acc.parent == self._acc 259 index = acc.getIndexInParent() 260 index -= 1 #ignore heading for now 261 self.showItem(index) 262 def selectItem(self, index): 263 self.scrollAccIntoView(index) 264 selection.selectChild(index) 265 def hasVisibleHeader(self): 266 if len(self) == 0: 267 return False 268 child0 = AccDecorator(self[0]) 269 return child0.hasRole(pyatspi.ROLE_TABLE_COLUMN_HEADER) and \ 270 child0.hasStates(pyatspi.STATE_VISIBLE) action_groups/trunk/ActionTree.py
r94 r95 63 63 return acc 64 64 65 def get_acc_from_iter(self, iter): 66 return self.get_acc_from_path(self.get_model().get_path(iter)) 67 65 68 def get_acc_from_path(self, path): 66 69 try: … … 81 84 pyatspi.Registry.deregisterEventListener(self._onATSPIEvent, *ActionTree.EVENTS) 82 85 83 def select(self, iter): 86 def select(self, iter, first): 87 acc = self.get_acc_from_iter(iter) 88 piter = self.get_model().iter_parent(iter) 89 if piter: 90 parent = self.get_acc_from_iter(piter) 91 try: 92 if first: 93 parent.scrollToFirstItem() 94 else: 95 parent.scrollAccIntoView(acc) 96 except AttributeError: 97 pass 84 98 selection = self.get_selection() 85 99 selection.select_iter(iter) 86 self.current_acc = self.get_acc_from_path(self.get_model().get_path(iter))100 self.current_acc = acc 87 101 88 102 def next(self): 89 103 model, iter, acc = self._getSelection() 104 first = True 90 105 if iter is None: 91 106 nextiter = model.get_iter_root() … … 98 113 if nextiter is None: 99 114 nextiter = model.get_iter_root() 100 else: 101 self.next_children = True; 102 self.select(nextiter) 115 else: 116 first = False 117 118 self.select(nextiter, first) 103 119 104 120 if acc is not None and acc.isSelectable() and acc.parent is not None:
