Mini Shell

Direktori : /proc/self/root/lib/python3.6/site-packages/orca/__pycache__/
Upload File :
Current File : //proc/self/root/lib/python3.6/site-packages/orca/__pycache__/liveregions.cpython-36.opt-1.pyc

3

�2[�S�@s�ddlZddlZddlZddlZddlmZddlmZddlmZddlm	Z	ddlm
Z
ddlmZdd	lmZdd
lm
Z
e
j�ZdZdZdZdZdZd
ZdZGdd�d�ZGdd�d�ZdS)�N)�GLib�)�cmdnames)�chnames)�keybindings)�messages)�input_event)�
orca_state)�settings_manager���-�	c@sHeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dS)�
PriorityQueuez� This class represents a thread **UNSAFE** priority queue where priority
    is determined by the given integer priority.  The entries are also   
    maintained in chronological order. 

    TODO: experiment with Queue.Queue to make thread safe
    cCs
g|_dS)N)�queue)�self�r�!/usr/lib/python3.6/liveregions.py�__init__&szPriorityQueue.__init__cCstj|j|tj�||f�dS)zS Add a new element to the queue according to 1) priority and
        2) timestamp. N)�bisectZinsort_leftr�time)r�data�priority�objrrr�enqueue)szPriorityQueue.enqueuecCs|jjd�S)z2get the highest priority element from the queue.  r)r�pop)rrrr�dequeue.szPriorityQueue.dequeuecCs
g|_dS)z Clear the queue N)r)rrrr�clear2szPriorityQueue.clearcs*tj���fdd�}tt||j��|_dS)zL Purge items from the queue that are older than the keepalive 
        time cs|dt�kS)Nr)�MSG_KEEPALIVE_TIME)�item)�currenttimerr�<lambda>:sz0PriorityQueue.purgeByKeepAlive.<locals>.<lambda>N)r�list�filterr)r�myfilterr)r r�purgeByKeepAlive6szPriorityQueue.purgeByKeepAlivecs"�fdd�}tt||j��|_dS)ze Purge items from the queue that have a lower than or equal priority
        than the given argument cs|d�kS)Nrr)r)rrrr!@sz/PriorityQueue.purgeByPriority.<locals>.<lambda>N)r"r#r)rrr$r)rr�purgeByPriority=szPriorityQueue.purgeByPrioritycCs
t|j�S)z  Return the length of the queue )�lenr)rrrr�__len__CszPriorityQueue.__len__N)�__name__�
__module__�__qualname__�__doc__rrrrr%r&r(rrrrrsrc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd4d*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd)S)5�LiveRegionManagercCs~||_t�|_|j�|_|j�|_|j|j|j	|j
g|_g|_d|_
d|_d|_d|_|j�|jj|j�|jj|j�dS)NT)�_scriptr�	msg_queue�_getInputEventHandlers�inputEventHandlers�_getKeyBindings�keyBindings�advancePoliteness�setLivePolitenessOff�toggleMonitoring�reviewLiveAnnouncementZ	functions�	msg_cache�_politenessOverrides�_restoreOverrides�lastliveobj�
monitoring�bookmarkLoadHandler�	bookmarksZaddSaveObserver�bookmarkSaveHandlerZaddLoadObserver)r�scriptrrrrIs 


zLiveRegionManager.__init__cCsXi}tj|jtj�|d<tj|jtj�|d<tj|jtj�|d<tj|j	tj
�|d<|S)N�advanceLivePolitenessr5�monitorLiveRegionsr7)rZInputEventHandlerr4rZLIVE_REGIONS_ADVANCE_POLITENESSr5ZLIVE_REGIONS_SET_POLITENESS_OFFr6ZLIVE_REGIONS_MONITORr7ZLIVE_REGIONS_REVIEW)rZhandlersrrrr0rsz(LiveRegionManager._getInputEventHandlersc	Cs�tj�}|jtjdtjtj|jjd���|jtjdtjtj|jjd���|jtjdtjtj	|jjd���x.dD]&}|jtj|tjtj
|jjd���qtW|S)NZ	backslashrAr5rB�F1�F2�F3�F4�F5�F6�F7�F8�F9r7)	rCrDrErFrGrHrIrJrK)rZKeyBindings�addZ
KeyBindingZdefaultModifierMaskZNO_MODIFIER_MASKr1�getZSHIFT_MODIFIER_MASKZORCA_SHIFT_MODIFIER_MASKZORCA_MODIFIER_MASK)rr3�keyrrrr2�s6
z!LiveRegionManager._getKeyBindingscCsNi}|jjj�}x2|jj�D]$\}}|d|ks8|tkr|||<qW||_dS)Nr)r.r>�	getURIKeyr9�items�	LIVE_NONE)rZ
newpoliteness�
currenturirN�valuerrr�reset�szLiveRegionManager.resetcCs|jjj|jdd�dS)zBookmark save callback�
politeness)�filenameN)r.r>ZsaveBookmarksToDiskr9)rrrrr?�sz%LiveRegionManager.bookmarkSaveHandlercCs|jjjdd�pi|_dS)zBookmark load callbackrU)rVN)r.r>ZreadBookmarksFromDiskr9)rrrrr=�sz%LiveRegionManager.bookmarkLoadHandlercCs�|j|j�}|tkrdS|tkr,|js`dSn4|tkr6n*|tkrL|jjt�n|t	kr`|jjt�|j
|�}|r�t|j�dkr�tj
d|j�|jj|||j�dS)zMain live region event handlerNr�d)�_getLiveType�source�LIVE_OFFrQr<�LIVE_POLITE�LIVE_ASSERTIVEr/r&�	LIVE_RUDE�_getMessager'rZtimeout_add�pumpMessagesr)r�eventrU�messagerrr�handleEvent�s"
zLiveRegionManager.handleEventcCs�t|j�dkrp|jj�|jj�\}}}}|d|dkrD|d}n|d|d}|jj|�||_|j|�|js�|jj�t|j�dkS)z� Main gobject callback for live region support.  Handles both 
        purging the message queue and outputting any queued messages that
        were queued up in the handleEvent() method.
        r�labels�content)	r'r/r%rr.�presentMessager;�
