Changeset 95

Show
Ignore:
Timestamp:
12/18/07 18:20:46
Author:
slee
Message:

single columl lists

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • action_groups/trunk/AccDecorator.py

    r94 r95  
    199199      if child_acc is None: continue 
    200200      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  
    88 
    99_ = lambda x: x 
     10 
     11def AccFactory(acc): 
     12  if acc.is_group and acc.isScrollableSelection(): 
     13    obj = ScrollableSelection(acc) 
     14  else: 
     15    obj = acc 
     16  return obj 
    1017 
    1118class ActionGroup(object): 
     
    2128     
    2229  def _findInterestingChildren(self, parent_acc, items): 
    23 #    isSelection = parent_acc.isSelection() 
     30    is_list = parent_acc.isScrollableList() 
    2431    for child_acc in parent_acc: 
    2532      if child_acc is None: continue 
    2633      child = AccDecorator(child_acc) 
    27 #      child.is_group = not isSelection and self._isActionGroup(child) 
    2834      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 
    3037      if child.is_interactive or child.is_group: 
    31         items.append(child
     38        items.append(AccFactory(child)
    3239        print '%s %s%s ' % (child._acc, ('i' if child.is_interactive else ''), 
    3340                                         ('g' if child.is_group else '')) 
     
    98105    return acc.isSelectable() or acc.isActionable() or acc.isEditable() 
    99106         
    100  
    101107class ActionModel(gtk.TreeStore): 
    102108  COL_NAME = 0 
     
    221227    return False 
    222228   
    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() 
     229class 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 
    230240  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     
     243class 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  
    6363    return acc 
    6464 
     65  def get_acc_from_iter(self, iter): 
     66    return self.get_acc_from_path(self.get_model().get_path(iter)) 
     67                            
    6568  def get_acc_from_path(self, path): 
    6669    try: 
     
    8184    pyatspi.Registry.deregisterEventListener(self._onATSPIEvent, *ActionTree.EVENTS) 
    8285 
    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 
    8498    selection = self.get_selection() 
    8599    selection.select_iter(iter) 
    86     self.current_acc = self.get_acc_from_path(self.get_model().get_path(iter)) 
     100    self.current_acc = acc 
    87101 
    88102  def next(self): 
    89103    model, iter, acc = self._getSelection() 
     104    first = True 
    90105    if iter is None:  
    91106      nextiter = model.get_iter_root() 
     
    98113        if nextiter is None: 
    99114          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) 
    103119     
    104120    if acc is not None and acc.isSelectable() and acc.parent is not None: