1///////////////////////////////////////////////////////////////////////////// 2// Name: wx/utils.h 3// Purpose: Miscellaneous utilities 4// Author: Julian Smart 5// Modified by: 6// Created: 29/01/98 7// RCS-ID: $Id: utils.h 62544 2009-11-03 14:11:30Z VZ $ 8// Copyright: (c) 1998 Julian Smart 9// Licence: wxWindows licence 10///////////////////////////////////////////////////////////////////////////// 11 12#ifndef _WX_UTILSH__ 13#define _WX_UTILSH__ 14 15// ---------------------------------------------------------------------------- 16// headers 17// ---------------------------------------------------------------------------- 18 19#include "wx/object.h" 20#include "wx/list.h" 21#include "wx/filefn.h" 22#if wxUSE_GUI 23 #include "wx/gdicmn.h" 24#endif 25 26class WXDLLIMPEXP_FWD_BASE wxArrayString; 27class WXDLLIMPEXP_FWD_BASE wxArrayInt; 28 29// need this for wxGetDiskSpace() as we can't, unfortunately, forward declare 30// wxLongLong 31#include "wx/longlong.h" 32 33// need for wxOperatingSystemId 34#include "wx/platinfo.h" 35 36#ifdef __WATCOMC__ 37 #include <direct.h> 38#elif defined(__X__) 39 #include <dirent.h> 40 #include <unistd.h> 41#endif 42 43#include <stdio.h> 44 45// ---------------------------------------------------------------------------- 46// Forward declaration 47// ---------------------------------------------------------------------------- 48 49class WXDLLIMPEXP_FWD_BASE wxProcess; 50class WXDLLIMPEXP_FWD_CORE wxFrame; 51class WXDLLIMPEXP_FWD_CORE wxWindow; 52class WXDLLIMPEXP_FWD_CORE wxWindowList; 53 54// ---------------------------------------------------------------------------- 55// Macros 56// ---------------------------------------------------------------------------- 57 58#define wxMax(a,b) (((a) > (b)) ? (a) : (b)) 59#define wxMin(a,b) (((a) < (b)) ? (a) : (b)) 60#define wxClip(a,b,c) (((a) < (b)) ? (b) : (((a) > (c)) ? (c) : (a))) 61 62// wxGetFreeMemory can return huge amount of memory on 32-bit platforms as well 63// so to always use long long for its result type on all platforms which 64// support it 65#if wxUSE_LONGLONG 66 typedef wxLongLong wxMemorySize; 67#else 68 typedef long wxMemorySize; 69#endif 70 71// ---------------------------------------------------------------------------- 72// String functions (deprecated, use wxString) 73// ---------------------------------------------------------------------------- 74 75// Make a copy of this string using 'new' 76#if WXWIN_COMPATIBILITY_2_4 77wxDEPRECATED( WXDLLIMPEXP_BASE wxChar* copystring(const wxChar *s) ); 78#endif 79 80// A shorter way of using strcmp 81#define wxStringEq(s1, s2) (s1 && s2 && (wxStrcmp(s1, s2) == 0)) 82 83// ---------------------------------------------------------------------------- 84// Miscellaneous functions 85// ---------------------------------------------------------------------------- 86 87// Sound the bell 88#if !defined __EMX__ && \ 89 (defined __WXMOTIF__ || defined __WXGTK__ || defined __WXX11__) 90WXDLLIMPEXP_CORE void wxBell(); 91#else 92WXDLLIMPEXP_BASE void wxBell(); 93#endif 94 95// Get OS description as a user-readable string 96WXDLLIMPEXP_BASE wxString wxGetOsDescription(); 97 98// Get OS version 99WXDLLIMPEXP_BASE wxOperatingSystemId wxGetOsVersion(int *majorVsn = (int *) NULL, 100 int *minorVsn = (int *) NULL); 101 102// Get platform endianness 103WXDLLIMPEXP_BASE bool wxIsPlatformLittleEndian(); 104 105// Get platform architecture 106WXDLLIMPEXP_BASE bool wxIsPlatform64Bit(); 107 108// Return a string with the current date/time 109WXDLLIMPEXP_BASE wxString wxNow(); 110 111// Return path where wxWidgets is installed (mostly useful in Unices) 112WXDLLIMPEXP_BASE const wxChar *wxGetInstallPrefix(); 113// Return path to wxWin data (/usr/share/wx/%{version}) (Unices) 114WXDLLIMPEXP_BASE wxString wxGetDataDir(); 115 116/* 117 * Class to make it easier to specify platform-dependent values 118 * 119 * Examples: 120 * long val = wxPlatform::If(wxMac, 1).ElseIf(wxGTK, 2).ElseIf(stPDA, 5).Else(3); 121 * wxString strVal = wxPlatform::If(wxMac, wxT("Mac")).ElseIf(wxMSW, wxT("MSW")).Else(wxT("Other")); 122 * 123 * A custom platform symbol: 124 * 125 * #define stPDA 100 126 * #ifdef __WXWINCE__ 127 * wxPlatform::AddPlatform(stPDA); 128 * #endif 129 * 130 * long windowStyle = wxCAPTION | (long) wxPlatform::IfNot(stPDA, wxRESIZE_BORDER); 131 * 132 */ 133 134class WXDLLIMPEXP_BASE wxPlatform 135{ 136public: 137 wxPlatform() { Init(); } 138 wxPlatform(const wxPlatform& platform) { Copy(platform); } 139 void operator = (const wxPlatform& platform) { Copy(platform); } 140 void Copy(const wxPlatform& platform); 141 142 // Specify an optional default value 143 wxPlatform(int defValue) { Init(); m_longValue = (long)defValue; } 144 wxPlatform(long defValue) { Init(); m_longValue = defValue; } 145 wxPlatform(const wxString& defValue) { Init(); m_stringValue = defValue; } 146 wxPlatform(double defValue) { Init(); m_doubleValue = defValue; } 147 148 static wxPlatform If(int platform, long value); 149 static wxPlatform IfNot(int platform, long value); 150 wxPlatform& ElseIf(int platform, long value); 151 wxPlatform& ElseIfNot(int platform, long value); 152 wxPlatform& Else(long value); 153 154 static wxPlatform If(int platform, int value) { return If(platform, (long)value); } 155 static wxPlatform IfNot(int platform, int value) { return IfNot(platform, (long)value); } 156 wxPlatform& ElseIf(int platform, int value) { return ElseIf(platform, (long) value); } 157 wxPlatform& ElseIfNot(int platform, int value) { return ElseIfNot(platform, (long) value); } 158 wxPlatform& Else(int value) { return Else((long) value); } 159 160 static wxPlatform If(int platform, double value); 161 static wxPlatform IfNot(int platform, double value); 162 wxPlatform& ElseIf(int platform, double value); 163 wxPlatform& ElseIfNot(int platform, double value); 164 wxPlatform& Else(double value); 165 166 static wxPlatform If(int platform, const wxString& value); 167 static wxPlatform IfNot(int platform, const wxString& value); 168 wxPlatform& ElseIf(int platform, const wxString& value); 169 wxPlatform& ElseIfNot(int platform, const wxString& value); 170 wxPlatform& Else(const wxString& value); 171 172 long GetInteger() const { return m_longValue; } 173 const wxString& GetString() const { return m_stringValue; } 174 double GetDouble() const { return m_doubleValue; } 175 176 operator int() const { return (int) GetInteger(); } 177 operator long() const { return GetInteger(); } 178 operator double() const { return GetDouble(); } 179 operator const wxString() const { return GetString(); } 180 operator const wxChar*() const { return (const wxChar*) GetString(); } 181 182 static void AddPlatform(int platform); 183 static bool Is(int platform); 184 static void ClearPlatforms(); 185 186private: 187 188 void Init() { m_longValue = 0; m_doubleValue = 0.0; } 189 190 long m_longValue; 191 double m_doubleValue; 192 wxString m_stringValue; 193 static wxArrayInt* sm_customPlatforms; 194}; 195 196/// Function for testing current platform 197inline bool wxPlatformIs(int platform) { return wxPlatform::Is(platform); } 198 199#if wxUSE_GUI 200 201// Get the state of a key (true if pressed, false if not) 202// This is generally most useful getting the state of 203// the modifier or toggle keys. 204WXDLLEXPORT bool wxGetKeyState(wxKeyCode key); 205 206 207// Don't synthesize KeyUp events holding down a key and producing 208// KeyDown events with autorepeat. On by default and always on 209// in wxMSW. 210WXDLLEXPORT bool wxSetDetectableAutoRepeat( bool flag ); 211 212 213// wxMouseState is used to hold information about button and modifier state 214// and is what is returned from wxGetMouseState. 215class WXDLLEXPORT wxMouseState 216{ 217public: 218 wxMouseState() 219 : m_x(0), m_y(0), 220 m_leftDown(false), m_middleDown(false), m_rightDown(false), 221 m_controlDown(false), m_shiftDown(false), m_altDown(false), 222 m_metaDown(false) 223 {} 224 225 wxCoord GetX() { return m_x; } 226 wxCoord GetY() { return m_y; } 227 228 bool LeftDown() { return m_leftDown; } 229 bool MiddleDown() { return m_middleDown; } 230 bool RightDown() { return m_rightDown; } 231 232#if wxABI_VERSION >= 20811 233 bool LeftIsDown() { return m_leftDown; } 234 bool MiddleIsDown() { return m_middleDown; } 235 bool RightIsDown() { return m_rightDown; } 236#endif // wx >= 2.8.11 237 238 bool ControlDown() { return m_controlDown; } 239 bool ShiftDown() { return m_shiftDown; } 240 bool AltDown() { return m_altDown; } 241 bool MetaDown() { return m_metaDown; } 242 bool CmdDown() 243 { 244#if defined(__WXMAC__) || defined(__WXCOCOA__) 245 return MetaDown(); 246#else 247 return ControlDown(); 248#endif 249 } 250 251 void SetX(wxCoord x) { m_x = x; } 252 void SetY(wxCoord y) { m_y = y; } 253 254 void SetLeftDown(bool down) { m_leftDown = down; } 255 void SetMiddleDown(bool down) { m_middleDown = down; } 256 void SetRightDown(bool down) { m_rightDown = down; } 257 258 void SetControlDown(bool down) { m_controlDown = down; } 259 void SetShiftDown(bool down) { m_shiftDown = down; } 260 void SetAltDown(bool down) { m_altDown = down; } 261 void SetMetaDown(bool down) { m_metaDown = down; } 262 263private: 264 wxCoord m_x; 265 wxCoord m_y; 266 267 bool m_leftDown : 1; 268 bool m_middleDown : 1; 269 bool m_rightDown : 1; 270 271 bool m_controlDown : 1; 272 bool m_shiftDown : 1; 273 bool m_altDown : 1; 274 bool m_metaDown : 1; 275}; 276 277 278// Returns the current state of the mouse position, buttons and modifers 279WXDLLEXPORT wxMouseState wxGetMouseState(); 280 281 282// ---------------------------------------------------------------------------- 283// Window ID management 284// ---------------------------------------------------------------------------- 285 286// Generate a unique ID 287WXDLLEXPORT long wxNewId(); 288 289// Ensure subsequent IDs don't clash with this one 290WXDLLEXPORT void wxRegisterId(long id); 291 292// Return the current ID 293WXDLLEXPORT long wxGetCurrentId(); 294 295#endif // wxUSE_GUI 296 297// ---------------------------------------------------------------------------- 298// Various conversions 299// ---------------------------------------------------------------------------- 300 301// these functions are deprecated, use wxString methods instead! 302#if WXWIN_COMPATIBILITY_2_4 303 304extern WXDLLIMPEXP_DATA_BASE(const wxChar*) wxFloatToStringStr; 305extern WXDLLIMPEXP_DATA_BASE(const wxChar*) wxDoubleToStringStr; 306 307wxDEPRECATED( WXDLLIMPEXP_BASE void StringToFloat(const wxChar *s, float *number) ); 308wxDEPRECATED( WXDLLIMPEXP_BASE wxChar* FloatToString(float number, const wxChar *fmt = wxFloatToStringStr) ); 309wxDEPRECATED( WXDLLIMPEXP_BASE void StringToDouble(const wxChar *s, double *number) ); 310wxDEPRECATED( WXDLLIMPEXP_BASE wxChar* DoubleToString(double number, const wxChar *fmt = wxDoubleToStringStr) ); 311wxDEPRECATED( WXDLLIMPEXP_BASE void StringToInt(const wxChar *s, int *number) ); 312wxDEPRECATED( WXDLLIMPEXP_BASE void StringToLong(const wxChar *s, long *number) ); 313wxDEPRECATED( WXDLLIMPEXP_BASE wxChar* IntToString(int number) ); 314wxDEPRECATED( WXDLLIMPEXP_BASE wxChar* LongToString(long number) ); 315 316#endif // WXWIN_COMPATIBILITY_2_4 317 318// Convert 2-digit hex number to decimal 319WXDLLIMPEXP_BASE int wxHexToDec(const wxString& buf); 320 321// Convert decimal integer to 2-character hex string 322WXDLLIMPEXP_BASE void wxDecToHex(int dec, wxChar *buf); 323WXDLLIMPEXP_BASE wxString wxDecToHex(int dec); 324 325// ---------------------------------------------------------------------------- 326// Process management 327// ---------------------------------------------------------------------------- 328 329// NB: for backwards compatibility reasons the values of wxEXEC_[A]SYNC *must* 330// be 0 and 1, don't change! 331 332enum 333{ 334 // execute the process asynchronously 335 wxEXEC_ASYNC = 0, 336 337 // execute it synchronously, i.e. wait until it finishes 338 wxEXEC_SYNC = 1, 339 340 // under Windows, don't hide the child even if it's IO is redirected (this 341 // is done by default) 342 wxEXEC_NOHIDE = 2, 343 344 // under Unix, if the process is the group leader then passing wxKILL_CHILDREN to wxKill 345 // kills all children as well as pid 346 wxEXEC_MAKE_GROUP_LEADER = 4, 347 348 // by default synchronous execution disables all program windows to avoid 349 // that the user interacts with the program while the child process is 350 // running, you can use this flag to prevent this from happening 351 wxEXEC_NODISABLE = 8 352}; 353 354// Execute another program. 355// 356// If flags contain wxEXEC_SYNC, return -1 on failure and the exit code of the 357// process if everything was ok. Otherwise (i.e. if wxEXEC_ASYNC), return 0 on 358// failure and the PID of the launched process if ok. 359WXDLLIMPEXP_BASE long wxExecute(wxChar **argv, int flags = wxEXEC_ASYNC, 360 wxProcess *process = (wxProcess *) NULL); 361WXDLLIMPEXP_BASE long wxExecute(const wxString& command, int flags = wxEXEC_ASYNC, 362 wxProcess *process = (wxProcess *) NULL); 363 364// execute the command capturing its output into an array line by line, this is 365// always synchronous 366WXDLLIMPEXP_BASE long wxExecute(const wxString& command, 367 wxArrayString& output, 368 int flags = 0); 369 370// also capture stderr (also synchronous) 371WXDLLIMPEXP_BASE long wxExecute(const wxString& command, 372 wxArrayString& output, 373 wxArrayString& error, 374 int flags = 0); 375 376#if defined(__WXMSW__) && wxUSE_IPC 377// ask a DDE server to execute the DDE request with given parameters 378WXDLLIMPEXP_BASE bool wxExecuteDDE(const wxString& ddeServer, 379 const wxString& ddeTopic, 380 const wxString& ddeCommand); 381#endif // __WXMSW__ && wxUSE_IPC 382 383enum wxSignal 384{ 385 wxSIGNONE = 0, // verify if the process exists under Unix 386 wxSIGHUP, 387 wxSIGINT, 388 wxSIGQUIT, 389 wxSIGILL, 390 wxSIGTRAP, 391 wxSIGABRT, 392 wxSIGIOT = wxSIGABRT, // another name 393 wxSIGEMT, 394 wxSIGFPE, 395 wxSIGKILL, 396 wxSIGBUS, 397 wxSIGSEGV, 398 wxSIGSYS, 399 wxSIGPIPE, 400 wxSIGALRM, 401 wxSIGTERM 402 403 // further signals are different in meaning between different Unix systems 404}; 405 406enum wxKillError 407{ 408 wxKILL_OK, // no error 409 wxKILL_BAD_SIGNAL, // no such signal 410 wxKILL_ACCESS_DENIED, // permission denied 411 wxKILL_NO_PROCESS, // no such process 412 wxKILL_ERROR // another, unspecified error 413}; 414 415enum wxKillFlags 416{ 417 wxKILL_NOCHILDREN = 0, // don't kill children 418 wxKILL_CHILDREN = 1 // kill children 419}; 420 421enum wxShutdownFlags 422{ 423 wxSHUTDOWN_POWEROFF, // power off the computer 424 wxSHUTDOWN_REBOOT // shutdown and reboot 425}; 426 427// Shutdown or reboot the PC 428WXDLLIMPEXP_BASE bool wxShutdown(wxShutdownFlags wFlags); 429 430// send the given signal to the process (only NONE and KILL are supported under 431// Windows, all others mean TERM), return 0 if ok and -1 on error 432// 433// return detailed error in rc if not NULL 434WXDLLIMPEXP_BASE int wxKill(long pid, 435 wxSignal sig = wxSIGTERM, 436 wxKillError *rc = NULL, 437 int flags = wxKILL_NOCHILDREN); 438 439// Execute a command in an interactive shell window (always synchronously) 440// If no command then just the shell 441WXDLLIMPEXP_BASE bool wxShell(const wxString& command = wxEmptyString); 442 443// As wxShell(), but must give a (non interactive) command and its output will 444// be returned in output array 445WXDLLIMPEXP_BASE bool wxShell(const wxString& command, wxArrayString& output); 446 447// Sleep for nSecs seconds 448WXDLLIMPEXP_BASE void wxSleep(int nSecs); 449 450// Sleep for a given amount of milliseconds 451WXDLLIMPEXP_BASE void wxMilliSleep(unsigned long milliseconds); 452 453// Sleep for a given amount of microseconds 454WXDLLIMPEXP_BASE void wxMicroSleep(unsigned long microseconds); 455 456// Sleep for a given amount of milliseconds (old, bad name), use wxMilliSleep 457wxDEPRECATED( WXDLLIMPEXP_BASE void wxUsleep(unsigned long milliseconds) ); 458 459// Get the process id of the current process 460WXDLLIMPEXP_BASE unsigned long wxGetProcessId(); 461 462// Get free memory in bytes, or -1 if cannot determine amount (e.g. on UNIX) 463WXDLLIMPEXP_BASE wxMemorySize wxGetFreeMemory(); 464 465#if wxUSE_ON_FATAL_EXCEPTION 466 467// should wxApp::OnFatalException() be called? 468WXDLLIMPEXP_BASE bool wxHandleFatalExceptions(bool doit = true); 469 470#endif // wxUSE_ON_FATAL_EXCEPTION 471 472// flags for wxLaunchDefaultBrowser 473enum 474{ 475 wxBROWSER_NEW_WINDOW = 1 476}; 477 478// Launch url in the user's default internet browser 479WXDLLIMPEXP_BASE bool wxLaunchDefaultBrowser(const wxString& url, int flags = 0); 480 481// ---------------------------------------------------------------------------- 482// Environment variables 483// ---------------------------------------------------------------------------- 484 485// returns true if variable exists (value may be NULL if you just want to check 486// for this) 487WXDLLIMPEXP_BASE bool wxGetEnv(const wxString& var, wxString *value); 488 489// set the env var name to the given value, return true on success 490WXDLLIMPEXP_BASE bool wxSetEnv(const wxString& var, const wxChar *value); 491 492// remove the env var from environment 493inline bool wxUnsetEnv(const wxString& var) { return wxSetEnv(var, NULL); } 494 495// ---------------------------------------------------------------------------- 496// Network and username functions. 497// ---------------------------------------------------------------------------- 498 499// NB: "char *" functions are deprecated, use wxString ones! 500 501// Get eMail address 502WXDLLIMPEXP_BASE bool wxGetEmailAddress(wxChar *buf, int maxSize); 503WXDLLIMPEXP_BASE wxString wxGetEmailAddress(); 504 505// Get hostname. 506WXDLLIMPEXP_BASE bool wxGetHostName(wxChar *buf, int maxSize); 507WXDLLIMPEXP_BASE wxString wxGetHostName(); 508 509// Get FQDN 510WXDLLIMPEXP_BASE wxString wxGetFullHostName(); 511WXDLLIMPEXP_BASE bool wxGetFullHostName(wxChar *buf, int maxSize); 512 513// Get user ID e.g. jacs (this is known as login name under Unix) 514WXDLLIMPEXP_BASE bool wxGetUserId(wxChar *buf, int maxSize); 515WXDLLIMPEXP_BASE wxString wxGetUserId(); 516 517// Get user name e.g. Julian Smart 518WXDLLIMPEXP_BASE bool wxGetUserName(wxChar *buf, int maxSize); 519WXDLLIMPEXP_BASE wxString wxGetUserName(); 520 521// Get current Home dir and copy to dest (returns pstr->c_str()) 522WXDLLIMPEXP_BASE wxString wxGetHomeDir(); 523WXDLLIMPEXP_BASE const wxChar* wxGetHomeDir(wxString *pstr); 524 525// Get the user's home dir (caller must copy --- volatile) 526// returns NULL is no HOME dir is known 527#if defined(__UNIX__) && wxUSE_UNICODE && !defined(__WINE__) 528WXDLLIMPEXP_BASE const wxMB2WXbuf wxGetUserHome(const wxString& user = wxEmptyString); 529#else 530WXDLLIMPEXP_BASE wxChar* wxGetUserHome(const wxString& user = wxEmptyString); 531#endif 532 533#if wxUSE_LONGLONG 534 typedef wxLongLong wxDiskspaceSize_t; 535#else 536 typedef long wxDiskspaceSize_t; 537#endif 538 539// get number of total/free bytes on the disk where path belongs 540WXDLLIMPEXP_BASE bool wxGetDiskSpace(const wxString& path, 541 wxDiskspaceSize_t *pTotal = NULL, 542 wxDiskspaceSize_t *pFree = NULL); 543 544#if wxUSE_GUI // GUI only things from now on 545 546// ---------------------------------------------------------------------------- 547// Menu accelerators related things 548// ---------------------------------------------------------------------------- 549 550// flags for wxStripMenuCodes 551enum 552{ 553 // strip '&' characters 554 wxStrip_Mnemonics = 1, 555 556 // strip everything after '\t' 557 wxStrip_Accel = 2, 558 559 // strip everything (this is the default) 560 wxStrip_All = wxStrip_Mnemonics | wxStrip_Accel 561}; 562 563// strip mnemonics and/or accelerators from the label 564WXDLLEXPORT wxString 565wxStripMenuCodes(const wxString& str, int flags = wxStrip_All); 566 567#if WXWIN_COMPATIBILITY_2_6 568// obsolete and deprecated version, do not use, use the above overload instead 569wxDEPRECATED( 570 WXDLLEXPORT wxChar* wxStripMenuCodes(const wxChar *in, wxChar *out = NULL) 571); 572 573#if wxUSE_ACCEL 574class WXDLLIMPEXP_FWD_CORE wxAcceleratorEntry; 575 576// use wxAcceleratorEntry::Create() or FromString() methods instead 577wxDEPRECATED( 578 WXDLLEXPORT wxAcceleratorEntry *wxGetAccelFromString(const wxString& label) 579); 580#endif // wxUSE_ACCEL 581 582#endif // WXWIN_COMPATIBILITY_2_6 583 584// ---------------------------------------------------------------------------- 585// Window search 586// ---------------------------------------------------------------------------- 587 588// Returns menu item id or wxNOT_FOUND if none. 589WXDLLEXPORT int wxFindMenuItemId(wxFrame *frame, const wxString& menuString, const wxString& itemString); 590 591// Find the wxWindow at the given point. wxGenericFindWindowAtPoint 592// is always present but may be less reliable than a native version. 593WXDLLEXPORT wxWindow* wxGenericFindWindowAtPoint(const wxPoint& pt); 594WXDLLEXPORT wxWindow* wxFindWindowAtPoint(const wxPoint& pt); 595 596// NB: this function is obsolete, use wxWindow::FindWindowByLabel() instead 597// 598// Find the window/widget with the given title or label. 599// Pass a parent to begin the search from, or NULL to look through 600// all windows. 601WXDLLEXPORT wxWindow* wxFindWindowByLabel(const wxString& title, wxWindow *parent = (wxWindow *) NULL); 602 603// NB: this function is obsolete, use wxWindow::FindWindowByName() instead 604// 605// Find window by name, and if that fails, by label. 606WXDLLEXPORT wxWindow* wxFindWindowByName(const wxString& name, wxWindow *parent = (wxWindow *) NULL); 607 608// ---------------------------------------------------------------------------- 609// Message/event queue helpers 610// ---------------------------------------------------------------------------- 611 612// Yield to other apps/messages and disable user input 613WXDLLEXPORT bool wxSafeYield(wxWindow *win = NULL, bool onlyIfNeeded = false); 614 615// Enable or disable input to all top level windows 616WXDLLEXPORT void wxEnableTopLevelWindows(bool enable = true); 617 618// Check whether this window wants to process messages, e.g. Stop button 619// in long calculations. 620WXDLLEXPORT bool wxCheckForInterrupt(wxWindow *wnd); 621 622// Consume all events until no more left 623WXDLLEXPORT void wxFlushEvents(); 624 625// a class which disables all windows (except, may be, thegiven one) in its 626// ctor and enables them back in its dtor 627class WXDLLEXPORT wxWindowDisabler 628{ 629public: 630 wxWindowDisabler(wxWindow *winToSkip = (wxWindow *)NULL); 631 ~wxWindowDisabler(); 632 633private: 634 wxWindowList *m_winDisabled; 635 636 DECLARE_NO_COPY_CLASS(wxWindowDisabler) 637}; 638 639// ---------------------------------------------------------------------------- 640// Cursors 641// ---------------------------------------------------------------------------- 642 643// Set the cursor to the busy cursor for all windows 644WXDLLIMPEXP_CORE void wxBeginBusyCursor(const wxCursor *cursor = wxHOURGLASS_CURSOR); 645 646// Restore cursor to normal 647WXDLLEXPORT void wxEndBusyCursor(); 648 649// true if we're between the above two calls 650WXDLLEXPORT bool wxIsBusy(); 651 652// Convenience class so we can just create a wxBusyCursor object on the stack 653class WXDLLEXPORT wxBusyCursor 654{ 655public: 656 wxBusyCursor(const wxCursor* cursor = wxHOURGLASS_CURSOR) 657 { wxBeginBusyCursor(cursor); } 658 ~wxBusyCursor() 659 { wxEndBusyCursor(); } 660 661 // FIXME: These two methods are currently only implemented (and needed?) 662 // in wxGTK. BusyCursor handling should probably be moved to 663 // common code since the wxGTK and wxMSW implementations are very 664 // similar except for wxMSW using HCURSOR directly instead of 665 // wxCursor.. -- RL. 666 static const wxCursor &GetStoredCursor(); 667 static const wxCursor GetBusyCursor(); 668}; 669 670 671// ---------------------------------------------------------------------------- 672// Reading and writing resources (eg WIN.INI, .Xdefaults) 673// ---------------------------------------------------------------------------- 674 675#if wxUSE_RESOURCES 676WXDLLEXPORT bool wxWriteResource(const wxString& section, const wxString& entry, const wxString& value, const wxString& file = wxEmptyString); 677WXDLLEXPORT bool wxWriteResource(const wxString& section, const wxString& entry, float value, const wxString& file = wxEmptyString); 678WXDLLEXPORT bool wxWriteResource(const wxString& section, const wxString& entry, long value, const wxString& file = wxEmptyString); 679WXDLLEXPORT bool wxWriteResource(const wxString& section, const wxString& entry, int value, const wxString& file = wxEmptyString); 680 681WXDLLEXPORT bool wxGetResource(const wxString& section, const wxString& entry, wxChar **value, const wxString& file = wxEmptyString); 682WXDLLEXPORT bool wxGetResource(const wxString& section, const wxString& entry, float *value, const wxString& file = wxEmptyString); 683WXDLLEXPORT bool wxGetResource(const wxString& section, const wxString& entry, long *value, const wxString& file = wxEmptyString); 684WXDLLEXPORT bool wxGetResource(const wxString& section, const wxString& entry, int *value, const wxString& file = wxEmptyString); 685#endif // wxUSE_RESOURCES 686 687void WXDLLEXPORT wxGetMousePosition( int* x, int* y ); 688 689// MSW only: get user-defined resource from the .res file. 690// Returns NULL or newly-allocated memory, so use delete[] to clean up. 691#ifdef __WXMSW__ 692 extern WXDLLEXPORT const wxChar* wxUserResourceStr; 693 WXDLLEXPORT wxChar* wxLoadUserResource(const wxString& resourceName, const wxString& resourceType = wxUserResourceStr); 694#endif // MSW 695 696// ---------------------------------------------------------------------------- 697// Display and colorss (X only) 698// ---------------------------------------------------------------------------- 699 700#ifdef __WXGTK__ 701 void *wxGetDisplay(); 702#endif 703 704#ifdef __X__ 705 WXDLLIMPEXP_CORE WXDisplay *wxGetDisplay(); 706 WXDLLIMPEXP_CORE bool wxSetDisplay(const wxString& display_name); 707 WXDLLIMPEXP_CORE wxString wxGetDisplayName(); 708#endif // X or GTK+ 709 710#ifdef __X__ 711 712#ifdef __VMS__ // Xlib.h for VMS is not (yet) compatible with C++ 713 // The resulting warnings are switched off here 714#pragma message disable nosimpint 715#endif 716// #include <X11/Xlib.h> 717#ifdef __VMS__ 718#pragma message enable nosimpint 719#endif 720 721#endif //__X__ 722 723#endif // wxUSE_GUI 724 725// ---------------------------------------------------------------------------- 726// wxYield(): these functions are obsolete, please use wxApp methods instead! 727// ---------------------------------------------------------------------------- 728 729// avoid redeclaring this function here if it had been already declated by 730// wx/app.h, this results in warnings from g++ with -Wredundant-decls 731#ifndef wx_YIELD_DECLARED 732#define wx_YIELD_DECLARED 733 734// Yield to other apps/messages 735WXDLLIMPEXP_BASE bool wxYield(); 736 737#endif // wx_YIELD_DECLARED 738 739// Like wxYield, but fails silently if the yield is recursive. 740WXDLLIMPEXP_BASE bool wxYieldIfNeeded(); 741 742// ---------------------------------------------------------------------------- 743// Error message functions used by wxWidgets (deprecated, use wxLog) 744// ---------------------------------------------------------------------------- 745 746#endif 747 // _WX_UTILSH__ 748