
    g
fXJ                         d Z dZdZdZdZd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      Z e       Zd Zy)=Module for commands related to the current accessible object.z$Id$z
$Revision$z$Date$zQCopyright (c) 2005-2008 Sun Microsystems Inc.Copyright (c) 2016-2023 Igalia, S.L.LGPL   )cmdnames)debug)focus_manager)input_event)keybindings)messages)settings_manager)AXComponent)AXObject)AXText)AXUtilitiesc                       e Zd ZdZd ZddZddZd Zd Zd Z	d Z
dd
ZddZddZddZddZddZddZddZddZddZddZddZy	)WhereAmIPresenterr   c                     | j                  d      | _        t        j                         | _        t        j                         | _        y )NT)get_handlers	_handlersr	   KeyBindings_desktop_bindings_laptop_bindingsselfs    ;/usr/lib/python3/dist-packages/orca/where_am_i_presenter.py__init__zWhereAmIPresenter.__init__.   s6    **40!,!8!8!: + 7 7 9    c                 \   |r8d}t        j                  t         j                  |d       | j                          nY|r+| j                  j                         r| j                          n,|s*| j                  j                         r| j                          |r| j                  S | j                  S )z-Returns the where-am-i-presenter keybindings.z*WHERE AM I PRESENTER: Refreshing bindings.T)r   printMessage
LEVEL_INFO_setup_bindingsr   isEmptyr   )r   refresh
is_desktopmsgs       r   get_bindingszWhereAmIPresenter.get_bindings3   s     >Cu//d;  "D22::<  " 5 5 = = ?  ")))$$$r   c                     |r7d}t        j                  t         j                  |d       | j                          | j                  S )z*Returns the where-am-i-presenter handlers.z*WHERE AM I PRESENTER: Refreshing handlers.T)r   r   r   _setup_handlersr   )r   r"   r$   s      r   r   zWhereAmIPresenter.get_handlersC   s:     >Cu//d;  "~~r   c                 D    | j                          | j                          y)z.Sets up the where-am-i-presenter key bindings.N)_setup_desktop_bindings_setup_laptop_bindingsr   s    r   r    z!WhereAmIPresenter._setup_bindingsM   s     	$$&##%r   c                    i | _         t        j                  | j                  t        j
                        | j                   d<   t        j                  | j                  t        j                        | j                   d<   t        j                  | j                  t        j                        | j                   d<   t        j                  | j                  t        j                        | j                   d<   t        j                  | j                  t        j                        | j                   d<   t        j                  | j                  t        j                        | j                   d<   t        j                  | j                   t        j"                        | j                   d<   t        j                  | j$                  t        j&                        | j                   d<   t        j                  | j(                  t        j*                        | j                   d	<   d
}t-        j.                  t,        j0                  |d       y)z6Sets up the where-am-i-presenter input event handlers.readCharAttributesHandlerpresentSizeAndPositionHandlergetTitleHandlergetStatusBarHandlerpresent_default_buttonwhereAmIBasicHandlerwhereAmIDetailedHandlerwhereAmILinkHandlerwhereAmISelectionHandlerz&WHERE AM I PRESENTER: Handlers set up.TN)r   r   InputEventHandlerpresent_character_attributesr   READ_CHAR_ATTRIBUTESpresent_size_and_positionPRESENT_SIZE_AND_POSITIONpresent_titlePRESENT_TITLEpresent_status_barPRESENT_STATUS_BARr0   PRESENT_DEFAULT_BUTTONwhere_am_i_basicWHERE_AM_I_BASICwhere_am_i_detailedWHERE_AM_I_DETAILEDpresent_linkWHERE_AM_I_LINKpresent_selectionWHERE_AM_I_SELECTIONr   r   r   r   r$   s     r   r'   z!WhereAmIPresenter._setup_handlersS   s     ))11--/ 	23 ))..224 	67 ))""&&( 	() ))''++- 	,- ))++//1 	/0 ))%%))+ 	-. ))((,,. 	01 ))!!((* 	,- ))&&--/ 	12
 75++S$7r   c           
         t        j                         | _        | j                  j                  t        j                  dt         j
                  t         j                  | j                  j                  d                   | j                  j                  t        j                  dt         j
                  t         j                  | j                  j                  d                   | j                  j                  t        j                  dt         j
                  t         j                  | j                  j                  d                   | j                  j                  t        j                  dt         j
                  t         j                  | j                  j                  d      d	             | j                  j                  t        j                  dt         j
                  t         j                  | j                  j                  d
      d             | j                  j                  t        j                  dt         j
                  t         j                  | j                  j                  d      d	             | j                  j                  t        j                  dt         j
                  t         j                  | j                  j                  d      d             | j                  j                  t        j                  dt         j
                  t         j                  | j                  j                  d                   | j                  j                  t        j                  dt         j
                  t         j                  | j                  j                  d                   d}t        j                  t        j                  |d       y)z6Sets up the where-am-i-presenter desktop key bindings.fr,   er0    r-   KP_Enterr.   r   r/      r1   r2   r3   Upr4   z.WHERE AM I PRESENTER: Desktop bindings set up.TN)r	   r   r   add
