
    g
fO                         d Z 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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j<                        Zy)zCommonly-required utility methods needed by -- and potentially
   customized by -- application and toolkit scripts. They have
   been pulled out from the scripts because certain scripts had
   gotten way too large as a result of including these methods.z$Id$z
$Revision$z$Date$z#Copyright (c) 2010 Joanmarie Diggs.LGPL    NAtspiz2.0)r   )AXObject)AXSelection)AXTable)AXText)AXUtilitiesc                        e Zd Zd Z fdZd Zd Z	 	 d fd	Z fdZd Z	e
d        Zd fd		Zd
 Zd Zd Zd Z fdZ fdZ fdZ fdZ fdZddZd fd	Zd Zd ZddZd Z fdZd Zd Zd Z xZ S ) 	Utilitiesc                 n    t         j                  j                  | |       g | _        g | _        g | _        y)zCreates an instance of the Utilities class.

        Arguments:
        - script: the script with which this instance is associated.
        N)script_utilitiesr   __init___calcSelectedCells_calcSelectedRows_calcSelectedColumns)selfscripts     L/usr/lib/python3/dist-packages/orca/scripts/apps/soffice/script_utilities.pyr   zUtilities.__init__6   s2     	""++D&9"$!#$&!    c           	      f   t        j                  |      }|rt        j                  |      r|S t        j                  |      rct        t        | j                  t        j                  |      D cg c]  }| c}            }dj                  |      }|j                         r|S 	 t        |   |      }t        j                  |      r(||k(  r#| j                  |      s| j                  |      ry| j                  |      r||k(  r|j!                  d      ry|S c c}w # t        $ r Y yw xY w)ai  Returns the text being displayed for an object. Overridden here
        because OpenOffice uses symbols (e.g. ">>" for buttons but exposes
        more useful information via the accessible's name.

        Arguments:
        - obj: the object

        Returns the text being displayed for an object or None if there isn't
        any text being shown.
        
 zfile:///)r   get_namer	   is_push_buttonis_table_celllistmapdisplayedTextiter_childrenjoinstripsuper	ExceptionisSpreadSheetCellisTextDocumentCell
isDocument
startswith)r   objnamexstringstext	__class__s         r   r   zUtilities.displayedTextI   s      %K..s3K$$S)3t11x?U?UVY?Z3[!A3[\]G99W%Dzz|	7(-D $$S)ddl&&s+t/F/Fs/K
 ??3DDLT__Z5P1 4\  		s   1	D)D$ $	D0/D0c                     t        j                  |      }t        j                  |      st        j                  |      r| j                  |      S yNF)r   
get_parentr	   is_panelis_extendedspreadSheetCellName)r   r(   parents      r   isCellBeingEditedzUtilities.isCellBeingEditedt   sA    $$S)';+B+B6+J++F33r   c                     t        j                  |      j                         }|D ]9  }|j                  dd      }|j	                         r&|j                         s7|c S  y)N.r   )r   r   splitreplaceisalphaisalnum)r   cellnameListr)   s       r   r3   zUtilities.spreadSheetCellName{   sU    $$T*002 	D<<R(D<<>dlln	
 r   c                    ||k(  ryt        j                  ||      syt        j                  |      ryt        j                  |      }|t        j                  |      k(  rt        j
                  |      ryt        |   ||||      S )NTF)r	   have_same_roleis_paragraphr   r   is_framer"   isSameObject)r   obj1obj2comparePathsignoreNamesignoreDescriptionsr)   r-   s          r   rB   zUtilities.isSameObject   sz    4<))$5##D)  &8$$T**{/C/CD/Iw#D$kJJr   c                 P   t        j                  |      r8t        j                  t        j                  |            ryt
        |   |      S t        j                  |      }|st
        |   |      S t        j                  |      r8|t        j                  t        j                         j                               k(  S t        j                  |      rBt        j                  |      r-t        j                  t        j                  |d            |k(  ryt
        |   |      S )zReturns True if the given object is a container which has
        no presentable information (label, name, displayed text, etc.).Tr   )r	   is_listis_combo_boxr   r0   r"   isLayoutOnlyr   rA   focus_manager
getManagerget_active_windowr1   get_child_count	get_child)r   r(   r)   r-   s      r   rK   zUtilities.isLayoutOnly   s     s#''(;(;C(@A7',,  %7',,$8,,]-E-E-G-Y-Y-[\\\$)A)A#)F  !3!3C!;<Dw#C((r   c                    | j                  |      s t        j                  j                  | |      S ddg}t	        j
                  |      }|rt	        j                  |      t        j                  j                  k(  r||d<   t	        j                  |      t        j                  j                  k(  r||d<   t	        j
                  |      }|r|S )a  Returns the frame and (possibly) the dialog containing
        the object. Overridden here for presentation of the title
        bar information: If the locusOfFocus is a spreadsheet cell,
        1) we are not in a dialog and 2) we need to present both the
        frame name and the sheet name. So we might as well return the
        sheet in place of the dialog so that the default code can do
        its thing.
        Nr      )r$   r   r   frameAndDialogr   get_parent_checkedget_roler   RoleFRAMETABLE)r   r(   resultsr4   s       r   rS   zUtilities.frameAndDialog   s     %%c*#--<<T3GG,,,S1  (EJJ,<,<<#
  (EJJ,<,<<#
008F  r   c                 8   t        j                  |       }t        j                  j                  t        j                  j
                  gt        fd|      }|D cg c]  }|j                  d       }}|D ]  }t        j                  |      s y yc c}w )Nc                 (    | j                         v S N)get_relation_type)rflowss    r   <lambda>z3Utilities._flowsFromOrToSelection.<locals>.<lambda>   s    Q%8%8%:e%C r   r   TF)
r   get_relationsr   RelationType
FLOWS_FROMFLOWS_TOfilter
get_targetr   has_selected_text)r(   relationSet	relationsr^   targetstargetr_   s         @r   _flowsFromOrToSelectionz!Utilities._flowsFromOrToSelection   s    ,,S1##..0B0B0K0KLC[Q	,56q1<<?66 	F''/	  7s   Bc                     |xs" t        j                         j                         }|sy| j                  |      r)| j	                         }| j                  |      xs d}||v S t        |   |      S )NFr   )rL   rM   get_locus_of_focusr$   getClipboardContentsr   r"   objectContentsAreInClipboard)r   r(   contentsstringr-   s       r   rp   z&Utilities.objectContentsAreInClipboard   sq    D]--/BBD!!#&002H'',4FX%%w3C88r   c                    t        j                  |j                        t        j                  j
                  k7  ry| j                         \  }}|j                  j                  d      r'|j                  sy|dk(  r|j                  dk7  ry|dv ry|j                  j                  d      r'|dk(  r"t        j                  |j                        d	kD  S y)
zReturns True if event is associated with text being autocompleted
        or autoinserted or autocorrected or autosomethingelsed.

        Arguments:
        - event: the accessible event being examined
        Fzobject:text-changed:insertTab	T)	BackSpaceISO_Left_Tabzfocus:Returnr   )r   rU   sourcer   rV   	PARAGRAPHlastKeyAndModifierstyper'   any_datar   get_character_count)r   eventlastKeymodss       r   isAutoTextEventzUtilities.isAutoTextEvent   s     U\\*ejj.B.BB002::  !=>>>%ENNd$:77::  *w(/B--ell;a??r   c                 :   t        j                  |      r|}n$t        j                  |t         j                        }|sy t        j                  |      r|S t        j
                  |      }|s|S | j                  ||      }|rt        j                  |      r|}|S r\   )r	   rJ   r   find_ancestoris_validr0   findReplicant)r   r(   comboBoxr4   	replicants        r   containingComboBoxzUtilities.containingComboBox   s    ##C(H--c;3K3KLHX&O$$X.O&&vx8	**95 Hr   c                 p    | j                  |j                        }|sy| j                         \  }}|dvryy)NF)DownUpT)r   ry   r{   )r   r   r   r   r   s        r   isComboBoxSelectionChangez#Utilities.isComboBoxSelectionChange  s<    **5<<8002.(r   c                     t        j                  |j                        }|t        j                  j
                  k(  r,|j                  j                  d      r| j                  |      S y)Nzobject:text-F)	r   rU   ry   r   rV   TEXTr|   r'   r   )r   r   roles      r   isComboBoxNoisezUtilities.isComboBoxNoise  sK      .5::??"uzz'<'<^'L11%88r   c                     | j                  |      r(d}t        j                  t        j                  |d       yt        |   |      S )Nz0SOFFICE: Event is believed to be combo box noiseTF)r   debugprintMessage
