
    EPcS6                        d Z dZdZddlZddlZddlZddlZ ej        d           ddlm	Z	 ddl
mZ ddlmZ ddlZdd	lmZ dd
lmZmZmZmZ ddlmZmZmZmZ ddlmZmZmZmZmZm Z m!Z! ddl"m#Z# ddl$m%Z%m&Z&m'Z' ej(        )                    ej(        *                    e+          d          Z,ej(        )                    ej(        *                    e+          d          Z- edd          Z. G d de          Z/ G d de          Z0 G d de          Z1 G d de          Z2 G d dej3                  Z4e5dk    r e4            6                                 dS dS )z;
Import images from the internet, inkscape extension (GUI)
z1.0inkscape-import-web-image    Nignore)defaultdict)encodebytes)user_cache_dir)Style)GtkAppWindowIconViewasyncme)PixmapManager
SizeFilter	PadFilterOverlayFilter)load_svgImageDefs	NamedViewMetadataSvgDocumentElementStyleElement)Gtk)RemoteSource
RemoteFile
RemotePagesourceslicensesInkscapec                   ,    e Zd Z ee          ZddZdS )LicenseOverlayNc                 b    |d S | j                             |                                          S N)pixmapsgetget_overlay)selfitemmanagers      @/usr/share/inkscape/extensions/other/clipart/import_web_image.pyr%   zLicenseOverlay.get_overlay8   s.    <4| 0 0 2 2333    )NN)__name__
__module____qualname__r   LICENSESr#   r%    r*   r)   r    r    5   s7        mH%%G4 4 4 4 4 4r*   r    c                   4     e Zd ZdZd Zd Z fdZd Z xZS )ResultsIconViewz!The search results shown as iconsc                     |j         S r"   )stringr&   r'   s     r)   
get_markupzResultsIconView.get_markup@   s
    {r*   c                     |j         S r"   )iconr4   s     r)   get_iconzResultsIconView.get_iconC   s
    yr*   c                 (   | j                             d           | j                             d           | j                                         \  }}|                    d| j                  | _        t                                                       d S )N      notify)	_listset_markup_columnset_pixbuf_column	get_cellsconnect	keep_size