_cacheMessager<)rrUZ	timestamprar�uttsrrrr_�s



zLiveRegionManager.pumpMessagescCsNg}|jjj�}x8|jD].\}}||krt|t�r|j|jjj|��qW|S)zXReturn the live objects that are registered and have a politeness
        of LIVE_NONE. )r.r>rOr9�
isinstance�tuple�appendZ	pathToObj)rZretvalrR�uri�objectidrrr�getLiveNoneObjects�sz$LiveRegionManager.getLiveNoneObjectscCstjd�s|jjtj�dStj}|j|�}|jj	j
�}y|j||f}Wntk
rh|j
|�}YnX|tksz|tkr�t|j||f<|jjtj�nr|tkr�t|j||f<|jjtj�nL|tkr�t|j||f<|jjtj�n&|tk�r
t|j||f<|jjtj�dS)z0Advance the politeness level of the given object�inferLiveRegionsN)�_settingsManager�
getSettingr.rer�LIVE_REGIONS_OFFr	ZlocusOfFocus�_getObjectIdr>rOr9�KeyError�_liveStringToTyperZrQr[ZLIVE_REGIONS_LEVEL_POLITEr\ZLIVE_REGIONS_LEVEL_ASSERTIVEr]ZLIVE_REGIONS_LEVEL_RUDEZLIVE_REGIONS_LEVEL_OFF)rr@�
inputEventrrlrkZcur_priorityrrrr4s,


z#LiveRegionManager.advancePolitenesscCs6|jr2|jjj|jd�|jj|jjj|jd��dS)z_Move the caret to the last announced live region and speak the 
        contents of that objectrN)r;r.�	utilitiesZsetCaretPositionZ
speakContentsZgetObjectContentsAtOffset)rrrr�goLastLiveRegion(sz"LiveRegionManager.goLastLiveRegioncCsdt|jdd��}tjd�s.|jjtj�dS|t|j	�krL|jjtj
�n|jj|j	|�dS)z%Speak the given number cached messagerNrn)�intZevent_stringrorpr.rerrqr'r8ZLIVE_REGIONS_NO_MESSAGE)rr@ruZmsgnumrrrr70s
z(LiveRegionManager.reviewLiveAnnouncementcCs�tjd�s|jjtj�dS|jjj�}|jjj	�}|j
r�|jjtj�|jj
�tj|j�|_x|jj�D]}t|j|<qlWtj||j�}x$|D]}|j|�}t|j||f<q�Wd|_
n6x |jj�D]\}	}
|
|j|	<q�W|jjtj�d|_
dS)z]User toggle to set all live regions to LIVE_OFF or back to their
        original politeness.rnNFT)rorpr.rerrqrv�
documentFramer>rOr<ZLIVE_REGIONS_ALL_OFFr/r�copyr9r:�keysrZ�pyatspiZfindAllDescendants�matchLiveRegionrrrPZLIVE_REGIONS_ALL_RESTORED)rr@ru�docframerk�overrideZmatches�matchrlrNrSrrrr5=s(



z&LiveRegionManager.setLivePolitenessOffcKs�|j|�}|jjj�}g}xr|j�D]f}|j�}|tjkr$|jd�}y0|j	�j
dd�}	|	j�|jj�krr|j
|	�Wq$tk
r�Yq$Xq$Wy|j||f}
|j|
�}Wntk
r�d}YnX|s�|dkr�|j
tj|�|S)zoUsed in conjunction with whereAmI to output description and 
        politeness of the given live region objectrr�none���)rrr.r>rOZgetRelationSetZgetRelationTyper|ZRELATION_DESCRIBED_BYZ	getTargetZ	queryText�getText�strip�descriptionrj�NotImplementedr9�_liveTypeToStringrsrZLIVE_REGIONS_LEVEL)rr�argsrlrk�resultsZrelationZrelationtypeZ	targetobjr�ZlivepriorityZliveprioritystrrrr�generateLiveRegionDescriptionjs*