LEVEL_INFOr"   ,isPresentableTextChangedEventForLocusOfFocus)r   r   msgr-   s      r   r   z6Utilities.isPresentableTextChangedEventForLocusOfFocus%  sA    &DCu//d;wCEJJr   c                 H    t         |   |      sy| j                  |       S r/   )r"   isReadOnlyTextAreainDocumentContentr   r(   r-   s     r   r   zUtilities.isReadOnlyTextArea-  s'    w)#.))#...r   c                     |j                   j                  d      r@|j                  s4| j                         xr" t	        j
                         j                         S t        | !  |      S )Nzobject:state-changed:selected)	r|   r'   detail1lastInputEventWasDeleterL   rM   focus_is_deadr"   isSelectedTextDeletionEvent)r   r   r-   s     r   r   z%Utilities.isSelectedTextDeletionEvent3  sR    ::  !@A%--//1`m6N6N6P6^6^6``w2599r   c                     t         |          ry| j                         \  }}|t        j                  z  r'|j                         dk(  r|t        j                  z   S y)NTyF)r"   lastInputEventWasRedor{   keybindingsCOMMAND_MODIFIER_MASKlowerSHIFT_MODIFIER_MASK)r   	keyStringr   r-   s      r   r   zUtilities.lastInputEventWasRedo9  sV    7(*224	4+333	8IS8P{>>>??r   c                 b   |g S t        j                  |      sJt        j                  |      r5t        j                  |t         j                        }|rt
        |   |      S t        j                  |      st
        |   |      S | j                  |      rg S t        j                  |      S r\   )r   supports_selectionr	   rJ   find_descendantr"   selectedChildrenis_tableisSpreadSheetTabler   get_selected_children)r   r(   childr-   s      r   r   zUtilities.selectedChildrenC  s     ;I**3/K4L4LS4Q,,S(2M2MNEw/66 ##C(7+C00
 ""3'I0055r   c                 .    t        j                  ||      S r\   )r   get_word_at_offset)r   r(   offsets      r   $getWordAtOffsetAdjustedForNavigationz.Utilities.getWordAtOffsetAdjustedForNavigation\  s    ((f55r   c                     | j                   j                         j                         ry| j                         \  }}|dv ryt        |   ||      S )NF)rt   rw   )_scriptgetTableNavigator'last_input_event_was_navigation_commandr{   r"   shouldReadFullRow)r   r(   prevObjr   r   r-   s        r   r   zUtilities.shouldReadFullRow_  sO    <<))+SSU002--w(g66r   c                 8    | j                  |j                        S r\   )r   ry   )r   r   s     r    presentEventFromNonShowingObjectz*Utilities.presentEventFromNonShowingObjecti  s    %%ell33r   c                     d}|t        |      k  r||dz
     S d}|dkD  r9|t        |      z  }d||dz
     z   |z   }t        |t        |      z        }|dkD  r9|S )z5 Convert a spreadsheet column into it's column label.ABCDEFGHIJKLMNOPQRSTUVWXYZrR   r   r    )lenint)r   columnbase26resdigits        r   columnConvertzUtilities.columnConvertl  sx     .S[ &(##qjS[(EuQw'#-C#f+-.F qj
 