crt_notifysupersetup)r&   crtcrp	__class__s      r)   rE   zResultsIconView.setupF   sr    
$$Q'''
$$Q''':''))S++h??r*   c                     |                     | j                   |                    dd           |                    | j                   dS )zHack Gtk to keep cells smallerwidth   N)handler_blockrC   set_propertyhandler_unblock)r&   rF   argss      r)   rB   zResultsIconView.keep_sizeM   sJ    $/***#&&&DO,,,,,r*   )	r+   r,   r-   __doc__r5   r8   rE   rB   __classcell__rH   s   @r)   r1   r1   >   sk        ++        - - - - - - -r*   r1   c                       e Zd ZdZdZ fdZd Zd Zd Zd Z	d Z
dd
ZddZd ZddZddZd Zej        d             Zej        d             ZddZd Zej        d             Zd ZddZej        d             Z xZS )ImporterWindowz$The window that is in the glade fileimport_web_imagec                     t                      j        |i | |                     d                                           |                     d          | _        | j                                        | _        | j                                         t          j	        t                     t          t          d          }t          t          j                                                  D ]k\  }\  }}|j        s| j                            |                    |j                  |j        |g           |j        r| j                            |           lt          t,          t/          d          t1          d          t3          d          g          }| j        j        d	         | _        t;          |                     d
          |          | _        t;          |                     d          |          | _        d| _         |                     d          !                    tD          j#        j$                   d S )Ndl-searchingservice_listrK   )size)r   rK   )g      ?r:   )position)filtersselectresultspoolFzperm-nocopyright)%rD   __init__widgethidesource	get_modelsource_modelclearr   loadSOURCESr   	enumerater   items
is_enabledappendr$   r7   name
is_default
set_active	CACHE_DIRr   r   r    gappkwargsselect_funcr1   r]   r^   multipleset_message_typer   MessageTypeWARNING)	r&   rO   rq   pixxkeyrb   r#   rH   s	           r)   r_   zImporterWindow.__init__X   s   $)&)))N##((*** kk.11 K1133!!!'"""G#... ),*>*D*D*F*F G G 	* 	*A}V$ $$cggfk&:&:FK%MNNN  *&&q)))	C   8$$$H---4
   
  9+H5&t{{9'='=wGG#DKK$7$7AA	&''889PQQQQQr*   c                    |                      d                                          D ]N}| j        j                            |          }| j        j        |         d         }|                     |           O|                                  dS )z5Callback when clicking on an image in the result listr]   r   N)r`   get_selected_itemsr]   _modelget_itershow_licenseupdate_btn_import)r&   r`   	item_path	item_iterr'   s        r)   select_imagezImporterWindow.select_imagex   s    Y//BBDD 	$ 	$I+44Y??I<&y1!4Dd####     r*   c                     |                      d                              d            |j        }|d         D ],}|                      d|z                                              -dS )z.Display the current item's license informationpermsc                 *    |                                  S r"   )ra   )ws    r)   <lambda>z-ImporterWindow.show_license.<locals>.<lambda>   s    qvvxx r*   moduleszperm-N)r`   foreachlicense_infoshow)r&   r'   infomods       r)   r~   zImporterWindow.show_license   sp    G$$%7%7888 	? 	. 	.CKK#&&++----	. 	.r*   c                     | j                                         }| j        |         d         }t          j        |         t
                    S )z Return the selected source classr;   )rb   get_active_iterrd   r   r   ro   )r&   _iterry   s      r)   get_selected_sourcez"ImporterWindow.get_selected_source   s=    ++--&q)#C(333r*   c                 N   |                                  |                     d                                           |                     d                                           |                     d                                           d| _        |                                  dS )zEnable multi-selectionz
btn-singlemultiple-boxmultiple-buttonsTN)ra   r`   r   rs   r   r&   r`   s     r)   img_multiplezImporterWindow.img_multiple   s    L!!&&(((N##((***&'',,...     r*   c                    |                                  |                     d                                           |                     d                                            |                     d                                            t          t	          | j                                                            }| j                                         d| _	        | 
                                 dS )zEnable single-selectionzbtn-multipler   r   FN)ra   r`   r   boollistr]   r{   r^   re   rs   r   )r&   r`   is_selecteds      r)   
img_singlezImporterWindow.img_single   s    N##((***N##((***&'',,...4 ? ? A ABBCC	     r*   Nc                     | j                             | j                                                   |                                  dS )z-Add an item from the search to the multi-poolN)r^   addr]   r{   r   r   s     r)   img_addzImporterWindow.img_add   s<    	dl5577888     r*   c                     | j                                         D ]}| j                             |           |                                  dS )z-Remove any selected items from the multi-poolN)r^   r{   remove_itemr   r&   r`   r'   s      r)   
img_removezImporterWindow.img_remove   sP    I0022 	( 	(DI!!$''''     r*   c                    d}| j         r"t          t          | j                            }n3t          t          | j                                                            }|                     d                              |           dS )z,Set the import button to enabled or disabledFz
btn-importN)rs   r   r   r^   r]   r{   r`   set_sensitive)r&   enableds     r)   r   z ImporterWindow.update_btn_import   sr    = 	D4	??++GG4 ? ? A ABBCCGL!!//88888r*   c                 h    | j         r|                                  dS |                                  dS )zSearch results double clickN)rs   r   
img_importr   s     r)   result_activatezImporterWindow.result_activate   s3    = 	LLNNNNNOOr*   c                 F   g }| j         s-|                    | j                                                   n$|                    d | j        D                        d}|D ])}|                     |                                           *|r|                                  dS dS )z!Apply the selected image and quitc                     g | ]^}}|S r/   r/   ).0r'   _s      r)   
<listcomp>z-ImporterWindow.img_import.<locals>.<listcomp>   s    88874$888r*   TN)rs   extendr]   r{   r^   rr   get_fileexit)r&   r`   ri   to_exitr'   s        r)   r   zImporterWindow.img_import   s    } 	:LL88::;;;;LL88di888999 	. 	.DT]]__----  	IIKKKKK	 	r*   c                     |                                 }t          |          dk    r?|                                  |                                  |                     |           dS dS )zRemote search activationr;   N)get_textlensearch_clearsearch_startedasync_search)r&   r`   querys      r)   searchzImporterWindow.search   se    !!u::>>!!!e$$$$$ >r*   c                     |                                                      |          D ]}|                     |           |                                  dS )zAsyncronous searching in PyPIN)r   file_searchadd_search_resultsearch_finished)r&   r   resources      r)   r   zImporterWindow.async_search   s\     0022>>uEE 	- 	-H""8,,,,r*   c                     t          |t                    r|                     |          S | j                            |           dS )z-Adding things to Gtk must be done in mainloopN)
isinstancer   set_next_pager]   add_item)r&   r   s     r)   r   z ImporterWindow.add_search_result   sF     h
++ 	0%%h///h'''''r*   c                     | j                                          |                                  d| _        |                     d                                           dS )zRemove previous searchNbtn-next-page)r]   re   r   next_page_itemr`   ra   r   s     r)   r   zImporterWindow.search_clear   sT       "O$$))+++++r*   c                     |                      d                              d           |                      d                                           |                      d                                           dS )zSet widgets to stun	dl-searchFrW   N)r`   r   startr   r&   s    r)   r   zImporterWindow.search_started   sd    K  ..u555N##))+++N##((*****r*   c                     |                      d                              d           |                      d                                           |                      d                                           dS )z#After everything, finish the searchr   TrW   N)r`   r   ra   stopr   s    r)   r   zImporterWindow.search_finished   sf     	K  ..t444N##((***N##((*****r*   c                 b    || _         |                     d                                           d S )Nr   )r   r`   r   r4   s     r)   r   zImporterWindow.set_next_page   s.    "O$$))+++++r*   c                     | j         }|r?|                                  |                                  |                     |           d S d S r"   )r   r   r   async_next_pager   s      r)   show_next_pagezImporterWindow.show_next_page   sZ    " 	'!!!  &&&&&	' 	'r*   c                     |                                 D ]}|                     |           |                                  d S r"   )get_next_pager   r   )r&   r'   r   s      r)   r   zImporterWindow.async_next_page  sL    **,, 	- 	-H""8,,,,r*   r"   )r+   r,   r-   rP   rl   r_   r   r~   r   r   r   r   r   r   r   r   r   r   run_or_noner   mainloop_onlyr   r   r   r   r   r   r   rQ   rR   s   @r)   rT   rT   T   s       ..DR R R R R@! ! !. . .4 4 4! ! !	! 	! 	!! ! ! !
! ! ! !9 9 9       % % %    ( ( (, , , ,+ + + + + +, , ,' ' ' '       r*   rT   c                       e Zd ZdZej                            ej                            e                    Z	dZ
egZdS )Appz<Load the inkscape extensions glade file and attach to windowr   N)r+   r,   r-   rP   ospathjoindirname__file__	glade_dirapp_namerT   windowsr/   r*   r)   r   r   	  sB        FFRW__X6677I*HGGGr*   r   c                   P    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
ed	             ZdS )
ImportWebImagezImport an svg from the internetNc                 ~    | j         j        }|D ]-}t          |t                    r|                    |           .dS )z.Add all the items in defs to the self.svg.defsN)svgdefsr   r   rk   )r&   r   targetchilds       r)   
merge_defszImportWebImage.merge_defs  sN     	! 	!E%.. MM%    	! 	!r*   c                    t          t                    }|                                j        D ]}|D ]{}|                                }|                    |          D ]O}||                             |           d|v r|                                 d|v r|                    dd           P||	                                D ],\  }}t                      }|D ]}||z  }||j        z   |_        -dS )zPBecause we don't want conflicting style-sheets (classes, ids, etc) we scrub themz@idz@classclassN)r   r   getrootstylesheetsto_xpathxpathrk   set_random_idsetri   r   style)	r&   r   elemssheetr   r   elemstylesoutputs	            r)   merge_stylesheetsz ImportWebImage.merge_stylesheets  s   D!![[]]. 		0 		0E 0 0((IIe,, 0 0D$K&&u---~~**,,,5(($///00 "KKMM 	- 	-LD&WWF    %$*,DJJ		- 	-r*   c              #     K   |                      |           |                                D ]}t          |t                    r|                     |          E d{V  3t          |t
                    rIt          |t                    r|                     |           tt          |t          t          f          r|V  dS )z,Import an svg file into the current documentN)
r   r   r   r   
import_svgr   r   r   r   r   )r&   new_svgr   s      r)   r   zImportWebImage.import_svg0  s      w'''__&& 
	 
	E%!344 	??51111111111E<00 E4(( &&&&EIx#899 
	 
	r*   c                 J   |rt           j                            |          sd S t          |d          5 }|                    d          }d|v sd|v r.t          ||                                z             }t          |                     |                    }t          |          dk    r)t          |d         t          j                  r	|d         }n-t          j                    }|D ]}|                    |           t           j                            |          |_        |j                            | j                            d          |                                                    d          z             n|                     ||          }| j                                                            |           |                                D ]2}t          |t          j                  r|                    dd            3	 d d d            d S # 1 swxY w Y   d S )	Nrbd   s   <?xmls   <svgr:   r   g      ?zinkscape:groupmode)r   r   isfileopenreadr   r   r   r   r   inkexGrouprk   basenamelabel	transform	add_scaler   unittouur   import_rasterget_current_layerdescendantsr   )r&   filenamefhlheadr   objs	containerr   s           r)   import_from_filezImportWebImage.import_from_file?  s;    	rw~~h77 	F(D!! 	:S88C==D47d??"4#((**#455DOOG4455t99>>ja%+&F&F> $QII !&I!% 0 0!((//// #%'"2"28"<"<	#--dh.?.?.D.Doo''0055/6 7 7 7 7
 !..x==	H&&((//	::: #..00 : :eU[11 :II2D999:;	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   GHHHc                 4      fd}t          d|           d S )Nc                 2                         |            d S r"   )r  )r  r&   s    r)   rr   z*ImportWebImage.effect.<locals>.select_funcd  s    !!(+++++r*   T)
start_loopr\   )r   )r&   rr   s   ` r)   effectzImportWebImage.effectc  s7    	, 	, 	, 	, 	, 	tK000000r*   c           
         |                     d           |                     ||                    d                    }|                     d           |rt                      }t          j                            |          |_        |                    dd	                    |t          |                                                              d                               |S dS )zImport a raster imager   
   z
xlink:hrefzdata:{};base64,{}asciiN)seekget_typer   r   r   r   r   r  r   formatr   decode)r&   r  handle	file_typenodes        r)   r  zImportWebImage.import_rasteri  s     	AMM(FKKOO<<	A 	77D))(33DJHH\#6#=#=;v{{}}55<<WEE$G $G H H HK	 	r*   c                 H    dD ]\  }}|                     |          r|c S dS )z-Basic magic header checker, returns mime type))s   PNGz	image/png)s   z
image/jpeg)s   BMz	image/bmp)s   GIF87a	image/gif)s   GIF89ar  )s   MM *
image/tiff)s   II* r  N)
startswith)r   headerr
  mimes       r)   r  zImportWebImage.get_typex  sB     
	 
	JD$   && tr*   )r+   r,   r-   rP   selected_filenamer   r   r   r  r  r  staticmethodr  r/   r*   r)   r   r     s        ))! ! !- - -*  ": ": ":H1 1 1     \  r*   r   __main__)7rP   __version____pkgname__r   sysloggingwarningsfilterwarningscollectionsr   base64r   appdirsr   r   r   	inkex.guir	   r
   r   r   inkex.gui.pixmapr   r   r   r   inkex.elementsr   r   r   r   r   r   r   gi.repositoryr   import_sourcesr   r   r   r   r   r   r   rg   r.   ro   r    r1   rT   r   EffectExtensionr   r+   runr/   r*   r)   <module>r5     s  (  ) 				 



     ! ! ! # # # # # #       " " " " " "        7 7 7 7 7 7 7 7 7 7 7 7 P P P P P P P P P P P P                        ? ? ? ? ? ? ? ? ? ?
',,rwx00)
<
<7<<11:>>N6
CC	4 4 4 4 4] 4 4 4- - - - -h - - -,r r r r rV r r rj    &   x x x x xU* x x xv zN r*   