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