Code::Blocks  SVN r11506
filefilters.cpp
Go to the documentation of this file.
1 /*
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
4  *
5  * $Revision: 10854 $
6  * $Id: filefilters.cpp 10854 2016-05-18 22:20:45Z d_anselmi $
7  * $HeadURL: https://svn.code.sf.net/p/codeblocks/code/trunk/src/sdk/filefilters.cpp $
8  */
9 
10 #include "sdk_precomp.h"
11 #include <map>
12 #include <wx/arrstr.h>
13 #include "filefilters.h"
14 #include "globals.h"
15 
16 typedef std::map<wxString, wxString> FileFiltersMap;
18 
19 static size_t s_LastFilterAllIndex = 0;
20 
21 // Let's add some default extensions.
22 // The rest will be added by editor lexers ;)
24 {
25  if (s_Filters.size() != 0)
26  return;
27 
28  Add(_("Code::Blocks workspace files"), _T("*.workspace"));
29  Add(_("Code::Blocks project files"), _T("*.cbp"));
30  Add(_("Code::Blocks project/workspace files"), _T("*.workspace;*.cbp"));
31  Add(_("Bloodshed Dev-C++ project files"), _T("*.dev"));
32  Add(_("MS Visual C++ 6.0 project files"), _T("*.dsp"));
33  Add(_("MS Visual Studio 7.0+ project files"), _T("*.vcproj"));
34  Add(_("MS Visual C++ 6.0 workspace files"), _T("*.dsw"));
35  Add(_("MS Visual Studio 7.0+ solution files"), _T("*.sln"));
36  Add(_("Apple Xcode 1.x project bundles"), _T("*.xcode"));
37  Add(_("Apple Xcode 2.x project bundles"), _T("*.xcodeproj"));
38  Add(_("MS Visual Studio 10.0+ project files"), _T("*.vcxproj"));
39 }
40 
41 bool FileFilters::Add(const wxString& name, const wxString& mask)
42 {
43  if (name.IsEmpty() || mask.IsEmpty())
44  return false; // both must be valid
45 
46  if (mask.Index(_T(',')) != wxString::npos)
47  {
48  // replace commas with semicolons
49  wxString tmp = mask;
50  while (tmp.Replace(_T(","), _T(";")))
51  ;
52  s_Filters[name] = tmp;
53  }
54  else
55  s_Filters[name] = mask;
56 
57  return true;
58 }
59 
61 {
62  size_t count = 0;
63  wxString ret;
64  for (FileFiltersMap::iterator it = s_Filters.begin(); it != s_Filters.end(); ++it)
65  {
66  if (!ext.IsEmpty())
67  {
68  // filter based on parameter
69  bool match = false;
70  wxArrayString array = GetArrayFromString(it->second, _T(";"), true);
71  for (size_t i = 0; i < array.GetCount(); ++i)
72  {
73  if (ext.Matches(array[i]))
74  {
75  match = true;
76  break;
77  }
78  }
79  if (!match)
80  continue; // filtered
81  }
82  ++count;
83  if (!ret.IsEmpty())
84  ret << _T('|');
85  ret << it->first << _T('|') << it->second;
86  }
87 
88  // last filter is always "All"
89  if (!ret.IsEmpty())
90  ret << _T('|');
91  ret << GetFilterAll();
92 
93  s_LastFilterAllIndex = count;
94 
95  return ret;
96 }
97 
99 {
101  if (platform::windows)
102  return _("All files (*.*)|*.*");
103 
104  return _("All files (*)|*");
105 }
106 
108 {
109  return s_LastFilterAllIndex;
110 }
111 
112 bool FileFilters::GetFilterIndexFromName(const wxString& FiltersList, const wxString& FilterName, int& Index)
113 {
114  bool bFound = false;
115  // the List will contain 2 entries per type (description, mask)
116  wxArrayString List = GetArrayFromString(FiltersList, _T("|"), true);
117  int LoopEnd = static_cast<int>(List.GetCount());
118  for(int idxList = 0; idxList < LoopEnd; idxList+=2)
119  {
120  if (List[idxList] == FilterName)
121  {
122  Index = idxList/2;
123  bFound = true;
124  break;
125  }
126  } // end for : idx : idxList
127  return bFound;
128 } // end of GetFilterIndexFromName
129 
130 bool FileFilters::GetFilterNameFromIndex(const wxString& FiltersList, int Index, wxString& FilterName)
131 { // we return the name (not the mask)
132  bool bFound = false;
133  // the List will contain 2 entries per type (description, mask)
134  wxArrayString List = GetArrayFromString(FiltersList, _T("|"), true);
135  int LoopEnd = static_cast<int>(List.GetCount());
136  if (2*Index < LoopEnd)
137  {
138  FilterName = List[2*Index];
139  bFound = true;
140  }
141  return bFound;
142 } // end of GetFilterStringFromIndex
143 
144 // define some constants used throughout C::B
145 
146 const wxString FileFilters::WORKSPACE_EXT = _T("workspace");
147 const wxString FileFilters::CODEBLOCKS_EXT = _T("cbp");
148 const wxString FileFilters::DEVCPP_EXT = _T("dev");
149 const wxString FileFilters::MSVC6_EXT = _T("dsp");
150 const wxString FileFilters::MSVC7_EXT = _T("vcproj");
151 const wxString FileFilters::MSVC10_EXT = _T("vcxproj");
152 const wxString FileFilters::MSVC6_WORKSPACE_EXT = _T("dsw");
153 const wxString FileFilters::MSVC7_WORKSPACE_EXT = _T("sln");
154 const wxString FileFilters::XCODE1_EXT = _T("xcode");
155 const wxString FileFilters::XCODE2_EXT = _T("xcodeproj");
156 const wxString FileFilters::ASM_EXT = _T("asm");
157 const wxString FileFilters::D_EXT = _T("d");
158 const wxString FileFilters::F_EXT = _T("f");
159 const wxString FileFilters::F77_EXT = _T("f77");
160 const wxString FileFilters::F90_EXT = _T("f90");
161 const wxString FileFilters::F95_EXT = _T("f95");
162 const wxString FileFilters::FOR_EXT = _T("for");
163 const wxString FileFilters::FPP_EXT = _T("fpp");
164 const wxString FileFilters::F03_EXT = _T("f03");
165 const wxString FileFilters::F08_EXT = _T("f08");
166 const wxString FileFilters::JAVA_EXT = _T("java");
167 const wxString FileFilters::C_EXT = _T("c");
168 const wxString FileFilters::CC_EXT = _T("cc");
169 const wxString FileFilters::CPP_EXT = _T("cpp");
170 const wxString FileFilters::TPP_EXT = _T("tpp");
171 const wxString FileFilters::TCC_EXT = _T("tcc");
172 const wxString FileFilters::CXX_EXT = _T("cxx");
173 const wxString FileFilters::CPLPL_EXT = _T("c++");
174 const wxString FileFilters::INL_EXT = _T("inl");
175 const wxString FileFilters::H_EXT = _T("h");
176 const wxString FileFilters::HH_EXT = _T("hh");
177 const wxString FileFilters::HPP_EXT = _T("hpp");
178 const wxString FileFilters::HXX_EXT = _T("hxx");
179 const wxString FileFilters::HPLPL_EXT = _T("h++");
180 const wxString FileFilters::S_EXT = _T("s");
181 const wxString FileFilters::SS_EXT = _T("ss");
182 const wxString FileFilters::S62_EXT = _T("s62");
183 const wxString FileFilters::OBJECT_EXT = _T("o");
184 const wxString FileFilters::XRCRESOURCE_EXT = _T("xrc");
185 const wxString FileFilters::STATICLIB_EXT = _T("a");
186 const wxString FileFilters::RESOURCE_EXT = _T("rc");
187 const wxString FileFilters::RESOURCEBIN_EXT = _T("res");
188 const wxString FileFilters::XML_EXT = _T("xml");
189 const wxString FileFilters::SCRIPT_EXT = _T("script");
190 #if defined(__WXMSW__)
191  const wxString FileFilters::DYNAMICLIB_EXT = _T("dll");
192  const wxString FileFilters::EXECUTABLE_EXT = _T("exe");
193  const wxString FileFilters::NATIVE_EXT = _T("sys");
194 #elif defined(__WXMAC__)
195  const wxString FileFilters::DYNAMICLIB_EXT = _T("dylib");
196  const wxString FileFilters::EXECUTABLE_EXT = _T("");
197  const wxString FileFilters::NATIVE_EXT = _T("");
198 #else
199  const wxString FileFilters::DYNAMICLIB_EXT = _T("so");
200  const wxString FileFilters::EXECUTABLE_EXT = _T("");
201  const wxString FileFilters::NATIVE_EXT = _T("");
202 #endif
203 
204 // dot.ext version
205 const wxString FileFilters::WORKSPACE_DOT_EXT = _T('.') + FileFilters::WORKSPACE_EXT;
206 const wxString FileFilters::CODEBLOCKS_DOT_EXT = _T('.') + FileFilters::CODEBLOCKS_EXT;
207 const wxString FileFilters::DEVCPP_DOT_EXT = _T('.') + FileFilters::DEVCPP_EXT;
208 const wxString FileFilters::MSVC6_DOT_EXT = _T('.') + FileFilters::MSVC6_EXT;
209 const wxString FileFilters::MSVC7_DOT_EXT = _T('.') + FileFilters::MSVC7_EXT;
210 const wxString FileFilters::MSVC10_DOT_EXT = _T('.') + FileFilters::MSVC10_EXT;
211 const wxString FileFilters::MSVC6_WORKSPACE_DOT_EXT = _T('.') + FileFilters::MSVC6_WORKSPACE_EXT;
212 const wxString FileFilters::MSVC7_WORKSPACE_DOT_EXT = _T('.') + FileFilters::MSVC7_WORKSPACE_EXT;
213 const wxString FileFilters::XCODE1_DOT_EXT = _T('.') + FileFilters::XCODE1_EXT;
214 const wxString FileFilters::XCODE2_DOT_EXT = _T('.') + FileFilters::XCODE2_EXT;
215 const wxString FileFilters::ASM_DOT_EXT = _T('.') + FileFilters::ASM_EXT;
216 const wxString FileFilters::D_DOT_EXT = _T('.') + FileFilters::D_EXT;
217 const wxString FileFilters::F_DOT_EXT = _T('.') + FileFilters::F_EXT;
218 const wxString FileFilters::F77_DOT_EXT = _T('.') + FileFilters::F77_EXT;
219 const wxString FileFilters::F90_DOT_EXT = _T('.') + FileFilters::F90_EXT;
220 const wxString FileFilters::F95_DOT_EXT = _T('.') + FileFilters::F95_EXT;
221 const wxString FileFilters::FOR_DOT_EXT = _T('.') + FileFilters::FOR_EXT;
222 const wxString FileFilters::FPP_DOT_EXT = _T('.') + FileFilters::FPP_EXT;
223 const wxString FileFilters::F03_DOT_EXT = _T('.') + FileFilters::F03_EXT;
224 const wxString FileFilters::F08_DOT_EXT = _T('.') + FileFilters::F08_EXT;
225 const wxString FileFilters::JAVA_DOT_EXT = _T('.') + FileFilters::JAVA_EXT;
226 const wxString FileFilters::C_DOT_EXT = _T('.') + FileFilters::C_EXT;
227 const wxString FileFilters::CC_DOT_EXT = _T('.') + FileFilters::CC_EXT;
228 const wxString FileFilters::CPP_DOT_EXT = _T('.') + FileFilters::CPP_EXT;
229 const wxString FileFilters::TPP_DOT_EXT = _T('.') + FileFilters::TPP_EXT;
230 const wxString FileFilters::TCC_DOT_EXT = _T('.') + FileFilters::TCC_EXT;
231 const wxString FileFilters::CXX_DOT_EXT = _T('.') + FileFilters::CXX_EXT;
232 const wxString FileFilters::CPLPL_DOT_EXT = _T('.') + FileFilters::CPLPL_EXT;
233 const wxString FileFilters::INL_DOT_EXT = _T('.') + FileFilters::INL_EXT;
234 const wxString FileFilters::H_DOT_EXT = _T('.') + FileFilters::H_EXT;
235 const wxString FileFilters::HH_DOT_EXT = _T('.') + FileFilters::HH_EXT;
236 const wxString FileFilters::HPP_DOT_EXT = _T('.') + FileFilters::HPP_EXT;
237 const wxString FileFilters::HXX_DOT_EXT = _T('.') + FileFilters::HXX_EXT;
238 const wxString FileFilters::HPLPL_DOT_EXT = _T('.') + FileFilters::HPLPL_EXT;
239 const wxString FileFilters::S_DOT_EXT = _T('.') + FileFilters::S_EXT;
240 const wxString FileFilters::SS_DOT_EXT = _T('.') + FileFilters::SS_EXT;
241 const wxString FileFilters::S62_DOT_EXT = _T('.') + FileFilters::S62_EXT;
242 const wxString FileFilters::OBJECT_DOT_EXT = _T('.') + FileFilters::OBJECT_EXT;
243 const wxString FileFilters::XRCRESOURCE_DOT_EXT = _T('.') + FileFilters::XRCRESOURCE_EXT;
244 const wxString FileFilters::STATICLIB_DOT_EXT = _T('.') + FileFilters::STATICLIB_EXT;
245 const wxString FileFilters::RESOURCE_DOT_EXT = _T('.') + FileFilters::RESOURCE_EXT;
246 const wxString FileFilters::RESOURCEBIN_DOT_EXT = _T('.') + FileFilters::RESOURCEBIN_EXT;
247 const wxString FileFilters::XML_DOT_EXT = _T('.') + FileFilters::XML_EXT;
248 const wxString FileFilters::SCRIPT_DOT_EXT = _T('.') + FileFilters::SCRIPT_EXT;
249 #ifdef __WXMSW__
250  const wxString FileFilters::DYNAMICLIB_DOT_EXT = _T('.') + FileFilters::DYNAMICLIB_EXT;
251  const wxString FileFilters::EXECUTABLE_DOT_EXT = _T('.') + FileFilters::EXECUTABLE_EXT;
252  const wxString FileFilters::NATIVE_DOT_EXT = _T('.') + FileFilters::NATIVE_EXT;
253 #else
254  const wxString FileFilters::DYNAMICLIB_DOT_EXT = _T('.') + FileFilters::DYNAMICLIB_EXT;
255  const wxString FileFilters::EXECUTABLE_DOT_EXT = EXECUTABLE_EXT; // no dot, since no extension
256  const wxString FileFilters::NATIVE_DOT_EXT = NATIVE_EXT; // no dot, since no extension
257 #endif
DLLIMPORT wxArrayString GetArrayFromString(const wxString &text, const wxString &separator=DEFAULT_ARRAY_SEP, bool trimSpaces=true)
Definition: globals.cpp:134
DLLIMPORT bool Add(const wxString &name, const wxString &mask)
Add a new extension filter.
Definition: filefilters.cpp:41
bool Matches(const wxString &mask) const
const DLLIMPORT wxString TCC_EXT
const DLLIMPORT wxString FPP_EXT
const DLLIMPORT wxString CODEBLOCKS_EXT
const DLLIMPORT wxString F95_EXT
const DLLIMPORT wxString SCRIPT_EXT
const DLLIMPORT wxString MSVC10_EXT
const DLLIMPORT wxString H_EXT
const DLLIMPORT wxString INL_EXT
const DLLIMPORT wxString XCODE1_EXT
const DLLIMPORT wxString DEVCPP_EXT
const DLLIMPORT wxString HPP_EXT
const DLLIMPORT wxString JAVA_EXT
DLLIMPORT bool GetFilterIndexFromName(const wxString &FiltersList, const wxString &FilterName, int &Index)
Get the index of the filter &#39;FilterName&#39; in the FiltersList.
#define _T(string)
const DLLIMPORT wxString S62_EXT
const DLLIMPORT wxString RESOURCEBIN_EXT
const DLLIMPORT wxString HXX_EXT
const DLLIMPORT wxString C_EXT
const DLLIMPORT wxString MSVC6_EXT
DLLIMPORT wxString GetFilterAll()
Generates a simple special filter "All files".
Definition: filefilters.cpp:98
const DLLIMPORT wxString F77_EXT
const DLLIMPORT wxString TPP_EXT
const DLLIMPORT wxString CPLPL_EXT
const DLLIMPORT wxString F_EXT
DLLIMPORT bool GetFilterNameFromIndex(const wxString &FiltersList, int Index, wxString &FilterName)
Get the Filter name for the Index-th filter in the FiltersList.
const DLLIMPORT wxString DYNAMICLIB_EXT
const DLLIMPORT wxString D_EXT
const DLLIMPORT wxString MSVC6_WORKSPACE_EXT
const DLLIMPORT wxString SS_EXT
const DLLIMPORT wxString XML_EXT
const DLLIMPORT wxString F90_EXT
std::map< wxString, wxString > FileFiltersMap
Definition: filefilters.cpp:16
const DLLIMPORT wxString WORKSPACE_EXT
size_t Replace(const wxString &strOld, const wxString &strNew, bool replaceAll=true)
const DLLIMPORT wxString STATICLIB_EXT
const DLLIMPORT wxString MSVC7_WORKSPACE_EXT
static size_t s_LastFilterAllIndex
Definition: filefilters.cpp:19
const DLLIMPORT wxString CC_EXT
const DLLIMPORT wxString S_EXT
DLLIMPORT size_t GetIndexForFilterAll()
Get the filter index for the special "All files" filter.
const DLLIMPORT wxString XCODE2_EXT
const DLLIMPORT wxString NATIVE_EXT
const wxString & _(const wxString &string)
const DLLIMPORT wxString CXX_EXT
const DLLIMPORT wxString F08_EXT
DLLIMPORT wxString GetFilterString(const wxString &ext=wxEmptyString)
Generates and returns the filter string for use in file dialogs.
Definition: filefilters.cpp:60
const DLLIMPORT wxString EXECUTABLE_EXT
static FileFiltersMap s_Filters
Definition: filefilters.cpp:17
bool IsEmpty() const
static const size_t npos
const DLLIMPORT wxString XRCRESOURCE_EXT
const DLLIMPORT wxString HPLPL_EXT
const DLLIMPORT wxString HH_EXT
const DLLIMPORT wxString F03_EXT
const DLLIMPORT wxString CPP_EXT
size_t GetCount() const
const DLLIMPORT wxString OBJECT_EXT
DLLIMPORT void AddDefaultFileFilters()
Adds file filters for various supported projects and workspaces.
Definition: filefilters.cpp:23
const DLLIMPORT wxString ASM_EXT
const DLLIMPORT wxString RESOURCE_EXT
const DLLIMPORT wxString FOR_EXT
const DLLIMPORT wxString MSVC7_EXT