#Copyright (C) 2008 Codethink Ltd
#copyright: Copyright (c) 2005, 2007 IBM Corporation

#This library is free software; you can redistribute it and/or
#modify it under the terms of the GNU Lesser General Public
#License version 2 as published by the Free Software Foundation.

#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#GNU General Public License for more details.
#You should have received a copy of the GNU Lesser General Public License
#along with this program; if not, write to the Free Software
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

#Portions of this code originally licensed and copyright (c) 2005, 2007
#IBM Corporation under the BSD license, available at
#U{http://www.opensource.org/licenses/bsd-license.php}

#authors: Peter Parente, Mark Doffman

# Constants used in the Component interface to get screen coordinates
DESKTOP_COORDS = 0
WINDOW_COORDS = 1

# Constants used to synthesize mouse events
MOUSE_B1P = 'b1p'
MOUSE_B1R = 'b1r'
MOUSE_B1C = 'b1c'
MOUSE_B1D = 'b1d'
MOUSE_B2P = 'b2p'
MOUSE_B2R = 'b2r'
MOUSE_B2C = 'b2c'
MOUSE_B2D = 'b2d'
MOUSE_B3P = 'b3p'
MOUSE_B3R = 'b3r'
MOUSE_B3C = 'b3c'
MOUSE_B3D = 'b3d'
MOUSE_ABS = 'abs'
MOUSE_REL = 'rel'

# events that clear cached properties
CACHE_EVENTS = ['object:property-change:accessible-name',
                'object:property-change:accessible-description',
                'object:property-change:accessible-role',
                'object:property-change:accessible-parent']

CACHE_PROPERTIES = ''

# This was placed into at-spi-corba because it apparently had a bug where
# one could not register for all the subevents of an event given only an
# AT-SPI event class (ie, first part of the event name).  Pyatspi2 does not
# have this issue, but will leave the tree as-is for now, and some programs
# pass it to registerEventListener, so the constant needs to stay.
# Keys are event names having subevents and values are the subevents
# under the key event; handlers *can* be registered for events not in this tree
EVENT_TREE = {
  'terminal':
    ['terminal:line-changed',
     'terminal:columncount-changed',
     'terminal:linecount-changed',
     'terminal:application-changed',
     'terminal:charwidth-changed'
     ],
  'document':
    ['document:load-complete',
     'document:reload',
     'document:load-stopped',
     'document:attributes-changed'
     'document:page-changed'
     ],
  'object': 
    ['object:property-change',
     'object:bounds-changed',
     'object:link-selected',
     'object:state-changed',
     'object:children-changed',
     'object:visible-data-changed',
     'object:selection-changed',
     'object:model-changed',
     'object:active-descendant-changed',
     'object:row-inserted',
     'object:row-reordered',
     'object:row-deleted',
     'object:column-inserted',
     'object:column-reordered',
     'object:column-deleted',
     'object:text-bounds-changed',
     'object:text-selection-changed',
     'object:text-changed',
     'object:text-attributes-changed',
     'object:text-caret-moved',  
     'object:attributes-changed',
     'object:announcement'],
  'object:text-changed' :
    ['object:text-changed:insert',
    'object:text-changed:delete'],
  'object:property-change' :
    ['object:property-change:accessible-parent', 
    'object:property-change:accessible-name',
    'object:property-change:accessible-description',
    'object:property-change:accessible-help-text',
    'object:property-change:accessible-value',
    'object:property-change:accessible-role',
    'object:property-change:accessible-table-caption',
    'object:property-change:accessible-table-column-description',
    'object:property-change:accessible-table-column-header',
    'object:property-change:accessible-table-row-description',
    'object:property-change:accessible-table-row-header',
    'object:property-change:accessible-table-summary'],
  'object:children-changed' :
    ['object:children-changed:add',
    'object:children-changed:remove'],
  'object:state-changed' :
    ['object:state-changed:active',
    'object:state-changed:animated',
    'object:state-changed:armed',
    'object:state-changed:busy',
    'object:state-changed:checkable',
    'object:state-changed:checked',
    'object:state-changed:collapsed',
    'object:state-changed:default',
    'object:state-changed:defunct',
    'object:state-changed:editable',
    'object:state-changed:enabled',
    'object:state-changed:expandable',
    'object:state-changed:expanded',
    'object:state-changed:focusable',
    'object:state-changed:focused',
    'object:state-changed:has-popup',
    'object:state-changed:has-tooltip',
    'object:state-changed:horizontal',
    'object:state-changed:iconified',
    'object:state-changed:indeterminate',
    'object:state-changed:invalid',
    'object:state-changed:invalid-entry',
    'object:state-changed:manages-descendants',
    'object:state-changed:modal',
    'object:state-changed:multi-line',
    'object:state-changed:multiselectable',
    'object:state-changed:opaque',
    'object:state-changed:pressed',
    'object:state-changed:read-only',
    'object:state-changed:resizable',
    'object:state-changed:required',
    'object:state-changed:selectable',
    'object:state-changed:selected',
    'object:state-changed:sensitive',
    'object:state-changed:showing',
    'object:state-changed:selectable-text',
    'object:state-changed:single-line',
    'object:state-changed:stale',
    'object:state-changed:supports-autocompletion',
    'object:state-changed:transient',
    'object:state-changed:truncated',
    'object:state-changed:vertical',
    'object:state-changed:visible',
    'object:state-changed:visited'],
  'mouse' :
    ['mouse:abs',
    'mouse:rel',
    'mouse:button'],
  'mouse:button' :
    ['mouse:button:1p',
    'mouse:button:1r',
    'mouse:button:2p',
    'mouse:button:2r',
    'mouse:button:3p',
    'mouse:button:3r'],
  'screen-reader' :
    ['screen-reader:region-changed',
     'screen-reader:mode-changed'],
  'window' :
    ['window:minimize',
    'window:maximize',
    'window:restore',
    'window:close',
    'window:create',
    'window:reparent',
    'window:desktop-create',
    'window:desktop-destroy',
    'window:activate',
    'window:deactivate',
    'window:raise',
    'window:lower',
    'window:move',
    'window:resize',
    'window:shade',
    'window:unshade',
    'window:restyle'],
  'focus' :
    ['focus:']
}

from pyatspi.state import *
