~s-cecilio/lenmus/v5.3

« back to all changes in this revision

Viewing changes to src/app/lenmus_art_provider.cpp

  • Committer: cecilios
  • Date: 2012-09-11 16:59:18 UTC
  • Revision ID: svn-v4:2587a929-2f0e-0410-ae78-fe6f687d5efe:branches/TRY-5.0:730
Paths: fixed problem with installation folders. Fixed Chinese ISO language code

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//---------------------------------------------------------------------------------------
 
2
//    LenMus Phonascus: The teacher of music
 
3
//    Copyright (c) 2002-2012 LenMus project
 
4
//
 
5
//    This program is free software; you can redistribute it and/or modify it under the
 
6
//    terms of the GNU General Public License as published by the Free Software Foundation,
 
7
//    either version 3 of the License, or (at your option) any later version.
 
8
//
 
9
//    This program is distributed in the hope that it will be useful, but WITHOUT ANY
 
10
//    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 
11
//    PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 
12
//
 
13
//    You should have received a copy of the GNU General Public License along with this
 
14
//    program. If not, see <http://www.gnu.org/licenses/>.
 
15
//
 
16
//    For any comment, suggestion or feature request, please contact the manager of
 
17
//    the project at cecilios@users.sourceforge.net
 
18
//
 
19
//---------------------------------------------------------------------------------------
 
20
 
 
21
#include "lenmus_art_provider.h"
 
22
 
 
23
#include "lenmus_injectors.h"
 
24
#include "lenmus_paths.h"
 
25
 
 
26
#include <wx/wxprec.h>
 
27
#include <wx/wx.h>
 
28
 
 
29
 
 
30
namespace lenmus
 
