2
* This file is part of the Code::Blocks IDE and licensed under the GNU Lesser General Public License, version 3
3
* http://www.gnu.org/licenses/lgpl-3.0.html
10
#include "sdk_precomp.h"
12
#include <wx/arrstr.h>
13
#include "filefilters.h"
16
typedef std::map<wxString, wxString> FileFiltersMap;
17
static FileFiltersMap s_Filters;
19
static size_t s_LastFilterAllIndex = 0;
21
// Let's add some default extensions.
22
// The rest will be added by editor lexers ;)
23
void FileFilters::AddDefaultFileFilters()
25
if (s_Filters.size() != 0)
27
Add(_("Code::Blocks workspace files"), _T("*.workspace"));
28
Add(_("Code::Blocks project files"), _T("*.cbp"));
29
Add(_("Bloodshed Dev-C++ project files"), _T("*.dev"));
30
Add(_("MS Visual C++ 6.0 project files"), _T("*.dsp"));
31
Add(_("MS Visual Studio 7.0+ project files"), _T("*.vcproj"));
32
Add(_("MS Visual C++ 6.0 workspace files"), _T("*.dsw"));
33
Add(_("MS Visual Studio 7.0+ solution files"), _T("*.sln"));
34
Add(_("Apple Xcode 1.x project bundles"), _T("*.xcode"));
35
Add(_("Apple Xcode 2.x project bundles"), _T("*.xcodeproj"));
38
bool FileFilters::Add(const wxString& name, const wxString& mask)
40
if (name.IsEmpty() || mask.IsEmpty())
41
return false; // both must be valid
42
if (mask.Index(_T(',')) != wxString::npos)
44
// replace commas with semicolons
46
while (tmp.Replace(_T(","), _T(";")))
48
s_Filters[name] = tmp;
51
s_Filters[name] = mask;
55
wxString FileFilters::GetFilterString(const wxString& ext)
59
for (FileFiltersMap::iterator it = s_Filters.begin(); it != s_Filters.end(); ++it)
63
// filter based on parameter
65
wxArrayString array = GetArrayFromString(it->second, _T(";"), true);
66
for (size_t i = 0; i < array.GetCount(); ++i)
68
if (ext.Matches(array[i]))
80
ret << it->first << _T('|') << it->second;
83
// last filter is always "All"
86
ret << GetFilterAll();
88
s_LastFilterAllIndex = count;
93
wxString FileFilters::GetFilterAll()
95
s_LastFilterAllIndex = 0;
97
return _("All files (*.*)|*.*");
99
return _("All files (*)|*");
102
size_t FileFilters::GetIndexForFilterAll()
104
return s_LastFilterAllIndex;
107
bool FileFilters::GetFilterIndexFromName(const wxString& FiltersList, const wxString& FilterName, int& Index)
110
// the List will contain 2 entries per type (description, mask)
111
wxArrayString List = GetArrayFromString(FiltersList, _T("|"), true);
112
int LoopEnd = static_cast<int>(List.GetCount());
113
for(int idxList = 0; idxList < LoopEnd; idxList+=2)
115
if(List[idxList] == FilterName)
120
} // end for : idx : idxList
122
} // end of GetFilterIndexFromName
124
bool FileFilters::GetFilterNameFromIndex(const wxString& FiltersList, int Index, wxString& FilterName)
125
{ // we return the name (not the mask)
127
// the List will contain 2 entries per type (description, mask)
128
wxArrayString List = GetArrayFromString(FiltersList, _T("|"), true);
129
int LoopEnd = static_cast<int>(List.GetCount());
130
if(2*Index < LoopEnd)
132
FilterName = List[2*Index];
136
} // end of GetFilterStringFromIndex
138
// define some constants used throughout C::B
140
const wxString FileFilters::WORKSPACE_EXT = _T("workspace");
141
const wxString FileFilters::CODEBLOCKS_EXT = _T("cbp");
142
const wxString FileFilters::DEVCPP_EXT = _T("dev");
143
const wxString FileFilters::MSVC6_EXT = _T("dsp");
144
const wxString FileFilters::MSVC7_EXT = _T("vcproj");
145
const wxString FileFilters::MSVC6_WORKSPACE_EXT = _T("dsw");
146
const wxString FileFilters::MSVC7_WORKSPACE_EXT = _T("sln");
147
const wxString FileFilters::XCODE1_EXT = _T("xcode");
148
const wxString FileFilters::XCODE2_EXT = _T("xcodeproj");
149
const wxString FileFilters::ASM_EXT = _T("asm");
150
const wxString FileFilters::D_EXT = _T("d");
151
const wxString FileFilters::F_EXT = _T("f");
152
const wxString FileFilters::F77_EXT = _T("f77");
153
const wxString FileFilters::F90_EXT = _T("f90");
154
const wxString FileFilters::F95_EXT = _T("f95");
155
const wxString FileFilters::JAVA_EXT = _T("java");
156
const wxString FileFilters::C_EXT = _T("c");
157
const wxString FileFilters::CC_EXT = _T("cc");
158
const wxString FileFilters::CPP_EXT = _T("cpp");
159
const wxString FileFilters::CXX_EXT = _T("cxx");
160
const wxString FileFilters::H_EXT = _T("h");
161
const wxString FileFilters::HH_EXT = _T("hh");
162
const wxString FileFilters::HPP_EXT = _T("hpp");
163
const wxString FileFilters::HXX_EXT = _T("hxx");
164
const wxString FileFilters::S_EXT = _T("s");
165
const wxString FileFilters::SS_EXT = _T("ss");
166
const wxString FileFilters::S62_EXT = _T("s62");
167
const wxString FileFilters::OBJECT_EXT = _T("o");
168
const wxString FileFilters::XRCRESOURCE_EXT = _T("xrc");
169
const wxString FileFilters::STATICLIB_EXT = _T("a");
170
const wxString FileFilters::RESOURCE_EXT = _T("rc");
171
const wxString FileFilters::RESOURCEBIN_EXT = _T("res");
172
const wxString FileFilters::XML_EXT = _T("xml");
173
const wxString FileFilters::SCRIPT_EXT = _T("script");
175
const wxString FileFilters::DYNAMICLIB_EXT = _T("dll");
176
const wxString FileFilters::EXECUTABLE_EXT = _T("exe");
177
const wxString FileFilters::NATIVE_EXT = _T("sys");
179
const wxString FileFilters::DYNAMICLIB_EXT = _T("dylib");
180
const wxString FileFilters::EXECUTABLE_EXT = _T("");
181
const wxString FileFilters::NATIVE_EXT = _T("");
183
const wxString FileFilters::DYNAMICLIB_EXT = _T("so");
184
const wxString FileFilters::EXECUTABLE_EXT = _T("");
185
const wxString FileFilters::NATIVE_EXT = _T("");
189
const wxString FileFilters::WORKSPACE_DOT_EXT = _T('.') + FileFilters::WORKSPACE_EXT;
190
const wxString FileFilters::CODEBLOCKS_DOT_EXT = _T('.') + FileFilters::CODEBLOCKS_EXT;
191
const wxString FileFilters::DEVCPP_DOT_EXT = _T('.') + FileFilters::DEVCPP_EXT;
192
const wxString FileFilters::MSVC6_DOT_EXT = _T('.') + FileFilters::MSVC6_EXT;
193
const wxString FileFilters::MSVC7_DOT_EXT = _T('.') + FileFilters::MSVC7_EXT;
194
const wxString FileFilters::MSVC6_WORKSPACE_DOT_EXT = _T('.') + FileFilters::MSVC6_WORKSPACE_EXT;
195
const wxString FileFilters::MSVC7_WORKSPACE_DOT_EXT = _T('.') + FileFilters::MSVC7_WORKSPACE_EXT;
196
const wxString FileFilters::XCODE1_DOT_EXT = _T('.') + FileFilters::XCODE1_EXT;
197
const wxString FileFilters::XCODE2_DOT_EXT = _T('.') + FileFilters::XCODE2_EXT;
198
const wxString FileFilters::ASM_DOT_EXT = _T('.') + FileFilters::ASM_EXT;
199
const wxString FileFilters::D_DOT_EXT = _T('.') + FileFilters::D_EXT;
200
const wxString FileFilters::F_DOT_EXT = _T('.') + FileFilters::F_EXT;
201
const wxString FileFilters::F77_DOT_EXT = _T('.') + FileFilters::F77_EXT;
202
const wxString FileFilters::F90_DOT_EXT = _T('.') + FileFilters::F90_EXT;
203
const wxString FileFilters::F95_DOT_EXT = _T('.') + FileFilters::F95_EXT;
204
const wxString FileFilters::JAVA_DOT_EXT = _T('.') + FileFilters::JAVA_EXT;
205
const wxString FileFilters::C_DOT_EXT = _T('.') + FileFilters::C_EXT;
206
const wxString FileFilters::CC_DOT_EXT = _T('.') + FileFilters::CC_EXT;
207
const wxString FileFilters::CPP_DOT_EXT = _T('.') + FileFilters::CPP_EXT;
208
const wxString FileFilters::CXX_DOT_EXT = _T('.') + FileFilters::CXX_EXT;
209
const wxString FileFilters::H_DOT_EXT = _T('.') + FileFilters::H_EXT;
210
const wxString FileFilters::HH_DOT_EXT = _T('.') + FileFilters::HH_EXT;
211
const wxString FileFilters::HPP_DOT_EXT = _T('.') + FileFilters::HPP_EXT;
212
const wxString FileFilters::HXX_DOT_EXT = _T('.') + FileFilters::HXX_EXT;
213
const wxString FileFilters::S_DOT_EXT = _T('.') + FileFilters::S_EXT;
214
const wxString FileFilters::SS_DOT_EXT = _T('.') + FileFilters::SS_EXT;
215
const wxString FileFilters::S62_DOT_EXT = _T('.') + FileFilters::S62_EXT;
216
const wxString FileFilters::OBJECT_DOT_EXT = _T('.') + FileFilters::OBJECT_EXT;
217
const wxString FileFilters::XRCRESOURCE_DOT_EXT = _T('.') + FileFilters::XRCRESOURCE_EXT;
218
const wxString FileFilters::STATICLIB_DOT_EXT = _T('.') + FileFilters::STATICLIB_EXT;
219
const wxString FileFilters::RESOURCE_DOT_EXT = _T('.') + FileFilters::RESOURCE_EXT;
220
const wxString FileFilters::RESOURCEBIN_DOT_EXT = _T('.') + FileFilters::RESOURCEBIN_EXT;
221
const wxString FileFilters::XML_DOT_EXT = _T('.') + FileFilters::XML_EXT;
222
const wxString FileFilters::SCRIPT_DOT_EXT = _T('.') + FileFilters::SCRIPT_EXT;
224
const wxString FileFilters::DYNAMICLIB_DOT_EXT = _T('.') + FileFilters::DYNAMICLIB_EXT;
225
const wxString FileFilters::EXECUTABLE_DOT_EXT = _T('.') + FileFilters::EXECUTABLE_EXT;
226
const wxString FileFilters::NATIVE_DOT_EXT = _T('.') + FileFilters::NATIVE_EXT;
228
const wxString FileFilters::DYNAMICLIB_DOT_EXT = _T('.') + FileFilters::DYNAMICLIB_EXT;
229
const wxString FileFilters::EXECUTABLE_DOT_EXT = EXECUTABLE_EXT; // no dot, since no extension
230
const wxString FileFilters::NATIVE_DOT_EXT = NATIVE_EXT; // no dot, since no extension