1 
2 #include "fpimagelist.h"
3 
4 #ifndef CB_PRECOMP
5     #include <wx/string.h>
6     #include <wx/bitmap.h>
7 
8     #include <configmanager.h>
9 #endif
10 
FPImageList(int imSize)11 FPImageList::FPImageList(int imSize)
12 {
13     //ctor
14     CreateImageList(imSize);
15 }
16 
~FPImageList()17 FPImageList::~FPImageList()
18 {
19     //dtor
20     delete m_pImlist;
21 }
22 
CreateImageList(int imSize)23 void FPImageList::CreateImageList(int imSize)
24 {
25     wxString prefix2;
26     if (imSize <= 19)
27     {
28         m_pImlist = new wxImageList(16, 16);
29         prefix2 = ConfigManager::GetDataFolder() + _T("/images/fortranproject/16x16/");
30     }
31     else if (imSize <= 23)
32     {
33         m_pImlist = new wxImageList(20, 20);
34         prefix2 = ConfigManager::GetDataFolder() + _T("/images/fortranproject/20x20/");
35     }
36     else if (imSize <= 27)
37     {
38         m_pImlist = new wxImageList(24, 24);
39         prefix2 = ConfigManager::GetDataFolder() + _T("/images/fortranproject/24x24/");
40     }
41     else if (imSize <= 31)
42     {
43         m_pImlist = new wxImageList(28, 28);
44         prefix2 = ConfigManager::GetDataFolder() + _T("/images/fortranproject/28x28/");
45     }
46     else if (imSize <= 39)
47     {
48         m_pImlist = new wxImageList(32, 32);
49         prefix2 = ConfigManager::GetDataFolder() + _T("/images/fortranproject/32x32/");
50     }
51     else if (imSize <= 47)
52     {
53         m_pImlist = new wxImageList(40, 40);
54         prefix2 = ConfigManager::GetDataFolder() + _T("/images/fortranproject/40x40/");
55     }
56     else if (imSize <= 55)
57     {
58         m_pImlist = new wxImageList(48, 48);
59         prefix2 = ConfigManager::GetDataFolder() + _T("/images/fortranproject/48x48/");
60     }
61     else if (imSize <= 63)
62     {
63         m_pImlist = new wxImageList(56, 56);
64         prefix2 = ConfigManager::GetDataFolder() + _T("/images/fortranproject/56x56/");
65     }
66     else
67     {
68         m_pImlist = new wxImageList(64, 64);
69         prefix2 = ConfigManager::GetDataFolder() + _T("/images/fortranproject/64x64/");
70     }
71     wxBitmap bmp;
72 
73     bmp = cbLoadBitmap(prefix2 + _T("ctor_public.png"), wxBITMAP_TYPE_PNG);
74     m_pImlist->Add(bmp);
75     m_ImgNr["use"] = 0;
76     bmp = cbLoadBitmap(prefix2 + _T("class_public.png"), wxBITMAP_TYPE_PNG);
77     m_pImlist->Add(bmp);
78     m_ImgNr["module"] = 1;
79     bmp = cbLoadBitmap(prefix2 + _T("method_public.png"), wxBITMAP_TYPE_PNG);
80     m_pImlist->Add(bmp);
81     m_ImgNr["subroutine"] = 2;
82     bmp = cbLoadBitmap(prefix2 + _T("method_protected.png"), wxBITMAP_TYPE_PNG);
83     m_pImlist->Add(bmp);
84     m_ImgNr["function"] = 3;
85     bmp = cbLoadBitmap(prefix2 + _T("method_private.png"), wxBITMAP_TYPE_PNG);
86     m_pImlist->Add(bmp);
87     m_ImgNr["program"] = 4;
88     bmp = cbLoadBitmap(prefix2 + _T("typedef.png"), wxBITMAP_TYPE_PNG);
89     m_pImlist->Add(bmp);
90     m_ImgNr["type"] = 5;
91     bmp = cbLoadBitmap(prefix2 + _T("interface.png"), wxBITMAP_TYPE_PNG);
92     m_pImlist->Add(bmp);
93     m_ImgNr["interface"] = 6;
94     bmp = cbLoadBitmap(prefix2 + _T("funcs_folder.png"), wxBITMAP_TYPE_PNG);
95     m_pImlist->Add(bmp);
96     m_ImgNr["function_folder"] = 7;
97     bmp = cbLoadBitmap(prefix2 + _T("others_folder.png"), wxBITMAP_TYPE_PNG);
98     m_pImlist->Add(bmp);
99     m_ImgNr["others_folder"] = 8;
100     bmp = cbLoadBitmap(prefix2 + _T("symbols_folder.png"), wxBITMAP_TYPE_PNG);
101     m_pImlist->Add(bmp);
102     m_ImgNr["symbols_folder"] = 9;
103     bmp = cbLoadBitmap(prefix2 + _T("preproc.png"), wxBITMAP_TYPE_PNG);
104     m_pImlist->Add(bmp);
105     m_ImgNr["preproc"] = 10;
106     bmp = cbLoadBitmap(prefix2 + _T("var_public.png"), wxBITMAP_TYPE_PNG);
107     m_pImlist->Add(bmp);
108     m_ImgNr["variable"] = 11;
109     bmp = cbLoadBitmap(prefix2 + _T("interface_function.png"), wxBITMAP_TYPE_PNG);
110     m_pImlist->Add(bmp);
111     m_ImgNr["interface_function"] = 12;
112     bmp = cbLoadBitmap(prefix2 + _T("interface_subroutine.png"), wxBITMAP_TYPE_PNG);
113     m_pImlist->Add(bmp);
114     m_ImgNr["interface_subroutine"] = 13;
115     bmp = cbLoadBitmap(prefix2 + _T("procedure.png"), wxBITMAP_TYPE_PNG);
116     m_pImlist->Add(bmp);
117     m_ImgNr["procedure"] = 14;
118 
119     bmp = cbLoadBitmap(prefix2 + _T("subroutine_private.png"), wxBITMAP_TYPE_PNG);
120     m_pImlist->Add(bmp);
121     m_ImgNr["subroutine_private"] = 15;
122     bmp = cbLoadBitmap(prefix2 + _T("function_private.png"), wxBITMAP_TYPE_PNG);
123     m_pImlist->Add(bmp);
124     m_ImgNr["function_private"] = 16;
125     bmp = cbLoadBitmap(prefix2 + _T("var_private.png"), wxBITMAP_TYPE_PNG);
126     m_pImlist->Add(bmp);
127     m_ImgNr["variable_private"] = 17;
128     bmp = cbLoadBitmap(prefix2 + _T("var_protected.png"), wxBITMAP_TYPE_PNG);
129     m_pImlist->Add(bmp);
130     m_ImgNr["variable_protected"] = 18;
131     bmp = cbLoadBitmap(prefix2 + _T("typedef_private.png"), wxBITMAP_TYPE_PNG);
132     m_pImlist->Add(bmp);
133     m_ImgNr["type_private"] = 19;
134     bmp = cbLoadBitmap(prefix2 + _T("interface_private.png"), wxBITMAP_TYPE_PNG);
135     m_pImlist->Add(bmp);
136     m_ImgNr["interface_private"] = 20;
137     bmp = cbLoadBitmap(prefix2 + _T("access_list_private.png"), wxBITMAP_TYPE_PNG);
138     m_pImlist->Add(bmp);
139     m_ImgNr["access_list_private"] = 21;
140     bmp = cbLoadBitmap(prefix2 + _T("access_list_public.png"), wxBITMAP_TYPE_PNG);
141     m_pImlist->Add(bmp);
142     m_ImgNr["access_list_public"] = 22;
143     bmp = cbLoadBitmap(prefix2 + _T("access_list_protected.png"), wxBITMAP_TYPE_PNG);
144     m_pImlist->Add(bmp);
145     m_ImgNr["access_list_protected"] = 23;
146     bmp = cbLoadBitmap(prefix2 + _T("procedure_private.png"), wxBITMAP_TYPE_PNG);
147     m_pImlist->Add(bmp);
148     m_ImgNr["procedure_private"] = 24;
149     bmp = cbLoadBitmap(prefix2 + _T("interface_function_private.png"), wxBITMAP_TYPE_PNG);
150     m_pImlist->Add(bmp);
151     m_ImgNr["interface_function_private"] = 25;
152     bmp = cbLoadBitmap(prefix2 + _T("interface_subroutine_private.png"), wxBITMAP_TYPE_PNG);
153     m_pImlist->Add(bmp);
154     m_ImgNr["interface_subroutine_private"] = 26;
155     bmp = cbLoadBitmap(prefix2 + _T("class.png"), wxBITMAP_TYPE_PNG);
156     m_pImlist->Add(bmp);
157     m_ImgNr["submodule"] = 27;
158     bmp = cbLoadBitmap(prefix2 + _T("interface_subroutine_gen_private.png"), wxBITMAP_TYPE_PNG);
159     m_pImlist->Add(bmp);
160     m_ImgNr["interface_sub_gen_private"] = 28;
161     bmp = cbLoadBitmap(prefix2 + _T("interface_subroutine_gen.png"), wxBITMAP_TYPE_PNG);
162     m_pImlist->Add(bmp);
163     m_ImgNr["interface_sub_gen"] = 29;
164     bmp = cbLoadBitmap(prefix2 + _T("interface_function_gen_private.png"), wxBITMAP_TYPE_PNG);
165     m_pImlist->Add(bmp);
166     m_ImgNr["interface_fun_gen_private"] = 30;
167     bmp = cbLoadBitmap(prefix2 + _T("interface_function_gen.png"), wxBITMAP_TYPE_PNG);
168     m_pImlist->Add(bmp);
169     m_ImgNr["interface_fun_gen"] = 31;
170     bmp = cbLoadBitmap(prefix2 + _T("typedef_abstract.png"), wxBITMAP_TYPE_PNG);
171     m_pImlist->Add(bmp);
172     m_ImgNr["type_abstract"] = 32;
173     bmp = cbLoadBitmap(prefix2 + _T("typedef_abstract_private.png"), wxBITMAP_TYPE_PNG);
174     m_pImlist->Add(bmp);
175     m_ImgNr["type_abstract_private"] = 33;
176     bmp = cbLoadBitmap(prefix2 + _T("dtor_public.png"), wxBITMAP_TYPE_PNG);
177     m_pImlist->Add(bmp);
178     m_ImgNr["procedure_final"] = 34;
179     bmp = cbLoadBitmap(prefix2 + _T("subroutine_call.png"), wxBITMAP_TYPE_PNG);
180     m_pImlist->Add(bmp);
181     m_ImgNr["subroutine_call"] = 35;
182     bmp = cbLoadBitmap(prefix2 + _T("function_call.png"), wxBITMAP_TYPE_PNG);
183     m_pImlist->Add(bmp);
184     m_ImgNr["function_call"] = 36;
185     bmp = cbLoadBitmap(prefix2 + _T("subroutine_calledby.png"), wxBITMAP_TYPE_PNG);
186     m_pImlist->Add(bmp);
187     m_ImgNr["subroutine_calledby"] = 37;
188     bmp = cbLoadBitmap(prefix2 + _T("function_calledby.png"), wxBITMAP_TYPE_PNG);
189     m_pImlist->Add(bmp);
190     m_ImgNr["function_calledby"] = 38;
191     bmp = cbLoadBitmap(prefix2 + _T("typedefs_folder.png"), wxBITMAP_TYPE_PNG);
192     m_pImlist->Add(bmp);
193     m_ImgNr["typedefs_folder"] = 39;
194 
195     bmp = cbLoadBitmap(prefix2 + _T("unknown.png"), wxBITMAP_TYPE_PNG);
196     m_pImlist->Add(bmp);
197     m_ImgNr["unknown"] = 40;
198 
199     m_ImgNr["none"] = -1;
200 }
201 
GetImageIdx(const std::string & name)202 int FPImageList::GetImageIdx(const std::string& name)
203 {
204     int idx;
205     if (m_ImgNr.count(name) == 0)
206         idx = m_ImgNr["none"];
207     else
208         idx = m_ImgNr[name];
209     return idx;
210 }
211 
GetTokenKindImageIdx(TokenF * token)212 int FPImageList::GetTokenKindImageIdx(TokenF* token)
213 {
214     if (!token)
215         return m_ImgNr["none"];
216 
217     switch (token->m_TokenKind)
218     {
219         case tkUse: return m_ImgNr["use"];
220 
221         case tkModule: return m_ImgNr["module"];
222 
223         case tkSubroutine:
224             {
225                 if (token->m_TokenAccess == taPrivate)
226                     return m_ImgNr["subroutine_private"];
227                 else
228                     return m_ImgNr["subroutine"];
229             }
230         case tkFunction:
231             {
232                 if (token->m_TokenAccess == taPrivate)
233                     return m_ImgNr["function_private"];
234                 else
235                     return m_ImgNr["function"];
236             }
237         case tkProgram: return m_ImgNr["program"];
238 
239         case tkType:
240             {
241                 if (token->m_TokenAccess == taPrivate)
242                 {
243                     if (token->m_IsAbstract)
244                         return m_ImgNr["type_abstract_private"];
245                     else
246                         return m_ImgNr["type_private"];
247                 }
248                 else
249                 {
250                     if (token->m_IsAbstract)
251                         return m_ImgNr["type_abstract"];
252                     else
253                         return m_ImgNr["type"];
254                 }
255             }
256         case tkInterface:
257             {
258                 if (token->m_TypeDefinition.IsSameAs(_T("subroutine")))
259                 {
260                     if (token->m_TokenAccess == taPrivate)
261                         return m_ImgNr["interface_sub_gen_private"];
262                     else
263                         return m_ImgNr["interface_sub_gen"];
264                 }
265                 else if (token->m_TypeDefinition.IsSameAs(_T("function")))
266                 {
267                     if (token->m_TokenAccess == taPrivate)
268                         return m_ImgNr["interface_fun_gen_private"];
269                     else
270                         return m_ImgNr["interface_fun_gen"];
271                 }
272                 else
273                 {
274                     if (token->m_TokenAccess == taPrivate)
275                         return m_ImgNr["interface_private"];
276                     else
277                         return m_ImgNr["interface"];
278                 }
279             }
280         case tkInterfaceExplicit:
281             {
282                 if (token->m_TokenAccess == taPrivate)
283                     return m_ImgNr["interface_private"];
284                 else
285                     return m_ImgNr["interface"];
286             }
287 
288         case tkCommonblock: return m_ImgNr["none"];
289 
290         case tkPreprocessor: return m_ImgNr["preproc"];
291 
292         case tkFile: return m_ImgNr["none"];
293 
294         case tkVariable:
295             {
296                 if (token->m_TokenAccess == taPrivate)
297                     return m_ImgNr["variable_private"];
298                 else if (token->m_TokenAccess == taProtected)
299                     return m_ImgNr["variable_protected"];
300                 else
301                     return m_ImgNr["variable"];
302             }
303 
304         //case tkInterfaceFunction: return m_ImgNr["interface_function"];
305 
306         //case tkInterfaceSubroutine: return m_ImgNr["interface_subroutine"];
307 
308         case tkProcedure:
309             {
310                 if (token->m_TypeDefinition.IsSameAs(_T("subroutine")))
311                 {
312                     if (token->m_TokenAccess == taPrivate)
313                         return m_ImgNr["subroutine_private"];
314                     else
315                         return m_ImgNr["subroutine"];
316                 }
317                 else if (token->m_TypeDefinition.IsSameAs(_T("function")))
318                 {
319                     if (token->m_TokenAccess == taPrivate)
320                         return m_ImgNr["function_private"];
321                     else
322                         return m_ImgNr["function"];
323                 }
324                 else
325                 {
326                     if (token->m_TokenAccess == taPrivate)
327                         return m_ImgNr["procedure_private"];
328                     else
329                         return m_ImgNr["procedure"];
330                 }
331             }
332 
333         case tkAccessList:
334             {
335                 if (token->m_TokenAccess == taPrivate)
336                     return m_ImgNr["access_list_private"];
337                 else if (token->m_TokenAccess == taProtected)
338                     return m_ImgNr["access_list_protected"];
339                 else
340                     return m_ImgNr["access_list_public"];
341             }
342 
343         case tkSubmodule: return m_ImgNr["submodule"];
344 
345         case tkProcedureFinal: return m_ImgNr["procedure_final"];
346 
347         default: return m_ImgNr["unknown"];
348     }
349 }
350 
351