
    g
fG                     N   d Z dZdZdZdZddlZ ej                  dd       dd	lmZ ddl	m
c mZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dd
l m!Z! ddl"m#Z# ddl$m%Z% ddl&m'Z' ddl(m)Z) ddl*m+Z+  G d dejX                        Z,y)z$Id$z
$Revision$z$Date$zICopyright (C) 2010-2011 The Orca TeamCopyright (C) 2011-2012 Igalia, S.L.LGPL    NAtspiz2.0)r   )AXComponent)AXObject)AXUtilities   BrailleGeneratorSpeechGenerator	Utilitiesc                        e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Z fd
Zd Zd Zd Z fdZd Zd Zd Zd Zd Zd ZddZddZddZd Z xZS )Scriptc                     t         |   |       d| _        d| _        d| _        t        j                         j                  d      %t        j                         j                  dd       yy)zCreates a new script for WebKitGtk applications.

        Arguments:
        - app: the application to create a script for.
        F)NNsayAllOnLoadT)	super__init___loadingDocumentContent_lastCaretContextsayAllOnLoadCheckButtonsettings_manager
getManager
getSetting
setSetting)selfapp	__class__s     H/usr/lib/python3/dist-packages/orca/scripts/toolkits/WebKitGtk/script.pyr   zScript.__init__>   sc     	',$!)'+$&&(33NCK'')44^TJ L    c                 (   t         j                  j                  |        | j                  j	                  | j
                  j                  d             t        j                  t        j                  t        j                        | j                  d<   t        j                  t        j                  t        j                  d      | j                  d<   t        j                  t        j                  t        j                  d      | j                  d<   y)zlDefines InputEventHandler fields for this script that can be
        called by the key and braille bindings.TsayAllHandlerFpanBrailleLeftHandlerpanBrailleRightHandlerN)defaultr   setupInputEventHandlersinputEventHandlersupdatestructuralNavigationget_handlersinput_eventInputEventHandlersayAllcmdnamesSAY_ALLpanBrailleLeftPAN_BRAILLE_LEFTpanBrailleRightPAN_BRAILLE_RIGHTr   s    r    r'   zScript.setupInputEventHandlersM   s     	..t4&&t'@'@'M'Md'ST ))  " 	0 ))%%)) 	 78 ))&&** 	 89r!   c                     t        j                         j                  d      }|t        j                  k(  }| j
                  j                  d|      S )z9Returns the toolkit-specific keybindings for this script.keyboardLayoutT)refresh
is_desktop)r   r   r   settingsGENERAL_KEYBOARD_LAYOUT_DESKTOPr*   get_bindings)r   layout	isDesktops      r    getToolkitKeyBindingszScript.getToolkitKeyBindingse   sJ     ",,.99:JKhFFF	((55dy5YYr!   c                    ddl m} |j                         }|j                  d       t        j
                  }|j                  j                  |      | _        | j                  j                  t        j                         j                  d             |j                  | j                  dddd       |j                          |S )zoReturn a GtkGrid containing the application unique configuration
        GUI items for the current application.r   )Gtk   r   r   )gi.repositoryrA   Gridset_border_width	guilabelsREAD_PAGE_UPON_LOADCheckButtonnew_with_mnemonicr   
set_activer   r   r   attachshow_all)r   rA   gridlabels       r    getAppPreferencesGUIzScript.getAppPreferencesGUIl   s     	&xxzb!--OO--e4 	$$$//'')44^D	FD00!Q1=r!   c                 :    d| j                   j                         iS )z7Returns a dictionary with the app-specific preferences.r   )r   
get_activer5   s    r    getPreferencesFromGUIzScript.getPreferencesFromGUI   s      < < G G IJJr!   c                     t        |       S )z.Returns the braille generator for this script.r	   r5   s    r    getBrailleGeneratorzScript.getBrailleGenerator   s      %%r!   c                     t        |       S )z-Returns the speech generator for this script.r   r5   s    r    getSpeechGeneratorzScript.getSpeechGenerator   s     t$$r!   c                    t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j
                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                  t         j                  j                   t         j                  j"                  t         j                  j$                  t         j                  j&                  t         j                  j(                  t         j                  j*                  t         j                  j,                  t         j                  j.                  t         j                  j0                  gS )zXReturns a list of the structural navigation object types
        enabled in this script.)structural_navigationStructuralNavigation