r   c                     t        j                  |||      }| j                  |      }|r| j                  |      }| d| }|j	                         S )Nr   )r   get_cell_atr3   r   r!   )r   r(   rowcolincludeContentsr<   r)   r,   s           r   _getCellNameForCoordinatesz$Utilities._getCellNameForCoordinates|  sU    ""3S1''-%%d+DV1TF#Dzz|r   c                 X   t        j                  |      rt        j                  |      s+d|dg}t        j                  t        j
                  |d       yt        j                  |d      }t        j                  |d      }t        j                  |      t        j                  |      fS )NzSOFFICE:z+does not implement both selection and tableT)r   r   r   r   )
r   supports_tabler   r   printTokensr   r   get_selected_childr   get_cell_coordinates)r   r(   tokensfirstlasts        r   _getCoordinatesForSelectedRangez)Utilities._getCoordinatesForSelectedRange  s    '',1L1LS1Q #'TUFe..=%..sA6--c26++E2G4P4PQU4VVVr   c                     t        j                  |      ry t        j                  |t         j                        ry t        |   |      S r\   )r	   is_document_textr   r   r"   getSelectionContainerr   s     r   r   zUtilities.getSelectionContainer  s?     '',!!#{'C'CDw,S11r   c                    | j                  |      \  }}|dk(  s|dk(  ry| j                  j                          ||k(  rB | j                  |g|d }| j                  j	                  t
        j                  |z         y | j                  |g|d } | j                  |g|d }| j                  j	                  t
        j                  ||fz         y)Nr   FT)r   r   presentationInterruptr   speakMessagemessagesCELL_SELECTEDCELL_RANGE_SELECTED)r   r(   firstCoords
lastCoordsr<   cell1cell2s          r   speakSelectedCellRangez Utilities.speakSelectedCellRange  s    "&"F"Fs"KZ("jH&<**,*$24223KKdKDLL%%h&<&<t&CD///HkH4H///GjG$G!!(">">%"OPr   c           	         | j                  |      \  }}|dk(  s|dk(  ryg }t        |d   |d   dz         D ]/  |j                  fdt        |d   |d   dz         D               1 t        |      }t        | j                        }|j                  d       |j                  d       t        |j                  |            }t        |j                  |            }t        j                  t        j                         j                               }||v r|j                  |       t        |      | _        g }	t        |      dk(  r; | j                  |g|d   d }
|	j!                  t"        j$                  |
z         nbt        |      dkD  rT | j                  |g|d   d } | j                  |g|d   d }|	j!                  t"        j&                  ||fz         t        |      dk(  r; | j                  |g|d   d }
|	j!                  t"        j(                  |
z         nbt        |      dkD  rT | j                  |g|d   d } | j                  |g|d   d }|	j!                  t"        j*                  ||fz         |	r| j,                  j/                          |	D ]  }| j,                  j1                  |d       ! t3        t        |	            S )	Nr   Tr   rR   c              3   &   K   | ]  }|f 
 y wr\    ).0cr^   s     r   	<genexpr>z6Utilities.handleCellSelectionChange.<locals>.<genexpr>  s     RaAq6Rs   r   F	interrupt)r   rangeextendsetr   discardsorted
differencer   r   rL   rM   rn   remover   r   appendr   CELL_UNSELECTEDCELL_RANGE_UNSELECTEDr   r   r   r   r   bool)r   r(   r   r   currentprevious
unselectedselectedfocusCoordsmsgsr<   r   r   r   r^   s                 @r   handleCellSelectionChangez#Utilities.handleCellSelectionChange  s   "&"F"Fs"KZ("jH&<{1~z!}Q7 	SANNR5QAq+QRR	S g,t../!"H//89
',,X6722=3K3K3M3`3`3bc("OOK("(/z?a24223MAMMDKK00478_q 3D33CN*Q-NNE3D33CO*R.O$OEKK66%GHx=A24223K!KdKDKK..56]Q3D33CL(1+LtLE3D33CM(2,MMEKK44u~EFLL..0 	<CLL%%cU%;	< CIr   c                 L    t        j                  |      rt        j                  |      syt        t	        j
                  |            }t        t	        j                  |            }t        |j                  t         j                                    }t        t         j                        j                  |            } fd}d }t        t        ||            }t        t        ||            }t        |j                  t         j                                    }t        t         j                        j                  |            }	t        t        ||            }t        t        ||	            }	t        |       _	        t        |       _        t	        j                  |      }
