o
    –JÜ^. ã                   @   sŒ  d Z dZddlZe dd¡ e dd¡ ddlmZmZmZmZm	Z	m
Z
 ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZd	d
lm Z  zddl!Z!dZ"W n
   dZ"ddl#Z#Y z
ddl$m%Z% dZ&W n
   dZ&e'dƒ Y z
ddl(m)Z) dZ*W n
   dZ*e'dƒ Y dd„ Z+G dd„ dej,ƒZ-dd„ Z.dS )z0.11.1a  
Mirage, a fast GTK+ Image Viewer
Copyright 2007 Scott Horowitz <stonecrest@gmail.com>
Copyright 2020 Thomas Ross <thomasross@thomasross.io>

This file is part of Mirage.

Mirage is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.

Mirage 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 General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
é    NÚGtkz3.0ÚGExiv2z0.10)r   ÚGdkÚ	GdkPixbufÚGLibÚGior   é   )ÚFullscreenControlsTFzHimgfuncs.so module not found, rotating/flipping images will be disabled.zJxmouse.so module not found, some screenshot capabilities will be disabled.c                 C   s   zt | ƒ}W dS    Y dS ©NTF)Úint)ÚinputstringÚx© r   ú1/usr/lib/python3/dist-packages/mirage/__init__.pyÚ	valid_int@   s
   r   c                       s„  e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dfdd„Zdd„ Zdd„ Zdd„ Zdgd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dhd0d1„Zd2d3„ Zd4d5„ Zd6d7„ Zd8d9„ Zd:d;„ Zd<d=„ Zd>d?„ Z d@dA„ Z!dBdC„ Z"dDdE„ Z#dFdG„ Z$dHdI„ Z%dJdK„ Z&dLdM„ Z'dNdO„ Z(dPdQ„ Z)dRdS„ Z*dTdU„ Z+dVdW„ Z,dXdY„ Z-dZd[„ Z.d\d]„ Z/d^d_„ Z0d`da„ Z1dbdc„ Z2ddde„ Z3dfdg„ Z4dhdi„ Z5djdk„ Z6dldm„ Z7dgdndo„Z8dpdq„ Z9didsdt„Z:didudv„Z;dwdx„ Z<dydz„ Z=d{d|„ Z>d}d~„ Z?dd€„ Z@dd‚„ ZAdƒd„„ ZBd…d†„ ZCd‡dˆ„ ZDd‰dŠ„ ZEd‹dŒ„ ZFddŽ„ ZGdd„ ZHd‘d’„ ZId“d”„ ZJd•d–„ ZKd—d˜„ ZLd™dš„ ZMd›dœ„ ZNddž„ ZOdŸd „ ZPd¡d¢„ ZQd£d¤„ ZRd¥d¦„ ZSd§d¨„ ZTd©dª„ ZUd«d¬„ ZVd­d®„ ZWd¯d°„ ZXd±d²„ ZYd³d´„ ZZdµd¶„ Z[d·d¸„ Z\d¹dº„ Z]d»d¼„ Z^d½d¾„ Z_d¿dÀ„ Z`dÁdÂ„ ZadÃdÄ„ ZbdÅdÆ„ ZcdÇdÈ„ ZddÉdÊ„ ZedËdÌ„ ZfdÍdÎ„ ZgdÏdÐ„ ZhdÑdÒ„ ZidÓdÔ„ ZjdÕdÖ„ Zkd×dØ„ ZldÙdÚ„ ZmdÛdÜ„ ZndÝdÞ„ Zodßdà„ Zpdádâ„ Zqdãdä„ Zrdådæ„ Zsdidçdè„Ztdédê„ Zudëdì„ Zvdídî„ Zwdïdð„ Zxdñdò„ Zydódô„ Zzdõ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‡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“d'd(„ Z”d)d*„ Z•d+d,„ Z–d-d.„ Z—d/d0„ Z˜d1d2„ Z™d3d4„ Zšd5d6„ Z›djd8d9„Zœd:d;„ Zd<d=„ Zžd>d?„ ZŸd@dA„ Z dBdC„ Z¡	dgdDdE„Z¢dFdG„ Z£dHdI„ Z¤dJdK„ Z¥dLdM„ Z¦dNdO„ Z§dPdQ„ Z¨dRdS„ Z©dTdU„ ZªdVdW„ Z«dXdY„ Z¬dZd[„ Z­d\d]„ Z®d^d_„ Z¯d`da„ Z°dbdc„ Z±ddde„ Z²‡  Z³S (k  ÚBasec                    s   t ƒ j|dtjjdœŽ d S )Nzio.thomasross.mirage)Úapplication_idÚflags)ÚsuperÚ__init__r   ÚApplicationFlagsÚ
NON_UNIQUE)ÚselfÚargsÚkwargs©Ú	__class__r   r   r   I   s
   ýzBase.__init__c                 C   sB  d| _ d| _d| _d| _d| _d}d}d}d| _d| _d	| _d| _d| _	d | _
d | _d| _d| _d| _d
| _d	| _d| _d| _d | _d | _d| _d| _d
| _d	| _d| _d| _d | _d | _d| _d| _d| _d| _ d| _!d| _"d	| _#t$j%j&| _'d| _(d| _)d| _*d| _+d| _,t-j. /d¡| _0t-j. /d¡| _1g | _2| j | _3| j | _4d| _5d| _6d| _7d| _8d| _9d| _:d| _;d| _<d| _=d| _>d| _?d| _@d| _Ad| _Bg d¢| _Cg d¢| _Dg d¢| _Eg d¢| _Fg d¢| _Gd | _Hd| _Id| _Jd| _Kd| _Ld| _Md| _Nd| _Od| _Pd | _Qd | _Rd| _Sg d¢| _Td| _Ug | _Vi | _WtX Y¡ | _ZtX Y¡ | _[g d¢| _\d| _]d| _^zt_ _t`jadd … dg d¢¡\}}W n t_jbyO   |  c¡  t` dd¡ Y nw |g kr«|D ]S\}}|dv rk|  e¡  t` dd¡ qW|dv r{|  c¡  t` dd¡ qW|dv r…d| _(qW|dv rd| _)qW|dv r–qW|dv r || _HqW|  c¡  t` dd¡ qWt- fd¡p¶t-j. /d¡d  | _gthjid d!}t-j. j| jgd" ¡rÒ| k| jgd" ¡ | ld#d$¡rß| md#d$¡}| ld#d%¡rì| md#d%¡}| ld#d&¡rú| nd#d&¡| _| ld#d'¡r| nd#d'¡| _!| ld#d(¡r| nd#d(¡| _ | ld)d*¡r$| nd)d*¡| _| ld)d+¡rH| md)d+¡}	| md)d,¡}
| md)d-¡}d}tojp|	|
|d.| _q| ld)d/¡rV| nd)d/¡| _,| ld)d0¡rd| rd)d0¡| _0| ld)d1¡rr| rd)d1¡| _1| ld)d2¡r€| nd)d2¡| _+| ld)d3¡rŽ| nd)d3¡| _S| ld)d4¡rœ| md)d4¡| _3| ld)d5¡rª| md)d5¡| _4| ld)d6¡r¸| md)d6¡| _5| ld)d7¡rÆ| md)d7¡| _7| ld)d8¡rÔ| nd)d8¡| _9| ld)d9¡r%| md)d9¡| _;tstt| j;dƒƒdkrót$j%ju| _'n2tstt| j;dƒƒdkrt$j%jv| _'n!tstt| j;dƒƒdkrt$j%j&| _'ntstt| j;dƒƒdkr%t$j%jw| _'| ld)d:¡r3| md)d:¡| _<| ld)d;¡rA| nd)d;¡| _>| ld)d<¡rO| nd)d<¡| _?| ld)d=¡r]| nd)d=¡| _B| ld)d>¡rk| md)d>¡| _U| ld)d?¡ry| md)d?¡| _]| ld@dA¡r"| md@dA¡}g | _Cg | _Fg | _Eg | _Gtx|ƒD ]‹}| ld@dBty|ƒ dC ¡r | ld@dDty|ƒ dC ¡r | ld@dEty|ƒ dC ¡r | ld@dFty|ƒ dC ¡r | rd@dBty|ƒ dC ¡}| rd@dDty|ƒ dC ¡}| rd@dEty|ƒ dC ¡}| nd@dFty|ƒ dC ¡}| jC z|¡ | jD z|  {||||¡¡ | jF z|¡ | jE z|¡ | jG z|¡ q–| ld)dG¡r0| md)dG¡| _L| ld)dH¡r>| nd)dH¡| _O| ld)dI¡rL| nd)dI¡| _Ag | _\| ldJdK¡r†| mdJdK¡}tx|ƒD ]%}| j\ zd	¡ | ldJdLty|ƒ dM ¡r„| rdJdLty|ƒ dM ¡| j\|< q`| j7| _|| j9| _}t-j. j| jgdN ¡r¡t~j €| jgdN ¡ d| _t$j‚ ƒ|  „dO¡¡| _…t† ‡¡ | _ˆg dP| j‰f‘dQ| jŠf‘dR| j‹f‘dS| jŒf‘dT| jf‘dU| jŽf‘dV| jf‘dW| jf‘dX| j‘f‘dY| j’f‘dZ| j“f‘d[| j”f‘d\| j•f‘d]| j–f‘d^| j—f‘d_| j˜f‘d`| j™f‘da| jšf‘db| j›f‘dc| jœf‘dd| jf‘de| jžf‘df| jŸf‘dgd d dh| j f‘did d dh| j¡f‘djd d dh| j¢f‘dk| j£f‘dl| j¤f‘dm| j¥f‘dn| j¦f‘do| j§f‘dp| j¨f‘dq| j©f‘dr| j©f‘ds| jªf‘dtd d du| j«f‘}| jˆ ¬|¡ g | _­txt®|ƒƒD ]%}t®|| ƒdkr¨|| d d kr¨| j­ z|| dv || d g¡ q„t~j¯ °| ¡| _±| j± ²dw| jˆ¡ | j³ ²dw| jˆ¡ | j´ ²dw| jˆ¡ |  µ¡  |  „dx¡}zt~j¶ ·|¡ W n   t¸t¹ º¡ t`j»dy Y t~j¼ °t~j½j¾d¡}dz}|D ]\}}|  ¿||  À|¡|g ¡ qõ|  Á¡  |  Â¡  | Ã| jÄddd¡ t~jÅ °d d ¡| _Æt~jÇ °t~j½j¾| jÆ È¡ ¡| _Ét~jÇ °t~j½jÊ| jÆ Ë¡ ¡| _Ìt~jÍ °ddd¡| _Ît~jÏ °t$j‚g¡| _Ðt~jÑ Ò| jÐ¡| _Ót~jÔ °¡ | _Õt~jÖ °¡ | _×| jÕ Øt~jÙjÚ¡ |  Û¡  | jÓ Ü| jÕ¡ | jÕ Ã| j×d¡ | jÕjÝ| j×dd{ | jÓ Þ¡  ßt~jàjá¡ | jÓ âd¡ | jÓ ãd|d¡ t~jä °d d ¡| _å| jå æt~jçjèt~jçjé¡ | jå ê| jÓ¡ | jÎ ë| jådddddt~jìjít~jìjîB dd¡	 | jÎ ë| jÆddddt~jìjít~jìjîB t~jìjít~jìjîB dd¡	 | jÎ ë| jÌddddt~jìjít~jìjïB t~jìjít~jìjïB dd¡	 | jÎ ë| jÉddddt~jìjít~jìjïB t~jìjít~jìjïB dd¡	 | Ã| jÎddd¡ |s/to pddd¡| _qt~jð °¡ | _ñ| jÆ ê| jñ¡ t~jò °¡ | _ót~jò °¡ | _ô| jô õd}d
¡ t~j¼ °t~j½jÊd¡}| Ã| jóddd¡ | Ã| jôddd¡ | Ã|ddd¡ | j± ê|¡ | j± ö||¡ | jr| j´ ÷t~jøjùd ¡ n
| j´ ÷t~jøjù| jq¡ | j± úd~| jû¡ | j± úd| jü¡ | j± úd€| jý¡ | j± úd| jþ¡ | jÄ úd‚| jÿ¡ | jÆ  t~jjt~jjB t~j °dƒdd„¡gtojj¡ | jÆ úd…| j¡ | jÆ úd†| j¡ | jÆ 	toj
jtoj
jB toj
jB toj
jB toj
jB ¡ | jÆ úd‡| j¡ | jÆ 	toj
jtoj
jB ¡ | jÆ údˆ| j¡ | jÆ 	toj
jtoj
jB toj
jB ¡ | jÆ úd‰| j¡ | jÆ údŠ| j¡ | jÆ úd‹| j¡ | jñ úd‹| j¡ | jÓ Þ¡  údŒ| j¡| _| jå ¡  úd| j¡| _| j´j úd| j¡ | js©| jÄ ãdŽd¡ | jÄ d¡ | j!sÉ| jó ãdŽd¡ | jó d¡ | jô ãdŽd¡ | jô d¡ | j sÛ| jå ãdŽd¡ | jå d¡ | jÌ d¡ | jÉ d¡ d}|g k	r|D ]\}}|dv 	s|dv 	r| j?	rd}qò|	s| jO	r2|  £d d d ¡ | jó d¡ | jô d¡ | jÄ d¡ | jå d¡ | j±  ¡  |  !d¡ | jÆ "d¡ | j± #| jÆ¡ |  $¡  g | _2|g k	rxtxt®|ƒƒD ]}t%j& '|| ¡||< 	q`|  (|¡ n|  )d¡ |  *d¡ |g k	r|D ]\}}|dv 	r›|  ©d d d ¡ 	q‹d S d S )‘Nr   r   é   é   g{®Gáz”?iX  é  FÚ éÿÿÿÿTú~éZ   )zOpen in GIMPzCreate ThumbnailzCreate ThumbnailszMove to Favorites)Ú(685216c7b02d1b9895c50514e505e25c73d3c128Ú(99a359757a6c96868215441ae2d3084c1682119aÚ(05a71d588cdb5d6dabf4f5a27df9b6cc38b9aa1fÚ(451c30956ab6ba54cea0d2bcb82491bd4e97910d)z
<Control>ez<Alt>tz<Control><Alt>tz<Control><Alt>f)z	gimp %F &ú(convert %F -thumbnail 150x150 %Pt_%N.jpgr(   z3mkdir -p ~/mirage-favs; mv %F ~/mirage-favs; [NEXT])FFTF)Ú128Ú96Ú72Ú64Ú48Ú32é€   )r    r    r    r    r    zhRvVsfo:)ÚhelpÚversionÚ	recursiveÚverboseÚ	slideshowÚ
fullscreenzonload=)z-vz	--version)z-hz--help)z-Rz--recursive)z-Vz	--verbose)ú-sú--slideshowú-fú--fullscreen)z-oz--onloadÚXDG_CONFIG_HOMEz	~/.configz/mirage©Úinterpolationú	/miragercÚwindowÚwÚhÚtoolbarÚ	statusbarÚ	thumbpaneÚprefsúsimple-bgcolorúbgcolor-redúbgcolor-greenúbgcolor-blue)ÚredÚgreenÚblueÚuse_last_dirÚlast_dirÚ	fixed_dirÚopen_allÚhiddenÚ	open_modeÚ	last_modeÚlistwrap_modeÚslideshow_delayÚslideshow_randomÚzoomqualityÚquality_saveÚdisable_screensaverÚslideshow_in_fullscreenÚpreloading_imagesÚ	thumbsizeÚscreenshot_delayÚactionsÚnum_actionsúnames[ú]ú	commands[ú
shortcuts[úbatch[ÚsavemodeÚstart_in_fullscreenÚconfirm_deleteÚrecentÚ
num_recentúurls[ú,0]ú
/accel_mapzmirage_blank.pngz	open-filezopen-folderzopen-file-remoteú
save-imageúsave-image-asÚ
screenshotúshow-propertieszexit-appúrotate-leftúrotate-rightúflip-image-vertúflip-image-horizú
crop-imageúresize-imageÚ
saturationúrename-imageúdelete-imagezshow-custom-actionsz
show-prefsúzoom-outúzoom-inúzoom-1-to-1úzoom-to-fit-windowztoggle-toolbarÚtrueztoggle-thumbpaneztoggle-status-barúenter-fullscreenúgoto-next-imageúgoto-prev-imageúgoto-random-imageúgoto-first-imageúgoto-last-imageústart-slideshowústop-slideshowz
show-aboutztoggle-slideshow-shuffleÚfalseé   Úappú
mirage.png©Úfile))úapp.zoom-outz<Ctrl>KP_Subtract)rŒ   Úminus)rŒ   ÚKP_Subtract)úapp.zoom-inÚplus)r   Úequal)r   ÚKP_Add)r   z<Ctrl>KP_Add)úapp.zoom-1-to-1Ú1)r“   z<Ctrl>KP_End)r“   z
<Ctrl>KP_1)úapp.zoom-to-fit-windowz<Ctrl>KP_Insert)r•   z
<Ctrl>KP_0)zapp.enter-fullscreenz<Shift>Return)zapp.leave-fullscreenÚEscape)úapp.goto-next-imageÚspace)r—   ÚDown)r—   Ú	Page_Down)úapp.goto-prev-imageÚ	BackSpace)r›   ÚUp)r›   ÚPage_Up)Úpixbufú	can-focuséÈ   Údelete_eventÚdestroyzsize-allocateúkey-press-eventÚfocusztext/uri-listéP   Údrag_motionÚdrag_data_receivedzscroll-eventÚbutton_press_eventúmotion-notify-eventzbutton-release-eventÚdrawÚchangedúvalue-changedÚvisible)r8   r9   )r6   r7   (+  Úopen_mode_smartÚopen_mode_fitÚopen_mode_1to1Úopen_mode_lastÚmin_zoomratioÚsimple_bgcolorÚcurr_img_in_listÚcurrimg_nameÚcurrimg_widthÚcurrimg_heightÚcurrimg_pixbufÚcurrimg_pixbuf_originalÚcurrimg_zoomratioÚcurrimg_is_animationÚloaded_img_in_listÚpreloadimg_next_in_listÚpreloadimg_next_nameÚpreloadimg_next_widthÚpreloadimg_next_heightÚpreloadimg_next_pixbufÚpreloadimg_next_pixbuf_originalÚpreloadimg_next_zoomratioÚpreloadimg_next_is_animationÚpreloadimg_prev_in_listÚpreloadimg_prev_nameÚpreloadimg_prev_widthÚpreloadimg_prev_heightÚpreloadimg_prev_pixbufÚpreloadimg_prev_pixbuf_originalÚpreloadimg_prev_zoomratioÚpreloadimg_prev_is_animationÚtoolbar_showÚthumbpane_showÚstatusbar_showÚfullscreen_modeÚopendialogpathr   Ú
InterpTypeÚBILINEARÚzoom_qualityr2   r3   Úimage_loadedÚopen_all_imagesrL   ÚosÚpathÚ
expanduserrM   rN   Ú
image_listrQ   rR   rS   Úuser_prompt_visiblerT   Úslideshow_moderU   Úslideshow_controls_visibleÚ	zoomvaluerW   Úupdating_adjustmentsrX   rY   Úclosing_apprf   rZ   Úaction_namesÚaction_hashesÚaction_shortcutsÚaction_commandsÚaction_batchÚ
onload_cmdÚsearching_for_imagesÚpreserve_aspectÚignore_preserve_aspect_callbackrd   Úimage_modifiedÚimage_zoomedre   Úrunning_custom_actionsÚmerge_id_recentÚactionGroupRecentÚopen_hidden_filesÚthumbnail_sizesÚthumbnail_sizeÚthumbnail_loadedÚthumbpane_stop_updatingÚ	threadingÚLockÚthumbpane_stop_updating_lockÚthumbpane_update_lockÚrecentfilesr\   Úthumbpane_bottom_coord_loadedÚgetoptÚsysÚargvÚGetoptErrorÚprint_usageÚexitÚprint_versionÚgetenvÚ
config_dirÚconfigparserÚConfigParserÚisfileÚreadÚ
has_optionÚgetintÚ
getbooleanr   ÚColorÚbgcolorÚgetr   ÚroundÚNEARESTÚTILESÚHYPERÚrangeÚstrÚappendÚhash_for_custom_actionÚcurr_slideshow_delayÚcurr_slideshow_randomr   ÚAccelMapÚloadÚresource_path_listÚPixbufÚnew_from_fileÚ	find_pathÚblank_imager   ÚSimpleActionGroupÚaction_groupÚ	open_fileÚopen_folderÚopen_file_remoteÚ
save_imageÚsave_image_asrn   Úshow_propertiesÚexit_appÚrotate_leftÚrotate_rightÚflip_image_vertÚflip_image_horizÚ
crop_imageÚresize_imagerv   Úrename_imageÚdelete_imageÚshow_custom_actionsÚ
show_prefsÚzoom_outÚzoom_inÚzoom_1_to_1_actionÚzoom_to_fit_window_actionÚtoggle_toolbarÚtoggle_thumbpaneÚtoggle_status_barÚenter_fullscreenÚgoto_next_imageÚgoto_prev_imageÚgoto_random_imageÚgoto_first_imageÚgoto_last_imageÚtoggle_slideshowÚ
show_aboutÚtoggle_slideshow_shuffleÚadd_action_entriesÚkeysÚlenÚApplicationWindowÚnewr>   Úinsert_action_groupÚ
popup_menuÚfullscreen_controlsÚupdate_titleÚWindowÚset_default_icon_from_fileÚprintÚ	tracebackÚ
format_excÚstderrÚBoxÚOrientationÚVERTICALÚset_accels_for_actionÚget_accels_for_actionÚrefresh_custom_actions_menuÚrefresh_recent_files_menuÚ
pack_startrA   ÚLayoutÚlayoutÚ	ScrollbarÚget_vadjustmentÚvscrollÚ
HORIZONTALÚget_hadjustmentÚhscrollÚTableÚtableÚ	ListStoreÚ	thumblistÚTreeViewÚnew_with_modelrC   ÚTreeViewColumnÚthumbcolumnÚCellRendererPixbufÚ	thumbcellÚ
set_sizingÚTreeViewColumnSizingÚFIXEDÚthumbpane_set_sizeÚappend_columnÚset_attributesÚget_selectionÚset_modeÚSelectionModeÚSINGLEÚset_headers_visibleÚset_propertyÚScrolledWindowÚthumbscrollÚ
set_policyÚ
PolicyTypeÚNEVERÚALWAYSÚaddÚattachÚAttachOptionsÚFILLÚEXPANDÚSHRINKÚImageÚ	imageviewÚ	StatusbarrB   Ú
statusbar2Úset_size_requestÚset_default_sizeÚ	modify_bgÚ	StateTypeÚNORMALÚconnectr¢   r£   Úwindow_resizedÚtopwindow_keypressÚtoolbar_focusedÚdrag_dest_setÚDestDefaultsÚ	HIGHLIGHTÚDROPÚTargetEntryÚ
DragActionÚDEFAULTÚ	motion_cbÚdrop_cbÚ
add_eventsÚ	EventMaskÚKEY_PRESS_MASKÚPOINTER_MOTION_MASKÚBUTTON_PRESS_MASKÚBUTTON_MOTION_MASKÚSCROLL_MASKÚmousewheel_scrolledÚbutton_pressedÚPOINTER_MOTION_HINT_MASKÚBUTTON_RELEASE_MASKÚmouse_movedÚbutton_releasedÚdraw_backgroundÚ
draw_imageÚthumbpane_selection_changedÚthumb_sel_handlerÚget_vscrollbarÚthumbpane_scrolledÚthumb_scroll_handlerÚslideshow_delay_adjustmentÚslideshow_delay_changedÚset_no_show_allÚshow_allÚset_leave_fullscreen_visibleÚset_can_focusÚ	set_focusÚset_slideshow_sensitivitiesÚurllibÚrequestÚurl2pathnameÚexpand_filelist_and_load_imageÚset_go_sensitivitiesÚset_image_sensitivities)r   ÚwidthÚheightÚbgcolor_foundÚoptsr   ÚoÚaÚconfÚbgrÚbggÚbgbr^   ÚiÚnameÚcommandÚshortcutÚbatchrh   r]   Ú	icon_pathÚvboxÚhotkeysÚaction_nameÚhotkeyÚhbox_statusbarÚgo_into_fullscreenr   r   r   Údo_activateP   s
  