KeyBindingdefaultModifierMaskORCA_MODIFIER_MASKr   getNO_MODIFIER_MASKORCA_SHIFT_MODIFIER_MASKr   r   r   rG   s     r   r)   z)WhereAmIPresenter._setup_desktop_bindings   s    "-!8!8!:""""//..""#>?	A	B 	""""//..""#;<	>	? 	""""//,,""#BC	E	F 	""""//..""#45	 	""""//..""#89	 	""""//,,""#9:	 	""""//,,""#<=	 	""""//,,""#89	;	< 	""""//44""#=>	@	A ?5++S$7r   c           
         t        j                         | _        | j                  j                  t        j                  dt         j
                  t         j                  | j                  j                  d                   | j                  j                  t        j                  dt         j
                  t         j                  | j                  j                  d                   | j                  j                  t        j                  dt         j
                  t         j                  | j                  j                  d                   | j                  j                  t        j                  dt         j
                  t         j                  | j                  j                  d      d	             | j                  j                  t        j                  dt         j
                  t         j                  | j                  j                  d
      d             | j                  j                  t        j                  dt         j
                  t         j                  | j                  j                  d      d	             | j                  j                  t        j                  dt         j
                  t         j                  | j                  j                  d      d             | j                  j                  t        j                  dt         j
                  t         j                  | j                  j                  d                   | j                  j                  t        j                  dt         j
                  t         j                  | j                  j                  d                   d}t        j                  t        j                  |d       y)z5Sets up the where-am-i-presenter laptop key bindings.rI   r,   rJ   r0   rK   r-   slashr.   r   r/   rM   Returnr1   r2   r3   rN   r4   z-WHERE AM I PRESENTER: Laptop bindings set up.TN)r	   r   r   rO   rP   rQ   rR   r   rS   rT   rU   r   r   r   rG   s     r   r*   z(WhereAmIPresenter._setup_laptop_bindings   s    !, 7 7 9!!""//..""#>?	A	B 	!!""//..""#;<	>	? 	!!""//,,""#BC	E	F 	!!""//..""#45	 	!!""//..""#89	 	!!""//..""#9:	 	!!""//..""#<=	 	!!""//,,""#89	;	< 	!!""//44""#=>	@	A >5++S$7r   Nc                     t        j                         j                         }t        j                  |      d   }|j
                  j                  t        j                         j                  d            \  }}g d}|D ]|  }|j
                  j                  |      }	|j                  |	      }
|j                  |      }|
|v r||v rI|
sL|
|k7  sR|j                  |j
                  j                  ||
             ~ y)zCPresents the font and formatting details for the current character.    enabledSpokenTextAttributes)00mmnonefalseT)r   
getManagerget_locus_of_focusr   get_text_attributes_at_offset	utilitiesstringToKeysAndDictr   
getSettinggetAppNameForAttributerS   speakMessagelocalizeTextAttribute)r   scripteventfocusattrsuser_attr_listuser_attr_dictnull_valueskeyapp_keyvalueignore_if_values               r   r6   z.WhereAmIPresenter.present_character_attributes  s     ((*==?44U;A> ,2+;+;+O+O'')445RS,U( 4! 		XC&&==cBGIIg&E,005O#;(F/1##F$4$4$J$J3PU$VW		X r   c                    |j                   j                         r|j                   j                  ||      }n"t        j                         j                         }t        j                  |      }t        j                  |      r3t        j                  }t        j                  }|j                  ||       yt        j                  |j                  |j                  |j                   |j"                  fz  }t        j$                  |j                  |j                  |j                   |j"                  fz  }|j                  ||       y)z5Presents the size and position of the current object.T)flatReviewPresenter	is_activeget_current_objectr   r`   ra   r   get_rectis_empty_rectr
   LOCATION_NOT_FOUND_FULLLOCATION_NOT_FOUND_BRIEFpresentMessageSIZE_AND_POSITION_FULLwidthheightxySIZE_AND_POSITION_BRIEF)r   ri   rj   objrectfullbriefs          r   r8   z+WhereAmIPresenter.present_size_and_position6  s     %%//1,,??NC**,??AC##C($$T*33D55E!!$...$**dkk466SWSYSY1ZZ00DJJTVVUYU[U[3\\dE*r   c                    t        j                         j                         }t        j                  |      r"t        j                         j                         }|t        j                  |      r |j                  t        j                         y|j                  j                  |      }|D ]  \  }}|j                  ||        y)z)Presents the title of the current window.T)voice)r   r`   ra   r   is_deadget_active_windowr|   r
   rz   speechGeneratorgenerateTitle)r   ri   rj   r   titlestringr   s          r   r:   zWhereAmIPresenter.present_titleJ  s     &&(;;=C **,>>@C;(**3/!!("B"BC&&44S9$ 	7OVU!!&!6	7r   c                    t        j                         j                         }|j                  j	                  |      \  }}|"|r|j                  t        j                         yt        j                  |      }|"|r|j                  t        j                         yt        j                  |      }t        j                  |      s#|j                  t        j                  |z         y|j                  t        j                  |z         y)z2Presents the default button of the current dialog.T)r   r`   ra   rc   frameAndDialogr|   r
   DIALOG_NOT_IN_Ar   get_default_buttonDEFAULT_BUTTON_NOT_FOUNDr   get_nameis_sensitiveDEFAULT_BUTTON_IS_GRAYEDDEFAULT_BUTTON_IS)	r   ri   rj   dialogerror_messagesr   framebuttonnames	            r   _present_default_buttonz)WhereAmIPresenter._present_default_buttonZ  s     &&(;;=((77<v>%%h&>&>?//7>%%h&G&GH  (''/!!("C"Cd"JKh884?@r   c                    t        j                         j                         }|j                  j	                  |      \  }}|rt        j                  |      }|r2d|j                  d<   |j                  |d       d|j                  d<   n2t        j                  }t        j                  }|j                  ||       |j                  j                  |      }	|	r|j                  |	|du        |r| j                  |||d       y)z.Presents the status bar of the current window.NstatusBarItemsT)	interruptF)r   r`   ra   rc   r   r   get_status_barpointOfReferencepresentObjectr
   STATUS_BAR_NOT_FOUND_FULLSTATUS_BAR_NOT_FOUND_BRIEFr|   infoBarr   )
r   ri   rj   r   r   r   	statusbarr   r   infobars
             r   r<   z$WhereAmIPresenter.present_status_barr  s     &&(;;=((77<v#2259I<@''(89$$Y$$?<@''(8999 ;;%%dE2&&..u5G$$W	T8I$J ((Fr   c                 &    | j                  ||      S )z2Presents the default button of the current window.)r   r   ri   rj   s      r   r0   z(WhereAmIPresenter.present_default_button  s     ++FE::r   c                     |xs" t        j                         j                         }|j                  j	                  |      s |j                  t        j                         y| j                  ||d|      S )z(Presents details about the current link.T)	r   r`   ra   rc   isLinkr|   r
   NOT_ON_A_LINK_do_where_am_i)r   ri   rj   links       r   rC   zWhereAmIPresenter.present_link  sb     F}//1DDF&&t,!!("8"89""65$==r   c                    |xs" t        j                         j                         }| |j                  t        j
                         y|j                  j                  |      d   }|s |j                  t        j                         y|j                  j                  |      r|j                  j                  |      }t        j                  |z  }|j                  |       y)zPresents the selected text.TrZ   )r   r`   ra   rg   r
   rz   rc   allSelectedTextNO_SELECTED_TEXTshouldVerbalizeAllPunctuationverbalizeAllPunctuationSELECTED_TEXT_IS)r   ri   rj   r   textr$   s         r   present_selected_textz'WhereAmIPresenter.present_selected_text  s     D]--/BBD; @ @A//4Q7 9 9:99#>##;;DAD''$.C r   c                    |xs" t        j                         j                         }| |j                  t        j
                         yd|g}t        j                  t        j                  |d       t        j                  ||j                  j                        }||j                  j                  |      ry|j                  j                  |      }|<d|g}t        j                  t        j                  |d       | j                  |||      S |j                  j!                  |      }|j                  j#                  |      }|j%                  t	        j&                  ||             |sy|j                  j)                  |      }	dj+                  t-        t        j.                  |	            }
|j                  |
       y)z/Presents the selected text or selected objects.Tz.WHERE AM I PRESENTER: presenting selection forz7WHERE AM I PRESENTER: Selection container not found for,)r   r`   ra   rg   r
   rz   r   printTokensr   r   find_ancestorrc   isSpreadSheetTablespeakSelectedCellRangegetSelectionContainerr   selectedChildCountselectableChildCountr|   selectedItemsCountselectedChildrenjoinmapr   )r   ri   rj   r   tokensspreadsheet	containerselected_countchild_countselected_items
item_namess              r   rE   z#WhereAmIPresenter.present_selection  s{    D]--/BBD; @ @ABCH%**FD9,,S&2B2B2U2UV"v'7'7'N'N{'[$$::3?	OQTUFe..=--feSAA))<<YG&&;;IFh99.+VW))::9EXXc("3"3^DE
J'r   c           	         |j                   r6|j                   j                         r|j                   j                  |        |"t        j                         j                         }t        j                  |      r"t        j                         j                         }|t        j                  |      r |j                  t        j                         y|rd}nd}|j                  |j                  j                  |      d|dddd       y)zCPresents details about the current location at the specified level.TbasicWhereAmIdetailedWhereAmI)alreadyFocused
formatTypeforceMnemonic	forceListforceTutorial
speechOnly)
spellcheckisActivepresentErrorDetailsr   r`   ra   r   r   r   r|   r
   rz   r   rc   realActiveAncestor)r   ri   rj   
basic_onlyr   format_types         r   r   z WhereAmIPresenter._do_where_am_i  s     !2!2!;!;!=11j.A;**,??ACC **,>>@C;(**3/!!("B"BC)K,K//4" 	 	 r   c                 &    | j                  ||      S )z6Presents basic information about the current location.)r   r   s      r   r?   z"WhereAmIPresenter.where_am_i_basic  s     ""6511r   c                 H    |j                          | j                  ||d      S )z9Presents detailed information about the current location.F)presentationInterruptr   r   s      r   rA   z%WhereAmIPresenter.where_am_i_detailed  s%     	$$&""65%88r   )FT)F)N)NNT)NN)NTN)__name__
__module____qualname____doc__r   r%   r   r    r'   r)   r*   r6   r8   r:   r   r<   r0   rC   r   rE   r   r?   rA    r   r   r   r   +   sj    G:
% &38jI8VI8V0( 04;
>(@>2
9r   r   c                      t         S )z Returns the Where Am I Presenter)
_presenterr   r   r   getPresenterr     s
     r   N)r   __id____version____date____copyright____license__rK   r   r   r   r   r	   r
   r   ax_componentr   	ax_objectr   ax_textr   ax_utilitiesr   r   r   r   r   r   r   <module>r      sc   * D7        %   %P9 P9d  
r   