BLOCKQUOTEBUTTON	CHECK_BOXCHUNK	CLICKABLE	COMBO_BOX	CONTAINERENTRY
FORM_FIELDHEADINGIFRAMEIMAGELANDMARKLINKLIST	LIST_ITEMLIVE_REGION	PARAGRAPHRADIO_BUTTON	SEPARATORTABLEUNVISITED_LINKVISITED_LINKr5   s    r    #getEnabledStructuralNavigationTypesz*Script.getEnabledStructuralNavigationTypes   si    &::EE%::AA%::DD%::@@%::DD%::DD%::DD%::@@%::EE%::BB%::AA%::@@%::CC%::??%::??%::DD%::FF%::DD%::GG%::DD%::@@%::II%::GG-I 	Ir!   c                     t        |       S )z&Returns the utilities for this script.r   r5   s    r    getUtilitieszScript.getUtilities   s     r!   c                    | j                   ry| j                  j                  |j                        st        |   |       y| j                  j                         \  }}|dv ryt        j                         j                         }|dk(  rut        j                  |j                        dk(  rS|t        j                  |j                        k(  r1t        j                  |      r| j                  |j                         y| j                  j!                  |j                  |j"                         t        |   |       y)z:Callback for object:text-caret-moved accessibility events.N)TabISO_Left_TabDownr   )	_inSayAll	utilitiesisWebKitGtksourcer   onCaretMovedlastKeyAndModifiersfocus_managerr   get_locus_of_focusr   get_index_in_parent
get_parentr   is_linkupdateBraillesetCaretContextdetail1)r   eventlastKeymodsfocusr   s        r    r|   zScript.onCaretMoved   s     >>~~))%,,7G '::<--((*==?f++ELL9Q>++ELL99""5)u||,&&u||U]]CU#r!   c                 ^    | j                   j                  |j                        rd| _        yy)z2Callback for document:reload accessibility events.TNry   treatAsBrowserr{   r   r   r   s     r    onDocumentReloadzScript.onDocumentReload   s'     >>((6+/D( 7r!   c                    | j                   j                  |j                        syd| _        | j                   j	                  |j                        \  }}| j                   j                  ||       | j                  |       t        j                         j                  d      r6t        j                         j                  d      r| j                  d       yyy)z9Callback for document:load-complete accessibility events.NFr   enableSpeech)ry   r   r{   r   setCaretAtStartr   r   r   r   r   r.   )r   r   objoffsets       r    onDocumentLoadCompletezScript.onDocumentLoadComplete   s     ~~,,U\\:',$
 nn44U\\BV&&sF33&&(33NC**,77GKK H Dr!   c                 ^    | j                   j                  |j                        rd| _        yy)z8Callback for document:load-stopped accessibility events.FNr   r   s     r    onDocumentLoadStoppedzScript.onDocumentLoadStopped   s'     >>((6+0D( 7r!   c                    | j                   s|j                  sy| j                  j                  |j                        st
        |   |       y| j                  j                         \  }}|j                  |k(  ry|j                  }t        j                  |      }t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                  t        j                  j                   g}||v s2|t        j                  j"                  k(  rt        j$                  |      ryt
        |   |       y)z?Callback for object:state-changed:focused accessibility events.N)rx   r   ry   rz   r{   r   onFocusedChangedgetCaretContextr   get_roler   Rolerc   PANELrk   SECTION
TABLE_CELLri   get_child_count)r   r   
contextObjr   r   role	textRolesr   s          r    r   zScript.onFocusedChanged   s     >>~~))%,,7G$U+!^^;;=
F<<:%ll  %ZZ''ZZ%%ZZ))ZZ''ZZ**	,	
 9uzz+++0H0H0M 'r!   c                 n   | j                   j                  |j                        sy|j                  r | j	                  t
        j                         yt        j                  |j                        }|r#| j	                  t
        j                  |z         y| j	                  t
        j                         y)z<Callback for object:state-changed:busy accessibility events.N)ry   r   r{   r   presentMessagemessagesPAGE_LOADING_STARTr   get_namePAGE_LOADING_END_NAMEDPAGE_LOADING_END)r   r   names      r    onBusyChangedzScript.onBusyChanged  s     ~~,,U\\:== ; ;<  . ? ?$ FG 9 9:r!   c                    t        j                  |      r!t        j                  j	                  | |       yt
        j                  j                  }| j                  j                  ||      }|D ]I  \  }}}}|r| j                  |       t        j                  | j                  j                  |             K d| j                  d<   y)zSpeak the character at the caret.

        Arguments:
        - obj: an Accessible object that implements the AccessibleText interface
        NboundarycharlastTextUnitSpoken)r   is_entryr&   r   sayCharacterr   TextBoundaryTypeCHARry   getObjectsFromEOCsspeakCharacterspeechspeakspeechGeneratorgenerateSpeechpointOfReferencer   r   r   objectsstartendstrings          r    r   zScript.sayCharacter  s     $NN''c2))....33C(3K)0 	G%S%f##F+T11@@EF		G 7=23r!   c                 :   t        j                  |      r!t        j                  j	                  | |       yt
        j                  j                  }| j                  j                  ||      }|D ]  \  }}}}| j                  |||        d| j                  d<   y)zSpeaks the word at the caret.

        Arguments:
        - obj: an Accessible object that implements the AccessibleText interface
        Nr   wordr   )r   r   r&   r   sayWordr   r   