31
{
 
32
 
 
33
// images to use when error in opening a PNG file
 
34
static const char *error_16_xpm[] = {
 
35
/* columns rows colors chars-per-pixel */
 
36
"16 16 2 1",
 
37
"X c #000000",
 
38
"  c #FFFFFF",
 
39
/* pixels */
 
40
"XXXXXXXXXXXXXXXX",
 
41
"XX            XX",
 
42
"X X          X X",
 
43
"X  X        X  X",
 
44
"X   X      X   X",
 
45
"X    X    X    X",
 
46
"X     X  X     X",
 
47
"X      XX      X",
 
48
"X      XX      X",
 
49
"X     X  X     X",
 
50
"X    X    X    X",
 
51
"X   X      X   X",
 
52
"X  X        X  X",
 
53
"X X          X X",
 
54
"XX            XX",
 
55
"XXXXXXXXXXXXXXXX"
 
56
};
 
57
 
 
58
/* TODO: Can this be removed? */
 
59
static const char *null_xpm[] = {
 
60
/* columns rows colors chars-per-pixel */
 
61
"16 16 4 1",
 
62
"  c None",
 
63
". c Black",
 
64
"X c #808080",
 
65
"o c #000080",
 
66
/* pixels */
 
67
"                ",
 
68
"                ",
 
69
"  XXX           ",
 
70
"                ",
 
71
"  XXX           ",
 
72
"                ",
 
73
"  XXX           ",
 
74
"                ",
 
75
"  XXX           ",
 
76
"                ",
 
77
"  XXX           ",
 
78
"                ",
 
79
"  XXX           ",
 
80
"                ",
 
81
"                ",
 
82
"                "
 
83
};
 
84
 
 
85
 
 
86
//---------------------------------------------------------------------------------------
 
87
ArtProvider::ArtProvider(ApplicationScope& appScope)
 
88
    : m_appScope(appScope)
 
89
{
 
90
}
 
91
 
 
92
//---------------------------------------------------------------------------------------
 
93
// resources are identified by an wxArtId. It is just a string.
 
94
wxFileName ArtProvider::get_filepath(const wxArtID& id, const wxArtClient& client,
 
95
                                     const wxSize& size)
 
96
{
 
97
    Paths* pPaths = m_appScope.get_paths();
 
98
    wxString sPath = pPaths->GetImagePath();
 
99
    wxString sFile;
 
100
 
 
101
    //set size. 16x16 is the default
 
102
    wxString sSize = _T("_16.png");
 
103
    if (size.GetHeight() == size.GetWidth())
 
104
    {
 
105
        if (size.GetHeight() == 24) {
 
106
            sSize = _T("_24.png");
 
107
        }
 
108
        else if (size.GetHeight() == 32) {
 
109
            sSize = _T("_32.png");
 
110
        }
 
111
        else if (size.GetHeight() == 22) {
 
112
            sSize = _T("_22.png");
 
113
        }
 
114
        else if (size.GetHeight() == 48) {
 
115
            sSize = _T("_48.png");
 
116
        }
 
117
    }
 
118
    else
 
119
        sSize = wxString::Format(_T("_%dx%d.png"), size.GetWidth(), size.GetHeight());
 
120
 
 
121
    //icon for text book controller
 
122
    if ( client == wxART_HELP_BROWSER ) {
 
123
        if ( id == wxART_HELP ) {
 
124
            return wxFileName(_T("null"));
 
125
        }
 
126
    }
 
127
 
 
128
    //TextBookController buttons
 
129
    if ( id == wxART_ADD_BOOKMARK ) {
 
130
        return wxFileName(_T("null"));
 
131
    }
 
132
    else if ( id == wxART_DEL_BOOKMARK ) {
 
133
        return wxFileName(_T("null"));
 
134
    }
 
135
    else if ( id == wxART_ERROR ) {
 
136
        sFile = _T("msg_error");
 
137
    }
 
138
    else if ( id == wxART_FILE_OPEN ) {
 
139
        return wxFileName(_T("null"));
 
140
    }
 
141
    else if ( id == wxART_GO_BACK ) {
 
142
        sFile = _T("tool_previous");
 
143
    }
 
144
    else if ( id == wxART_GO_FORWARD ) {
 
145
        sFile = _T("tool_next");
 
146
    }
 
147
    else if ( id == wxART_GO_TO_PARENT ) {
 
148
        return wxFileName(_T("null"));
 
149
    }
 
150
    else if ( id == wxART_GO_UP ) {
 
151
        sFile = _T("tool_page_previous");
 
152
    }
 
153
    else if ( id == wxART_GO_DOWN ) {
 
154
        sFile = _T("tool_page_next");
 
155
    }
 
156
    else if ( id == wxART_HELP_BOOK ) {
 
157
        sFile = _T("app_book");
 
158
    }
 
159
    else if ( id == wxART_HELP_FOLDER ) {
 
160
        sFile = _T("app_book");
 
161
    }
 
162
    else if ( id == wxART_HELP_PAGE ) {
 
163
        return wxFileName(_T("null"));
 
164
    }
 
165
    else if ( id == wxART_HELP_SETTINGS ) {
 
166
        sFile = _T("tool_font_size");
 
167
    }
 
168
    else if ( id == wxART_HELP_SIDE_PANEL ) {
 
169
        sFile = _T("tool_index_panel");
 
170
    }
 
171
    else if ( id == wxART_INFORMATION ) {
 
172
        sFile = _T("msg_info");
 
173
    }
 
174
    else if ( id == wxART_PRINT ) {
 
175
        sFile = _T("tool_print");
 
176
    }
 
177
    else if ( id == wxART_WARNING ) {
 
178
        sFile = _T("msg_info");
 
179
    }
 
180
 
 
181
    //MainFrame toolbar
 
182
    else if (id.Left(5) == _T("tool_")) {
 
183
        sFile = id;
 
184
    }
 
185
    else if (id.Left(4) == _T("msg_")) {
 
186
        sFile = id;
 
187
    }
 
188
    else if (id.Left(4) == _T("opt_")) {
 
189
        sFile = id;
 
190
    }
 
191
    else if (id.Left(7) == _T("button_")) {
 
192
        sFile = id;
 
193
    }
 
194
    else if (id.Left(8) == _T("welcome_")) {
 
195
        sFile = id;
 
196
        sSize = _T(".png");
 
197
    }
 
198
 
 
199
    //miscelaneous
 
200
    else if (id == _T("backgrnd")) {
 
201
        sFile = _T("backgrnd");
 
202
                sSize = _T(".png");
 
203
    }
 
204
    else if (id == _T("app_icon")) {
 
205
        sFile = _T("app_icon");
 
206
                sSize = _T(".png");
 
207
    }
 
208
    else if (id == _T("app_splash")) {
 
209
        sFile = _T("splash");
 
210
                sSize = _T(".png");
 
211
    }
 
212
    else if (id == _T("banner_updater")) {
 
213
        sFile = _T("UpdaterBanner");
 
214
                sSize = _T(".png");
 
215
    }
 
216
    else if (id == _T("logo50x67")) {
 
217
        sFile = _T("logo50x67");
 
218
                sSize = _T(".png");
 
219
    }
 
220
    else if (id == _T("preview")) {
 
221
        sFile = _T("preview");
 
222
                sSize = _T(".png");
 
223
    }
 
224
    else if (id == _T("right_answers")) {
 
225
        sFile = _T("right_answers");
 
226
                sSize = _T("_24.png");
 
227
    }
 
228
    else if (id == _T("wrong_answers")) {
 
229
        sFile = _T("wrong_answers");
 
230
                sSize = _T("_24.png");
 
231
    }
 
232
    else if (id == _T("total_marks")) {
 
233
        sFile = _T("total_marks");
 
234
                sSize = _T("_24.png");
 
235
    }
 
236
 
 
237
    // other IDs
 
238
    else
 
239
        sFile = id;
 
240
 
 
241
    return wxFileName(sPath, sFile + sSize, wxPATH_NATIVE);
 
242
}
 
243
 
 
244
//---------------------------------------------------------------------------------------
 
245
wxBitmap ArtProvider::CreateBitmap(const wxArtID& id,
 
246
                                   const wxArtClient& client,
 
247
                                   const wxSize& size)
 
248
{
 
249
    wxImage image = get_image(id, client, size);
 
250
    return wxBitmap(image);
 
251
}
 
252
 
 
253
//---------------------------------------------------------------------------------------
 
254
wxImage ArtProvider::get_image(const wxArtID& id, const wxArtClient& client,
 
255
                               const wxSize& size)
 
256
{
 
257
    wxFileName oFilename = get_filepath(id, client, size);
 
258
 
 
259
    if (oFilename.GetFullPath() == _T("null"))
 
260
    {
 
261
        wxBitmap oBitmap(null_xpm);
 
262
        return oBitmap.ConvertToImage();
 
263
    }
 
264
 
 
265
    wxImage image;
 
266
    if (image.LoadFile(oFilename.GetFullPath(), wxBITMAP_TYPE_PNG))
 
267
        return image;
 
268
    else
 
269
    {
 
270
        // if file not found we need to return something. Otherwise, for tool bars
 
271
        // and other objects a crash will be produced
 
272
        wxLogMessage(_T("[ArtProvider::CreateImage] File %s not found. Error icon returned"),
 
273
                        oFilename.GetFullPath().c_str() );
 
274
        wxBitmap oBitmap(error_16_xpm);
 
275
        return oBitmap.ConvertToImage();
 
276
    }
 
277
}
 
278
 
 
279
 
 
280
 
 
281
}   //namespace lenmus