z/LiveRegionManager.generateLiveRegionDescriptioncCs|j|�}d|kS)z$Predicate used to find a live regionzcontainer-live)�_getAttrDictionary)rr�attrsrrrr}�s
z!LiveRegionManager.matchLiveRegioncCs|j|j�}d}d}|jjd�rR|jd�dkr@|jjj|j�}q�|jjj|j�}nB|jjd�r�|jd�dkrt|j}n |jjj	|j�}|r�|j
dd�}|s�dS|j�}t|�dkr�t
j|�}|jjp�|jjj�}|r�||kr�|}|jd	�d
k�r||}|jj�|jj|�dS|g|gd�S)
z4Gets the message associated with a given live event.�zobject:children-changed:addzcontainer-atomic�truezobject:text-changed:insertrrNZchannelZnotify)rdrcr�)r�rY�type�
startswithrMr.rvZ
expandEOCsZany_dataZqueryNonEmptyTextr�r�r'rZgetCharacterName�namer�ZpresentationInterruptre)rr`r�rdrc�textr�rgrrrr^�s6

zLiveRegionManager._getMessagecCs|jj�dS)N)r/r)rrrr�
flushMessages�szLiveRegionManager.flushMessagescCs*|jj|�t|j�tkr&|jjd�dS)z6Cache a message in our cache list of length CACHE_SIZErN)r8rjr'�
CACHE_SIZEr)rrgrrrrf�szLiveRegionManager._cacheMessagecCs`|j|�}|jjj�}||f|jkr2|j||fS|j|�}|tkrX|jrX||j||f<|SdS)z�Returns the live politeness setting for a given object. Also,
        registers LIVE_NONE objects in politeness overrides when monitoring.N)rrr.r>rOr9rtrQr<)rrrlrkZlivetyperrrrX�s

zLiveRegionManager._getLiveTypecCsD|j|�}|dkr|j|�Sy|dStk
r>|j|�SXdS)zRReturns the HTML 'id' or a path to the object is an HTML id is
        unavailableN�id)r��_getPathrs)rrr�rrrrr�s

zLiveRegionManager._getObjectIdNcCsp|p|j|�}yH|ddkr tS|ddkr0tS|ddkr@tS|ddkrPtStSWntk
rjtSXdS)z.Returns the politeness enum for a given objectzcontainer-live�off�polite�	assertive�rudeN)r�rZr[r\r]rQrs)rrZ
attributesr�rrrrt�sz#LiveRegionManager._liveStringToTypecCsD|tkrdS|tkrdS|tkr$dS|tkr0dS|tkr<dSdSdS)z@Returns the politeness level as a string given a politeness enumr�r�r�r�r��unknownN)rZr[r\r]rQ)rrUrrrr��sz#LiveRegionManager._liveTypeToStringc	Cs&ytdd�|j�D��SiSdS)NcSsg|]}|jdd��qS)�:r)�split)�.0�attrrrr�
<listcomp>	sz8LiveRegionManager._getAttrDictionary.<locals>.<listcomp>)�dictZ
getAttributes)rrrrrr�sz$LiveRegionManager._getAttrDictionarycCsn|jjj�}g}xX|jdks$||kr4|j�t|�Sy|j|j��Wntk
r^t	�YnX|j}qWdS)z` Returns, as a tuple of integers, the path from the given object 
        to the document frame.N)
r.rvry�parent�reverserirjZgetIndexInParent�	Exception�LookupError)rrr~�pathrrrr�
s
zLiveRegionManager._getPathcCsLtjd�s&tjdd�|jjtj�n"tjdd�|j�|jjtj�dS)NrnTF)	rorpZ
setSettingr.rerZLIVE_REGIONS_MONITORING_ONr�ZLIVE_REGIONS_MONITORING_OFF)rr@rurrrr6s
z"LiveRegionManager.toggleMonitoring)N)r)r*r+rr0r2rTr?r=rbr_rmr4rwr7r5r�r}r^r�rfrXrrrtr�r�r�r6rrrrr-Hs2)"

"
-'.
r-r�)rrzr|rZ
gi.repositoryrr�rrrrrr	r
Z
getManagerrorZrQr[r\r]rr�rr-rrrr�<module>s*)