1///////////////////////////////////////////////////////////////////////////////
2// Name:        src/common/stockitem.cpp
3// Purpose:     Stock buttons, menu and toolbar items labels
4// Author:      Vaclav Slavik
5// Modified by:
6// Created:     2004-08-15
7// RCS-ID:      $Id: stockitem.cpp 58617 2009-02-02 05:12:43Z SC $
8// Copyright:   (c) Vaclav Slavik, 2004
9// Licence:     wxWindows licence
10///////////////////////////////////////////////////////////////////////////////
11
12// ============================================================================
13// declarations
14// ============================================================================
15
16// ----------------------------------------------------------------------------
17// headers
18// ----------------------------------------------------------------------------
19
20// For compilers that support precompilation, includes "wx.h".
21#include "wx/wxprec.h"
22
23#ifdef __BORLANDC__
24    #pragma hdrstop
25#endif
26
27#include "wx/stockitem.h"
28
29#ifndef WX_PRECOMP
30    #include "wx/intl.h"
31    #include "wx/utils.h" // for wxStripMenuCodes()
32#endif
33
34bool wxIsStockID(wxWindowID id)
35{
36    switch (id)
37    {
38        case wxID_ABOUT:
39        case wxID_ADD:
40        case wxID_APPLY:
41        case wxID_BOLD:
42        case wxID_CANCEL:
43        case wxID_CLEAR:
44        case wxID_CLOSE:
45        case wxID_COPY:
46        case wxID_CUT:
47        case wxID_DELETE:
48        case wxID_EDIT:
49        case wxID_FIND:
50        case wxID_FILE:
51        case wxID_REPLACE:
52        case wxID_BACKWARD:
53        case wxID_DOWN:
54        case wxID_FORWARD:
55        case wxID_UP:
56        case wxID_HELP:
57        case wxID_HOME:
58        case wxID_INDENT:
59        case wxID_INDEX:
60        case wxID_ITALIC:
61        case wxID_JUSTIFY_CENTER:
62        case wxID_JUSTIFY_FILL:
63        case wxID_JUSTIFY_LEFT:
64        case wxID_JUSTIFY_RIGHT:
65        case wxID_NEW:
66        case wxID_NO:
67        case wxID_OK:
68        case wxID_OPEN:
69        case wxID_PASTE:
70        case wxID_PREFERENCES:
71        case wxID_PRINT:
72        case wxID_PREVIEW:
73        case wxID_PROPERTIES:
74        case wxID_EXIT:
75        case wxID_REDO:
76        case wxID_REFRESH:
77        case wxID_REMOVE:
78        case wxID_REVERT_TO_SAVED:
79        case wxID_SAVE:
80        case wxID_SAVEAS:
81        case wxID_SELECTALL:
82        case wxID_STOP:
83        case wxID_UNDELETE:
84        case wxID_UNDERLINE:
85        case wxID_UNDO:
86        case wxID_UNINDENT:
87        case wxID_YES:
88        case wxID_ZOOM_100:
89        case wxID_ZOOM_FIT:
90        case wxID_ZOOM_IN:
91        case wxID_ZOOM_OUT:
92            return true;
93
94        default:
95            return false;
96    }
97}
98
99wxString wxGetStockLabel(wxWindowID id, long flags)
100{
101    wxString stockLabel;
102
103    #define STOCKITEM(stockid, label) \
104        case stockid:                 \
105            stockLabel = label;       \
106            break;
107
108    switch (id)
109    {
110        STOCKITEM(wxID_ABOUT,               _("&About"))
111        STOCKITEM(wxID_ADD,                 _("Add"))
112        STOCKITEM(wxID_APPLY,               _("&Apply"))
113        STOCKITEM(wxID_BOLD,                _("&Bold"))
114        STOCKITEM(wxID_CANCEL,              _("&Cancel"))
115        STOCKITEM(wxID_CLEAR,               _("&Clear"))
116        STOCKITEM(wxID_CLOSE,               _("&Close"))
117        STOCKITEM(wxID_COPY,                _("&Copy"))
118        STOCKITEM(wxID_CUT,                 _("Cu&t"))
119        STOCKITEM(wxID_DELETE,              _("&Delete"))
120        STOCKITEM(wxID_EDIT,                _("&Edit"))
121        STOCKITEM(wxID_FIND,                _("&Find"))
122        STOCKITEM(wxID_FILE,                _("&File"))
123        STOCKITEM(wxID_REPLACE,             _("Rep&lace"))
124        STOCKITEM(wxID_BACKWARD,            _("&Back"))
125        STOCKITEM(wxID_DOWN,                _("&Down"))
126        STOCKITEM(wxID_FORWARD,             _("&Forward"))
127        STOCKITEM(wxID_UP,                  _("&Up"))
128        STOCKITEM(wxID_HELP,                _("&Help"))
129        STOCKITEM(wxID_HOME,                _("&Home"))
130        STOCKITEM(wxID_INDENT,              _("Indent"))
131        STOCKITEM(wxID_INDEX,               _("&Index"))
132        STOCKITEM(wxID_ITALIC,              _("&Italic"))
133        STOCKITEM(wxID_JUSTIFY_CENTER,      _("Centered"))
134        STOCKITEM(wxID_JUSTIFY_FILL,        _("Justified"))
135        STOCKITEM(wxID_JUSTIFY_LEFT,        _("Align Left"))
136        STOCKITEM(wxID_JUSTIFY_RIGHT,       _("Align Right"))
137        STOCKITEM(wxID_NEW,                 _("&New"))
138        STOCKITEM(wxID_NO,                  _("&No"))
139        STOCKITEM(wxID_OK,                  _("&OK"))
140        STOCKITEM(wxID_OPEN,                _("&Open"))
141        STOCKITEM(wxID_PASTE,               _("&Paste"))
142        STOCKITEM(wxID_PREFERENCES,         _("&Preferences"))
143        STOCKITEM(wxID_PRINT,               _("&Print"))
144        STOCKITEM(wxID_PREVIEW,             _("Print previe&w"))
145        STOCKITEM(wxID_PROPERTIES,          _("&Properties"))
146        STOCKITEM(wxID_EXIT,                _("&Quit"))
147        STOCKITEM(wxID_REDO,                _("&Redo"))
148        STOCKITEM(wxID_REFRESH,             _("Refresh"))
149        STOCKITEM(wxID_REMOVE,              _("Remove"))
150        STOCKITEM(wxID_REVERT_TO_SAVED,     _("Revert to Saved"))
151        STOCKITEM(wxID_SAVE,                _("&Save"))
152        STOCKITEM(wxID_SAVEAS,              _("Save &As..."))
153        STOCKITEM(wxID_SELECTALL,           _("Select all"))
154        STOCKITEM(wxID_STOP,                _("&Stop"))
155        STOCKITEM(wxID_UNDELETE,            _("Undelete"))
156        STOCKITEM(wxID_UNDERLINE,           _("&Underline"))
157        STOCKITEM(wxID_UNDO,                _("&Undo"))
158        STOCKITEM(wxID_UNINDENT,            _("&Unindent"))
159        STOCKITEM(wxID_YES,                 _("&Yes"))
160        STOCKITEM(wxID_ZOOM_100,            _("&Actual Size"))
161        STOCKITEM(wxID_ZOOM_FIT,            _("Zoom to &Fit"))
162        STOCKITEM(wxID_ZOOM_IN,             _("Zoom &In"))
163        STOCKITEM(wxID_ZOOM_OUT,            _("Zoom &Out"))
164
165        default:
166            wxFAIL_MSG( _T("invalid stock item ID") );
167            break;
168    };
169
170    #undef STOCKITEM
171
172    if ( !(flags & wxSTOCK_WITH_MNEMONIC) )
173    {
174        stockLabel = wxStripMenuCodes(stockLabel);
175    }
176
177#if wxUSE_ACCEL
178    if ( !stockLabel.empty() && (flags & wxSTOCK_WITH_ACCELERATOR) )
179    {
180        wxAcceleratorEntry accel = wxGetStockAccelerator(id);
181        if (accel.IsOk())
182            stockLabel << _T('\t') << accel.ToString();
183    }
184#endif // wxUSE_ACCEL
185
186    return stockLabel;
187}
188
189wxString wxGetStockHelpString(wxWindowID id, wxStockHelpStringClient client)
190{
191    wxString stockHelp;
192
193    #define STOCKITEM(stockid, ctx, helpstr)             \
194        case stockid:                                    \
195            if (client==ctx) stockHelp = helpstr;        \
196            break;
197
198    switch (id)
199    {
200        // NB: these help string should be not too specific as they could be used
201        //     in completely different programs!
202        STOCKITEM(wxID_ABOUT,    wxSTOCK_MENU, _("Show about dialog"))
203        STOCKITEM(wxID_COPY,     wxSTOCK_MENU, _("Copy selection"))
204        STOCKITEM(wxID_CUT,      wxSTOCK_MENU, _("Cut selection"))
205        STOCKITEM(wxID_DELETE,   wxSTOCK_MENU, _("Delete selection"))
206        STOCKITEM(wxID_REPLACE,  wxSTOCK_MENU, _("Replace selection"))
207        STOCKITEM(wxID_PASTE,    wxSTOCK_MENU, _("Paste selection"))
208        STOCKITEM(wxID_EXIT,     wxSTOCK_MENU, _("Quit this program"))
209        STOCKITEM(wxID_REDO,     wxSTOCK_MENU, _("Redo last action"))
210        STOCKITEM(wxID_UNDO,     wxSTOCK_MENU, _("Undo last action"))
211        STOCKITEM(wxID_CLOSE,    wxSTOCK_MENU, _("Close current document"))
212        STOCKITEM(wxID_SAVE,     wxSTOCK_MENU, _("Save current document"))
213        STOCKITEM(wxID_SAVEAS,   wxSTOCK_MENU, _("Save current document with a different filename"))
214
215        default:
216            // there's no stock help string for this ID / client
217            return wxEmptyString;
218    }
219
220    #undef STOCKITEM
221
222    return stockHelp;
223}
224
225#if wxUSE_ACCEL
226
227wxAcceleratorEntry wxGetStockAccelerator(wxWindowID id)
228{
229    wxAcceleratorEntry ret;
230
231    #define STOCKITEM(stockid, flags, keycode)      \
232        case stockid:                               \
233            ret.Set(flags, keycode, stockid);       \
234            break;
235
236    switch (id)
237    {
238        STOCKITEM(wxID_COPY,                wxACCEL_CMD,'C')
239        STOCKITEM(wxID_CUT,                 wxACCEL_CMD,'X')
240        STOCKITEM(wxID_FIND,                wxACCEL_CMD,'F')
241        STOCKITEM(wxID_REPLACE,             wxACCEL_CMD,'R')
242        STOCKITEM(wxID_HELP,                wxACCEL_CMD,'H')
243        STOCKITEM(wxID_NEW,                 wxACCEL_CMD,'N')
244        STOCKITEM(wxID_OPEN,                wxACCEL_CMD,'O')
245        STOCKITEM(wxID_PASTE,               wxACCEL_CMD,'V')
246        STOCKITEM(wxID_SAVE,                wxACCEL_CMD,'S')
247
248        default:
249            // set the wxAcceleratorEntry to return into an invalid state:
250            // there's no stock accelerator for that.
251            ret.Set(0, 0, id);
252            break;
253    };
254
255    #undef STOCKITEM
256
257    // always use wxAcceleratorEntry::IsOk on returned value !
258    return ret;
259}
260
261#endif // wxUSE_ACCEL
262
263bool wxIsStockLabel(wxWindowID id, const wxString& label)
264{
265    if (label.empty())
266        return true;
267
268    wxString stock = wxGetStockLabel(id);
269
270    if (label == stock)
271        return true;
272
273    stock.Replace(_T("&"), wxEmptyString);
274    if (label == stock)
275        return true;
276
277    return false;
278}
279