WORD_STARTry   r   	sayPhraser   r   s          r    r   zScript.sayWord(  s     $NN""4-))44..33C(3K)0 	,%S%fNN3s+	, 7=23r!   c                    t        j                  |      r!t        j                  j	                  | |       yt
        j                  j                  }| j                  j                  ||      }|D ]  \  }}}}| j                  |||       t        j                  |      r-t        j                  |      dk(  rt        j                  |      }t
        j                  j                   t
        j                  j"                  g}t        j$                  |      |v st'        j(                  | j*                  j-                  |              d| j.                  d<   y)zSpeaks the line at the caret.

        Arguments:
        - obj: an Accessible object that implements the AccessibleText interface
        Nr   r   liner   )r   r   r&   r   sayLiner   r   
LINE_STARTry   r   r   is_panelr   r   r   r   rc   rg   r   r   r   r   getRoleNamer   )r   r   r   r   r   r   r   rolesToSpeaks           r    r   zScript.sayLine:  s    $NN""4-))44..33C(3K)0 		D%S%fNN3s+ ##C(X-I-I#-NRS-S))#.!JJ..

@L  %5T11==cBC		D 7=23r!   c                 V   t        j                  |      r#t        j                  j	                  | |||       y| j
                  j                  |||      }t        |      r|dk7  r| j                  j                  ||      }| j
                  j                  |      }t        j                  |t         j                        D cg c]  }| }}|r| j
                  j                  |||      }t        j                   ||       n| j#                  |       d| j$                  d<   yc c}w )a  Speaks the text of an Accessible object between the given offsets.

        Arguments:
        - obj: an Accessible object that implements the AccessibleText interface
        - startOffset: the start text offset.
        - endOffset: the end text offset.
        N
)r   r   phraser   )r   r   r&   r   r   ry   	substringlenr   voiceadjustForRepeatsr   iter_childrenr   adjustForLinksr   r   r   r   )r   r   startOffset	endOffsetr   r   xlinkss           r    r   zScript.sayPhraseT  s     $NN$$T3YG))#{IFv;6T>((..3v.FE^^44V<F ( 6 6sK<O<O PQ1QQEQ66sFKPLL' c"6>23 Rs   	D&c                     |j                   j                  d      r,|j                  r t        j                  |j
                        ryt        j                  j                  | |      S )a  Gives us, and scripts, the ability to decide an event isn't
        worth taking the time to process under the current circumstances.

        Arguments:
        - event: the Event

        Returns True if we shouldn't bother processing this object event.
        zobject:state-changed:focusedF)	type
startswithr   r   r   r{   r&   r   skipObjectEventr   s     r    r   zScript.skipObjectEventp  sI     ::  !?@U]]""5<<0~~--dE::r!   c                 &   t        j                         j                         }| j                  j	                         s+| j                         r| j                  j                  |      s!t        j                  j                  | ||      S | j                  j                  |      }t        j                         j                  d|d       | j                  |       | j                  d      r	 | j                  d      r| j                  d       y)dIn document content, we want to use the panning keys to browse the
        entire document.
        NFnotify_script	panToLeftT)r~   r   r   flatReviewPresenter	is_activeisBrailleBeginningShowingry   rz   r&   r   r1   findPreviousObjectset_locus_of_focusr   panBrailleInDirectionrefreshBrailler   