ýý









þ
ÿÿþýüÿ€€ÿ
ýüûúùø	÷
öôóòñðïîíìëêèçæåäãâá!ß"Þ#Ý$Ü%Û&Ú'Ù)×,ûÕ3 €
ÿÿÿ÷÷÷÷
ý

ÿ
þ
ý
üÿÿ

ÿ
þÿ
ÿÿ
ÿ

€



€ýzBase.do_activatec                 C   sD   t j | ¡ t j d¡}| d¡| _tƒ | _t j	 
|  d¡¡| _d S )Nz /io/thomasross/mirage/toolbar.uirA   z
popup-menu)r   ÚApplicationÚ
do_startupÚBuilderÚnew_from_resourceÚ
get_objectrA   r	   rI  ÚMenuÚnew_from_modelÚget_menu_by_idrH  )r   Útoolbar_builderr   r   r   rÓ  –  s   ÿzBase.do_startupc                 C   sT   |r| j  |¡stj |d ¡}| d|d ¡ | j  |¡ d S |s(| j  |¡ d S d S )NÚactivate)r   Úlookup_actionr   ÚSimpleActionrF  rŒ  Ú
add_actionÚremove_action)r   rÍ  rÛ  r®   Úactionr   r   r   Úadd_remove_action   s   ÿzBase.add_remove_actionc                 C   s*   |  ¡ }| ¡ }| ¡ }| |¡dd … S )Nr   )Úget_displayÚget_default_seatÚget_pointerÚget_device_position)r   r>   ÚdisplayÚseatÚdevicer   r   r   rä  ¨  s   zBase.get_pointerc                 C   s  |   d¡}| ¡  | j ¡ D ]}| d¡r| j |¡ qt| jƒD ]b\}}tj	 
|¡}|s.q!t|ƒdkrDd |d d… tj	 |¡d ¡}d t | d¡¡ ¡ ¡}tj |d ¡}| d| j|¡ | j |¡ |  d	| d
 |d ¡g¡ tj |d	| ¡}| ||¡ q!d S )Nzrecent-files-sectionzrecent-file-{}é   z{}..{}é   r   Úutf8rÛ  úapp.z<Alt>{})rÙ  Ú
remove_allr   Úlist_actionsÚ
startswithrß  Ú	enumeraterù   rØ   rÙ   ÚbasenamerD  ÚformatÚsplitextÚhashlibÚsha1ÚencodeÚ	hexdigestr   rÝ  rF  rŒ  Úrecent_action_clickrÞ  rT  ÚMenuItemÚinsert_item)r   Úrecent_files_sectionrà  rÅ  Úrecent_fileÚfilenamerÍ  Ú	menu_itemr   r   r   rW  ¯  s,   

€ ÿïzBase.refresh_recent_files_menuc                 C   sÆ   |   d¡}| ¡  | j ¡ D ]}| d¡r| j |¡ qt| jƒD ]?\}}d | j	| ¡}t
j |d ¡}| d| j| j	| ¡ | j |¡ |  d| | j| g¡ t
j |d| ¡}| ||¡ q!d S )Nzcustom-actions-sectionúcustom-z	custom-{}rÛ  rì  )rÙ  rí  r   rî  rï  rß  rð  râ   rò  rã   r   rÝ  rF  rŒ  Úcustom_action_clickrÞ  rT  rä   rù  rú  )r   Úcustom_actions_sectionrà  rÅ  rÆ  rÍ  rþ  r   r   r   rV  Ë  s   

€÷z Base.refresh_custom_actions_menuc           	      C   s¼   | j  ¡ }|s	d S |\}}td| ¡ d d ƒ}tt| jƒ| ¡ d ƒ}||kr*|}| j | jD ]}d| j|< q1W d   ƒ n1 sCw   Y  t	j
| j|||fd}| d¡ | ¡  d S )Nr   r   T)Útargetr   )rC   Úget_visible_rangeÚmaxÚget_indicesÚminrD  rÛ   r÷   rô   rõ   ÚThreadÚthumbpane_update_pending_imagesÚ	setDaemonÚstart)	r   Úforce_upto_imgnumÚvisible_rangeÚ
start_pathÚend_pathÚstart_imageÚ	end_imageÚ	thread_idÚthreadr   r   r   Úthumbpane_do_updateß  s&   

ÿÿþ
zBase.thumbpane_do_updateFr!   c                 C   s$   d| _ |r	|  ¡  t | j|¡ d S ©NF)Ústop_nowÚthumbpane_clear_listr   Úidle_addr  )r   Úclear_firstr  r   r   r   Úthumbpane_update_imagesø  s   zBase.thumbpane_update_imagesc                 C   sT   t j t j d¡¡st  t j d¡¡ t j t j d¡¡s(t  t j d¡¡ d S d S )Nz~/.thumbnails/ú~/.thumbnails/normal/)rØ   rÙ   ÚexistsrÚ   Úmkdir©r   r   r   r   Úthumbpane_create_dir  s
   ÿzBase.thumbpane_create_dirc              	   C   s,  t  ¡ }| j d| j|< W d   ƒ n1 sw   Y  | jm |  ¡  d}d}t||d ƒD ]5}| j |¡s@| js@| j	s@| j
sB n#|t| jƒkrK n|  | j| |¡ ||krd|| jkrdt | j|¡ q/| j | j|= W d   ƒ n1 sww   Y  W d   ƒ d S W d   ƒ d S 1 sw   Y  d S )NFr   r   )rõ   Ú	get_identr÷   rô   rø   r  r  r  rá   r  rÏ   rD  rÛ   Úthumbpane_set_imagerµ   r   r  Úthumbpane_select)r   r
  ÚendÚselect_imager  Ú
curr_coordÚimgnumr   r   r   r    s<   ÿ
ÿþýü€
ÿé"éz$Base.thumbpane_update_pending_imagesc                 C   sn   d| _ | j ¡  | j¡ | j ¡  | j ¡  | j¡ | jD ]}|  	|¡}| j 
|g¡ qdgt| jƒ | _d S )Nr   F)rú   rx  rª  Úhandler_blockr¬  rd  ÚclearÚhandler_unblockrÛ   Úget_blank_pix_for_imager  rD  ró   )r   ÚimageÚ	blank_pixr   r   r   r  &  s   


zBase.thumbpane_clear_listc           	      C   sÌ   | j r`| j| r
|rd|  |¡\}}|  |||¡}|rb| jdkr,|  || jtjj¡\}}}d| j|< | j	 
¡  | j¡ |  |¡}z|g| j|< W n   tt ¡ tjd Y | j	 
¡  | j¡ d S d S d S d S )Nr/   TrŠ   )rÏ   ró   Úthumbnail_get_nameÚthumbpane_get_pixbufrò   Úget_pixbuf_of_sizer   rÓ   r  rx  rª  r&  r¬  Úpixbuf_add_borderrd  rM  rN  rO  rü   rP  r(  )	r   Ú
image_namer%  Úforce_updaterý  Ú	thumbfileÚpixÚimage_widthÚimage_heightr   r   r   r   0  s0   

ÿ

ÿ

ÿíýzBase.thumbpane_set_imagec                 C   sr   t j d| ¡}t j dtj |¡ ¡}trt ¡ }nt 	¡ }| 
| d¡¡ | ¡ }t j d| d ¡}||fS )Núfile://rë  r  z.png)rØ   rÙ   rÚ   rµ  r¶  Úpathname2urlÚHAS_HASHLIBrô  Úmd5rF  Úupdaterö  r÷  )r   r0  rý  ÚurinameÚmÚmhexÚmhex_filenamer   r   r   r,  H  s   ÿ
zBase.thumbnail_get_namec              	   C   s   |}|d d… dkr|dd … }z`t j |¡r9|s9tj |¡}| d¡}|r9t  |¡}t|tj	 ƒ}||kr9|W S dt
j |¡ }	tj |¡}|  |dtjj¡\}}
}t  |¡}t|tj	 ƒ}| |dg d¢|	|dt g¡ |W S    tt ¡ tjd Y d S )	Né   r6  útEXt::Thumb::MTimer/   Úpng)ztEXt::Thumb::URIr@  ztEXt::SoftwareÚMiragerŠ   )rØ   rÙ   r  r   r  r  Ú
get_optionÚstatr  ÚST_MTIMErµ  r¶  r7  r.  rÓ   r  ÚsavevÚ__version__rM  rN  rO  rü   rP  )r   Ú	thumb_urlÚ	image_urlÚforce_generationÚimgfiler3  Ú	pix_mtimeÚstÚ
file_mtimeÚurir4  r5  r   r   r   r-  V  s:   



ÿ
üzBase.thumbpane_get_pixbufc                 C   s&   || j krt | jt|ƒd ¡ d S d S ©N)rµ   r   r  Ú
goto_imager  )r   Útreeviewr%  r   r   r   Úthumbpane_load_image{  s   
ÿzBase.thumbpane_load_imagec                 C   s   |   ¡ }|rt | j| j¡ dS z(| j ¡  ¡ \}}|d d }| j| s.|  	| j
| |¡ t | j||¡ W d S    tt ¡ tjd Y d S )NTr   rŠ   )Úautosave_imager   r  r!  rµ   rC   rq  Úget_selected_rowsró   r   rÛ   rS  rM  rN  rO  rü   rP  )r   rR  ÚcancelÚmodelÚpathsr%  r   r   r   r¨    s   
z Base.thumbpane_selection_changedc                 C   sx   | j r:| j ¡  | j¡ zt |¡}| j ¡  |¡ | j |¡ W n   t	t
 ¡ tjd Y | j ¡  | j¡ d S d S ©NrŠ   )rÏ   rC   rq  r&  r©  r   ÚTreePathÚselect_pathÚscroll_to_cellrM  rN  rO  rü   rP  r(  )r   r%  rÙ   r   r   r   r!  Ž  s   
øzBase.thumbpane_selectc                 C   s(   | j  |  ¡ ¡ |  d | j ¡ d¡ d S ©NT)rh  Úset_fixed_widthÚthumbpane_get_sizer  r>   Úget_allocationr  r   r   r   rn  ™  s   zBase.thumbpane_set_sizec                 C   s   t | jd ƒS )NgÍÌÌÌÌÌô?)r   rò   r  r   r   r   r_    ó   zBase.thumbpane_get_sizec                 C   s   |   ¡  d S rP  )r  )r   r  r   r   r   r«     ó   zBase.thumbpane_scrolledc              	   C   s  z1t j |¡}t|d ƒ}t|d ƒ}|| jkr'||kr | j}n|| | j }dt|ƒ }| j}W n   tt ¡ t	j
d d| j }| j}Y t j t jjdd||¡}| d¡ t|d ƒ}t|d ƒ}| j ||t jj¡}t|| d ƒ}	t|| d ƒ}
| dd||||	|
¡ |S )Nr   r   rŠ   Té   r   gš™™™™™é?)r   r  Úget_file_infoÚfloatrò   r   rM  rN  rO  rü   rP  rF  Ú
ColorspaceÚRGBÚfillr  Úscale_simplerÓ   rÔ   Ú	copy_area)r   r*  ÚinfoÚimgwidthÚ	imgheightr+  Ú	imgwidth2Ú
imgheight2Úcomposite_pixÚ	leftcoordÚtopcoordr   r   r   r)  £  s>   
ÿ

ÿ

ÿÿzBase.get_blank_pix_for_imageTc                 C   s&  | j sitj tjd ¡d }tj t¡d  d¡d }ttttjj	tj 
|dd¡tj 
|dd¡tj 
tjdd¡tj 
tjdd¡tj 
tjddd¡tj 
tjddd¡tjd tj 
|dd¡tj 
|dd¡g	ƒƒƒ| _ | j D ]}tj 
||¡}tj |¡r|  S ql|r‘ttdƒ| ƒ t d¡ d	S d	S )
z¹ Find a pixmap or icon by looking through standard dirs.
            If the image isn't found exit with error status 1 unless
            exit_on_fail is set to False, then return None r   z/libÚshareÚmirageÚpixmapsÚlocalz;Couldn't find the image %s. Please check your installation.r   N)r  rØ   rÙ   Úsplitrü   Ú__file__ÚlistÚsetÚfilterÚisdirÚjoinÚprefixr  rM  Ú_r   )r   rý  Úexit_on_failÚbasedir_mirageÚf0rÙ   r3  r   r   r   r  È  sB   ÷þÿÿ
ÿÿÿzBase.find_pathc                 C   ó   | j  ¡  dS r]  )rZ  Ú
grab_focus)r   ÚwidgetÚ	directionr   r   r   r  ñ  ó   
zBase.toolbar_focusedc                 C   sN   t  |j| ¡ ¡}d|v r%d| _d| _t  ¡ rt  ¡  t  ¡ s|  ¡  d S d S )Nr–   TF)	r   Úaccelerator_nameÚkeyvalÚ	get_stater  rè   Úevents_pendingÚmain_iterationrJ  )r   r…  ÚeventrÈ  r   r   r   rŽ  õ  s   ÿúzBase.topwindow_keypressc                 C   sÊ  d| _ |  tj tjj¡¡ t ¡ rt 	¡  t ¡ sd| _
|rPt| jƒ| _t| jƒD ]$}|  j
d7  _
|  ¡  t ¡ rCt 	¡  t ¡ s;| j| }|  ||¡ q*nd| _d| _
|  ¡  t ¡ rft 	¡  t ¡ s^|  || j¡ t ¡  |  d ¡ tj | j¡s†d | _|  d¡ n,tj | j¡}| ¡ r£|  | ¡ | j¡r¢|  dddd¡ n|  || j¡r²|  dddd¡ d| _ |  ¡  t ¡ rÅt 	¡  t ¡ s½tj | j ¡sÐd| _!n3tj | j ¡}| ¡ rð|  | ¡ | j"¡rïd| _!t# $| j%d¡| _&n|  || j"¡rd| _!t# $| j%d¡| _&tj | j'¡sd| _(n5tj | j'¡}| ¡ r1|  | ¡ | j)¡r0d| _(t# $| j*d¡| _&n|  || j)¡rDd| _(t# $| j*d¡| _&d| _+|rUt# $| j,d| j-¡ d S t# $| j.| j| j- | j-d¡ d S )NTr   r   Fr!   )/rí   Úchange_cursorr   ÚCursorrF  Ú
CursorTypeÚWATCHr   r‹  rŒ  Úcurr_custom_actionrD  rÛ   Únum_custom_actionsr  Úupdate_statusbarÚparse_action_command2r¶   ÚgcÚcollectrØ   rÙ   r  rº   Úimage_load_failedr   ÚPixbufAnimationr  Úis_static_imageÚimages_are_differentÚget_static_imageÚload_new_image2rÇ   rÆ   rË   r   r  Úpreload_prev_imageÚpreload_when_idler¿   r¾   rÃ   Úpreload_next_imager  r  rµ   r   )r   rÇ  Ú	batchmoderÅ  Ú	imagenameÚanimtestr   r   r   Úparse_action_commandÿ  s¼   ÿÿ
úÿ

ÿ€ÿÿ
ÿÿ€ÿÿÿ

ÿÿ€ÿÿ
üzBase.parse_action_commandc                 C   s   |  ¡ |  ¡ kr
dS dS ©NFT)Ú
get_pixels)r   Úpixbuf1Úpixbuf2r   r   r   r›  b  s   zBase.images_are_differentc                 C   sš   d| _ t ¡ rt ¡  t ¡ s|  ¡ }|rd S tj |¡s-tj |¡s-| 	d¡s-| 	d¡r5|  
|g¡ d S g | _d| _| j |¡ |  d¡ |  |¡ d S )NTúhttp://úftp://r   F)r  r   r‹  rŒ  rT  rØ   rÙ   r  r  rï  r¸  rÛ   rµ   r  r˜  Úrecent_file_remove_and_refresh)r   rà  Ú	parameterrý  rV  r   r   r   rø  h  s*   ÿ
ÿ
þýü
zBase.recent_action_clickc                 C   s0   z| j  |¡ W n	 ty   Y nw |  ¡  d S rP  )rù   ÚremoveÚ
ValueErrorrW  )r   Úrmfiler   r   r   r«  }  s   ÿz#Base.recent_file_remove_and_refreshc                 C   sN   z| j  |¡ W n	 ty   Y nw | j  d|¡ | j d d… | _ |  ¡  d S )Nr   é	   )rù   r­  r®  ÚinsertrW  )r   Úaddfiler   r   r   Úrecent_file_add_and_refresh…  s   ÿz Base.recent_file_add_and_refreshc                 C   sb   t | jƒD ])\}}||kr.z|  | j| | j| ¡ W  d S    tt ¡ tj	d Y  d S qd S rY  )
rð  rã   r¤  rå   ræ   rM  rN  rO  rü   rP  )r   rà  r¬  Úaction_hashrÅ  Úhashr   r   r   r     s   ÿýøÿzBase.custom_action_clickc              	      s  dd„ ‰ |  ¡ }|dkr|  d d d ¡ d S |dkr"|  d d d ¡ d S d}|dd … dkr5d}|d d… }n|dd … dkrEd}|d d… }d	|v rQ| d	ˆ |ƒ¡}d
|v rg| d
ˆ tj tj |¡¡d ƒ¡}d|v ry| dˆ tj |¡d ƒ¡}d|v r| dˆ tj tj |¡¡d ƒ¡}d|v r¤| dd 	‡ fdd„| j
D ƒ¡¡}| jr¯ttdƒ| ƒ t |¡d? }| jrÁttdƒ| ƒ |dkrëtdƒ| }t | jtjjtjjtjj|¡}| tdƒ¡ | ¡  | ¡  n|dkr÷|  d d d ¡ n|dkr|  d d d ¡ d| _d S )Nc                 S   s   dd l }| ddd„ | ¡S )Nr   z[^/._a-zA-Z0-9-]c                 S   s   d|   ¡  S )Nú\)Úgroup)Úcr   r   r   Ú<lambda>   s    z<Base.parse_action_command2.<locals>.sh_esc.<locals>.<lambda>)ÚreÚsub)Úsrº  r   r   r   Úsh_esc  s   z*Base.parse_action_command2.<locals>.sh_escú[NEXT]ú[PREV]r   éúÿÿÿr   r!   z%Fz%Nz%Pú/z%Ez%Lú c                    s   g | ]}ˆ |ƒ‘qS r   r   )Ú.0r¼  ©r½  r   r   Ú
<listcomp>¿  s    z.Base.parse_action_command2.<locals>.<listcomp>z
Action: %src  zAction return code: %szQUnable to launch "%s". Please specify a valid command from Edit > Custom Actions.úInvalid Custom ActionF)Ústripr:  r;  ÚreplacerØ   rÙ   ró  rñ  Údirnamer}  rÛ   r3   rM  r  Úsystemr   ÚMessageDialogr>   ÚDialogFlagsÚMODALÚMessageTypeÚWARNINGÚButtonsTypeÚCLOSEÚ	set_titleÚrunr£   rí   )r   Úcmdr¢  Úprev_or_nextÚshell_rcÚmsgÚerror_dialogr   rÄ  r   r•  ›  sp   ÿÿ"ÿýÿû


