a
    a[                     @   s   d dl Z d dlmZ d dlZd dlZd dlmZm	Z	 d dl
mZmZ d dlmZmZ d dlmZ d dlmZ d dlmZ d dlmZmZ d dlZG d	d
 d
Ze ZdddZdddZdddZdd Z dd Z!dd Z"ej#Z#dS )    N)QBuffer
QByteArray)QIconQImage)QStyleQWidget)CONF)get_image_path)is_text_file)QStylePaletteSpyderPalettec                   @   sN   e Zd ZdZdd ZdddZddd	Zdd
dZdd Zdd Z	dd Z
dS )IconManagerz!Class that manages all the icons.c                 C   s\  t j| _dd dD | _dddddddd| _dddd	| _i | _tj	d
r\d| _
d| _n$tjdkrtd| _
d| _n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tttd!d"d#| _d$d%| jigd&d%| jigd'd%| jigd(d%| jigd)d%| jigd*| jd+d,gd-d%| jigd.d%| jigd/d%t jigd0d%t jigd1d%| jigd2d%| jigd3d%| jigd4d%| jigd5d%| jigd6d%| jigd7d%| jigd8d%| jigd9d%| jigd:d%| jigd;d%| jigd<t jd=dd>gd<t jdd?gd@t jdd?gdAd%| jigdBt jdCd?gdDd%t jigdEd%t jigdFd%t jigdGd%t jigdHd%t jigd0d%t jigd/d%t jigdId%| jigdJdKt jtjdLgigdMdKt jtjdLgigdNdKt jtjdLgigdOd%| jigdPd%| jigdQd%| jigdRd%| jigdSd%| jigdTd%| jigdUd%| jigdVd%| jigdWd%t jigdJd%t jigdXd%t jigdYd%t jigdId%t jigdZd%| jigd[dKd%t jid%t jigigd[dKd%t jid%t jigigd\d%| jigd]d%| jigd@d%| jigd^d%| jigd_d%| jigd`d%| jigdad%| jigdbd%| jigdBd%| jigdcd%| jigdddKd%t jid%t j id%t j!igigded%| jigdfd%| jigd6d%| jigdgd%| jigdhd%| jigdid%| jigdjd%| jigdkd%| jigdld%| jigdmd%| jigdnd%| jigdod%| jigdpd%| jigdqd%| jigdrd%| jigdJd%| jigdsd%| jigdtd%| jigdud%| jigdvd%| jigdwd%| jigdxd%| jigdyd%| jigdzd%| jigd{d%| jigd|d%| jigd}d%| jigdad%| jigd~d%| jigdd%| jigd| jd+d,gdd%| jigdd%| jigdd%t jigdd%t jigdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigd;d%| jigdd%| jigdd%| jigdd%| jigdd%| jigd5d%| jigd4d%| jigdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigd)d%| jigdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigd5d%| jigdBd%| jigdd%| jigdd%| jigd| jdd,gdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigdt j| j
d?gdt j| j
d?gdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigdt j| j
d?gdt j"| j
d?gdt j"| j
d?gdt j"| j
d?gdt j"| j
d?gdt j"| j
d?gdt j#| j
d?gd4| j| jd?gdt j$| j
d?gdt j%| j
d?gdt j"| j
d?gdt j"| j
d?gdt j"| j
d?gdt j"| j
d?gdt j&| j
d?gdt j&| j
d?gdt j&| j
d?gdt j| j
d?gdt j"| j
d?gdt j| j
d?gdt j| j
d?gdt j%| j
d?gdt j| j
d?gdt j"| j
d?gdt j"| j
d?gdt j%| j
d?gdt j'| j
d?gdt j| j
d?gdt j(| j
d?gdt j(| j
d?gdt j(| j
d?gdt j'| jd?gdt j'| jd?gdt j| j
d?gdt j"| j
d?gdt j(| j
d?gdt j| jd?gdt j| jd?gd<t j#| jd?gdd%| jigdd%| jigd;d%| jigdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigdd%| jigdd%t j#igdd%| jigdd%t j#igdd%| jigdd%| jigdd%| jigdJd%t jigdJd%t jigdd%| jigdd%| jigdd%| jigdۜ| _)d S )Nc                 S   s   i | ]
}|d qS )ZArchiveFileIcon ).0xr   r   8lib/python3.9/site-packages/spyder/utils/icon_manager.py
<dictcomp>       z(IconManager.__init__.<locals>.<dictcomp>)zipzx-tarzx-7z-compressedZrarPowerpointFileIconWordFileIconExcelFileIconPDFIcon)zvnd.ms-powerpointz=vnd.openxmlformats-officedocument.presentationml.presentationZmswordz;vnd.openxmlformats-officedocument.wordprocessingml.documentzvnd.ms-excelz5vnd.openxmlformats-officedocument.spreadsheetml.sheetZpdf)z.xlsxz.docxz.pptxZlinuxg      ?g?ntg?g?	CFileIconCppFileIconCsharpFileIconPythonFileIconJavaFileIconJavascriptFileIcon	RFileIconSwiftFileIconGridFileIconWindowsFileIconPowershellFileIconDollarFileIconMarkdownFileIconJsonFileIconCodeFileIconExclamationFileIcon)$z.cz.hz.ccz.hhz.cppz.cxxz.c++z.hppz.hxxz.h++z.csz.asmxz.pyz.py3z.pyxz.pywz.javaz.javz.jz.jsz.rz.rnwz.rmdz.swiftz.csvz.tsvz.batz.pslz.shz.mdz.jsonz.htmlz.cssz.ymlz.yamlz.xmlz../fontsF)	directoryloaded)zmdi.cube-outlinecolor)zmdi.drag-horizontal)zmdi.format-letter-case)z	mdi.regex)zmdi.file-document)z
mdi.wrenchZ   )r,   Zrotated)zmdi.format-bold)zmdi.format-italic)zmdi.play)zmdi.stop)zmdi.keyboard)zmdi.eyedropper)zmdi.menu)zmdi.file)zmdi.folder-open)zmdi.undo)zmdi.content-save)zmdi.content-save-all)zmdi.content-save-edit)zmdi.printer)z	mdi.close)zmdi.checkbox-blank-circleg      ?)r,   Zopacityscale_factor)r,   r.   )zmdi.help-circle)zmdi.dots-vertical)zmdi.arrow-right-boldg      ?)zmdi.step-forward-2)zmdi.debug-step-over)zmdi.fast-forward)zmdi.debug-step-into)zmdi.debug-step-out)zmdi.check-bold)z	mdi.alertZoptions)r,   Zcolor_disabled)zmdi.arrow-left)zmdi.arrow-right)zmdi.hand-pointing-left)zmdi.hand-pointing-right)zmdi.comment-text-outline)zmdi.format-indent-decrease)zmdi.format-indent-increase)zmdi.format-letter-case-lower)zmdi.format-letter-case-upper)zmdi.format-line-spacing)zmdi.close-circle)zmdi.information-outline)zmdi.lightbulb)zmdi.console)zspyder.python-logo-upzspyder.python-logo-down)zmdi.file-find)zmdi.history)zmdi.lock)zmdi.lock-open)zmdi.file-tree)zmdi.view-list)zmdi.arrow-left-bold)zmdi.arrow-up-bold)zspyder.spyder-logo-backgroundzspyder.spyder-logo-webzspyder.spyder-logo-snake)zmdi.magnify)zmdi.find-replace)zmdi.redo)zmdi.refresh)z
mdi.reload)zmdi.content-copy)zmdi.content-cut)z
mdi.delete)zmdi.select-all)z	mdi.power)zmdi.package-variant)zmdi.bug)zmdi.arrow-collapse-all)zmdi.arrow-expand-all)zmdi.table-edit)zmdi.home)zmdi.chart-line)zmdi.chart-histogram)z	mdi.image)z	mdi.login)zmdi.rename-box)zmdi.file-move)zmdi.plus)z	mdi.minus)zmdi.tab)zmdi.window-maximize)zmdi.close-box-outline)zmdi.cursor-pointer)z
mdi.filter)zmdi.folder-plus)zmdi.source-commit)zmdi.source-repository)zmdi.download)zmdi.minus-box)zmdi.plus-box)zmdi.arrow-down-bold-circle)zmdi.arrow-up-bold-circle)zmdi.arrow-left-bold-circle)zmdi.arrow-right-bold-circle)z	mdi.check)z
mdi.folder)zmdi.lifebuoy)z	mdi.video)zmdi.information)zmdi.file-excel)zmdi.file-word)zmdi.file-powerpoint)zmdi.file-pdf)zmdi.file-music)zmdi.file-image)zmdi.file-video)zmdi.language-c)zmdi.language-cpp)zmdi.language-csharp)zmdi.language-python)zmdi.language-java)zmdi.language-javascript)zmdi.language-r)zmdi.language-swift)zmdi.grid)zmdi.windows)zmdi.powershell)zmdi.currency-usd)zmdi.markdown)zmdi.json)zmdi.exclamation)zmdi.xml)zmdi.collapse-all)zmdi.expand-all)zmdi.subdirectory-arrow-righti  )zmdi.console-line)zmdi.content-paste)z
mdi.pencil)zmdi.alpha-c-circle)zmdi.alpha-r-circle)zmdi.chevron-double-up)zmdi.chevron-up)zmdi.chevron-double-down)zmdi.chevron-down)zmdi.open-in-new)zmdi.window-close)zmdi.dots-horizontal)zmdi.alpha-k-box)zmdi.alpha-c-box)zmdi.alpha-e-box)zmdi.alpha-v-box)zmdi.alpha-u-box)zmdi.alpha-t-box)zmdi.alpha-s-box)zmdi.alpha-a-box)zmdi.alpha-r-box)zmdi.alpha-p-box)zmdi.alpha-m-box)zmdi.alpha-n-box)zmdi.alpha-i-box)zmdi.alpha-b-box)zmdi.alpha-o-box)zmdi.eye-off)zmdi.alpha-f-box)z	mdi.pound)zmdi.percent)z
mdi.github)zmdi.map-outline)zmdi.skip-backward)zmdi.skip-previous)zmdi.skip-next)zmdi.skip-forward)zmdi.timer-outline)zmdi.archive)zmdi.eye)zmdi.at)zmdi.menu-right)zmdi.menu-down)zmdi.code-tags-check)zmdi.image-broken-variant)zmdi.source-fork)zmdi.dock-bottom)Zenvironmentzdrag-horizontalZformat_letter_caseZregexlogZ	configureZboldZitalicZ	run_smallstopZkeyboardZ
eyedropperZtooloptionsZfilenewZfileopenZrevertZfilesaveZsave_allZ
filesaveasprintZ	filecloseZbreakpoint_transparentZbreakpoint_bigZbreakpoint_cond_bigZbreakpointsZarrow_debuggerdebugzarrow-step-overzarrow-continuezarrow-step-inzarrow-step-outZ
stop_debugrunZ	todo_listZwng_listZprev_wngZnext_wngZprev_cursorZnext_cursorZcommentindentZunindentZtoggle_lowercaseZtoggle_uppercaseZgotolineerrorZwarningZinformationhintZtodoZipython_consoleZpythonZ
pythonpathZfindfhistoryhelplockZ	lock_openZoutline_explorerZdicteditZpreviousnextZupspyderfindreplaceZundoZredoZrefreshZrestartZeditcopyZeditcutZ	editclearZ	selectallexitZadvancedZbugZwindow_nofullscreenZwindow_fullscreenZMessageBoxWarningZarredithomeZplotZhistZimshowinsertrenameZmoveZedit_addZedit_removeZ
browse_tabZfilelistZ	newwindowZclose_panelZ
fromcursorfilterZ
folder_newZ
vcs_commitZ
vcs_browseZ
fileimportZoptions_lessZoptions_moreZ	ArrowDownZArrowUpZ	ArrowBackZArrowForwardZDialogApplyButtonZDialogCloseButtonZDirClosedIconZDialogHelpButtonZ	VideoIconZMessageBoxInformationDirOpenIconZFileIconr   r   r   r   AudioFileIconImageFileIconVideoFileIconTextFileIconr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r)   r(   ZprojectZarrowZcollapseexpandZrestoreZcollapse_selectionZexpand_selectionZcopywopZ	editpasteZeditZ
conventionZrefactorZ2uparrowZ1uparrowZ
2downarrowZ
1downarrowZundockZ
close_paneZtoolbar_ext_buttonkeywordr,   enumvalueZconstantZunittextfileZsnippetZ	attributeZ	referenceZvariableZfieldpropertymodule	namespacepackageclassZ	interfacestringZnumberZbooleanZarrayobjectkeyZnullenum_memberZstructZeventoperatorZtype_parameterZprivate2Zprivate1methodconstructorZfunctionZblockcommentZcellZno_matchZgithubZtourz
tour.closez	tour.homeztour.previousz	tour.nextztour.endZprofilerZcondapackageszspyder.examplezspyder.autopep8zspyder.memory_profilerzspyder.line_profilerZsymbol_findzfolding.arrow_right_offzfolding.arrow_right_onzfolding.arrow_down_offzfolding.arrow_down_onZ	lspserverZdependency_okZdependency_warningZdependency_errorZbroken_imageZ	code_forkZ	statusbar)*r   ZICON_1MAIN_FG_COLOR	BIN_FILESDOCUMENT_FILESOFFICE_FILESICONS_BY_EXTENSIONsysplatform
startswithZBIG_ATTR_FACTORZSMALL_ATTR_FACTORosnameLANGUAGE_ICONSospjoindirnamerealpath__file__	_resourceZICON_3ZCOLOR_ERROR_1ZICON_4ZICON_2ZCOLOR_WARN_2r   ZCOLOR_TEXT_4ZGROUP_9ZPYTHON_LOGO_UPZPYTHON_LOGO_DOWNZSPYDER_LOGO_BACKGROUNDZSPYDER_LOGO_WEBZSPYDER_LOGO_SNAKEZICON_5ZGROUP_3ZGROUP_11ZGROUP_12ZGROUP_5ZCOLOR_ERROR_3ZCOLOR_WARN_3_qtaargs)selfr   r   r   __init__   s@   
(" zIconManager.__init__Nc                 C   sH   | dsd| }t  tt|}|du r4|S t|||S dS )zGet standard platform icon.ZSP_N)ra   r   ZstyleZstandardIcongetattrr   r   pixmap)rl   rc   sizeiconr   r   r   get_std_iconS  s    
zIconManager.get_std_iconFc                 C   sB   t |}t|}|r:t }dD ]}|||| q|S |S dS )ac  Return image inside a QIcon object.

        default: default image name or icon
        resample: if True, manually resample icon pixmaps for usual sizes
        (16, 24, 32, 48, 96, 128, 256). This is recommended for QMainWindow icons
        created from SVG images on non-Windows platforms due to a Qt bug.
        See spyder-ide/spyder#1314.
        )          0   `         i   N)r	   r   Z	addPixmapro   )rl   rc   resampleZ	icon_pathrq   Zicon0rp   r   r   r   get_icon]  s    	zIconManager.get_iconc                 C   s   t dd}|dkrz\| jd sBtjddd| jd d	 d
| jd< | j| \}}|d ur`||d< tj|i |W S  ty   t| 	|}|d ur|nt  Y S 0 n(|dkr| j	||d}|d ur|S t S d S )NZ
appearanceZ
icon_themezspyder 3r+   r;   z
spyder.ttfzspyder-charmap.jsonr*   )r*   Tr.   zspyder 2rz   )
r   getrj   qtaZ	load_fontrk   rq   KeyErrorr   r{   )rl   rc   r.   rz   Zthemeargskwargsrq   r   r   r   rq   p  s$    