t        |      |
k(  r* j                  j!                  t"        j$                         y|s8t        |      |
k(  r* j                  j!                  t"        j&                         yg }t        |      dk(  r&|j)                  t"        j*                  |d   z         n8t        |      dkD  r*|j)                  t"        j,                  |d   |d   fz         t        |	      dk(  r&|j)                  t"        j.                  |	d   z         n8t        |	      dkD  r*|j)                  t"        j0                  |	d   |	d   fz         t        |      dk(  r&|j)                  t"        j2                  |d   z         n8t        |      dkD  r*|j)                  t"        j4                  |d   |d   fz         t        |      dk(  r&|j)                  t"        j6                  |d   z         n8t        |      dkD  r*|j)                  t"        j8                  |d   |d   fz         |r j                  j;                          |D ]  } j                  j!                  |d       ! t=        t        |            S )	NTc                 ,    j                  | dz         S NrR   )r   )r*   r   s    r   convertColumnzBUtilities.handleRowAndColumnSelectionChange.<locals>.convertColumn  s    %%ac**r   c                     | dz   S r  r   )r*   s    r   
convertRowz?Utilities.handleRowAndColumnSelectionChange.<locals>.convertRow  s    q5Lr   rR   r   r   Fr   )r   r   r   r   r   get_selected_columnsget_selected_rowsr   r   r   r   r   r   get_column_countr   r   r   r   DOCUMENT_SELECTED_ALLDOCUMENT_UNSELECTED_ALLr   TABLE_COLUMN_UNSELECTEDTABLE_COLUMN_RANGE_UNSELECTEDTABLE_ROW_UNSELECTEDTABLE_ROW_RANGE_UNSELECTEDTABLE_COLUMN_SELECTEDTABLE_COLUMN_RANGE_SELECTEDTABLE_ROW_SELECTEDTABLE_ROW_RANGE_SELECTEDr   r   )r   r(   colsrowsselectedColsunselectedColsr  r  selectedRowsunselectedRowscolumnCountr   r   s   `            r   !handleRowAndColumnSelectionChangez+Utilities.handleRowAndColumnSelectionChange  s_   '',1L1LS1Q7//457,,S12dooc$2K2K.LMND$=$= > I I$ OP	+	 C|<=c-@Adooc$2H2H.IJKD$:$: ; F Ft LMC
L9:c*n=>$(J!!%d..s3t9#LL%%h&D&DEN+{:LL%%h&F&FG~!#KK88>!;LLM 1$KK>>'*N2,>?@ A ~!#KK55q8IIJ 1$KK;;'*N2,>?@ A |!KK66aHI"KK<<QQ]^`Qa?bbc|!KK33l1oEF"KK99\!_l[]N^<__`LL..0 	<CLL%%cU%;	< CIr   )FFTr\   )F)!__name__
__module____qualname__r   r   r5   r3   rB   rK   rS   staticmethodrl   rp   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  __classcell__)r-   s   @r   r   r   4   s    '&)V HM(,K"),2 	 	
9$6,	K/:62674 W2"-^Br   r   )__doc____id____version____date____copyright____license__girequire_versiongi.repositoryr   
orca.debugr   orca.focus_managerrL   orca.keybindingsr   orca.messagesr   orca.script_utilitiesr   orca.ax_objectr   orca.ax_selectionr   orca.ax_tabler   orca.ax_textr   orca.ax_utilitiesr	   r   r   r   r   <module>r3     sq   (C
 
5 	   7E "   * &   0 # ) !  )h ** hr   