zBase.parse_action_command2c                 C   s^   | j  d¡ |¡ | j  d¡ |¡ | j  d¡ |¡ | j  d¡ |¡ | j  d¡ |¡ d S )Nr   r€   r   r‚   rƒ   ©r   rÜ  Úset_enabled©r   Úenabler   r   r   r¹  Ü  s
   zBase.set_go_sensitivitiesc                 C   sº  |   |¡ |  |¡ | j d¡ |¡ | j d¡ |¡ | j d¡ |¡ | j d¡ |¡ | j d¡ |¡ | j d¡ |¡ | j d¡ |¡ | j d¡ |¡ | j d	¡ |¡ | j d
¡ |¡ t| jƒdkr| j d¡ d¡ ztj 	| j
¡d  ¡ }|  |¡rŽ| j d¡ |¡ W n   tt ¡ tjd Y | j ¡ D ]}| d¡r²| j |¡ |¡ q¢ts·d}| j d¡ |¡ | j d¡ |¡ | j d¡ |¡ | j d¡ |¡ d S )Nrl   rm   ro   rt   ru   rv   rw   rx   r{   r|   r   FrŠ   rÿ  rp   rq   rr   rs   )Úset_zoom_in_sensitivitiesÚset_zoom_out_sensitivitiesr   rÜ  rÚ  rD  rÛ   r   r  rd  r¶   Úget_nameÚfiletype_is_writablerM  rN  rO  rü   rP  rî  rï  ÚHAS_IMGFUNCS)r   rÜ  Úfiletyperà  r   r   r   rº  ã  sF   

ÿþ
€
€zBase.set_image_sensitivitiesc                 C   ó   | j  d¡ |¡ d S )Nrz   rÙ  rÛ  r   r   r   rÝ    ó   zBase.set_zoom_in_sensitivitiesc                 C   rã  )Nry   rÙ  rÛ  r   r   r   rÞ    rä  zBase.set_zoom_out_sensitivitiesc                 C   rã  )Nr   rÙ  rÛ  r   r   r   Úset_next_image_sensitivities  rä  z!Base.set_next_image_sensitivitiesc                 C   rã  )Nr€   rÙ  rÛ  r   r   r   Ú set_previous_image_sensitivities  rä  z%Base.set_previous_image_sensitivitiesc                 C   rã  )Nr‚   rÙ  rÛ  r   r   r   Úset_first_image_sensitivities  rä  z"Base.set_first_image_sensitivitiesc                 C   rã  )Nrƒ   rÙ  rÛ  r   r   r   Úset_last_image_sensitivities  rä  z!Base.set_last_image_sensitivitiesc                 C   rã  )Nr   rÙ  rÛ  r   r   r   Úset_random_image_sensitivities  rä  z#Base.set_random_image_sensitivitiesc                 C   ó   |   d| j|¡ d S )Nr„   ©rá  r?  ©r   r®   r   r   r   Úset_start_slideshow_visible   ó   z Base.set_start_slideshow_visiblec                 C   rê  )Nr…   rë  rì  r   r   r   Úset_stop_slideshow_visible#  rî  zBase.set_stop_slideshow_visiblec                 C   s’   t | jƒdkr|  d¡ | j d¡ d¡ |  d¡ d S | jr4|  d¡ |  d¡ | j d¡ d¡ d S |  d¡ | j d¡ d¡ |  d¡ d S )Nr   Tr„   Fr…   )rD  rÛ   rí  r   rÜ  rÚ  rï  rÝ   r  r   r   r   r´  &  s   



z Base.set_slideshow_sensitivitiesc                 C   s6   | j s|  d¡ |  d¡ d S |  d¡ |  d¡ d S r
   )r¼   rÞ  rÝ  r  r   r   r   Úset_zoom_sensitivities7  s
   

zBase.set_zoom_sensitivitiesc                 C   s   t tdƒtƒ t tdƒƒ d S )NzVersion: Miragez-Website: https://gitlab.com/thomasross/mirage)rM  r  rG  r  r   r   r   r  ?  s   zBase.print_versionc                 C   sØ   |   ¡  tdƒ ttdƒƒ tdƒ ttdƒd ƒ tdtdƒ ƒ tdtdƒ ƒ td	td
ƒ ƒ tdtdƒ ƒ tdtdƒ ƒ tdtdƒ ƒ tdtdƒ ƒ tdtdƒ ƒ tdtdƒ ƒ tdtdƒ ƒ d S )Nr    z*Usage: mirage [OPTION]... FILES|FOLDERS...ÚOptionsú:z  -h, --help           zShow this help and exitz  -v, --version        z!Show version information and exitz  -V, --verbose        zShow more detailed informationz  -R, --recursive      z'Recursively include all images found inz                       zsubdirectories of FOLDERSz  -s, --slideshow      zStart in slideshow modez  -f, --fullscreen     zStart in fullscreen modez  -o, --onload 'cmd'   z%Execute 'cmd' when an image is loadedz$uses same syntax as custom actions,
z i.e. mirage -o 'echo file is %F')r  rM  r  r  r   r   r   rÿ   C  s   zBase.print_usagec                 C   sv   | j j ¡ | _| jr2t | j¡ | jr$t 	t
| jd ƒ| jd d d¡| _nt 	| jd | jd d d¡| _| j | j¡ d S )Néè  Úss)rI  r­  Ú	get_valuer  rÝ   r   Úsource_removeÚtimer_delayr  Útimeout_addr   r<  r:  r>   r³  rZ  )r   rà  r   r   r   r®  T  s(   
ÿûûzBase.slideshow_delay_changedc                 C   s   |  |¡ | ¡ | _d S rP  )Ú	set_stateÚget_booleanr  ©r   rà  ÚvalueÚdatar   r   r   rA  l  s   
zBase.toggle_slideshow_shufflec                 C   s   t  |t jj|¡ dS r]  )r   Údrag_statusr•  ÚCOPY)r   r…  Úcontextr   ÚyÚtimer   r   r   r—  p  s   zBase.motion_cbc           
      C   s$   |  ¡ }dd„ |D ƒ}	|  |	¡ d S )Nc                 S   s   g | ]}t j |¡‘qS r   )rµ  r¶  r·  )rÃ  r   r   r   r   rÅ  v  s    z Base.drop_cb.<locals>.<listcomp>)Úget_urisr¸  )
r   r…  r   r   r  Ú	selectionrk  r  ÚurisrX  r   r   r   r˜  t  s   zBase.drop_cbc                 C   s^   | j  tjtjj¡ | j  ¡ j| _| j  ¡ j	| _
|  ¡  |  d¡ |  d¡ |  ¡  d| _d S )NFr!   )r„  Úset_from_stockr   ÚSTOCK_MISSING_IMAGEÚIconSizeÚLARGE_TOOLBARÚsize_requestr»  r·   r¼  r¸   Úcenter_imager¹  rº  r”  r½   r  r   r   r   Úput_error_image_to_windowy  s   
ÿ


zBase.put_error_image_to_windowc                 C   sb  | j rd S d| _ | j d¡r\z@t| jƒ| j }t| j ¡  	¡ | |  
¡ |d  d  ƒ}|| j ¡  ¡ krM|| j ¡  ¡ | j ¡  ¡  krM| j ¡  |¡ W n   tt ¡ tjd Y | j d¡r¬z<t| j ¡  	¡ | |  ¡ |d  d  ƒ}|| j ¡  ¡ kr™|| j ¡  ¡ | j ¡  ¡  kr™| j ¡  |¡ | j| _W n   tt ¡ tjd Y d| _ d S )NTr®   r   r   rŠ   F)rà   r`  Úget_propertyre  r·   Úprevimg_widthÚabsrZ  r_  rõ  Úavailable_image_widthÚ	get_lowerÚ	get_upperÚget_page_sizeÚ	set_valuerM  rN  rO  rü   rP  r]  r\  Úavailable_image_height)r   r…  ÚcrÚ	zoomratioÚnewvaluer   r   r   r§  …  sJ   ÿÿÿÿ€ÿÿÿÿ
zBase.draw_imagec                 C   sš   | j rC|s|j| jks|j| jkrC| jr'| jr|  d dd¡ n|  d dd¡ n|  	¡  |  
¡  |  ¡  t | jd¡| _t | jd¡| _|j| _|j| _d S r¥  )rÖ   r»  Úprevwinwidthr¼  ÚprevwinheightÚlast_image_action_was_fitÚlast_image_action_was_smart_fitÚzoom_to_fit_or_1_to_1Úzoom_to_fit_windowr  Úload_new_image_stop_nowÚshow_scrollbars_if_neededr   r  r   rŸ  rž  Úpreload_when_idle2)r   r…  Ú
allocationr1  r   r   r   r  §  s"   ÿzBase.window_resizedc              	   C   s   t jd d}| d¡ | ddt| j ¡ jƒ¡ | ddt| j ¡ jƒ¡ | ddt| j	ƒ¡ | ddt| j
ƒ¡ | ddt| jƒ¡ | d¡ | dd	t| jƒ¡ | dd
t| jjƒ¡ | ddt| jjƒ¡ | ddt| jjƒ¡ | ddt| jƒ¡ | ddt| jƒ¡ | ddt| jƒ¡ | dd| j¡ | dd| j¡ | ddt| jƒ¡ | ddt| jƒ¡ | ddt| jƒ¡ | ddtt| jƒƒ¡ | ddt| jƒ¡ | ddt| jƒ¡ | ddtt| jƒƒ¡ | ddt| jƒ¡ | ddt| jƒ¡ | ddt| j ƒ¡ | ddt| j!ƒ¡ | ddt| j"ƒ¡ | ddt| j#ƒ¡ | ddt| j$ƒ¡ | dd t| j%ƒ¡ | d!¡ | d!d"tt&| j'ƒƒ¡ t(t&| j'ƒƒD ]E}| d!d#t|ƒ d$ | j'| ¡ | d!d%t|ƒ d$ | j)| ¡ | d!d&t|ƒ d$ | j*| ¡ | d!d't|ƒ d$ t| j+| ƒ¡ qS| d(¡ | d(d)tt&| j,ƒƒ¡ t(t&| j,ƒƒD ]'}| d(d*t|ƒ d$ tt&| j,| ƒƒ¡ | d(d+t|ƒ d, | j,| ¡ q±t-j. /| j0¡sçt- 1| j0¡ t2| j0d- dƒ}| 3|¡ W d   ƒ n	1 s w   Y  t4j5 6| j0d. ¡ d S )/Nr;   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rO   rP   rL   rM   rN   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rf   rZ   rd   re   r[   r\   r]   r^   r_   r`   ra   rb   rc   rg   rh   znum[ri   rj   r=   rk   )7r  r  Úadd_sectionrz  r  r>   r`  r»  r¼  rÎ   rÐ   rÏ   r´   r  rI   rJ   rK   r×   rð   rL   rM   rN   rQ   rR   rS   r   rT   rU   rß   rW   rX   rY   rf   rZ   rd   re   rò   r\   rD  râ   r  rå   rä   ræ   rù   rØ   rÙ   r  r  ÚmakedirsÚopenÚwriter   r  Úsave)r   rÁ  rÅ  Úfr   r   r   Úsave_settings¿  sf   


   (
($ÿzBase.save_settingsNc                 C   ó2   |   ¡ }|rdS d| _d| _|  ¡  t d¡ d S ©NTr   ©rT  r  rá   r)  rü   r   )r   r…  r  rý  rV  r   r   r   r¢   ö  ó   zBase.delete_eventc                 C   s(   |   ¡ }|rdS d| _d| _|  ¡  d S r]  )rT  r  rá   r)  )r   r  rý  rV  r   r   r   r£   ÿ  s   zBase.destroyc                 C   r*  r+  r,  )r   rà  r¬  rý  rV  r   r   r   r'    r-  zBase.exit_appc              	   C   s  | j  ¡  ¡  |sJt| j ¡ | j ƒ}t| j ¡ | j ƒ}| js?| j 	¡ s0| j 
||| j¡| _n| j ||| jdddd¡| _n| j| _||| _| _| j | j| j¡ |  ¡  |  ¡  | jsi| j | j¡ d| _n
| j | j¡ d| _t ¡  | j  ¡  ¡  | j| _d S )Néÿ   rc  éfff é™™™ FT)r>   Ú
get_windowÚfreeze_updatesr   rº   Ú	get_widthr»   Ú
get_heightr¼   Úget_has_alphari  rÕ   r¹   Úcomposite_color_simpler·   r¸   rZ  Úset_sizer  r   r„  Úset_from_pixbufÚprevimage_is_animationÚset_from_animationr–  r—  Úthaw_updatesrµ   r½   )r   Úcurrimg_preloadedÚfinalimg_widthÚfinalimg_heightr   r   r   Úput_zoom_image_to_window  sF   ÿÿ
ÿù
zBase.put_zoom_image_to_windowc                 C   sN   | j |  ¡ kr| j ¡  n| j ¡  | j|  ¡ kr | j ¡  d S | j ¡  d S rP  )r·   r  r`  ÚshowÚhider¸   r  r]  r  r   r   r   r   <  s   
zBase.show_scrollbars_if_neededc                 C   sZ   t |  ¡ | j d ƒ}|dk rd}t |  ¡ | j d ƒ}|dk r"d}| j | j||¡ d S )Nr   r   )r   r  r·   r  r¸   rZ  Úmover„  )r   Úx_shiftÚy_shiftr   r   r   r  F  s   zBase.center_imagec                 C   ó   | j  ¡ jS rP  )rZ  r`  r»  r  r   r   r   r  O  rb  zBase.available_image_widthc                 C   rE  rP  )rZ  r`  r¼  r  r   r   r   r  R  rb  zBase.available_image_heightc                 C   s8   | j  d¡ ¡ r|  | jtj | j¡d  ¡ ¡ d S d S )Nrl   r   )	r   rÜ  Úget_enabledÚsave_image_nowr¶   r   r  rd  rß  ©r   rà  r¬  rý  r   r   r   r$  U  s   þÿzBase.save_imagec                 C   s"  t jtdƒt jjd}| t jt jjt j	t jj
¡ | t jj
¡ tj | j¡}d }| tj | j¡¡ | |¡ | d¡ | ¡ }|t jj
kr‹| j}| ¡ }| ¡  tj tj |¡¡d  ¡ }	t|	ƒdkrl|	dd … }	tj ¡ D ]}
|	|
 ¡ v r}|
 ¡ }qq|  ||¡ |   |¡ d S | ¡  d S )NzSave As©Útitlerà  Tr   r   )!r   ÚFileChooserDialogr  ÚFileChooserActionÚSAVEÚadd_buttonsÚSTOCK_CANCELÚResponseTypeÚCANCELÚ
STOCK_SAVEÚOKÚset_default_responserØ   rÙ   rñ  r¶   Úset_current_folderrÉ  Úset_current_nameÚset_do_overwrite_confirmationrÓ  Úget_filenamer£   ró  ÚlowerrD  r   r  Úget_formatsÚget_extensionsrß  rG  Úregister_file_with_recent_docs)r   rà  r¬  rý  Údialogrý  râ  ÚresponseÚ	prev_nameÚfileextrÅ  r   r   r   r%  \  s<   ÿü

€zBase.save_image_asc                 C   sÈ  z¬|   tj tjj¡¡ t ¡ rt ¡  t ¡ s|d kr't	j
 | j¡d  ¡ }|  |¡rjtj ¡ }| | j¡ | j ||dgt| jƒg¡ || _| | j¡ || j| j< |  ¡  |  ¡  t | j|| jd¡ d| _nAt | j tj!j"tj#j$tj%j&t'dƒ| ¡}| (t'dƒ¡ | )¡ }|tj*j+kr§| ,¡  t ¡ rŸt ¡  t ¡ s—|  -d d d ¡ n| ,¡  W n0   t.t/ 0¡ t1j2d t | j tj!j"tj#j$tj%j3t'dƒ| ¡}| (t'dƒ¡ | )¡  | ,¡  Y |   d ¡ d S )	Nr   ÚqualityTFz^The %s format is not supported for saving. Do you wish to save the file in a different format?ÚSaverŠ   zUnable to save %s)4rŽ  r   r  rF  r  r‘  r   r‹  rŒ  r   r  rd  r¶   rß  rà  r   ÚMetadataÚ	open_pathrº   rF  r  rW   Ú	save_filerÛ   rµ   rJ  r”  r   r  r   rë   rË  r>   rÌ  rÍ  rÎ  rÏ  rÐ  ÚYES_NOr  rÒ  rÓ  rP  ÚYESr£   r%  rM  rN  rO  rü   rP  rÑ  )r   Ú	dest_namerâ  ÚmetadatarØ  r^  r   r   r   rG  }  sx   ÿÿþ

ÿÿÿýû
ÿ€
û
zBase.save_image_nowc                 C   sj  | j r±| jdkr%| j d¡}| ¡ }| d¡ |  d d d ¡ | |¡ d S | jdkr³t | j	tj
jtj
jB tjjtjjtdƒ¡}| tjtjj¡ | tjtjj¡ | tjtjj¡ | tdƒ¡ | tjj¡ | ¡ }| ¡  |tjjkr—| j d¡}| ¡ }| d¡ |  d d d ¡ | |¡ d| _ d S |tjjkr¯d| _ | j| _d| _ d| _!d| _"d S dS d S d S )	Nr   rl   Tr   z2The current image has been modified. Save changes?zSave?Fr!   )#rë   rd   r   rÜ  rF  rÚ  r$  r   rË  r>   rÌ  rÍ  ÚDESTROY_WITH_PARENTrÎ  ÚQUESTIONrÐ  ÚNONEr  Ú
add_buttonrO  rP  rQ  ÚSTOCK_NOÚNOrR  rg  rÒ  rT  rÓ  r£   rº   r¹   r¾   rÆ   r½   )r   rà  Útempr]  r^  r   r   r   rT  ¸  sL   


û



ÚzBase.autosave_imagec                 C   s2   d}t j ¡ D ]}|| ¡ v r| ¡ r dS qdS r
   )r   r  rZ  r[  Úis_writable)r   râ  rà  rÅ  r   r   r   rà  ä  s   €zBase.filetype_is_writablec                 C   s,   d| _ t ¡ rt ¡  t ¡ s|  d¡ d S r]  ©r  r   r‹  rŒ  Úopen_file_or_folderrH  r   r   r   r!  í  ó
   ÿzBase.open_filec                 C   sØ   t  tdƒ| jt jj¡}| t jt jj	t j
t jj¡ t j ¡ }| dd¡ | d¡ t j t jjd¡}| t j tdƒ¡ddd¡ | |ddd¡ |j |ddd	¡ | t jj¡ |j ¡  | d
| j|¡ | ¡ }d S )NzOpen Remoteé,  r!   Tr   zImage Location (URL):Fé   é
   r^  )r   ÚDialogr  r>   rÌ  rÍ  rN  rO  rP  rQ  Ú
STOCK_OPENrS  ÚEntryrF  r‡  Úset_activates_defaultrQ  rR  r^  rX  ÚLabelrË  rT  r°  rŒ  Úopen_file_remote_responser@  )r   rà  r¬  rý  r]  ÚlocationÚhboxr^  r   r   r   r#  ó  s$   ü


zBase.open_file_remotec                 C   sX   |t jjkr&g }| | ¡ ¡ | ¡  t  ¡ rt  ¡  t  ¡ s|  |¡ d S | ¡  d S rP  )	r   rP  rS  r  Úget_textr£   r‹  rŒ  r¸  )r   r]  r^  r~  Ú	filenamesr   r   r   r}    s   ÿzBase.open_file_remote_responsec                 C   s,   d| _ t ¡ rt ¡  t ¡ s|  d¡ d S r
   rr  rH  r   r   r   r"    rt  zBase.open_folderc                 C   sj  |   ¡  |  ¡ }|rd S tjtdƒtjjd}| tjtj	j
