NumeRe v1.1.4
NumeRe: Framework für Numerische Rechnungen
IconManager.cpp
Go to the documentation of this file.
1#include "IconManager.h"
2#include "globals.hpp"
3
4#include <string>
5#include <vector>
6
7#include <wx/icon.h>
8#include <wx/iconloc.h>
9#include <wx/mimetype.h>
10#include <wx/bitmap.h>
11
12#include "icons/defaultfile.xpm"
13#include "icons/closedfolder16x1632bpp.xpm"
14#include "icons/exe.xpm"
15#include "icons/doc.xpm"
16
17#include "../kernel/core/io/logger.hpp"
18
19
20
21
22IconManager::IconManager(const wxString& programPath)
23{
25
26 m_images = new wxImageList(16, 16);
27
28
29 m_iconExtensionMapping["cpj"] = m_images->GetImageCount();
30 m_iconExtensionMapping["DEFAULTFILEEXTENSION"] = m_images->GetImageCount();
31 wxBitmap defaultfile(defaultfile_xpm);
32 m_images->Add(defaultfile);
33
34 wxBitmap closedfolder(closedfolder16x1632bpp_xpm);
35 m_iconExtensionMapping["FOLDERCLOSED"] = m_images->GetImageCount();
36 m_images->Add(closedfolder);
37
38 wxBitmap document(doc_xpm);
39 m_iconExtensionMapping["DOCUMENT"] = m_images->GetImageCount();
40 m_images->Add(document);
41
42 //wxBitmap openfolder(openfolder16x1632bpp_xpm);
43 wxIcon openfolder(programPath + "/icons/folder.ico", wxBITMAP_TYPE_ICO);
44 m_iconExtensionMapping["FOLDEROPEN"] = m_images->GetImageCount();
45 m_images->Add(openfolder);
46
47 wxIcon functions(programPath + "/icons/fnc.ico", wxBITMAP_TYPE_ICO);
48 m_iconExtensionMapping["FUNCTIONS"] = m_images->GetImageCount();
49 m_images->Add(functions);
50
51 wxIcon commands(programPath + "/icons/cmd.ico", wxBITMAP_TYPE_ICO);
52 m_iconExtensionMapping["COMMANDS"] = m_images->GetImageCount();
53 m_images->Add(commands);
54
55 wxIcon constants(programPath + "/icons/cnst.ico", wxBITMAP_TYPE_ICO);
56 m_iconExtensionMapping["CONSTANTS"] = m_images->GetImageCount();
57 m_images->Add(constants);
58
59 wxIcon methods(programPath + "/icons/mthd.png", wxBITMAP_TYPE_PNG);
60 m_iconExtensionMapping["METHODS"] = m_images->GetImageCount();
61 m_images->Add(methods);
62
63 wxIcon NSCR(programPath + "/icons/nscr.ico", wxBITMAP_TYPE_ICO);
64 m_iconExtensionMapping["nscr"] = m_images->GetImageCount();
65 m_iconExtensionMapping[".nscr"] = m_images->GetImageCount();
66 m_images->Add(NSCR);
67
68 wxIcon ICON(programPath + "/icons/icon.ico", wxBITMAP_TYPE_ICO);
69 m_iconExtensionMapping["WORKPLACE"] = m_images->GetImageCount();
70 m_images->Add(ICON);
71
72 wxIcon NPRC(programPath + "/icons/nprc.ico", wxBITMAP_TYPE_ICO);
73 m_iconExtensionMapping["nprc"] = m_images->GetImageCount();
74 m_iconExtensionMapping[".nprc"] = m_images->GetImageCount();
75 m_images->Add(NPRC);
76
77 wxIcon NDAT(programPath + "/icons/ndat.ico", wxBITMAP_TYPE_ICO);
78 m_iconExtensionMapping["ndat"] = m_images->GetImageCount();
79 m_iconExtensionMapping[".ndat"] = m_images->GetImageCount();
80 m_images->Add(NDAT);
81
82 wxIcon NLYT(programPath + "/icons/nlyt.ico", wxBITMAP_TYPE_ICO);
83 m_iconExtensionMapping["nlyt"] = m_images->GetImageCount();
84 m_iconExtensionMapping[".nlyt"] = m_images->GetImageCount();
85 m_images->Add(NLYT);
86
87 wxIcon NPKP(programPath + "/icons/npkp.ico", wxBITMAP_TYPE_ICO);
88 m_iconExtensionMapping["npkp"] = m_images->GetImageCount();
89 m_iconExtensionMapping[".npkp"] = m_images->GetImageCount();
90 m_images->Add(NPKP);
91
92 wxIcon NHLP(programPath + "/icons/nhlp.ico", wxBITMAP_TYPE_ICO);
93 m_iconExtensionMapping["nhlp"] = m_images->GetImageCount();
94 m_iconExtensionMapping[".nhlp"] = m_images->GetImageCount();
95 m_images->Add(NHLP);
96
97 wxIcon DAT(programPath + "/icons/dat.ico", wxBITMAP_TYPE_ICO);
98 m_iconExtensionMapping["dat"] = m_images->GetImageCount();
99 m_iconExtensionMapping[".dat"] = m_images->GetImageCount();
100 m_images->Add(DAT);
101
102 wxIcon JDX(programPath + "/icons/jdx.ico", wxBITMAP_TYPE_ICO);
103 m_iconExtensionMapping["jdx"] = m_images->GetImageCount();
104 m_iconExtensionMapping["dx"] = m_images->GetImageCount();
105 m_iconExtensionMapping["jcm"] = m_images->GetImageCount();
106 m_iconExtensionMapping[".jdx"] = m_images->GetImageCount();
107 m_iconExtensionMapping[".dx"] = m_images->GetImageCount();
108 m_iconExtensionMapping[".jcm"] = m_images->GetImageCount();
109 m_images->Add(JDX);
110
111 wxIcon LABX(programPath + "/icons/labx.ico", wxBITMAP_TYPE_ICO);
112 m_iconExtensionMapping["labx"] = m_images->GetImageCount();
113 m_iconExtensionMapping[".labx"] = m_images->GetImageCount();
114 m_images->Add(LABX);
115
116 wxIcon IBW(programPath + "/icons/ibw.ico", wxBITMAP_TYPE_ICO);
117 m_iconExtensionMapping["ibw"] = m_images->GetImageCount();
118 m_iconExtensionMapping[".ibw"] = m_images->GetImageCount();
119 m_images->Add(IBW);
120
121 wxIcon PDF(programPath + "/icons/pdf.ico", wxBITMAP_TYPE_ICO);
122 m_iconExtensionMapping["pdf"] = m_images->GetImageCount();
123 m_iconExtensionMapping[".pdf"] = m_images->GetImageCount();
124 m_images->Add(PDF);
125
126 wxIcon MATLAB(programPath + "/icons/m.ico", wxBITMAP_TYPE_ICO);
127 m_iconExtensionMapping["m"] = m_images->GetImageCount();
128 m_iconExtensionMapping[".m"] = m_images->GetImageCount();
129 m_images->Add(MATLAB);
130
131
132
133 AddIconToList("c");
134 AddIconToList("cpp");
135 AddIconToList("h");
136
138 AddIconToList("lib");
139
141 CreateDisabledIcon("cpp");
143
144 AddIconToList("txt");
145
146 wxBitmap exe(exe_xpm);
147 m_iconExtensionMapping["exe"] = m_images->GetImageCount();
148
149 // we'll assume any .out files are also executable
150 m_iconExtensionMapping["out"] = m_images->GetImageCount();
151 m_images->Add(exe);
152}
153
155{
156 delete m_images;
157}
158
159bool IconManager::AddIconToList(wxString iconInfo)
160{
161 // wxTheMimeTypesManager is a wxWidgets-created global instance
162 wxFileType* fileType = wxTheMimeTypesManager->GetFileTypeFromExtension(iconInfo);
163
164 if (fileType == NULL)
165 {
166 return false;
167 }
168
169 wxIconLocation iconLocation;
170
171 bool result = false;
172
173 if (fileType->GetIcon(&iconLocation))
174 {
175 wxIcon fileIcon;
176 wxString fullname = iconLocation.GetFileName();
177
178 while (fullname.find('"') != std::string::npos)
179 fullname.erase(fullname.find('"'),1);
180
181 if (fullname == wxEmptyString || fullname == "%1" || fullname == "%2")
182 {
183 m_iconExtensionMapping[iconInfo] = m_iconExtensionMapping["DEFAULTFILEEXTENSION"];
184 return true;
185 }
186
187 if (iconLocation.GetIndex())
188 fullname << _T(';') << iconLocation.GetIndex();
189
190 bool res = false;
191
192 if (!(res = fileIcon.LoadFile(fullname, wxBITMAP_TYPE_ICO, std::rint(16*m_imageScaleFactor), std::rint(16*m_imageScaleFactor))))
193 {
194 // Hack-try-detect-DPIs
195 if (m_imageScaleFactor == 1.0)
196 {
197 // Somewhat the most common scaling factors
198 std::vector<double> scaleFactors = {1.2, 1.25, 1.4, 1.5, 1.75, 1.8, 2.0};
199
200 // Try to find the fitting factor
201 for (auto scale : scaleFactors)
202 {
203 if ((res = fileIcon.LoadFile(fullname, wxBITMAP_TYPE_ICO, std::rint(16*scale), std::rint(16*scale))))
204 {
205 m_imageScaleFactor = scale;
206 g_pixelScale = scale;
207 break;
208 }
209 }
210 }
211
212 if (!res)
213 return false;
214 }
215
216 int newIconIndex = m_images->GetImageCount();
217 m_images->Add(fileIcon);
218
219 m_iconExtensionMapping[iconInfo] = newIconIndex;
220
221 result = true;
222 }
223
224 delete fileType;
225 return result;
226}
227
228int IconManager::GetIconIndex(wxString iconInfo)
229{
230 int currentExtensionIconNumber;
231
232 if (iconInfo == wxEmptyString)
233 {
234 return m_iconExtensionMapping["DEFAULTFILEEXTENSION"];
235 }
236
237 if (m_iconExtensionMapping.find(iconInfo) != m_iconExtensionMapping.end())
238 {
239 currentExtensionIconNumber = m_iconExtensionMapping[iconInfo];
240 }
241 else
242 {
243 if (AddIconToList(iconInfo))
244 {
245 currentExtensionIconNumber = m_iconExtensionMapping[iconInfo];
246 }
247 else
248 {
249 currentExtensionIconNumber = m_iconExtensionMapping["DEFAULTFILEEXTENSION"];
250 }
251 }
252
253 return currentExtensionIconNumber;
254}
255
256
257void IconManager::CreateDisabledIcon(wxString iconInfo)
258{
259 int iconIndex = GetIconIndex(iconInfo);
260 wxIcon icon = m_images->GetIcon(iconIndex);
261 wxBitmap iconBitmap;
262 iconBitmap.CopyFromIcon(icon);
263
264 wxMemoryDC dc;
265 wxPen pen(wxColour("navy"), 2);
266 dc.SetPen(pen);
267
268 dc.SelectObject(iconBitmap);
269 dc.DrawLine(0, 0, 15, 15);
270 dc.DrawLine(15, 0, 0, 15);
271 dc.SelectObject(wxNullBitmap);
272
273 wxIcon disabledIcon;
274 disabledIcon.CopyFromBitmap(iconBitmap);
275
276 wxString disabledIconName = iconInfo + "_disabled";
277 m_iconExtensionMapping[disabledIconName] = m_images->GetImageCount();
278 m_images->Add(disabledIcon);
279}
280
282{
283 return m_images;
284}
double g_pixelScale
IconManager(const wxString &programPath)
Definition: IconManager.cpp:22
wxImageList * m_images
Definition: IconManager.h:28
void CreateDisabledIcon(wxString iconInfo)
bool AddIconToList(wxString iconInfo)
int GetIconIndex(wxString iconInfo)
wxImageList * GetImageList()
StringIntHashmap m_iconExtensionMapping
Definition: IconManager.h:27
double m_imageScaleFactor
Definition: IconManager.h:29
#define _T(x)
Definition: muParserDef.h:72
value_type rint(value_type v)