inputEvent	panAmountr   r   s        r    r1   zScript.panBrailleLeft  s    
 ((*==?##--/002..,,U3>>00z9MMnn//6  "55dCu5U3
 ((5(9 ((5(9E"r!   c                 &   t        j                         j                         }| j                  j	                         s+| j                         r| j                  j                  |      s!t        j                  j                  | ||      S | j                  j                  |      }t        j                         j                  d|d       | j                  |       | j                  d      r	 | j                  d      r| j                  d       y)r   NFr   Tr   )r~   r   r   r   r   isBrailleEndShowingry   rz   r&   r   r3   findNextObjectr   r   r   r   r   s        r    r3   zScript.panBrailleRight  s    
 ((*==?##--/**,..,,U3>>11$
INNnn++E2  "55dCu5U3
 ((4(8 ((4(8E"r!   c                 *   |xs" t        j                         j                         }| j                  j	                  |      s"t
        j                  j                  | |||      S t        j                  | j                  ||      | j                         y)zSpeaks the contents of the document beginning with the present
        location.  Overridden in this script because the sayAll could have
        been started on an object without text (such as an image).
        T)r~   r   r   ry   rz   r&   r   r.   r   	textLines_Script__sayAllProgressCallback)r   r   r   r   s       r    r.   zScript.sayAll  so     D]--/BBD~~))#.>>((z3GGdnnS&143P3PQr!   c                    t        j                         j                  d      sIt        j                         j                  d      s&t        j                  t        j
                  dd       y|sy| j                  j                  |      r6| j                  j                  |      s=| j                  j                  |      s"t        j                  j                  | |fi | y| j                  dd      }t        j                  |      D ]^  }t!        j"                  |t        j$                  |d            s n2| j&                  j)                  |      \  }}| j+                  ||       ` |j,                  s[| j&                  j)                  |t.        j0                  j2                        \  }}| j+                  ||       | j5                  |       |j7                  d	      }|r| j9                  ||       | j;                          y)
zpUpdates the braille display to show the given object.

        Arguments:
        - obj: the Accessible
        enableBrailleenableBrailleMonitorzBRAILLE: update disabledTN)clearBrailleaddLiner   )r   extraRegion)r   r   r   debugprintMessage
LEVEL_INFOry   rz   isInlineContainerisTextListItemr&   r   r   getNewBrailleLiner   r   r   on_same_line	get_childbrailleGeneratorgenerateBrailleaddBrailleRegionsToLineregionsr   r   rk   setBrailleFocusgetaddBrailleRegionToLiner   )r   r   argsbrailleLinechildr  fRegionr   s           r    r   zScript.updateBraille  s     **,77H#..0;;<RSu//1KTR~~))#.>>33C8~~44S9NN((s;d;,,$,M++C0 	?E++E83E3Ec13MN!%!6!6!F!Fu!MWg((+>		? ""!%!6!6!F!F%**.. "G "0Wg((+>  )hh}-''[Ar!   )Nr   )NN)__name__
__module____qualname__r   r'   r?   rO   rR   rT   rV   rq   rs   r|   r   r   r   r   r   r   r   r   r   r   r1   r3   r.   r   __classcell__)r   s   @r    r   r   <   s    K0Z(K
&
%
I8
$20&1(6; =*=$=4?8; 00&r!   r   )-__id____version____date____copyright____license__girequire_versionrC   r   orca.scripts.defaultscriptsr&   orca.cmdnamesr/   
orca.debugr   orca.focus_managerr~   orca.guilabelsrF   orca.input_eventr,   orca.messagesr   orca.settingsr:   orca.settings_managerr   orca.speechr   orca.structural_navigationrX   orca.ax_componentr   orca.ax_objectr   orca.ax_utilitiesr   braille_generatorr
   speech_generatorr   script_utilitiesr   r    r!   r    <module>r+     s   . 7 	   7E "  & &    * " &     0  : ) # ) / - 'gW^^ gr!   