tjtj	j¡ |rltj ¡ }| tdƒ¡ | ¡  | |¡ tj ¡ }| tdƒ¡ | d¡ | |¡ tj ¡ }| |¡ | d¡ | d| j|¡ d }n| tjj¡ tj tdƒ¡}| |¡ | tj	j¡ | d	¡ | jr›| j d krš| !| j ¡ n| j"d kr¦| !| j"¡ | d
| j#||¡ | $¡ }d S )NÚOpenrI  ÚImagesz	All filesÚ*Fzupdate-previewz Include images in subdirectoriesTr^  )%r  rT  r   rK  r  rL  ÚOPENrN  rO  rP  rQ  ry  rS  Ú
FileFilterrF  Úset_nameÚadd_pixbuf_formatsÚ
add_filterÚadd_patternrƒ  Úset_preview_widgetÚset_use_preview_labelrŒ  Úupdate_previewÚ
set_actionÚSELECT_FOLDERÚCheckButtonÚnew_with_labelÚset_extra_widgetrT  Úset_select_multiplerL   rM   rU  rN   Úopen_file_or_folder_responser@  )r   r  rV  r]  r{  ÚpreviewÚrecursivebuttonr^  r   r   r   rs    sX   ÿü







ÿ


€

ÿzBase.open_file_or_folderc                 C   sr   |t jjkr3| jr| ¡ | _|s| d¡rd| _| ¡ }| 	¡  t  
¡ r,t  ¡  t  
¡ s$|  |¡ d S | 	¡  d S )NÚactiveT)r   rP  rS  rL   Úget_current_folderrM   r  r2   Úget_filenamesr£   r‹  rŒ  r¸  )r   r]  r^  r  r–  r  r   r   r   r”  I  s   
ÿz!Base.open_file_or_folder_responsec                 C   s„   |  ¡ }|sd S |  |¡\}}|  ||d¡}|r| |¡ ntj tjjdddd¡}| 	d¡ | |¡ d}| 
|¡ ~t ¡  d S )NFr   rc  r/   r   T)Úget_preview_filenamer,  r-  r8  r   r  rF  rf  rg  rh  Úset_preview_widget_activer–  r—  )r   Úfile_chooserr•  rý  r2  rŸ   Úhave_previewr   r   r   r  W  s   


zBase.update_previewc                 C   s<   | j r| js| jstj | j ¡  ¡ tj	j
¡}|  |¡ dS r  )rÑ   rÜ   rÞ   r   r  Únew_for_displayr>   r1  râ  r  ÚBLANK_CURSORrŽ  )r   Ú	invisibler   r   r   Úhide_cursorh  s   ÿþýÿ
zBase.hide_cursorc                 C   rê  )Nr~   )rá  r9  rì  r   r   r   Úset_enter_fullscreen_visibleu  rî  z!Base.set_enter_fullscreen_visiblec                 C   rê  )Nzleave-fullscreen)rá  Úleave_fullscreenrì  r   r   r   r±  x  rî  z!Base.set_leave_fullscreen_visiblec                 C   s’   | j sBd| _ |  d¡ |  d¡ | j ¡  | j ¡  | j ¡  | j d¡ | j	 ¡  | j
 ¡  | j ¡  t d| j¡| _|  ¡  d S |  |¡ d S )NTFéÐ  )rÑ   r¢  r±  rB   rA  r†  rA   r>   Úset_show_menubarrx  rC   r5   r   rø  r¡  Útimer_idr´  r£  rH  r   r   r   r9  {  s   







zBase.enter_fullscreenc                 C   s²   | j rWd| _| j ¡  d| _ |  d¡ |  d¡ | jr | j ¡  | j	 
d¡ | jr3| j ¡  | j ¡  | jrG| j ¡  | j ¡  |  d| j¡ | j	 ¡  |  d ¡ |  ¡  d S d S r¥  )rÑ   rÞ   rI  rA  r¢  r±  rÎ   rA   r@  r>   r¥  rÐ   rB   r†  rÏ   rx  rC   r  rµ   ÚunfullscreenrŽ  r´  rH  r   r   r   r£  Œ  s(   









îzBase.leave_fullscreenc                 C   s†   |  |¡ | ¡ s| j ¡  | j ¡  d| _n| j ¡  | j ¡  d| _| jr?| jrA| j	r6|  
d dd¡ d S |  d dd¡ d S d S d S r¥  )rù  rú  rB   rA  r†  rÐ   r@  rÖ   r  r  r  r  rû  r   r   r   r8  ¡  s   




üzBase.toggle_status_barc                 C   sž   |  |¡ | ¡ s| j ¡  | j ¡  d| _n| j ¡  | j ¡  d| _d| _t 	| j
d| j¡ | jrK| jrM| jrB|  d dd¡ d S |  d dd¡ d S d S d S r¥  )rù  rú  rx  rA  rC   rÏ   r@  r  r   r  r  rµ   rÖ   r  r  r  r  rû  r   r   r   r7  ±  s   




üzBase.toggle_thumbpanec                 C   sr   |  |¡ | ¡ s| j ¡  d| _n| j ¡  d| _| jr5| jr7| jr,|  	d dd¡ d S |  
d dd¡ d S d S d S r¥  )rù  rú  rA   rA  rÎ   r@  rÖ   r  r  r  r  rû  r   r   r   r6  Ã  s   


üzBase.toggle_toolbarc                 C   sþ   z=t  | j¡}|tj d }td| j ƒ}t j | j¡d t| j	 
¡ ƒ d t| j	 ¡ ƒ d t|ƒ d t|ƒ d }W n   tt ¡ tjd td	ƒ}Y | j | j d
¡|¡ d
}| jrktdƒ| j| jdœ }n| jrrtdƒ}| j | j d
¡|¡ d S )Nró  éd   z:  r   z   zKB   z%   rŠ   zCannot load image.r    z)Custom actions: %(current)i of  %(total)i©ÚcurrentÚtotalzScanning...)rØ   rD  r¶   ÚST_SIZEr   r»   rÙ   rñ  r  rº   r3  r4  rM  rN  rO  rü   rP  r  rB   ÚpushÚget_context_idrí   r’  r“  rè   r†  )r   rM  ÚfilesizeÚratioÚstatus_textr   r   r   r”  Ñ  sJ   ÿþýüûúùø	÷ÿ

þzBase.update_statusbarc                 C   st  t jtdƒd| _| j | j¡ | j d¡ t j ddd¡}| 	t j
 d¡ddddt jjt jjB t jjt jjB dd¡	 t j d d ¡}t j tttg¡| _t j ¡ | _| j d¡ | j d	¡ | j d
| j¡ | | j¡ | t jj¡ | t jjt jj¡ | dd¡ | j  | j¡ t j! ¡ | _"t j# ¡ | _$t j%tdƒd| _&t j%tdƒ| j"dd| _'t j%tdƒd| _(| j' )| j *¡ j+| j& ,¡  | j( ,¡  ¡ | j -| j&¡ | j -| j'¡ | j -| j(¡ |  .¡  t/| j0ƒdkrð| j 1¡  2d¡ t j3 t j4j5d¡}t j6 7dt j8j9¡}| d| j:| j¡ | ;tdƒ¡ t j6 7dt j8j9¡}| d| j<| j¡ | ;tdƒ¡ t j6 7dt j8j9¡}	|	 d| j=¡ |	 ;tdƒ¡ t j6 7dt j8j9¡}
|
 d| j>| j¡ |
 ;tdƒ¡ t j6 7dt j8j9¡}| d| j?| j¡ | ;tdƒ¡ t j3 t j4j5d¡}t j
 d¡}| @dtdƒ d tdƒ d  td!ƒ d" td#ƒ d$ td%ƒ d& td'ƒ d( ¡ | Add¡ t j
 d¡}| @dtd)ƒ d* td+ƒ d, td-ƒ d( ¡ | Add¡ t j3 t j4jBd¡}| C|ddd.¡ | C|ddd.¡ | C|ddd/¡ | C|ddd/¡ | C|	ddd/¡ | C|
ddd/¡ | C|ddd¡ t j3 t j4jBd¡}| C|d	d	d/¡ | C|ddd/¡ | C|d	d	d/¡ | C|ddd/¡ t j3 t j4jBd¡}t jD ¡ }| Et jFt j8j9¡ | C|ddd/¡ t j
 td0ƒ¡}| Gd	¡ | Add1¡ | C|ddd/¡ | 	|dd2dd2t jjt jjB t jjt jjB d/d¡	 | 	t j
 d¡dd2d2d3t jjt jjB t jjt jjB d.d¡	 | 	|dd2d3d4t jjt jjB t jjt jjB d.d¡	 | 	t j
 d¡dd2d4dt jjt jjB t jjt jjB d.d¡	 | jjH C|ddd¡ | jjH I¡  | | j *¡ j+d5 d6¡ | j Jt jKt jLjM¡}| N¡  | j O¡  |  P¡  t  Q¡ r&t  R¡  t  Q¡ st/| jSƒdkr3|  Td¡ | j U¡  d S )7NzConfigure Custom Actions)rJ  Fé   r   r    r   r   Tzrow-activatediô  r¡   ÚBatchÚAction)rJ  Úcell_rendererÚmarkupÚShortcutzlist-addÚclickedz
Add actionzdocument-edit-symboliczEdit selected action.zlist-removezRemove selected action.zgo-upzMove selected action up.zgo-downzMove selected action down.z<small>Ú
Parametersz,:
<span font_family="Monospace">%F</span> - zFile path, name, and extensionz+
<span font_family="Monospace">%P</span> - z	File pathz+
<span font_family="Monospace">%N</span> - z File name without file extensionz+
<span font_family="Monospace">%E</span> - zFile extension (i.e. ".png")z+
<span font_family="Monospace">%L</span> - zList of files, space-separatedú</small>Ú
Operationsz0:
<span font_family="Monospace">[NEXT]</span> - zGo to next imagez/
<span font_family="Monospace">[PREV]</span> - zGo to previous imageé   rv  zÜHere you can define custom actions with shortcuts. Actions use the built-in parameters and operations listed below and can have multiple statements separated by a semicolon. Batch actions apply to all images in the list.ç      à?r   r‡   é   é2   r!   )Vr   rx  r  Úactions_dialogÚset_transient_forr>   Úset_resizablera  rF  r~  r|  r  r€  r  rw  rc  r  Úactionstorere  ÚactionwidgetÚset_enable_searchÚset_rules_hintrŒ  Úedit_custom_action2r}  Úset_shadow_typeÚ
ShadowTypeÚINry  rz  Ú	AUTOMATICr‡  Ú	set_modelÚCellRendererTextÚcellri  Úcellboolrg  Ú	tvcolumn0Ú	tvcolumn1Ú	tvcolumn2Úset_max_widthr
  r»  r3  ro  Úpopulate_treeviewrD  râ   rq  r[  rQ  rR  rS  ÚButtonÚnew_from_icon_namer  ÚBUTTONÚadd_custom_actionÚset_tooltip_textÚedit_custom_actionÚremove_custom_actionÚcustom_action_move_upÚcustom_action_move_downÚ
set_markupÚset_alignmentr^  rX  rƒ  r  ÚSTOCK_DIALOG_INFOÚset_line_wraprË  r°  rm  ÚSTOCK_CLOSErP  rÑ  r„  rÓ  rV  r‹  rŒ  rÛ   rº  r£   )r   rà  r¬  rý  Útable_actionsÚactionscrollwindowÚvbox_actionsÚ	addbuttonÚ
editbuttonÚremovebuttonÚupbuttonÚ
downbuttonÚvbox_buttonsÚpropertyinfoÚ
actioninfoÚ	hbox_infoÚhbox_topÚhbox_instructionsÚ
info_imageÚinstructionsÚclose_buttonr   r   r   r0  ñ  sŠ  
÷ÿÿ
ÿþÿÿÿþýüûúùø	÷
öõôÿÿþýüûúÿ	
ÿÿ
÷
÷÷
÷
ÿ


ÿ
zBase.show_custom_actionsc                 C   s    t  d ||||¡ d¡¡ ¡ S )Nz{}$${}$${}$${}rë  )rô  rõ  rò  rö  r÷  )r   rÆ  rÇ  rà  rÉ  r   r   r   r  ¤  s
   ÿþzBase.hash_for_custom_actionc                 C   s   |   ddddd|¡ d S )NTr    ÚNoneF)Úopen_custom_action_dialog)r   ÚbuttonrR  r   r   r   rØ  ©  s   zBase.add_custom_actionc                 C   s   |   d |¡ d S rP  )rÚ  )r   rR  rÙ   Úview_columnr   r   r   rÇ  ¬  ó   zBase.edit_custom_action2c                 C   s\   | j  ¡  ¡ \}}|d kr,| j |¡\}|  d| j| | j| | j| | j	| |¡ d S d S r  )
rÄ  rq  Úget_selectedrÃ  Úget_pathrõ  râ   rå   rä   ræ   )r   rö  rR  rW  ÚiterÚrowr   r   r   rÚ  ¯  s   úþzBase.edit_custom_actionc                 C   s
  |r%t jtdƒt jjd| _| j | j¡ | j t j	t j
jt jt j
j¡ n"t jtdƒt jjd| _| j | j¡ | j t j	t j
jt jt j
j¡ | j d¡ t j ddd¡}t j tdƒ¡}| d	d
¡ t j tdƒ¡}	|	 d	d
¡ t j tdƒ¡}
|
 d	d
¡ | |d	dd	dt jjt jjB t jjt jjB dd	¡	 | |	d	dddt jjt jjB t jjt jjB dd	¡	 | |
d	dddt jjt jjB t jjt jjB dd	¡	 t j ¡ }| |¡ t j ¡ }| |¡ | |ddd	dt jjt jjB t jjt jjB dd	¡	 | |ddddt jjt jjB t jjt jjB dd	¡	 t j |¡| _| j d| j¡ | | jddddt jjt jjB t jjt jjB dd	¡	 t j tdƒ¡}| |¡ | |d	dddt jjt jjB t jjt jjB dd	¡	 | jj  !|ddd¡ | jj  "¡  | j d| j#|||| j||¡ | j $¡  d S )NzAdd Custom Action)rJ  r   zEdit Custom ActionTr   r‡   FzAction Name:r   r½  zCommand:z	Shortcut:r   r¼  r   r¸  z$Perform action on all images (Batch)rv  r^  )%r   rx  r  rÌ  rÍ  Údialog_namerÁ  rÀ  rN  rO  rP  ÚREJECTÚSTOCK_OKÚACCEPTÚ	set_modalra  rF  r|  rß  r~  r  r€  r  rz  Úset_textrÕ  r‘  rÈ  rŒ  Úshortcut_clickedr  Ú
set_activerË  rX  r°  Údialog_name_responserÓ  )r   Úadd_callrÆ  rÇ  rÈ  rÉ  rR  rb  Úaction_name_labelÚaction_command_labelÚshortcut_labelrÍ  Úaction_commandr¡  r   r   r   rõ  ¼  s  ÿüÿü÷÷÷



÷÷÷ÿ
÷ø
zBase.open_custom_action_dialogc	                 C   sœ  |t jjkrH| ¡ dks%| ¡ dks%| j ¡ dks%| ¡ }	| ¡ }
d|
 ¡ v r5|
 ¡ dd … dksEd|
 ¡ v rh|
 ¡ dd … dkrht  | jt j	j
t jjt jjtdƒ¡}| tdƒ¡ | ¡  | ¡  d S | ¡ }| ¡ }| ¡  |r›| j |	¡ | j |  |	|
||¡¡ | j |
¡ | j |¡ | j |¡ n/| j ¡  ¡ \}}| j |¡\}|	| j|< |  |	|
||¡| j|< |
| j|< || j|< || j|< |   ¡  |r×t!| jƒd }| ¡  "|¡ t  #¡ rêt  $¡  t  #¡ sâ| %¡ }| &t  '|¡| j(¡}|j)|j* |j*kr|j)|j* |j* |j) }| +d	|¡ d S |j)d
k r#| ,|¡ d S d S t  | jt j	j
t jjt jjtdƒ¡}| tdƒ¡ | ¡  | ¡  d S | ¡  d S )Nr    rô  r¾  rÀ  r¿  zC[PREV] and [NEXT] are only valid alone or at the end of the commandrÆ  r   r!   r   z#Incomplete custom action specified.)-r   rP  r   r€  rÈ  Ú	get_labelrÇ  rË  rÀ  rÌ  rÍ  rÎ  rÏ  rÐ  rÑ  r  rÒ  rÓ  r£   Ú
get_activerâ   r  rã   r  rå   rä   ræ   rÄ  rq  rù  rÃ  rú  rÔ  rD  r[  r‹  rŒ  Úget_visible_rectÚget_background_arearZ  rÑ  r  r¼  Úscroll_to_pointr\  )r   r]  r^  r  rÍ  r
  rÈ  r¡  rR  rÆ  rÇ  rØ  rÉ  rW  rû  ÚrownumÚvisible_rectÚrow_rectÚ	top_coordr   r   r   r  C	  sŽ     ÿû	ÿ

ÿ


ÿÿþÿûzBase.dialog_name_responsec                 C   sÊ  d }|  ¡ }| ¡ \}}|rßt| |¡ƒ}|t| jƒd k rá| j| }| j| }| j| }	| j| }
| j	| }| j|d  | j|< | j|d  | j|< | j|d  | j|< | j|d  | j|< | j	|d  | j	|< || j|d < || j|d < |	| j|d < |
| j|d < || j	|d < |  
¡  | |d f¡ t ¡ r¤t ¡  t ¡ sœ|d }| ¡ }| t |¡| j¡}|j|j |jkrÓ|j|j |j |j }| d|¡ d S |jdk rã| |¡ d S d S d S d S )Nr   r!   r   )rq  rù  r   Úget_string_from_iterrD  râ   rã   rä   rå   ræ   rÔ  r[  r   r‹  rŒ  r  r  rZ  rÑ  r  r¼  r  r\  ©r   rö  rR  rû  r  rW  r  Ú	temp_nameÚ	temp_hashÚtemp_shortcutÚtemp_commandÚ
temp_batchr  r  r  r   r   r   rÝ  	  sR   




ÿÿþ
Ü!zBase.custom_action_move_downc                 C   sÀ  d }|  ¡ }| ¡ \}}|rÚt| |¡ƒ}|dkrÜ| j| }| j| }| j| }	| j| }
| j| }| j|d  | j|< | j|d  | j|< | j|d  | j|< | j|d  | j|< | j|d  | j|< || j|d < || j|d < |	| j|d < |
| j|d < || j|d < |  	¡  | 
|d f¡ t ¡ rŸt ¡  t ¡ s—|d }| ¡ }| t |¡| j¡}|j|j |jkrÎ|j|j |j |j }| d|¡ d S |jdk rÞ| |¡ d S d S d S d S )Nr   r   r!   )rq  rù  r   r  râ   rã   rä   rå   ræ   rÔ  r[  r   r‹  rŒ  r  r  rZ  rÑ  r  r¼  r  r\  r  r   r   r   rÜ  Ç	  sR   




ÿÿþ
Ü!zBase.custom_action_move_upc                 C   s¬   t  tdƒ| jt jj¡| _| j t jt j	j
¡ t j tdƒ¡| _t j t jjd¡}| | jddd¡ | jj |ddd¡ | jj ¡  | j d| j¡ | j ¡  | j ¡  d S )NzAction Shortcutz*Press the desired shortcut for the action.r   Fr¼  rv  r¤   )r   rx  r  rý  rÌ  rÍ  Údialog_shortcutrm  rO  rP  rþ  r|  rF  r	  rQ  rR  r^  rX  rË  r°  rŒ  Úshortcut_keypressrÓ  r£   )r   r…  r  r   r   r   r  ñ	  s   ÿÿ
zBase.shortcut_clickedc                 C   sz  t  |j| ¡ ¡}d|v r| dd¡}|t|ƒd t|ƒ… dkr¹|t|ƒd t|ƒ… dkr»tt| jƒƒD ]9}|| j| d krot  | j	t j
jt jjt jjtdƒ|| j| d d	œ ¡}| td
ƒ¡ | ¡  | ¡   d S q6tt| jƒƒD ]5}|| j| kr¬t  | j	t j
jt jjt jjtdƒ|| j| d	œ ¡}| td
ƒ¡ | ¡  | ¡   d S qw| j |¡ | ¡  d S d S d S )Nz<Mod2>r    r   Ú_LÚ_Rr   z:The shortcut '%(shortcut)s' is already used for '%(key)s'.r   )rÈ  ÚkeyzInvalid Shortcut)r   rˆ  r‰  rŠ  rÈ  rD  r  rC  rË  r  rÌ  rÍ  rÎ  rÏ  rÐ  rÑ  r  rÒ  rÓ  r£   rä   râ   rÈ  Ú	set_label)r   r…  r  rÈ  rÅ  rØ  r   r   r   r  
  sR   ÿûôÿûôßzBase.shortcut_keypressc                 C   s~   | j  ¡  ¡ \}}|d kr=| j |¡\}| j |¡ | j |¡ | j |¡ | j	 |¡ | j
 |¡ |  ¡  | j  ¡  d S d S rP  )rÄ  rq  rù  rÃ  rú  râ   Úpoprã   rä   rå   ræ   rÔ  r„  )r   rö  rW  rû  rü  r   r   r   rÛ  )
  s   øzBase.remove_custom_actionc              	   C   s  | j  ¡  tt| jƒƒD ]/}| j| rtj}nd }| j  |d| j|  	dd¡ d | j