zIconManager.iconc                 C   s  i }| | j | | j t|}t| \}}t|\}}t	|rTd}||f| j
v rp| j
||f S t	|r| d|}n@| d}|| jv r| | j| |}n|| jv r| | j| |}n|dkr| d}n|dkr| d}nt|r| d|}n|d	urz|d
\}	}
W n tyF   d	}	Y n0 |	d	u r^| d}nl|	dkrv| d|}nT|	dkr| d|}n<|	dkr| d|}n$|	dkr|
|v r| ||
 |}|| j
||f< |S )z/Return the icon depending on the file extensionZFolderrC   Zbinaryz.ipynbZnotebookz.texZfile_type_texrG   N/ZaudiorD   ZvideorF   imagerE   Zapplication)updater[   r\   re   basenamesplitextlowermimeZ
guess_typeisdirr^   rq   r]   rd   r
   split
ValueError)rl   fnamer.   Zapplication_iconsr   __	extensionZ	mime_typeZicon_by_extensionZ	file_typeZbin_namer   r   r   get_icon_by_extension_or_type  sj    
















z)IconManager.get_icon_by_extension_or_typec                 C   s   |  |}t|||S )z Convert icon to base64 encoding.)rq   base64_from_icon_obj)rl   	icon_namewidthheighticon_objr   r   r   base64_from_icon  s    
zIconManager.base64_from_iconc                 C   s>   t ||| }t }t|}||d |   S )z'Convert icon object to base64 encoding.ZPNG)	r   ro   ZtoImager   r   ZsaveZtoBase64datadecode)rl   r   r   r   r   Z
byte_arraybufferr   r   r   r     s
    z IconManager.base64_from_icon_obj)N)F)NF)__name__
__module____qualname____doc__rm   rr   r{   rq   r   r   r   r   r   r   r   r      s     9



Ar   c                 C   s   t j| |dS )N)rp   )imarr   )rc   rp   r   r   r   rr     s    rr   Fc                 C   s   t j| |dS )Nr|   )r   r{   )rc   rz   r   r   r   r{     s    r{   c                 C   s   t j| ||dS )N)r.   rz   )r   rq   )rc   r.   rz   r   r   r   rq     s    rq   c                 C   s   t | |S N)r   r   )r   r.   r   r   r   r     s    r   c                 C   s   t | ||S r   )r   r   )r   r   r   r   r   r   r     s    r   c                 C   s   t | ||S r   )r   r   )r   r   r   r   r   r   r     s    r   )N)F)NF)$rb   os.pathpathre   Z	mimetypesr   r_   Zqtpy.QtCorer   r   Z
qtpy.QtGuir   r   Zqtpy.QtWidgetsr   r   Zspyder.config.managerr   Zspyder.utils.image_path_managerr	   Zspyder.utils.encodingr
   Zspyder.utils.paletter   r   Z	qtawesomer~   r   r   rr   r{   rq   r   r   r   rZ   r   r   r   r   <module>   s.      =


