~ubuntu-branches/ubuntu/hardy/codeblocks/hardy-backports

« back to all changes in this revision

Viewing changes to src/sdk/filefilters.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Michael Casadevall
  • Date: 2008-07-17 04:39:23 UTC
  • Revision ID: james.westby@ubuntu.com-20080717043923-gmsy5cwkdjswghkm
Tags: upstream-8.02
ImportĀ upstreamĀ versionĀ 8.02

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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$
 
6
 * $Id$
 
7
 * $HeadURL$
 
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;
 
17
static FileFiltersMap s_Filters;
 
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 ;)
 
23
void FileFilters::AddDefaultFileFilters()
 
24
{
 
25
    if (s_Filters.size() != 0)
 
26
        return;
 
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"));
 
36
}
 
37
 
 
38
bool FileFilters::Add(const wxString& name, const wxString& mask)
 
39
{
 
40
    if (name.IsEmpty() || mask.IsEmpty())
 
41
        return false; // both must be valid
 
42
    if (mask.Index(_T(',')) != wxString::npos)
 
43
    {
 
44
        // replace commas with semicolons
 
45
        wxString tmp = mask;
 
46
        while (tmp.Replace(_T(","), _T(";")))
 
47
            ;
 
48
        s_Filters[name] = tmp;
 
49
    }
 
50
    else
 
51
        s_Filters[name] = mask;
 
52
    return true;
 
53
}
 
54
 
 
55
wxString FileFilters::GetFilterString(const wxString& ext)
 
56
{
 
57
    size_t count = 0;
 
58
    wxString ret;
 
59
    for (FileFiltersMap::iterator it = s_Filters.begin(); it != s_Filters.end(); ++it)
 
60
    {
 
61
        if (!ext.IsEmpty())
 
62
        {
 
63
            // filter based on parameter
 
64
            bool match = false;
 
65
            wxArrayString array = GetArrayFromString(it->second, _T(";"), true);
 
66
            for (size_t i = 0; i < array.GetCount(); ++i)
 
67
            {
 
68
                if (ext.Matches(array[i]))
 
69
                {
 
70
                    match = true;
 
71
                    break;
 
72
                }
 
73
            }
 
74
            if (!match)
 
75
                continue; // filtered
 
76
        }
 
77
        ++count;
 
78
        if (!ret.IsEmpty())
 
79
            ret << _T('|');
 
80
        ret << it->first << _T('|') << it->second;
 
81
    }
 
82
 
 
83
    // last filter is always "All"
 
84
    if (!ret.IsEmpty())
 
85
        ret << _T('|');
 
86
    ret << GetFilterAll();
 
87
 
 
88
    s_LastFilterAllIndex = count;
 
89
 
 
90
    return ret;
 
91
}
 
92
 
 
93
wxString FileFilters::GetFilterAll()
 
94
{
 
95
    s_LastFilterAllIndex = 0;
 
96
    if(platform::windows)
 
97
        return _("All files (*.*)|*.*");
 
98
    else
 
99
        return _("All files (*)|*");
 
100
}
 
101
 
 
102
size_t FileFilters::GetIndexForFilterAll()
 
103
{
 
104
    return s_LastFilterAllIndex;
 
105
}
 
106
 
 
107
bool FileFilters::GetFilterIndexFromName(const wxString& FiltersList, const wxString& FilterName, int& Index)
 
108
{
 
109
    bool bFound = false;
 
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)
 
114
    {
 
115
        if(List[idxList] == FilterName)
 
116
        {
 
117
            Index = idxList/2;
 
118
            bFound = true;
 
119
        }
 
120
    } // end for : idx : idxList
 
121
    return bFound;
 
122
} // end of GetFilterIndexFromName
 
123
 
 
124
bool FileFilters::GetFilterNameFromIndex(const wxString& FiltersList, int Index, wxString& FilterName)
 
125
{    // we return the name (not the mask)
 
126
    bool bFound = false;
 
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)
 
131
    {
 
132
        FilterName = List[2*Index];
 
133
        bFound = true;
 
134
    }
 
135
    return bFound;
 
136
} // end of GetFilterStringFromIndex
 
137
 
 
138
// define some constants used throughout C::B
 
139
 
 
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");
 
174
#ifdef __WXMSW__
 
175
    const wxString FileFilters::DYNAMICLIB_EXT           = _T("dll");
 
176
    const wxString FileFilters::EXECUTABLE_EXT           = _T("exe");
 
177
    const wxString FileFilters::NATIVE_EXT               = _T("sys");
 
178
#elif __WXMAC__
 
179
    const wxString FileFilters::DYNAMICLIB_EXT           = _T("dylib");
 
180
    const wxString FileFilters::EXECUTABLE_EXT           = _T("");
 
181
    const wxString FileFilters::NATIVE_EXT               = _T("");
 
182
#else
 
183
    const wxString FileFilters::DYNAMICLIB_EXT           = _T("so");
 
184
    const wxString FileFilters::EXECUTABLE_EXT           = _T("");
 
185
    const wxString FileFilters::NATIVE_EXT               = _T("");
 
186
#endif
 
187
 
 
188
// dot.ext version
 
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;
 
223
#ifdef __WXMSW__
 
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;
 
227
#else
 
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
 
231
#endif