|  	dd¡ d | j| g¡ q| j ¡  | j ¡  | j ¡  | j | jd¡ | j | jd¡ | j | jd¡ | j | jdd¡ | jj| jd	d
 | jj| jdd | j d¡ d S )Nz<big><b>ú&z&amp;z</b></big>
<small>rº  Tzstock-idr   r   )r¶  r   )Útext)rÃ  r'  r  rD  râ   ræ   r   ÚSTOCK_APPLYr  rÈ  rå   rä   rÐ  rÑ  rÒ  rX  rÏ  rÎ  Úadd_attributerp  Ú
set_expand)r   rÅ  Úpbr   r   r   rÔ  5
  s:   

ÿþýüùÿ


zBase.populate_treeviewc                 C   s`  |   ¡ }|rd S t tdƒ| jtjj¡}| tjtj	j
¡ | tdƒtj	j¡}tj ¡ }| tjtjj¡ | |¡ tj d¡}| dtdƒ d ¡ | dd¡ tj d tdƒ¡}	tj |	td	ƒ¡}
tsj|
 d
¡ |	 d¡ tj d¡}| dtdƒ d ¡ | dd¡ tj tjjd¡}tj | jddddd¡}tj  |dd¡}| !d¡ | "tj#j$¡ | %d
¡ tj tdƒ¡}| &|d
dd¡ | &|d
dd¡ tj' ddd
¡}| (tj d¡ddddtj)j*tj)j+B tj)j*tj)j+B dd¡	 | (|ddddtj)j*tj)j+B tj)j*tj)j+B dd¡	 | (tj d¡ddddtj)j*tj)j+B tj)j*tj)j+B dd¡	 | (|	ddddtj)j*tj)j+B tj)j*tj)j+B dd¡	 | (|
ddddtj)j*tj)j+B tj)j*tj)j+B dd¡	 | (tj d¡ddddtj)j*tj)j+B tj)j*tj)j+B dd¡	 | (|ddddtj)j*tj)j+B tj)j*tj)j+B dd¡	 | (tj d¡ddddtj)j*tj)j+B tj)j*tj)j+B dd¡	 | (|ddddtj)j*tj)j+B tj)j*tj)j+B dd¡	 | (tj d¡ddddtj)j*tj)j+B tj)j*tj)j+B dd¡	 |j, &|ddd¡ | -tj	j¡ |j, .¡  | /¡ }|tj	jkr*| 0¡  t 1¡ rt 2¡  t 1¡ s| 3¡ | _t4 5t6| jd ƒ| j7|	 8¡ ¡ d S | 0¡  d S )NÚ
ScreenshotÚ_Snapr    ú<b>ÚLocationú</b>r   zEntire screenzWindow under pointerFTÚDelayé   r   rw  z secondsrc  r   r   r¼  r‡   rv  é   r?  r°  é   ró  )9rT  r   rx  r  r>   rÌ  rÍ  rm  rO  rP  rþ  r   rƒ  rF  r  rÿ  r  r×  Ú	set_imager|  rÞ  rß  ÚRadioButtonÚnew_with_label_from_widgetÚ
HAS_XMOUSEÚset_sensitiver  rQ  rR  r^  Ú
Adjustmentr\   Ú
SpinButtonÚset_numericÚset_update_policyÚSpinButtonUpdatePolicyÚIF_VALIDÚset_wraprX  ra  r~  r  r€  r  rË  rT  r°  rÓ  r£   r‹  rŒ  Úget_value_as_intr   rø  r   Ú_screenshot_grabr  )r   rà  r¬  rý  rV  r]  Ú
snapbuttonÚ	snapimageÚlocÚarea1Úarea2ÚdeÚdelayboxÚadjÚdelayÚ
delaylabelrb  r^  r   r   r   rn   R
  s<  

ÿ




÷÷
÷÷÷
÷÷
÷÷
÷


ÿ
ýzBase.screenshotc           
      C   sÐ   t  ¡ }|rd}d}t j ¡ }t j ¡ }nt ¡ \}}}}t  |||||¡}tj	ddd }|d }	| 
|	dg g ¡ |	g| _d| _t | jddddd¡ |  ¡  |  d¡ |  ¡  |  d| j¡ ~| j ¡  d S )	Nr   úmirage-©r~  rÁ  zscreenshot.pngrA  FT)r   Úget_default_root_windowÚScreenr»  r¼  ÚxmouseÚgeometryÚpixbuf_get_from_windowÚtempfileÚmkdtemprF  rÛ   rµ   r   r  r  r”  Úset_go_navigation_sensitivitiesr´  r  r>   Úpresent)
r   Úentire_screenÚroot_winr   r  r»  r¼  r3  ÚtmpdirÚtmpfiler   r   r   r>  ó
  s(   

zBase._screenshot_grabc           #      C   sT  t  tdƒ| j¡}| d¡ t j ddd¡}t j ¡ }tj	 
| j¡}d}| ¡ r5|  | jd| j¡\}	}
}n|  | ¡ d| j¡\}	}
}d}| |  |	¡¡ t j t jjd¡}t j tdƒ¡}| dd¡ t j td	ƒ¡}| dd¡ t j td
ƒ¡}| dd¡ t j tdƒ¡}| dd¡ t j tdƒ¡}| dd¡ t j tdƒ¡}| dd¡ t j tdƒ¡}| dd¡ t j tdƒ¡}| dd¡ t j tdƒ¡}| dd¡ | |ddd¡ | |ddd¡ | |ddd¡ | |ddd¡ | |ddd¡ | |ddd¡ | |ddd¡ | |ddd¡ | |ddd¡ t j t jjd¡}t | j¡}t j tj | j¡¡}t j t dt |tj  ¡¡¡}t j t!| j "¡ ƒd t!| j #¡ ƒ ¡}t j tj$ %| j¡d  &¡ d ¡}t j t!|tj' d ƒd ¡}|sŠ|	 (¡ rŠt j tdƒ¡}nt j tdƒ¡}| ¡ r t j tdƒ¡}nt j tdƒ¡}t j t!|	 )¡ ƒ¡}t j t!|	 *¡ ƒ¡} | dd¡ | dd¡ | dd¡ | dd¡ | dd¡ | dd¡ | dd¡ | dd¡ |  dd¡ | |ddd¡ | |ddd¡ | |ddd¡ | |ddd¡ | |ddd¡ | |ddd¡ | |ddd¡ | |ddd¡ | | ddd¡ t j t jj+d¡}!|! |ddd¡ |! |ddd¡ | ,|ddddt j-j.t j-j/B t j-j.t j-j/B dd¡	 | ,|!ddddt j-j.t j-j/B t j-j.t j-j/B dd¡	 |j0 |ddd¡ |j0 1¡  | 2t j3t j4j5¡}"|" 6¡  | 7¡  | 8¡  d S )NÚ
PropertiesFr   é´   Tr   z
File name:r   zFile modified:zDimensions:z
File size:z
File type:zTransparency:z
Animation:zBits per sample:z	Channels:r   z%cr   ró  ÚKBÚYesÚNor¼  )9r   rx  r  r>   rÂ  ra  rF  rƒ  r   r™  r  r¶   rš  r.  rº   rÕ   rœ  r8  r/  rQ  rR  rS  r|  rß  rX  rØ   rD  rÙ   rñ  r  ÚstrftimeÚ	localtimerE  r  r3  r4  r  rd  Úget_mime_typesr¬  r5  Úget_bits_per_sampleÚget_n_channelsr^  r~  r  r€  r  rË  r°  rm  râ  rP  rÑ  r„  rÓ  r£   )#r   rà  r¬  rý  Ú
show_propsrb  r*  r£  Úimage_is_animrŸ   r4  r5  Ú	vbox_leftrý  ÚfiledateÚ	imagesizer¯  râ  ÚtransparencyÚ	animationÚbitsÚchannelsÚ
vbox_rightÚfilestatÚ	filename2Ú	filedate2Ú
imagesize2Ú	filetype2Ú	filesize2Útransparency2Ú
animation2Úbits2Ú	channels2r  ró  r   r   r   r&    sê   


ÿ
ÿÿÿþÿÿ
÷÷
zBase.show_propertiesc           9      C   sê  | j }t tdƒ| j¡| _| j d¡ tj ddd¡}tj	 d¡}| 
dtdƒ d ¡ | d	d
¡ tj tjjd	¡}tj	 tdƒ¡}tj | j¡| _| j d| j¡ | j dd¡ | j tdƒ¡ | |ddd	¡ | | jddd	¡ | tj	 d¡ddd	¡ tj tjjd	¡}	tj	 tdƒ¡}
tj ¡ }| d| j¡ |	 |
ddd	¡ |	 |ddd	¡ |	 tj	 d¡ddd	¡ | jrÀ| d¡ tj tdƒ¡}| | j¡ tj tjjd	¡}tj	 tdƒ¡}| |ddd	¡ tj ¡ }d	}| jD ]}|  |d | ¡ | j t!|ƒkr	| |¡ |d
7 }qñ| |ddd¡ | "tj	 d¡d
dd
dtj#j$tj#j%B tj#j$tj#j%B d	d	¡	 | "|d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 | "tj	 d¡d
dddtj#j$tj#j%B tj#j$tj#j%B d	d	¡	 | "|	d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 | "|d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 | "tj	 d¡d
dddtj#j$tj#j%B tj#j$tj#j%B d	d	¡	 | "|d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 | "tj	 d¡d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 | "|d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 | "tj	 d¡d
ddd tj#j$tj#j%B tj#j$tj#j%B dd	¡	 | "tj	 d¡d
dd d!tj#j$tj#j%B tj#j$tj#j%B dd	¡	 | "tj	 d¡d
dd!d"tj#j$tj#j%B tj#j$tj#j%B dd	¡	 | "tj	 d¡d
dd"dtj#j$tj#j%B tj#j$tj#j%B dd	¡	 | "tj	 d¡d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 tj ddd¡}tj	 d¡}| 
dtd#ƒ d ¡ | d	d
¡ tj tjjd	¡}| tj	 td$ƒ¡ddd	¡ tj ¡ }|  td%ƒ¡ |  td&ƒ¡ |  td'ƒ¡ |  td(ƒ¡ | | j&¡ | |ddd¡ tj td)ƒ¡}| | j'¡ | td*ƒ¡ tj td+ƒ¡}| | j(¡ | td,ƒ¡ tj) *d td-ƒ¡}| td.ƒ¡ tj) *|td/ƒ¡}| d| j+¡ | td0ƒ¡ tj tjjd	¡}tj, ¡ | _-| tj	 d¡ddd	¡ | | j-ddd	¡ | tj	 d¡ddd	¡ t.| j/ƒd1kr”| j- 0d2| j/d3d …  ¡ n| j- 0| j/¡ | j- d4| j1¡ | j- d5d¡ | j2rº| d¡ | j- 3d¡ n| d¡ | j- 3d¡ | "tj	 d¡d
dd
dtj#j$tj#j%B tj#j$tj#j%B d	d	¡	 | "|d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 | "tj	 d¡d
dddtj#j$tj#j%B tj#j$tj#j%B d	d	¡	 | "|d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 | "tj	 d¡d
dddtj#j$tj#j%B tj#j$tj#j%B d	d	¡	 | "|d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 | "|d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 | "tj	 d¡d
dddtj#j$tj#j%B tj#j$tj#j%B d	d	¡	 | "|d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 | "|d
ddd tj#j$tj#j%B tj#j$tj#j%B dd	¡	 | "|d
dd d!tj#j$tj#j%B tj#j$tj#j%B d6d	¡	 | "tj	 d¡d
dd!d"tj#j$tj#j%B tj#j$tj#j%B d6d	¡	 tj ddd¡}tj	 d¡}| 
dtd7ƒ d ¡ | d	d
¡ tj td8ƒ¡}| | j4¡ | td9ƒ¡ tj tjjd	¡}| tj	 td:ƒ¡ddd	¡ tj ¡ }|  td;ƒ¡ |  td<ƒ¡ |  td=ƒ¡ | | j5¡ | |ddd¡ | "tj	 d¡d
dd
dtj#j$tj#j%B tj#j$tj#j%B d	d	¡	 | "|d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 | "tj	 d¡d
dddtj#j$tj#j%B tj#j$tj#j%B d	d	¡	 | "|d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 | "tj	 d¡d
dddtj#j$tj#j%B tj#j$tj#j%B d	d	¡	 | "|d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 | "tj	 d¡d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 | "tj	 d¡d
dddtj#j$tj#j%B tj#j$tj#j%B d	d	¡	 | "tj	 d¡d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 | "tj	 d¡d
ddd tj#j$tj#j%B tj#j$tj#j%B dd	¡	 | "tj	 d¡d
dd d!tj#j$tj#j%B tj#j$tj#j%B d	d	¡	 | "tj	 d¡d
dd!d"tj#j$tj#j%B tj#j$tj#j%B d	d	¡	 | "tj	 d¡d
dd"dtj#j$tj#j%B tj#j$tj#j%B d	d	¡	 tj ddd¡} tj	 d¡}!|! 
dtd>ƒ d ¡ |! d	d
¡ tj tjjd	¡}"|" tj	 td?ƒ¡ddd	¡ tj6 | j7d	d@d
dd	¡}#tj8 |#dAd	¡}$|$ 9d¡ |" |$ddd¡ tj tdBƒ¡}%|% | j:¡ |% tdCƒ¡ tj tdDƒ¡}&|& | j;¡ |& tdEƒ¡ tj tdFƒ¡}'|' tdGƒ¡ |' | j<¡ |  "tj	 d¡d
dd
dtj#j$tj#j%B tj#j$tj#j%B d	d	¡	 |  "|!d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 |  "tj	 d¡d
dddtj#j$tj#j%B tj#j$tj#j%B d	d	¡	 |  "|"d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 |  "tj	 d¡d
dddtj#j$tj#j%B tj#j$tj#j%B d	d	¡	 |  "|&d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 |  "|'d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 |  "|%d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 |  "tj	 d¡d
dddtj#j$tj#j%B tj#j$tj#j%B d	d	¡	 |  "tj	 d¡d
ddd tj#j$tj#j%B tj#j$tj#j%B d	d	¡	 |  "tj	 d¡d
dd d!tj#j$tj#j%B tj#j$tj#j%B d	d	¡	 |  "tj	 d¡d
dd!d"tj#j$tj#j%B tj#j$tj#j%B d	d	¡	 |  "tj	 d¡d
dd"dtj#j$tj#j%B tj#j$tj#j%B d	d	¡	 tj ddd¡}(tj	 d¡})|) 
dtdHƒ d ¡ |) d	d
¡ tj tdIƒ¡}*|* | j=¡ tj tjjd	¡}+|+ tj	 tdJƒ¡ddd	¡ tj ¡ },|,  tdKƒ¡ |,  tdLƒ¡ |,  tdMƒ¡ |,  tdNƒ¡ |, | j>¡ |+ |,ddd	¡ |+ tj	 d¡ddd	¡ tj tjjd	¡}-tj	 tdOƒ¡}.tj ¡ }/|/  tdPƒ¡ |/  tdQƒ¡ |/  tdRƒ¡ |/ | j?¡ |- |.ddd	¡ |- |/ddd¡ tj tjjd	¡}0tj	 tdSƒ¡}1tj6 | j@d	dTd
dTd	¡}2tj8 |2dAd	¡}3|3 9d¡ |0 |1ddd	¡ |0 |3ddd¡ |( "tj	 d¡d
dd
dtj#j$tj#j%B tj#j$tj#j%B dd	¡	 |( "|)d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 |( "tj	 d¡d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 |( "|+d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 |( "tj	 d¡d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 |( "|-d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 |( "tj	 d¡d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 |( "|0d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 |( "tj	 d¡d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 |( "|*d
ddd tj#j$tj#j%B tj#j$tj#j%B dd	¡	 |( "tj	 d¡d
dd d!tj#j$tj#j%B tj#j$tj#j%B dd	¡	 |( "tj	 d¡d
dd!d"tj#j$tj#j%B tj#j$tj#j%B dd	¡	 |( "tj	 d¡d
dd"dtj#j$tj#j%B tj#j$tj#j%B dd	¡	 |( "tj	 d¡d
dddtj#j$tj#j%B tj#j$tj#j%B dd	¡	 tjA ¡ }4|4 B|tj	 tdUƒ¡¡ |4 B|tj	 td7ƒ¡¡ |4 B|tj	 tdƒ¡¡ |4 B| tj	 tdVƒ¡¡ |4 B|(tj	 tdWƒ¡¡ |4 Cd	¡ tj tjjd	¡}5| jjD |5ddd¡ |5 |4ddd¡ |4 dX| jE¡ | jjD F¡  | j GtjHtjIjJ¡| _K| jK L¡  | j M¡ }6|6tjIjJksí|6tjIjNkrñ|, O¡ | _>t!tP| j>d	ƒƒd	krtQjRjS| _Tn2t!tP| j>d	ƒƒd
krtQjRjU| _Tn!t!tP| j>d	ƒƒdkr%tQjRjV| _Tnt!tP| j>d	ƒƒdkr5tQjRjW| _T| O¡ | _'| O¡ | _(| O¡ rHd| _2nd| _2| j&}7| O¡ | _&| j4}8| O¡ | _4| O¡ | _5|$ X¡ | _7| jY Z| j7¡ | j7| _[|% O¡ | _:| j:| _\|& O¡ | _;|' O¡ | _<|/ O¡ | _?| O¡ | _|* O¡ | _=|3 X¡ | _@t!| j| O¡  ƒ| _ | j |kr¶t] ^| j_¡ t] ^| j`d| ja¡ | j b¡  |  cd¡ | j4rÇ|8rÍ|7| j&kråd| _dd| _et] ^| jfd¡| _gt] ^| jhd¡| _id S | j4sód| _dd| _ed S d S d S )YNzMirage PreferencesFé   r   r    r*  Ú	Interfacer,  r   r   zBackground color:z	color-seté–   r!   z.Sets the background color for the application.TzSimple background color:ÚtoggledzOpen Mirage in fullscreen modezThumbnail size:z x rv  r   r¼  r‡   r.  r/  r?  rc  r°  rw  r0  r¾  r²  zOpen BehaviorzOpen new image in:z
Smart ModezZoom To Fit Modez1:1 ModezLast Active Modez$Load all images in current directoryzjIf enabled, opening an image in Mirage will automatically load all images found in that image's directory.zAllow loading hidden fileszSIf checked, Mirage will open hidden files. Otherwise, hidden files will be ignored.zUse last chosen directoryz=The default 'Open' directory will be the last directory used.zUse this fixed directory:z>The default 'Open' directory will be this specified directory.rê  ú...éêÿÿÿr¸  éú   é-   Ú
Navigationz$Preload images for faster navigationzåIf enabled, the next and previous images in the list will be preloaded during idle time. Note that the speed increase comes at the expense of memory usage, so it is recommended to disable this option on machines with limited ram.zWrap around imagelist:r\  r[  zPrompt UserúSlideshow Modez Delay between images in seconds:iPÃ  g      ð?zRandomize order of imageszbIf enabled, a random image will be chosen during slideshow mode (without loading any image twice).z%Disable screensaver in slideshow modezLIf enabled, xscreensaver will be temporarily disabled during slideshow mode.zAlways start in fullscreen modezMIf enabled, starting a slideshow will put the application in fullscreen mode.zImage EditingzConfirm image deletezScaling quality:zNearest (Fastest)ÚTilesÚBilinearzHyper (Best)zModified images:zIgnore Changesz	Auto-SavezPrompt For ActionzQuality to save in:r¨  ÚBehaviorÚ	Slideshowrƒ  zswitch-page)jrò   r   rx  r  r>   Úprefs_dialogrÂ  ra  rF  r|  rÞ  rß  rQ  rR  r^  ÚColorButtonÚnew_with_colorr  ÚcolorbuttonrŒ  Úbgcolor_selectedr‡  rÙ  rX  r  Úsimple_bgcolor_selectedr´   r  r‘  re   ÚComboBoxTextrñ   Úappend_textr   r~  r  r€  r  rQ   r×   rð   r2  r3  Úprefs_use_fixed_dir_clickedrÕ  Ú
defaultdirrD  rN   r   Údefaultdir_clickedrL   r5  rZ   rS   r6  rT   r7  r8  rU   rX   rY   rf   rß   rd   rW   ÚNotebookÚappend_pageÚset_current_pagerË  Úprefs_tab_switchedr°  rm  râ  rP  rÑ  ró  r„  rÓ  ÚDELETE_EVENTr  r  r   rÓ   r  rÕ   r  rÔ   r  rõ  rI  Úset_slideshow_delayr  r  r   r  rn  r  rµ   r£   rR  r¾   rÆ   r   rŸ  rž  r!  )9r   rà  r¬  rý  Úprev_thumbnail_sizeÚtable_settingsÚbglabelÚ
color_hboxÚ	colortextÚsimplecolor_hboxÚsimplecolortextÚsimplecolorbuttonr5   ÚthumbboxÚ
thumblabelr[   ÚoptionÚsizeÚtable_behaviorÚ	openlabelÚhbox_openmodeÚcomboboxÚopenallimagesÚhiddenimagesÚ	openpref1Ú	openpref2Úhbox_defaultdirÚtable_navigationÚnavlabelÚ
preloadnavÚhbox_listwrapÚ	combobox2Útable_slideshowÚslideshowlabelÚ
hbox_delayÚspin_adjÚ	delayspinÚ	randomizerX   Úss_in_fsÚtable_imageÚ
imagelabelÚdeletebuttonÚ	zoom_hboxÚ	zoomcomboÚ	hbox_saveÚ	savelabelÚ	savecomboÚhbox_qualityÚqualitylabelÚ	qspin_adjÚqualityspinÚnotebookr  r^  Úopen_mode_prevÚpreloading_images_prevr   r   r   r1  „  sª  ÿ






÷÷
÷÷÷
÷÷
÷÷
÷
÷
÷
÷
÷ÿ
ÿÿÿÿÿÿÿÿÿ


÷÷
÷÷
÷÷÷
÷÷÷÷
÷ÿÿÿÿ

÷÷
÷÷
÷÷
÷
÷
÷
÷
÷
÷
÷ÿ
ÿÿÿÿÿÿÿ
÷÷
÷÷
÷÷÷÷
÷
÷
÷
÷
÷



÷÷
÷÷
÷÷
÷÷
÷÷
÷
÷
÷
÷


ÿ




















Ï/zBase.show_prefsc                 C   s(   |  ¡ r| j d¡ d S | j d¡ d S r
   )r  r  r5  )r   rö  r   r   r   rŒ  l  s   z Base.prefs_use_fixed_dir_clickedc                 C   sb  t | jƒdkr­| j}| jr|  d d d ¡ t tdƒ| jtjj	¡}tj
 ¡ | _tj | j¡}| j |¡ | j d¡ | tjtjj¡}| tdƒtjj¡}tj ¡ }	|	 tjtjj¡ | |	¡ tj  | j¡}
