src/eric7/EricGui/EricFileIconProvider.py

branch
server
changeset 10539
4274f189ff78
child 10561
be23a662d709
equal deleted inserted replaced
10531:3308e8349e4c 10539:4274f189ff78
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2024 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing a file icon provider determining the icon based on file name.
8 """
9
10 import fnmatch
11
12 from PyQt6.QtGui import QImageReader
13
14 from eric7.EricGui import EricPixmapCache
15
16
17 class EricFileIconProvider:
18 """
19 Class implementing a file icon provider determining the icon based on file name.
20 """
21
22 def __init__(self):
23 """
24 Constructor
25 """
26
27 # pixmap icon names first because some are overwritten later
28 self.__iconMappings = {
29 "*.{0}".format(bytes(f).decode()): "filePixmap"
30 for f in QImageReader.supportedImageFormats()
31 }
32
33 # specific one next
34 self.__iconMappings.update(
35 {
36 "*.sh": "lexerBash",
37 "*.bash": "lexerBash",
38 "*.bat": "lexerBatch",
39 "*.cmd": "lexerBatch",
40 "*.cpp": "lexerCPP",
41 "*.cxx": "lexerCPP",
42 "*.cc": "lexerCPP",
43 "*.c": "lexerCPP",
44 "*.hpp": "lexerCPP",
45 "*.hh": "lexerCPP",
46 "*.h": "lexerCPP",
47 "*.cs": "lexerCsharp",
48 "CMakeLists.txt": "lexerCMake",
49 "*.cmake": "lexerCMake",
50 "*.cmake.in": "lexerCMake",
51 "*.ctest": "lexerCMake",
52 "*.ctest.in": "lexerCMake",
53 "*.css": "lexerCSS",
54 "*.qss": "lexerCSS",
55 "*.d": "lexerD",
56 "*.di": "lexerD",
57 "*.diff": "lexerDiff",
58 "*.patch": "lexerDiff",
59 "*.html": "lexerHTML",
60 "*.htm": "lexerHTML",
61 "*.asp": "lexerHTML",
62 "*.shtml": "lexerHTML",
63 "*.php": "lexerHTML",
64 "*.php3": "lexerHTML",
65 "*.php4": "lexerHTML",
66 "*.php5": "lexerHTML",
67 "*.phtml": "lexerHTML",
68 "*.docbook": "lexerHTML",
69 "*.ui": "fileDesigner",
70 "*.ts": "fileLinguist",
71 "*.qm": "fileLinguist2",
72 "*.qrc": "fileResource",
73 "*.kid": "lexerHTML",
74 "*.java": "lexerJava",
75 "*.js": "lexerJavaScript",
76 "*.lua": "lexerLua",
77 "*makefile": "lexerMakefile",
78 "Makefile*": "lexerMakefile",
79 "*.mak": "lexerMakefile",
80 "*.pl": "lexerPerl",
81 "*.pm": "lexerPerl",
82 "*.ph": "lexerPerl",
83 "*.pov": "lexerPovray",
84 "*.properties": "lexerProperties",
85 "*.ini": "lexerProperties",
86 "*.inf": "lexerProperties",
87 "*.reg": "lexerProperties",
88 "*.cfg": "lexerProperties",
89 "*.cnf": "lexerProperties",
90 "*.rc": "lexerProperties",
91 "*.py": "lexerPython3",
92 "*.pyw": "lexerPython3",
93 "*.py3": "lexerPython3",
94 "*.pyw3": "lexerPython3",
95 "*.pyx": "lexerCython",
96 "*.pxd": "lexerCython",
97 "*.pxi": "lexerCython",
98 "*.ptl": "lexerPython3",
99 "*.rb": "lexerRuby",
100 "*.rbw": "lexerRuby",
101 "*.sql": "lexerSQL",
102 "*.tex": "lexerTeX",
103 "*.sty": "lexerTeX",
104 "*.aux": "lexerTeX",
105 "*.toc": "lexerTeX",
106 "*.idx": "lexerTeX",
107 "*.vhd": "lexerVHDL",
108 "*.vhdl": "lexerVHDL",
109 "*.tcl": "lexerTCL",
110 "*.tk": "lexerTCL",
111 "*.f": "lexerFortran",
112 "*.for": "lexerFortran",
113 "*.f90": "lexerFortran",
114 "*.f95": "lexerFortran",
115 "*.f2k": "lexerFortran",
116 "*.dpr": "lexerPascal",
117 "*.dpk": "lexerPascal",
118 "*.pas": "lexerPascal",
119 "*.dfm": "lexerPascal",
120 "*.inc": "lexerPascal",
121 "*.pp": "lexerPascal",
122 "*.ps": "lexerPostScript",
123 "*.xml": "lexerXML",
124 "*.xsl": "lexerXML",
125 "*.svg": "fileSvg",
126 "*.xsd": "lexerXML",
127 "*.xslt": "lexerXML",
128 "*.dtd": "lexerXML",
129 "*.rdf": "lexerXML",
130 "*.xul": "lexerXML",
131 "*.yaml": "lexerYAML",
132 "*.yml": "lexerYAML",
133 "*.m": "lexerMatlab",
134 "*.m.matlab": "lexerMatlab",
135 "*.m.octave": "lexerOctave",
136 "*.e4c": "lexerXML",
137 "*.e4d": "lexerXML",
138 "*.e4k": "fileShortcuts",
139 "*.e4m": "fileMultiProject",
140 "*.e4p": "fileProject",
141 "*.e4q": "lexerXML",
142 "*.e4s": "lexerXML",
143 "*.e4t": "lexerXML",
144 "*.e5d": "lexerXML",
145 "*.e5g": "fileUML",
146 "*.e5k": "fileShortcuts",
147 "*.e5m": "fileMultiProject",
148 "*.e5p": "fileProject",
149 "*.e5q": "lexerXML",
150 "*.e5s": "lexerXML",
151 "*.e5t": "lexerXML",
152 "*.e6d": "lexerXML",
153 "*.e6k": "fileShortcuts",
154 "*.e6m": "fileMultiProject",
155 "*.e6p": "fileProject",
156 "*.e6q": "lexerXML",
157 "*.e6s": "lexerXML",
158 "*.e6t": "lexerXML",
159 "*.ecj": "lexerJSON",
160 "*.edj": "lexerJSON",
161 "*.egj": "fileUML",
162 "*.ehj": "lexerJSON",
163 "*.ekj": "fileShortcuts",
164 "*.emj": "fileMultiProject",
165 "*.epj": "fileProject",
166 "*.eqj": "lexerJSON",
167 "*.esj": "lexerJSON",
168 "*.etj": "lexerJSON",
169 "*.ethj": "lexerJSON",
170 "*.po": "lexerGettext",
171 "*.coffee": "lexerCoffeeScript",
172 "*.json": "lexerJSON",
173 "*.md": "lexerMarkdown",
174 "*.toml": "lexerProperties",
175 "Pipfile": "lexerProperties",
176 "poetry.lock": "lexerProperties",
177 "*.pdf": "pdfviewer",
178 }
179 )
180
181 def fileIcon(self, name):
182 """
183 Public method to get an icon for the given file name.
184
185 @param name file name
186 @type str
187 @return icon
188 @rtype QIcon
189 """
190 for pat in self.__iconMappings:
191 if fnmatch.fnmatch(name, pat):
192 return EricPixmapCache.getIcon(self.__iconMappings[pat])
193 else:
194 return EricPixmapCache.getIcon("fileMisc")
195
196 def fileIconName(self, name):
197 """
198 Public method to get an icon name for the given file name.
199
200 @param name file name
201 @type str
202 @return icon name
203 @rtype str
204 """
205 for pat in self.__iconMappings:
206 if fnmatch.fnmatch(name, pat):
207 return self.__iconMappings[pat]
208 else:
209 return "fileMisc"

eric ide

mercurial