|
 !¡ rx|  "| j#d| j$¡\}}}n|  "|
 %¡ d| j$¡\}}}tj ¡ }| &|¡ tj' tdƒ¡}| (dd¡ tj) tj*j+d¡}| ,|ddd	¡ tj) tj*j-d¡}| ,tj' d
¡ddd¡ | ,|ddd¡ | ,tj' d
¡ddd¡ | ,| jddd¡ | ,tj' d
¡ddd¡ | ,|ddd	¡ |j. ,|ddd¡ | /tjj¡ | 0dd¡ |j. 1¡  | 2d| j3¡ | 4¡ }|tjjkrzJtj 5| j¡d | j 6¡  }t7 8| j|¡ zt7 8t9| jƒd |  :|¡d ¡ W n   t;t< =¡ t>j?d Y |  @| j¡ || _|  A| j¡ |  B¡  W n1   t;t< =¡ t>j?d t C| jtjj	tjDjEtjFjGtdƒ| j ¡}| Htdƒ¡ | 4¡  | I¡  Y | I¡  |r¯|  d d d ¡ d S d S d S )Nr   zRename ImageTÚ_Renameé<   zEnter the new name:r   Frw  r    ru  r!   r@  rÁ  rŠ   zUnable to rename %szUnable to rename)JrD  rÛ   rÝ   r?  r   rx  r  r>   rÌ  rÍ  rz  rF  Ú
rename_txtrØ   rÙ   rñ  r¶   r  r{  rm  rO  rP  rQ  r   rƒ  r  rÿ  r  r×  r1  r   r™  r  rš  r.  rº   rÕ   rœ  r8  r|  rß  rQ  rR  r^  rX  rS  rË  rT  r‡  r°  rŒ  Úselect_rename_textrÓ  rÉ  r€  ÚshutilrB  Úself_get_namer,  rM  rN  rO  rü   rP  r«  r\  rJ  rË  rÎ  rÏ  rÐ  rS  rÒ  r£   )r   rà  r¬  rý  Útemp_slideshow_modeÚrename_dialogrý  ÚcancelbuttonÚrenamebuttonÚrenameimager£  rŸ   r4  r5  r*  rò  r  Ú
vbox_stuffr^  Únew_filenamerØ  r   r   r   r.  r  s¨   ÿ
ÿÿ


ÿ
ÿ


ÿþÿþû
®QzBase.rename_imagec                 C   sF   t j | j¡}t j t j | j¡¡d }| j dt|ƒt|ƒ ¡ d S )Nr   r   )rØ   rÙ   rñ  r¶   ró  rÇ  Úselect_regionrD  )r   r…  rý  r`  r   r   r   rÈ  Ç  s   zBase.select_rename_textc                 C   s®  t | jƒdkrÓ| j}| jr|  d d d ¡ t tdƒ| jtjj	¡}| j
r¦tj tdƒtj | j¡d  ¡}| d¡ | dd¡ tj ¡ }| tjtjj¡ tj tjjd¡}| |ddd¡ | |ddd¡ |j tj d	¡ddd¡ |j |ddd¡ | tjtjj ¡}	| tj!tjj"¡}
|
 #d
d¡ | $tjj"¡ |j %¡  | &¡ }ntjj"}|tjj"krÃzàt '| j¡ d| _(zt '|  )| j¡d ¡ W n   t*t+ ,¡ t-j.d Y |  /| j¡ | j0 1| j2f¡}z| j3 4| j2¡ |  5¡  W n   t*t+ ,¡ t-j.d Y | j0 '|¡ | j}g | _|D ]}|| jkr| j 6|¡ qt | jƒdkret | jƒdkr1d| _2n| j2t | jƒkrA|  j2d8  _2|  7t8j9 t8j:j;¡¡ d| _<d| _=t> ?| j@dddddd¡| _A|  Bd¡ n%| jC D¡  |  E¡  | jF G| jF Hd	¡d	¡ d| _I|  J¡  |  Kd¡ |  Bd¡ |  L| j2¡ W n1   t*t+ ,¡ t-j.d t M| jtjj	tjNjOtjPjQtdƒ| j ¡}| Rtdƒ¡ | &¡  | S¡  Y | S¡  |rÕ|  d d d ¡ d S d S d S )Nr   zDelete Imagez/Are you sure you wish to permanently delete %s?r   Tçš™™™™™¹?Frw  r    z	has-focusrŠ   r!   zUnable to delete %szUnable to delete)TrD  rÛ   rÝ   r?  r   rx  r  r>   rÌ  rÍ  rf   r|  rF  rØ   rÙ   rw  r¶   rá  rß  rƒ  r  ÚSTOCK_DIALOG_WARNINGr  ÚDIALOGrQ  rR  r^  rX  rË  rm  rO  rP  rQ  ÚSTOCK_DELETErg  rv  rT  r°  rÓ  r­  rë   r,  rM  rN  rO  rü   rP  r«  rd  Úget_iterrµ   ró   r!  r  r  rŽ  r   r  r  r‘  rÆ   r¾   r   r  Úload_new_imageÚload_when_idlerR  r„  r'  rJ  rB   r­  r®  rÖ   r´  rº  r!  rË  rÎ  rÏ  rÐ  rS  rÒ  r£   )r   rà  r¬  rý  rË  Údelete_dialogÚ	permlabelÚwarningiconr  rÍ  r¸  r^  rû  ÚtemplistÚitemrØ  r   r   r   r/  Ì  s¼   ÿÿÿ


ÿ
ÿ
ÿ

€ÿ


û
¤[zBase.delete_imagec                 C   sÈ   t jtdƒt jjd}| t jt jjt j	t jj
¡ | t jj¡ | | j¡ | t jj
¡ | ¡ }|t jj
kr^| ¡ d | _t| jƒdkrR| d| jdd …  ¡ n| | j¡ | ¡  d S | ¡  d S )NzChoose directoryrI  r   rê  rz  r{  )r   rK  r  rL  r…  rN  rO  rP  rQ  ry  rS  rŽ  r  Úset_filenamerN   rT  rÓ  r™  rD  r   r£   )r   rö  Úgetdirr^  r   r   r   rŽ  +  s(   ÿüzBase.defaultdir_clickedc                 C   s   t  | j¡}d S rP  )r   r  Úgrab_close_button)r   rÂ  ÚpageÚpage_numÚdo_when_idler   r   r   r’  C  rø  zBase.prefs_tab_switchedc                 C   s   | j  ¡  d S rP  )ró  r„  r  r   r   r   rá  F  ra  zBase.grab_close_buttonc                 C   s.   |  d¡| _| js| j tjj| j¡ d S d S )NÚcolor)r  r  r´   rI  r‰  r   rŠ  r‹  ©r   r…  r   r   r   rˆ  I  s   ÿzBase.bgcolor_selectedc                 C   s(   |  ¡ r	d| _d S d| _|  | j¡ d S r
   )r  r´   rˆ  r‡  ræ  r   r   r   r‰  P  s   
zBase.simple_bgcolor_selectedc                 C   s  t  ¡ | _z| j | j¡ | j d¡ W n   tt ¡ t	j
d Y | j d¡ | j t¡ | j tdƒ¡ | j t¡ | j g d¢¡ | j dg¡ | j d g d¢¡¡ | j d	¡ |  d
¡}ztj |¡}| j |¡ W n   tt ¡ t	j
d Y | j d| j¡ | j ¡  d S )NTrŠ   rB  zA fast GTK+ Image Viewer.)z%Scott Horowitz <stonecrest@gmail.com>z.Fredric Johansson <fredric.miscmail@gmail.com>z&Thomas Ross <thomasross@thomasross.io>z"William Rea <sillywilly@gmail.com>Ú
)z%cs - Petr Pisar <petr.pisar@atlas.cz>z2de - Bjoern Martensen <bjoern.martensen@gmail.com>z)es - Isidro Arribas <cdhotfire@gmail.com>z*fr - Mike Massonnet <mmassonnet@gmail.com>zfr - Otyugh <otyugh@riseup.net>z0hu - Sandor Lisovszki <lisovszki@dunakanyar.net>z/nl - Pascal De Vuyst <pascal.devuyst@gmail.com>z1pl - Tomasz Dominikowski <dominikowski@gmail.com>z)pt_BR - Danilo Martins <mawkee@gmail.com>zru - mavka <mavka@justos.org>z(it - Daniele Maggio <dado84@freemail.it>z$zh_CN - Jayden Suen <no.sun@163.com>z$https://gitlab.com/thomasross/mirager‰   r^  )r   ÚAboutDialogÚabout_dialogrÁ  r>   r  rM  rN  rO  rü   rP  r‡  Úset_versionrG  Úset_commentsr  Úset_licenseÚ__license__Úset_authorsÚset_artistsÚset_translator_creditsr}  Úset_websiter  r   r  r  Úset_logorŒ  Úclose_aboutr°  )r   rà  r¬  rý  rÊ  Úicon_pixbufr   r   r   r@  W  s8   
ÿÿÿ
zBase.show_aboutc                 C   s   |   |¡ d S rP  )Úbrowser_load)r   r]  ÚblahÚlinkr   r   r   Úshow_website‡  ra  zBase.show_websitec                 C   sü   zt  d|g¡j}W d S    zt  d|g¡j}W Y d S    zt  dd|g¡j}W nO   z
t  d|g¡j}W n<   z
t  d|g¡j}W n-   z
t  d|g¡j}W n   t | jtjjtjj	tj
jtdƒ¡}| ¡  | ¡  Y Y Y Y Y Y d S Y Y d S )	Nz
gnome-openzexo-openÚ	kfmclientÚopenURLÚfirefoxÚmozillaÚoperaz$Unable to launch a suitable browser.)Ú
subprocessÚPopenÚpidr   rË  r>   rÌ  rÍ  rÎ  rÏ  rÐ  rÑ  r  rÓ  r£   )r   Údocslinkr   rØ  r   r   r   rõ  Š  s<   û
€ ízBase.browser_loadc                 C   rƒ  r]  )ré  rA  )r   r  rý  r   r   r   ró  §  r‡  zBase.close_aboutc                 C   sì   |j tjjkrtd}|jtjjkrd}n%|jtjjkrd}n|jtjjkr8| 	¡ \}}}|dkr2d}n|dk r8d}| 
¡ tjj@ rZ|dkrM|  d d d ¡ dS |dkrX|  d d d ¡ dS |dkrg|  d d d ¡ dS |dkrr|  d d d ¡ dS d S )Nr   r   r!   T)Útyper   Ú	EventTypeÚSCROLLr†  ÚScrollDirectionÚUPÚDOWNÚSMOOTHÚget_scroll_deltasrŠ  ÚModifierTypeÚCONTROL_MASKr3  r2  r;  r:  )r   r…  r  r†  Ú__Úx_deltaÚy_deltar   r   r   r   «  s4   ýýäzBase.mousewheel_scrolledc           
      C   s|  |j r|  |j¡\}}}n| ¡ }|j|j}}|tjj@ s$|tjj	@ r|d| _
| j ¡ }| ¡ | j|  }|| ¡ krP|| ¡ | ¡  krP| |¡ | j |¡ | j ¡ }| ¡ | j|  }	|	| ¡ kry|	| ¡ | ¡  kry| |	¡ | j |¡ d| _
|| _|| _| jr¼|  d ¡ | jsªt | j¡ | js¢t ¡ r¢t  ¡  t ¡ sšt !d| j"¡| _|d|  #¡  kr¸|  $¡  dS |  %¡  dS )NTFr¤  gÍÌÌÌÌÌì?)&Úis_hinträ  r>   rŠ  Úx_rootÚy_rootr   r
  ÚBUTTON2_MASKÚBUTTON1_MASKrà   rZ  r_  rõ  Ú
prevmousexr  r  r  r  Úset_hadjustmentr\  Ú
prevmouseyÚset_vadjustmentrÑ   rŽ  rÞ   r   rö  r¦  rá   r   r‹  rŒ  rø  r¡  r  Úslideshow_controls_showÚslideshow_controls_hide)
r   r…  r  r   r  ÚstateÚxadjustÚnewxÚyadjustÚnewyr   r   r   r¤  Ê  sJ   
ÿ




ÿÿzBase.mouse_movedc                 C   s„   | j r@|jdks|jdkr2| j d¡dks| j d¡dkr2|  tj tj	j
¡¡ |j| _|j| _dS | j r@|jdkr@| j |¡ dS )Nr   r   r®   Tr   )rÖ   rö  r`  r  r]  rŽ  r   r  rF  r  ÚFLEURr  r  r  r  rH  Úpopup_at_pointer©r   r…  r  r   r   r   r¡  ù  s   ýzBase.button_pressedc                 C   s"   |j dks
|j dkr|  d ¡ dS )Nr   r   T)rö  rŽ  r!  r   r   r   r¥  	  s   
zBase.button_releasedc                 C   s.   | j rd S | ¡ }|j| j ¡ Ž  | ¡  d S rP  )r´   r`  Úset_source_rgbr  Ú	to_floatsÚpaint)r   r…  r  r"  r   r   r   r¦    s
   zBase.draw_backgroundc                 C   sX   | j dkr(| j d¡ ¡ r*d| _| jd | _|  ¡  d| _|  d¡ |  	¡  d S d S d S )Nr    rz   Tç      ô?F)
r¶   r   rÜ  rF  rì   r»   rð  r  r?  r”  rH  r   r   r   r3    s   
ÿ
øzBase.zoom_inc                 C   s€   | j dkr<| j d¡ ¡ r>| j| jkrd S d| _| jd d | _| j| jk r*| j| _|  ¡  d| _|  	d¡ |  
¡  d S d S d S )Nr    ry   Tr   r%  F)r¶   r   rÜ  rF  r»   r³   rì   rð  r  r?  r”  rH  r   r   r   r2  #  s   
ÿ
ózBase.zoom_outc                 C   ó   |   |dd¡ d S r  )r  rH  r   r   r   r5  4  ó   zBase.zoom_to_fit_window_actionc                 C   s´  |r>| j r:| jdkr<|  ¡ }|  ¡ }| j ¡ }| j ¡ }t|ƒ| }t|ƒ| }	||	k r/|	}
n|}
dt|ƒ | _d S d S d S |r|| j rx| j	dkrz|  ¡ }|  ¡ }| j
 ¡ }| j
 ¡ }t|ƒ| }t|ƒ| }	||	k rm|	}
n|}
dt|ƒ | _d S d S d S | jdkrÖ| jsŒ| j d¡ ¡ rØd| _| j| _d| _d| _|  ¡ }|  ¡ }| j ¡ }| j ¡ }t|ƒ| }t|ƒ| }||k r¾|}n|}dt|ƒ | _|  ¡  |  d¡ |  ¡  d S d S d S )Nr!   r   r    r|   TF)rZ   r¾   r  r  rÃ   r3  r4  re  rÄ   rÆ   rË   rÌ   r¶   rÝ   r   rÜ  rF  rì   r°   rR   r  r  rº   r»   rð  r?  r”  )r   rà  Úis_preloadimg_nextÚis_preloadimg_prevÚ	win_widthÚ
win_heightÚpreimg_widthÚpreimg_heightÚprewidth_ratioÚpreheight_ratioÚpremax_ratioÚ	max_ratioÚ	img_widthÚ
img_heightÚwidth_ratioÚheight_ratior   r   r   r  7  sb   

õ

õ
ÿþ


êzBase.zoom_to_fit_windowc                 C   sÔ  |rH| j rB| jdkrD|  ¡ }|  ¡ }| j ¡ }| j ¡ }t|ƒ| }t|ƒ| }	||	k r/|	}
n|}
dt|
ƒ | _| jdkrFd| _d S d S d S d S |r| j rŠ| j	dkrŒ|  ¡ }|  ¡ }| j
 ¡ }| j
 ¡ }t|ƒ| }t|ƒ| }	||	k rw|	}
n|}
dt|
ƒ | _| jdkrŽd| _d S d S d S d S | jdkrèd| _|  ¡ }|  ¡ }| j ¡ }| j ¡ }t|ƒ| }t|ƒ| }||k r½|}n|}dt|ƒ | _|  ¡  | jdkr×|  |dd¡ n	|  d¡ |  ¡  d| _d| _d S d S )Nr!   r   r    TF)rZ   r¾   r  r  rÃ   r3  r4  re  rÄ   rÆ   rË   rÌ   r¶   rì   rº   r»   rð  Úzoom_1_to_1r?  r”  r  r  )r   rà  r(  r)  r*  r+  r,  r-  r.  r/  r0  r2  r3  r4  r5  r1  r   r   r   r  k  sh   



ó



ó





êzBase.zoom_to_fit_or_1_to_1c                 C   r&  r  )r6  rH  r   r   r   r4  £  r'  zBase.zoom_1_to_1_actionc                 C   s˜   |r| j r
d| _d S d S |r| j rd| _d S d S | jdkrF| js.| js.| jsH| j d¡ ¡ rJd| _	| j
| _d| _d| _|  d¡ |  ¡  d S d S d S d S )Nr   r    r{   TF)rZ   rÄ   rÌ   r¶   rÝ   r¼   r   rÜ  rF  rì   r±   rR   r  r»   r?  r”  )r   rà  r(  r)  r   r   r   r6  ¦  s0   
ÿ
ÿ
ÿþüû
ózBase.zoom_1_to_1c                 C   ó"   | j  d¡ ¡ r|  d¡ d S d S )Nrp   r#   ©r   rÜ  rF  Úrotate_left_or_rightrH  r   r   r   r(  ½  ó   ÿzBase.rotate_leftc                 C   r7  )Nrq   é  r8  rH  r   r   r   r)  Á  r:  zBase.rotate_rightc                 C   s®   | j dkrU|  | j|¡| _| jr#| jr|  d dd¡ n5|  d dd¡ n-| j| j| _| _| j	 
| j| j¡ |  | j|¡| _| j | j¡ |  ¡  |  ¡  |  ¡  d| _d S d S )Nr    FT)r¶   Úimage_rotaterº   r  r  r  r  r¸   r·   rZ  r7  r¹   r„  r8  r   r  r”  rë   )r   Úangler   r   r   r9  Å  s&   
ÿ
þ
ìzBase.rotate_left_or_rightc                 C   r7  )Nrr   T©r   rÜ  rF  Úflip_image_vert_or_horizrH  r   r   r   r*  Ü  r:  zBase.flip_image_vertc                 C   r7  )Nrs   Fr>  rH  r   r   r   r+  à  r:  zBase.flip_image_horizc                 C   sF   | j dkr!|  | j|¡| _|  | j|¡| _| j | j¡ d| _d S d S )Nr    T)r¶   Ú
image_flipr¹   rº   r„  r8  rë   )r   Úverticalr   r   r   r?  ä  s   
ÿ
úzBase.flip_image_vert_or_horizc              	   C   sš   |  ¡ }| ¡ }|| || kr!||kr t|t|ƒ | ƒ}|}n||kr1t|t|ƒ | ƒ}|}| ¡ s=| |||¡}n| |||dddd¡}|||fS )Nr.  rc  r/  r0  )r3  r4  r   re  r5  ri  r6  )r   rŸ   r   rÕ   r4  r5  Úcrop_pixbufr   r   r   r.  í  s    €ÿ
zBase.get_pixbuf_of_sizec              	   C   sx   z+|  ¡ }| ¡ }tj tjjdd|d |d ¡}| d¡ | dd|||dd¡ |W S    t	t
 ¡ tjd | Y S )NTrc  r   l   ÿ r   r   rŠ   )r3  r4  r   r  rF  rf  rg  rh  rj  rM  rN  rO  rü   rP  )r   r3  r»  r¼  Únewpixr   r   r   r/    s   ÿ
zBase.pixbuf_add_borderc           !      C   s  t  tdƒ| jt jj¡}| t jt jj	¡ | tdƒt jj
¡}t j ¡ }| t jt jj¡ | |¡ t j ¡ }|  | jd| j¡\}}	}
| |	|
¡ t j t jjd¡}| t j d¡ddd¡ | |ddd¡ | t j d¡ddd¡ t j t jjd¡}t j dd| j ¡ dd	d¡}t j |dd¡}|  d¡ | !t j"j#¡ | $d¡ t j d
¡}| %dd¡ t j dd| j &¡ dd	d¡}t j |dd¡}|  d¡ | !t j"j#¡ | $d¡ t j d¡}| | '¡ j(d¡ t j t jjd¡}t j t jjd¡}| |ddd	¡ | |ddd¡ | t j d¡ddd¡ | |ddd	¡ | |ddd¡ | t j d¡ddd¡ | |ddd¡ | |ddd¡ t j t jjd¡}t j | j ¡ d| j ¡ dd	d¡}t j |dd¡}|  d¡ | !t j"j#¡ | $d¡ t j tdƒ¡}| %dd¡ t j | j &¡ d| j &¡ dd	d¡}t j |dd¡}|  d¡ | !t j"j#¡ | $d¡ t j tdƒ¡}| | '¡ j(d¡ | %dd¡ t j t jjd¡}t j t jjd¡}| |ddd	¡ | |ddd¡ | |ddd	¡ | |ddd¡ | |ddd¡ | |ddd¡ t j t jjd¡}| t j d¡ddd¡ | |ddd¡ | |ddd¡ | t j d¡ddd¡ |j) |ddd¡ |j) |ddd¡ | *d¡ |j) +¡  | ,t-j.j/t-j.j0B t-j.j1B t-j.j2B t-j.j3B ¡ | 4d| j5||	|
¡ | 4d| j6dd|||||	|
||¡ | 4d| j7¡ | 4d| j8¡ | 4d| j9|||||||	|
|d¡| _:| 4d| j9|||||||	|
|d¡| _;| 4d| j9|||||||	|
|d¡| _<| 4d| j9|||||||	|
|d¡| _=| >¡  ddg| _?d| _@d| _Ad | _B| C¡ }|t jj
krB| D¡  | jBd kr@tEjF tEjGjH| j I¡ d| jJd | jJd ¡} | j K| jJd | jJd | jJd | jJd | dd¡ | | _~ tL M¡  |  Ndddd¡ d| _Od S d S | D¡  d S )Nz
Crop ImageÚC_ropr   r   r    TFr   rw  zX:çffffffæ?zY:r!   r   úWidth:úHeight:r¼  r«   rª   r©   Úbutton_release_eventr­   r   rc  )Pr   rx  r  r>   rÌ  rÍ  rm  rO  rP  rþ  r   rƒ  rF  r  rÿ  r  r×  r1  ÚDrawingArear.  rº   rÕ   r‡  rQ  rR  r^  rX  r|  rS  r6  r3  r7  r8  r9  r:  r;  r<  rß  r4  r
  r»  rË  rÂ  r°  Ú
set_eventsr   rš  rœ  r¢  r  rž  r£  rŒ  Údraw_crop_imageÚcrop_image_mouse_movedÚcrop_image_button_pressÚcrop_image_button_releaseÚcrop_value_changedÚ	x_changedÚ	y_changedÚwidth_changedÚheight_changedÚrealizeÚcrop_rectangleÚdrawing_crop_rectangleÚupdate_rectangleÚrectrÓ  r£   r   r  rf  rg  r5  Úcoordsrj  r–  r—  r  rë   )!r   rà  r¬  rý  r]  Ú
cropbuttonÚ	cropimager*  rB  r4  r5  r  rd  Úx_adjr   Úx_labelÚy_adjr  Úy_labelÚhbox_xÚhbox_yrk  Ú	width_adjr»  Úwidth_labelÚ
height_adjr¼  Úheight_labelÚ
hbox_widthÚhbox_heightÚhbox2r^  Útemp_pixbufr   r   r   r,    s¢  




ÿÿ

ÿ

ú

ú



ÿþýüÿÿôôôôô
ûù	
ëzBase.crop_imagec                 C   sÈ  |dkr*|  ¡ |  ¡  | j ¡ kr)| | j¡ | | j ¡ |  ¡  ¡ | | j¡ n)|dkrS|  ¡ |  ¡  | j ¡ krS| | j¡ | | j ¡ |  ¡  ¡ | | j¡ t	|  ¡ ƒt	|  ¡ ƒt	|  ¡ ƒt	|  ¡ ƒg| _
t	tt| j
d ƒ| j ¡  | dƒƒ| jd< t	tt| j
d ƒ| j ¡  |	 dƒƒ| jd< t	tt| j
d ƒ| j ¡  | dƒƒ| jd  }t	tt| j
d ƒ| j ¡  |	 dƒƒ| jd  }d| _d| _|  |
d ||||||||	||¡ d| _d| _d S )Nr   r   r   r   TF)rõ  rº   r3  r&  rR  r  r(  r4  rS  r   rY  r  re  rU  rV  rW  rL  )r   Úcurrspinboxr   r  r»  r¼  rb  rd  r4  r5  r*  r  Úx2Úy2r   r   r   rO  â  s°   ÿÿ€ÿÿ



üÿþü
ÿÿþü
ÿ	ÿþüÿøÿÿþüÿøÿô
zBase.crop_value_changedc                 C   sv   t  ||dd¡ | ¡  | jd ur9| ddd¡ | tjj¡ | 	| jd | jd | jd | jd ¡ | 
¡  d S d S )Nr   r   r   r   )r   Úcairo_set_source_pixbufr$  rX  r"  Úset_operatorÚcairoÚOperatorÚ
DIFFERENCEÚ	rectangleÚstroke)r   r…  r  rŸ   r»  r¼  r   r   r   rK  C  s   
(üzBase.draw_crop_imagec                 C   s¦  |d kr|   |j¡\}}}| jrÏ| jd ks| jrÑg d¢| _| jd |kr6|| jd< | jd | | jd< n| jd | jd< || jd  | jd< | jd |kr_|| jd< | jd | | jd< n| jd | jd< || jd  | jd< t t dd|	|
¡¡}| 	¡ }| 
|¡}| ¡ }| |¡ | |¡ | jd dk r¬| jd | jd  | jd< d| jd< | jd dk rÅ| jd | jd  | jd< d| jd< |d krag d¢| _ttt| jd ƒ|	 | j ¡  dƒƒ| jd< ttt| jd ƒ|
 | j ¡  dƒƒ| jd< ttt| jd ƒ|	 | j ¡  dƒƒ| jd< ttt| jd ƒ|
 | j ¡  dƒƒ| jd< | jd | jd  | j ¡ krD| j ¡ | jd  | jd< | jd | jd  | j ¡ kra| j ¡ | jd  | jd< | | j¡ | | j¡ | | j¡ | | j¡ | | jd ¡ | | jd ¡ | | jd ¡ | | jd ¡ | | j¡ | | j¡ | d| j ¡ | jd  ¡ | d| j ¡ | jd  ¡ | | j¡ | | j¡ d S d S d S )N)r   r   r   r   r   r   r   r   Úupper)rä  r>   rV  rU  rW  rX  ro  ÚRegionÚRectangleIntr1  Úbegin_draw_frameÚget_cairo_contextr«   Úend_draw_framerY  r   r  re  rº   r3  r4  r&  rP  rQ  rR  rS  r  r(  rv  )r   r…  r  rk  rl  r   r  r»  r¼  r4  r5  rb  rd  r  Úregionr>   Údrawing_contextr  r   r   r   rL  M  sÊ   


ÿ






ÿþü
ÿÿþü
ÿÿþü
ÿÿþü
ÿ	ÿÿÿÿÿÿžzBase.crop_image_mouse_movedc           
   	   C   s¦   |   |j¡\}}}|tjj@ rOd| _||g| _| jd krQt 	t 
| jd | jd | jd | jd ¡¡}| ¡ }| |¡}| ¡ }	| |	¡ | |¡ d | _d S d S d S )NTr   r   r   r   )rä  r>   r   r
  r  rV  rU  rX  ro  ru  rv  r1  rw  rx  r«   ry  )
r   r…  r  r   r  r  rz  r>   r{  r  r   r   r   rM  Â  s$   

 ÿÿ



òzBase.crop_image_button_pressc                 C   s,   |   |j¡\}}}|tjj@ sd| _d S d S r  )rä  r>   r   r
  r  rV  )r   r…  r  r   r  r  r   r   r   rN  Ô  s   
ÿzBase.crop_image_button_releasec                 C   sò  t  tdƒ| jt jj¡}| t jt jj	¡ | tdƒt jj
¡}t j ¡ }| t jt jj¡ | |¡ t j t jjddd¡}| d¡ | dd¡ | d¡ | d	| j¡ t j td
ƒ¡}| dd¡ t j t jjd¡}	|	 |ddd¡ t j t jjd¡}
|
 |ddd¡ |j t j d¡ddd¡ |j |	ddd¡ |j |
ddd¡ |j t j d¡ddd¡ |  t jj
¡ |j !¡  | "¡ }|t jj
krì| j# $| j#| %¡ d¡ | j& $| j&| %¡ d¡ | j' (| j&¡ d| _)| *¡  d S | j' (| j&¡ | *¡  d S )NÚ
SaturationÚ	_Saturater   r   rÓ  Fr½  r   r­   zSaturation level:Trw  é   rÂ  )+r   rx  r  r>   rÌ  rÍ  rm  rO  rP  rþ  r   rƒ  rF  r  rÿ  r  r×  r1  ÚScaleÚnew_with_rangerR  r^  Úset_draw_valueÚset_incrementsr  rŒ  Úsaturation_previewr|  rß  rQ  rX  rË  rT  r°  rÓ  rº   Úsaturate_and_pixelaterõ  r¹   r„  r8  rë   r£   )r   rà  r¬  rý  r]  ÚresizebuttonÚresizeimageÚscaleÚlabelÚhbox1rh  r^  r   r   r   rv   Ù  sH   




ÿÿzBase.saturationc                 C   s~   t  ¡ rt  ¡  t  ¡ sz| j ¡ }| j | j| ¡ d¡ | j | j¡ | ¡ | _~W n   t	t
 ¡ tjd Y t ¡  d S )NFrŠ   )r   r‹  rŒ  r¹   Úcopyr„  rõ  r„  r8  rM  rN  rO  rü   rP  r–  r—  )r   r  Úbakr   r   r   rƒ     s   ÿ
ÿ
zBase.saturation_previewc                 C   s  t  tdƒ| jt jj¡}| t jt jj	¡ | tdƒt jj
¡}t j ¡ }| t jt jj¡ | |¡ t j t jjd¡}t j | j ¡ ddddd¡}t j |dd¡}	|	 d¡ |	 t jj¡ |	 d¡ t j td	ƒ¡}
|
 dd
¡ |  |
ddd¡ |  |	ddd¡ |  t j tdƒ¡ddd¡ t j t jjd¡}t j | j !¡ ddddd¡}t j |dd¡}| d¡ | t jj¡ | d¡ t j tdƒ¡}|
 "| #¡ j$d¡ | dd
¡ |  |ddd¡ |  |ddd¡ |  t j tdƒ¡ddd¡ t j t jjd¡}t j% &tdƒ¡}| '| j(¡ |  |ddd¡ t j t jj)d¡}|  t j d¡ddd¡ |  |ddd¡ |  |ddd¡ |  t j d¡ddd¡ |  |ddd¡ |  t j d¡ddd¡ t j t jjd¡}t*j+ ,| j-¡}| .¡ ry|  /| jd| j0¡\}}}n|  /| 1¡ d| j0¡\}}}t j ¡ }| 2|  3|¡¡ |  |ddd¡ |  |ddd¡ |j4  |ddd¡ |	 5d| j6d|¡ | 5d| j6d|	¡ | 5d| j7|	|¡ | 8t jj
¡ |j4 9¡  | :¡ }|t jj
kr| ;¡ }|	 ;¡ }| <¡  | j =||| j0¡| _|  >dddd¡ d| _?d S | <¡  d S )NzResize ImageÚ_Resizer   r   l    hí] rw  TFrF  rE  ÚpixelsrG  r!   zPreserve aspect ratior    é`   r­   r»  r¼  ry  )@r   rx  r  r>   rÌ  rÍ  rm  rO  rP  rþ  r   rƒ  rF  r  rÿ  r  r×  r1  rQ  rR  r^  r6  rº   r3  r7  r8  r9  r:  r;  r<  r|  rß  rX  r4  r‡  r
  r»  r  r‘  r  ré   rS  r   r™  r  r¶   rš  r.  rÕ   rœ  r8  r/  rË  rŒ  Úpreserve_image_aspectÚaspect_ratio_toggledrT  r°  rÓ  r=  r£   ri  r  rë   )r   rà  r¬  rý  r]  r…  r†  rf  rb  r»  rc  rg  rd  r¼  re  Úhbox_aspectÚaspect_checkboxrË  Ú
hbox_totalr£  rŸ   r4  r5  r*  r^  ÚpixelheightÚ
pixelwidthr   r   r   r-    s”   

ÿ

ÿ



ÿ
ÿ

ÿ
zBase.resize_imagec                 C   sV   |  ¡ | _| jr)t| ¡ ƒ| j ¡  }t|| j ¡  ƒ}d| _| 	|¡ d| _d S d S r
   )
r  ré   re  r=  rº   r3  r   r4  rê   r  )r   Útogglebuttonr»  r¼  Útarget_valuer   r   r   r  ]  s   

ÿÿ

÷zBase.aspect_ratio_toggledc                 C   sˆ   | j sd S | jr
d S |dkr#t| ¡ ƒ| j ¡  }t|| j ¡  ƒ}nt| ¡ ƒ| j ¡  }t|| j ¡  ƒ}d| _| |¡ d| _d S )Nr»  TF)	ré   rê   re  r=  rº   r3  r   r4  r  )r   rj  r  Úotherspinboxr—  r   r   r   r  j  s$   
ÿÿ
ÿÿ

zBase.preserve_image_aspectc                 C   ó   |   d|¡ d S )NÚPREV©rQ  rH  r   r   r   r;    rø  zBase.goto_prev_imagec                 C   r™  )NÚNEXTr›  rH  r   r   r   r:  ‚  rø  zBase.goto_next_imagec                 C   r™  )NÚRANDOMr›  rH  r   r   r   r<  …  rø  zBase.goto_random_imagec                 C   r™  )NÚFIRSTr›  rH  r   r   r   r=  ˆ  rø  zBase.goto_first_imagec                 C   r™  )NÚLASTr›  rH  r   r   r   r>  ‹  rø  zBase.goto_last_imagec              	   C   s¤  | j r|dkrt | j¡ |dks|dks|dkr t| jƒdksJ|dkr0t| jƒdkr0| jdksJ|dkrEt| jƒdkrE| jt| jƒd ksJt|ƒrÐ|  ¡  |  	¡ }|rVd S d	}|dkr_g | _
|dkrgd| _nh|dkr–| j
g kru|  ¡  nZd
}| j
D ]}|s€d	}qz|r•| j rŽ| j r“| jdkr“|  ¡  n<d
}n9|dkr£t| jƒd | _n,|dkr·| jdkr´|  jd8  _nd
}n|dkrÏ| jt| jƒd k rÍ|  jd7  _nd
}|r	| jdkrç|dkrå| j rå|  d d d ¡ d S |dksð|dkr| jdkr|dkrt| jƒd | _n|dkrd| _nû| j| jkr:|dkr%|  d
d	d
d
d
d
¡ n
|  d	d	d
d
d
d
¡ |  d	¡ |  | j¡ | jrC|  d ¡ |dkr_t | jtjjtjjB tjjtjjtdƒ¡}n7|dkr{t | jtjjtjjB tjjtjjtdƒ¡}n|dkr–t | jtjjtjjB tjjtjjtdƒ¡}| tdƒ¡ |j  !dd	¡ | "tj#j$¡ d
| _%| &¡ }|tj#j$krè|dkrÇt| jƒd | _n|dkrÐd| _n	|dkrÙ|  ¡  | '¡  d	| _%| jrç| j( n!| '¡  d	| _%| jr÷| j( n|  d ¡ | j r|  d d d ¡ d S |dkrAt) *dt| jƒd ¡}	| j
|	 r0t) *dt| jƒd ¡}	| j
|	 s|	| _d
| j
|	< t+| j| j ƒ| _,t|ƒrN| j}
t-|ƒ| _| jsj| j r_| j rj|dkrj|  t.j/ 0t.j1j2¡¡ |dks}t|ƒr‹t-|ƒ|
d kr‹t 3| jd
d	d
d
d
d
¡| _4nt 3| jd	d	d
d
d
d
¡| _4|  d	¡ | j rÆ| j5r¶t 6t-| j7d ƒ| j8d d d¡| _nt 6t-| j7d ƒ| j9d d d¡| _t 3| j| j¡ d S d S )Nrô  rš  rœ  r  r   rž  r   rŸ  FTzKYou are viewing the first image in the list. Wrap around to the last image?zKYou are viewing the last image in the list. Wrap around to the first image?zNAll images have been viewed. Would you like to cycle through the images again?zWrap?r    ró  ):rÝ   r   rö  r÷  rD  rÛ   rµ   r   r  rT  Ú
randomlistÚreinitialize_randomlistrS   r?  r½   rØ  rR  r!  rÑ   rŽ  r   rË  r>   rÌ  rÍ  rj  rÎ  rk  rÐ  rf  r  rÒ  rˆ  rv  rT  rP  rg  rÜ   rÓ  r£   r¡  ÚrandomÚrandintr  r¶   r   r   r  rF  r  r‘  r  rÙ  r  rø  r  r<  r:  )r   r~  rà  rV  Ú
check_wrapÚall_items_are_truerÞ  r]  r^  ÚjÚprev_imgr   r   r   rQ  Ž  sT  ý


€ÿ

€



€



ÿû
	ÿû
	ÿû	


€

ÿ


ÿÿ

ÿÿÿ
ûû ÙzBase.goto_imagec                 C   s:  | j r
t| jƒdkr'|s'|  d¡ |  d¡ |  d¡ |  d¡ |  d¡ d S | jdkrR| j	dkr7|  d¡ n|  d¡ |  d¡ |  d¡ |  d¡ |  d¡ d S | jt| jƒd kr‚|  d¡ |  d¡ | j	dkrq|  d¡ n|  d¡ |  d¡ |  d¡ d S |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ d S )Nr   Fr   T)
rÖ   rD  rÛ   ræ  rç  rå  rè  ré  rµ   rS   )r   Úskip_initial_checkr   r   r   rR  G  s>   ÿÿ


















z$Base.set_go_navigation_sensitivitiesc                 C   s6   g | _ tt| jƒƒD ]}| j  d¡ q
d| j | j< d S r¥  )r   r  rD  rÛ   r  rµ   )r   rÅ  r   r   r   r¡  l  s   zBase.reinitialize_randomlistr    c                 C   s„   t |ƒdkrt| j| j ƒ| _n|| _| jr$| jdkr$ttdƒ| j ƒ |  	¡  |  
¡  d| _d | _|r>| js@|  d ¡ d S d S d S )Nr   r    úLoading: %sF)rD  r  rÛ   rµ   r¶   Úcurrmg_namer3   rM  r  rJ  r  rÖ   rº   rÑ   rŽ  )r   Úreset_cursorrý  r   r   r   r˜  r  s   þzBase.image_load_failedc                 C   sT   zt  | j¡ W n   Y zt  | j¡ W n   Y z	t  | j¡ W d S    Y d S rP  )r   rö  rÙ  rŸ  r!  r  r   r   r   r  ‚  s   zBase.load_new_image_stop_nowc                 C   sj   z
|   ||||¡ W n   tt ¡ tjd |  d¡ Y |r't | j	d¡| _
|r3t | jd¡| _d S d S )NrŠ   TF)r  rM  rN  rO  rü   rP  r˜  r   r  r   rŸ  rž  r!  )r   Úcheck_prev_lastÚuse_current_pixbuf_originalr«  Úperform_onload_actionÚpreload_next_image_afterÚpreload_prev_image_afterr   r   r   rØ    s   	üÿzBase.load_new_imagec                 C   óÚ   d}|| j krc|dkrc|| jkr8| js8| js8| j| _ | j| _| j| _| j| _	| j
| _| j| _| j| _| j| _d S || jkr_| j| _ | j| _| j| _| j| _	| j| _| j| _| j| _| j| _d S d}d S |dkrkd}d S d S ©NFr!   T)rÆ   r½   rë   rì   r¶   rÇ   r·   rÈ   r¸   rÉ   r¹   rÊ   rº   rË   r»   rÌ   r¼   rÍ   r¾   r¿   rÀ   rÁ   rÂ   rÃ   rÄ   rÅ   )r   Ú
prev_indexÚreset_preloadimg_prev_in_listr   r   r   Ú"check_preloadimg_prev_for_existing¨  ó:   
ÿþ
ÿÿz'Base.check_preloadimg_prev_for_existingc                 C   r±  r²  )r¾   r½   rë   rì   r¶   r¿   r·   rÀ   r¸   rÁ   r¹   rÂ   rº   rÃ   r»   rÄ   r¼   rÅ   rÆ   rÇ   rÈ   rÉ   rÊ   rË   rÌ   rÍ   )r   Ú
next_indexÚreset_preloadimg_next_in_listr   r   r   Ú"check_preloadimg_next_for_existingÎ  r¶  z'Base.check_preloadimg_next_for_existingc                 C   sP  d}d}| j | jkr¤| j | jkrY| j| _| j| _| j| _| j	| _
| j| _| j| _| j| _d}| jr?| jdkr?ttdƒ| j ƒ |  d¡ | jsP|  d¡ ||fS |  d¡ ||fS | j | jkr¤| j| _| j| _| j| _| j| _
| j| _| j| _| j| _d}| jrŽ| jdkrŽttdƒ| j ƒ |  d¡ | jsŸ|  d¡ ||fS |  d¡ ||fS )NFTr    r©  )rµ   r½   rÆ   rÇ   r¶   rÈ   r·   rÉ   r¸   rÊ   r¹   rË   rº   rÌ   r»   rÍ   r¼   r3   rM  r  r?  rº  r¾   r¿   rÀ   rÁ   rÂ   rÃ   rÄ   rÅ   )r   Ú	used_prevÚ	used_nextr   r   r   Úcheck_currimg_for_existingô  sJ   


îï


ÿzBase.check_currimg_for_existingc                 C   sB  | j d }|t| jƒd kr| jdkrd}nd}| j d }|dk r0| jdkr)d}nt| jƒd }| jrFd}d}	|r@|  ||¡ n|  ||	¡ |  ¡ \}
}| jrh|rX|  ||	¡ n|  ||¡ |	rcd| _|rhd| _	|
sl|r´| j
| jks~| j
| jkr…| j| jkr…d| _d| _nÜ| j
| jks—| j
| jkrž| j| jkržd| _d| _nÃ| j
| jks°| j
| jkr³| j| jkr³d| _n­d | _d| _t| j| j  ƒ| _| jrÔ| jdkrÔttdƒ| j ƒ tj | j¡}| ¡ sæ|rL| jsLd| _|sð| ¡ | _|   d¡ | j
| jks
| j
| jkr| j| jkr|  !d dd¡ nO| j
| jks'| j
| jkr/| j| jkr/|  "d dd¡ n2| j
| jksD| j
| jkrK| j| jkrK|  #d dd¡ nd| _|sU|| _|  #d dd¡ |   d¡ | j$d krq|rq|  %| j$d¡ |  &¡  |  '¡  d| _(d| _)d| _*|  +¡  |s|  ,| j¡ |r| j-sŸ|  .d ¡ d S d S d S )Nr   r   r!   FTr    r©  )/rµ   rD  rÛ   rS   rZ   r¹  rµ  r¼  rÆ   r¾   rQ   r¯   r²   rR   r  r  r°   r±   r¹   r»   r  r¶   r3   rM  r  r   r™  r  rš  r¼   rœ  rº   rº  r  r  r6  rç   r¤  r”  rJ  rÖ   rë   rì   r´  r\  rÑ   rŽ  )r   r¬  r­  r«  r®  Úskip_recentfilesr·  r³  r¸  r´  rº  r»  r£  r   r   r   r  !  sÂ   



ÿÿÿÿ€ÿÿ

€
þzBase.load_new_image2c              	   C   s<  z
| j rt| jƒdkr|sZ| jd }|t| jƒd kr-| jdkr+| jdk W d S d}|| jkr5W d S || _t| j| ƒ| _tj	 
| j¡}| ¡ rTd| _| ¡ | _nd| _|| _| jdkrbW d S | j| jkst| j| jkr|| j| jkr||  d dd¡ n3| j| jksŽ| j| jkr–| j| jkr–|  d dd¡ n| j| jks¨| j| jkr¯| j| jkr¯|  d dd¡ t| j ¡ | j ƒ| _t| j ¡ | j ƒ| _| jsë| j ¡ sÚ| j | j| j| j ¡| _!n| j "| j| j| j dddd	¡| _!n| j| _!t# $¡  | j%r	t&t'd
ƒ| j ƒ W d S W d S W d S W d S    t&t( )¡ t*j+d d| _Y d S ©Nr   r   r!   FTr.  rc  r/  r0  zPreloading: %srŠ   ),rZ   rD  rÛ   rµ   rS   r¾   r  r¿   r   r™  r  rš  rÅ   rœ  rÃ   rQ   r¯   r²   rR   r  r°   r  r±   r6  r   r3  rÄ   rÀ   r4  rÁ   r5  ri  rÕ   rÂ   r6  r–  r—  r3   rM  r  rN  rO  rü   rP  )r   Úuse_existing_imager·  Úpre_animtestr   r   r   r   œ  sŽ   



ÿÿ
ÿÿÿÿ
ýù
¶IzBase.preload_next_imagec              	   C   s<  z
| j rt| jƒdkr|sZ| jd }|dk r-| jdkr&| jdk W d S t| jƒd }|| jkr5W d S || _t| j| ƒ| _tj	 
| j¡}| ¡ rTd| _| ¡ | _nd| _|| _| jdkrbW d S | j| jkst| j| jkr|| j| jkr||  d dd¡ n3| j| jksŽ| j| jkr–| j| jkr–|  d dd¡ n| j| jks¨| j| jkr¯| j| jkr¯|  d dd¡ t| j ¡ | j ƒ| _t| j ¡ | j ƒ| _| jsë| j ¡ sÚ| j | j| j| j ¡| _!n| j "| j| j| j dddd	¡| _!n| j| _!t# $¡  | j%r	t&t'd
ƒ| j ƒ W d S W d S W d S W d S    t&t( )¡ t*j+d d| _Y d S r¾  ),rZ   rD  rÛ   rµ   rS   rÆ   r  rÇ   r   r™  r  rš  rÍ   rœ  rË   rQ   r¯   r²   rR   r  r°   r  r±   r6  r   r3  rÌ   rÈ   r4  rÉ   r5  ri  rÕ   rÊ   r6  r–  r—  r3   rM  r  rN  rO  rü   rP  )r   r¿  r³  rÀ  r   r   r   rž  í  sŽ   



ÿÿ
ÿÿÿÿ
ýù
¶IzBase.preload_prev_imagec                 C   s   | j  ¡  |¡ d S rP  )r>   r1  Ú
set_cursor)r   r  r   r   r   rŽ  >  rî  zBase.change_cursorc                 C   sÐ  | j  ¡  d}d| _d| _|  tj tjj	¡¡ d| _
d| _d| _|D ]}tj |¡r2d| _|  ¡  q#d}d}d}d}d}d}	g | _g }
g | _d| _d}|  d¡ tt|ƒƒD ]—}||  d¡rk|| dd … ||< n||  d¡r||| d	d … ||< || t|| ƒd
  dkrš|| d t|| ƒd
 … ||< ||  d¡sº||  d¡sº||  d¡sºtj || ¡||< qWz&tjddd }|tj || ¡ }t d	¡ tj  || |¡ |||< W qW   t!t" #¡ t$j%d Y qW| j&sEg }|D ]}tj |¡d dkr
| '|¡ q÷| j(rt!t)dƒ| ƒ q÷|}t|ƒdkrEd| _*d| _|  +d¡ |  ,¡  | j-s8|  d ¡ d| _.|  /¡  |  0¡  d S tj |d ¡}d| _| j1rµ|}g }|D ]0}tj 2|¡r„tj 3tj |¡¡}| j.}d| _.d| _|  4|d|dd¡ || _.qZ| '|¡ qZ| jD ]&}| '|¡ |r¡|s¡d}|}d}||kr³d}|}d}t|ƒd
 | _qŽg | _|D ][}| j-stj 2|¡r|  5|¡r |sÚ|rÚd}|}d}|sãd}|}d}| j '|¡ | j(r |  jd
7  _t!t)dƒ|| jdœ ƒ n\|
 '|¡ |s]d| _|  4|d|dd¡ d}|t| jƒk r]|s]tj 2| j| ¡rN|sB|rBd}d}| j| }|  +d¡ d}|sNd}| j| }d}|d
7 }|t| jƒk r]|r"|rÊ|sÊ| jt| jƒd
 krÊd}| j6r{|  7d d d ¡ | j(rŽ| j*dkrŽt!t)dƒ| j* ƒ z(|  8dddd¡ d| _d| _
| j9s¨| j: ;¡ | _<n| j: =¡  ;¡ | _<d| _>d}W n   t!t" #¡ t$j%d Y |rÊg | _|r|	s|sà| jd
 t| jƒd
 ksã|rd}	| j}g | _t| jƒ| jd
 k r| j '|¡ t| jƒ| jd
 k sö| j '|¡ |  ?d¡ || _qº|r:|r*|  @|
|¡ |  A||¡ n|  A||¡ |  @|
|¡ |  0¡  |sC|  Bd|¡ d| _|  ¡  |  +d¡ |  ,¡  |  Cd| j¡ | j-sc|  d ¡ d| _.d S )NFr   Tr!   r    r6  r?  zfile:rv  r   rÁ  r©  zhttps://rª  rI  rJ  rŠ   Ú.úSkipping: %szFound: %(item)s [%(number)i])rÞ  Únumberr©  )Drd  r'  Úimages_foundr  rŽ  r   r  rF  r  r‘  r¾   rÆ   rè   rØ   rÙ   r|  r”  r   rÛ   rµ   r¹  r  rD  rï  ÚabspathrP  rQ  rñ  ÚsocketÚsetdefaulttimeoutrµ  r¶  ÚurlretrieverM  rN  rO  rü   rP  rð   r  r3   r  r¶   rR  r´  rá   r2   r  rJ  r×   r  rÉ  Úexpand_directoryÚvalid_imagerÝ   r?  r  r¼   r¹   r3  r  rœ  rÖ   r   Úadd_folderlist_imagesÚdo_image_list_stuffr˜  r  )r   Ú	inputlistÚfirst_image_loaded_successfullyrÞ  Úfirst_imageÚfirst_image_foundÚfirst_image_loadedÚsecond_imageÚsecond_image_foundÚsecond_image_preloadedÚ
folderlistÚgo_buttons_enabledÚitemnumrV  rW  ÚtmplistÚ
init_imagerp  ÚitempathÚsecond_image_came_from_dirÚfirst_image_came_from_dirr   r   r   r¸  A  sŒ  
€
 ÿþý
€


ÿ



€

ÿÿ€
	
ÿ


ôÿþÿÿþûþÿ
€


z#Base.expand_filelist_and_load_imagec                 C   sv   t |ƒdkr7|jtjd tt|ƒƒ}|D ]#}| js6| js'tj	 
|¡d dks*| jr6d| _|  |d|dd¡ qd S d S )Nr   ©r  rÂ  FT)rD  ÚsortÚlocaleÚstrxfrmry  rz  rá   rð   rØ   rÙ   rñ  r  rÊ  )r   rÖ  r×  rÞ  r   r   r   rÌ    s"   ÿÿ
ÿ€÷zBase.add_folderlist_imagesc                 C   s@   t | jƒdkr|  d¡ tt| jƒƒ| _| jjtjd d S d S )Nr   TrÞ  )rD  rÛ   rR  ry  rz  rß  rà  rá  )r   rÐ  rÓ  r   r   r   rÍ  +  s
   
ýzBase.do_image_list_stuffc           
      C   sÚ  | j så| jsçg }g }t |tj¡sdS t |¡D ]h}| js€| j s€|tj | }tj |¡}	| j	s:tj 
|	¡d dks=| j	rutj |	¡rf|  |	¡rf| |¡ | jre|re|  jd7  _ttdƒ|	| jdœ ƒ qtj |	¡rt| jrt| |	¡ q| jr€ttdƒ|	 ƒ qt| jƒdkrŽ|rŽ|  ¡  t|ƒdkrÇ|jtjd |D ])}|| jvrÆ| j |¡ |r¶t| jƒd	kr¶ d S |sÆt| jƒdkrÆ|  d
¡ d
}qt|ƒdkré|jtjd |D ]}| j sä|  |||||¡ qÖd S d S d S d S )NFr   rÂ  r   z Found: %(fullpath)s [%(number)i])ÚfullpathrÄ  rÃ  rÞ  r   T)r  rá   rØ   ÚaccessÚR_OKÚlistdirÚseprÙ   rÆ  rð   rñ  r  rË  r  r3   rÅ  rM  r  r|  r2   rD  rÛ   rJ  rß  rà  rá  rR  rÊ  )
r   rÞ  Ústop_when_second_image_foundr×  Úupdate_window_titleÚprint_found_msgrÖ  ÚfilelistÚitem2Úitem_fullpath2r   r   r   rÊ  1  s|   ÿÿÿ

þÿÿ€
€€

€û€Ð,zBase.expand_directoryc                 C   s¦   |   |¡ tj |¡rOt ddd¡d krQz%tj ¡ }d}|d d… dkr&d}|tj	 
tj |¡¡ }| |¡ W d S    tt ¡ tjd tjdkrNY d S ‚ d S d S )	Nr   rw  r   r    r?  r6  rŠ   Úwin32)r³  rØ   rÙ   r  r   Úcheck_versionÚRecentManagerÚget_defaultrµ  r¶  r7  rÆ  Úadd_itemrM  rN  rO  rü   rP  Úplatform)r   rK  Úgtk_recent_managerrO  r   r   r   r\  q  s   


òz#Base.register_file_with_recent_docsc                 C   sN   t j |¡\}}}|d u rdS | ¡ dkr%z	t j |¡}W dS    Y dS dS )NFÚwbmpT)r   r  rd  rß  r  )r   r‹   rò  r»  r¼  Útest2r   r   r   rË  ƒ  s   ýzBase.valid_imagec           
   	   C   s–   |  ¡ }| ¡ }d }|r t | ¡ ||| ¡ | ¡ ¡\}}}}nt | ¡ ||| ¡ | ¡ ¡\}}}}|rItj	 
|| ¡ | ¡ | ¡ |||¡}	|	S |S rP  )r3  r4  ÚimgfuncsÚvertr¦  Úget_rowstridera  Úhorizr   r  Únew_from_dataÚget_colorspacer5  r`  )
r   Úold_pixrA  r»  r¼  Údr?   r@   ÚrwsÚnew_pixr   r   r   r@  ’  s<   ûûù	zBase.image_flipc              	   C   sö   |  ¡ }| ¡ }|t|ƒd d  }|ryd }|d dkr0t | ¡ ||| ¡ | ¡ ¡\}}}}	n3|d dkrJt | ¡ ||| ¡ | ¡ ¡\}}}}	n|d dkrct 	| ¡ ||| ¡ | ¡ ¡\}}}}	|ryt
j || ¡ | ¡ | ¡ |||	¡}
|
S |S )Nih  r;  r   rY  r#   )r3  r4  r   rö  Úrightr¦  rø  ra  ÚmirrorÚleftr   r  rú  rû  r5  r`  )r   rü  Ú
full_angler»  r¼  r=  rý  r?   r@   rþ  rÿ  r   r   r   r<  ³  sR   ûûûù	zBase.image_rotatec                 C   sð   t | jƒdkrv| jsY| jr| js|  d d d ¡ d| _|  ¡  |  ¡  | js6t	 
t| jd ƒ| jd d d¡| _n|  ¡  t	 
t| jd ƒ| jd d d¡| _| j d¡ t	 
d| j¡}d S d| _t	 | j¡ |  ¡  |  ¡  |  ¡  | j d¡ d S d S )Nr   Tró  rô  F)rD  rÛ   rÝ   rY   rÑ   r9  rJ  r´  r  r   rø  r   r  r:  r÷  r¡  r<  rI  Úset_slideshow_playingÚ%disable_screensaver_in_slideshow_moderö  rð  )r   rà  r¬  rý  Útimer_screensaverr   r   r   r?  Þ  sD   ûûÿÞzBase.toggle_slideshowc                 C   sn   t | jƒdkr
d}n%dtdƒ| jd t | jƒdœ  d tj | j¡ }| jr/|d td	ƒ }| j	 
|¡ d S )
Nr   rB  z	Mirage - z[%(current)i of %(total)i]r   r©  rÂ  z - r  )rD  rÛ   r  rµ   rØ   rÙ   rñ  r¶   rÝ   r>   rÒ  )r   rJ  r   r   r   rJ    s   ÿÿýüÿzBase.update_titlec                 C   s¸   | j rd S d| _ | j | j¡ | jr| j d¡ n| j d¡ | j ¡ }| j |¡ | j 	¡  | j
s>t ¡ r>t ¡  t ¡ s6| j ¡ j}| j ¡ j}| j ¡ \}}| j ||||¡ d S r
   )rÞ   rI  r”  r  rÝ   r  r>   Ú
get_screenÚ
set_screenr°  rá   r   r‹  rŒ  r`  r»  r¼  Úget_positionÚposition)r   Úscreenr»  r¼  r   r  r   r   r   r    s$   

ÿzBase.slideshow_controls_showc                 C   s   | j sd S d| _ | j ¡  d S r  )rÞ   rI  rA  r  r   r   r   r  ,  s   zBase.slideshow_controls_hidec                 C   sD   | j r| jrt tjddd¡}|dkr t d| j¡}d S d S d S d S )Nz/usr/bin/xscreensaver-commandzxscreensaver-commandz-deactivateé   ró  )rÝ   rX   rØ   ÚspawnlpÚP_WAITr   rø  r  )r   Útestr  r   r   r   r  3  s   üÿøz*Base.disable_screensaver_in_slideshow_mode)Fr!   )F)TrP  )r    )´Ú__name__Ú
__module__Ú__qualname__r   rÑ  rÓ  rá  rä  rW  rV  r  r  r  r  r  r   r,  r-  rS  r¨  r!  rn  r_  r«  r)  r  r  rŽ  r¤  r›  rø  r«  r³  r   r•  r¹  rº  rÝ  rÞ  rå  ræ  rç  rè  ré  rí  rï  r´  rð  r  rÿ   r®  rA  r—  r˜  r  r§  r  r)  r¢   r£   r'  r?  r   r  r  r  r$  r%  rG  rT  rà  r!  r#  r}  r"  rs  r”  r  r¡  r¢  r±  r9  r£  r8  r7  r6  r”  r0  r  rØ  rÇ  rÚ  rõ  r  rÝ  rÜ  r  r  rÛ  rÔ  rn   r>  r&  r1  rŒ  r.  rÈ  r/  rŽ  r’  rá  rˆ  r‰  r@  rø  rõ  ró  r   r¤  r¡  r¥  r¦  r3  r2  r5  r  r  r4  r6  r(  r)  r9  r*  r+  r?  r.  r/  r,  rO  rK  rL  rM  rN  rv   rƒ  r-  r  r  r;  r:  r<  r=  r>  rQ  rR  r¡  r˜  r  rØ  rµ  r¹  r¼  r  r   rž  rŽ  r¸  rÌ  rÍ  rÊ  r\  rË  r@  r<  r?  rJ  r  r  r  Ú__classcell__r   r   r   r   r   H   s†       J
	
%%)
c
A("7		,
	!;,	0  4 Z**( "x       oU_0/48
	 Pa
u'N :%&&3ú{QQ ]@!+%r   c                 C   s,   t  ¡  tƒ }t  ¡  | | ¡ t  ¡  d S rP  )r   Úthreads_enterr   Úthreads_initrÓ  Úthreads_leave)rý   rˆ   r   r   r   rÓ  A  s
   
rÓ  )/rG  rí  ÚgiÚrequire_versionÚgi.repositoryr   r   r   r   r   r   ro  rØ   rü   rû   r  Ústringr–  r¢  Úurllib.requestrµ  rà  rD  r  rþ  rÉ  ÚfilecmprP  rÇ  rõ   rN  rI  r	   rô  r8  r9  Úmirage.imgfuncsrö  rá  rM  Úmirage.xmouserM  r4  r   rÒ  r   rÓ  r   r   r   r   Ú<module>   s¨     0(


                                                  +