1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     Miscellaneous utilities 
   4 // Author:      Julian Smart 
   8 // Copyright:   (c) 1998 Julian Smart 
   9 // Licence:     wxWindows license 
  10 ///////////////////////////////////////////////////////////////////////////// 
  15 // ---------------------------------------------------------------------------- 
  17 // ---------------------------------------------------------------------------- 
  20     #pragma interface "utils.h" 
  24 #include "wx/object.h" 
  26 #include "wx/filefn.h" 
  35 // ---------------------------------------------------------------------------- 
  36 // Forward declaration 
  37 // ---------------------------------------------------------------------------- 
  39 class WXDLLEXPORT wxProcess
; 
  40 class WXDLLEXPORT wxFrame
; 
  41 class WXDLLEXPORT wxWindow
; 
  42 class WXDLLEXPORT wxWindowList
; 
  44 // FIXME should use wxStricmp() instead 
  45 #if defined(__GNUWIN32__) 
  46     #define stricmp strcasecmp 
  47     #define strnicmp strncasecmp 
  50 // ---------------------------------------------------------------------------- 
  52 // ---------------------------------------------------------------------------- 
  54 #define wxMax(a,b)            (((a) > (b)) ? (a) : (b)) 
  55 #define wxMin(a,b)            (((a) < (b)) ? (a) : (b)) 
  57 // ---------------------------------------------------------------------------- 
  58 // String functions (deprecated, use wxString) 
  59 // ---------------------------------------------------------------------------- 
  61 // Useful buffer (FIXME VZ: yeah, that is. To be removed!) 
  62 WXDLLEXPORT_DATA(extern wxChar
*) wxBuffer
; 
  64 // Make a copy of this string using 'new' 
  65 WXDLLEXPORT wxChar
* copystring(const wxChar 
*s
); 
  67 // Matches string one within string two regardless of case 
  68 WXDLLEXPORT 
bool StringMatch(wxChar 
*one
, wxChar 
*two
, bool subString 
= TRUE
, bool exact 
= FALSE
); 
  70 // A shorter way of using strcmp 
  71 #define wxStringEq(s1, s2) (s1 && s2 && (wxStrcmp(s1, s2) == 0)) 
  73 // ---------------------------------------------------------------------------- 
  74 // Miscellaneous functions 
  75 // ---------------------------------------------------------------------------- 
  78 WXDLLEXPORT 
void wxBell(); 
  80 // Get OS description as a user-readable string 
  81 WXDLLEXPORT wxString 
wxGetOsDescription(); 
  84 WXDLLEXPORT 
int wxGetOsVersion(int *majorVsn 
= (int *) NULL
, 
  85                                int *minorVsn 
= (int *) NULL
); 
  87 // Return a string with the current date/time 
  88 WXDLLEXPORT wxString 
wxNow(); 
  91 // Don't synthesize KeyUp events holding down a key and producing 
  92 // KeyDown events with autorepeat. On by default and always on 
  94 WXDLLEXPORT 
bool wxSetDetectableAutoRepeat( bool flag 
); 
  96 // ---------------------------------------------------------------------------- 
  97 // Window ID management 
  98 // ---------------------------------------------------------------------------- 
 100 // Generate a unique ID 
 101 WXDLLEXPORT 
long wxNewId(); 
 102 #if !defined(NewId) && defined(WXWIN_COMPATIBILITY) 
 103     #define NewId wxNewId 
 106 // Ensure subsequent IDs don't clash with this one 
 107 WXDLLEXPORT 
void wxRegisterId(long id
); 
 108 #if !defined(RegisterId) && defined(WXWIN_COMPATIBILITY) 
 109     #define RegisterId wxRegisterId 
 112 // Return the current ID 
 113 WXDLLEXPORT 
long wxGetCurrentId(); 
 117 // ---------------------------------------------------------------------------- 
 118 // Various conversions 
 119 // ---------------------------------------------------------------------------- 
 121 WXDLLEXPORT_DATA(extern const wxChar
*) wxFloatToStringStr
; 
 122 WXDLLEXPORT_DATA(extern const wxChar
*) wxDoubleToStringStr
; 
 124 WXDLLEXPORT 
void StringToFloat(wxChar 
*s
, float *number
); 
 125 WXDLLEXPORT wxChar
* FloatToString(float number
, const wxChar 
*fmt 
= wxFloatToStringStr
); 
 126 WXDLLEXPORT 
void StringToDouble(wxChar 
*s
, double *number
); 
 127 WXDLLEXPORT wxChar
* DoubleToString(double number
, const wxChar 
*fmt 
= wxDoubleToStringStr
); 
 128 WXDLLEXPORT 
void StringToInt(wxChar 
*s
, int *number
); 
 129 WXDLLEXPORT 
void StringToLong(wxChar 
*s
, long *number
); 
 130 WXDLLEXPORT wxChar
* IntToString(int number
); 
 131 WXDLLEXPORT wxChar
* LongToString(long number
); 
 133 // Convert 2-digit hex number to decimal 
 134 WXDLLEXPORT 
int wxHexToDec(const wxString
& buf
); 
 136 // Convert decimal integer to 2-character hex string 
 137 WXDLLEXPORT 
void wxDecToHex(int dec
, wxChar 
*buf
); 
 138 WXDLLEXPORT wxString 
wxDecToHex(int dec
); 
 140 // ---------------------------------------------------------------------------- 
 141 // Process management 
 142 // ---------------------------------------------------------------------------- 
 144 // Execute another program. Returns 0 if there was an error, a PID otherwise. 
 145 WXDLLEXPORT 
long wxExecute(wxChar 
**argv
, bool sync 
= FALSE
, 
 146                            wxProcess 
*process 
= (wxProcess 
*) NULL
); 
 147 WXDLLEXPORT 
long wxExecute(const wxString
& command
, bool sync 
= FALSE
, 
 148                            wxProcess 
*process 
= (wxProcess 
*) NULL
); 
 150 // execute the command capturing its output into an array line by line 
 151 WXDLLEXPORT 
long wxExecute(const wxString
& command
, wxArrayString
& output
); 
 155     wxSIGNONE 
= 0,  // verify if the process exists under Unix 
 162     wxSIGIOT 
= wxSIGABRT
,   // another name 
 173     // further signals are different in meaning between different Unix systems 
 176 // the argument is ignored under Windows - the process is always killed 
 177 WXDLLEXPORT 
int wxKill(long pid
, wxSignal sig 
= wxSIGTERM
); 
 179 // Execute a command in an interactive shell window 
 180 // If no command then just the shell 
 181 WXDLLEXPORT 
bool wxShell(const wxString
& command 
= wxEmptyString
); 
 183 // Sleep for nSecs seconds 
 184 WXDLLEXPORT 
void wxSleep(int nSecs
); 
 186 // Sleep for a given amount of milliseconds 
 187 WXDLLEXPORT 
void wxUsleep(unsigned long milliseconds
); 
 189 // Get free memory in bytes, or -1 if cannot determine amount (e.g. on UNIX) 
 190 WXDLLEXPORT 
long wxGetFreeMemory(); 
 192 // ---------------------------------------------------------------------------- 
 193 // Network and username functions. 
 194 // ---------------------------------------------------------------------------- 
 196 // NB: "char *" functions are deprecated, use wxString ones! 
 199 WXDLLEXPORT 
bool wxGetEmailAddress(wxChar 
*buf
, int maxSize
); 
 200 WXDLLEXPORT wxString 
wxGetEmailAddress(); 
 203 WXDLLEXPORT 
bool wxGetHostName(wxChar 
*buf
, int maxSize
); 
 204 WXDLLEXPORT wxString 
wxGetHostName(); 
 207 WXDLLEXPORT wxString 
wxGetFullHostName(); 
 208 WXDLLEXPORT 
bool wxGetFullHostName(wxChar 
*buf
, int maxSize
); 
 210 // Get user ID e.g. jacs (this is known as login name under Unix) 
 211 WXDLLEXPORT 
bool wxGetUserId(wxChar 
*buf
, int maxSize
); 
 212 WXDLLEXPORT wxString 
wxGetUserId(); 
 214 // Get user name e.g. Julian Smart 
 215 WXDLLEXPORT 
bool wxGetUserName(wxChar 
*buf
, int maxSize
); 
 216 WXDLLEXPORT wxString 
wxGetUserName(); 
 218 // Get current Home dir and copy to dest (returns pstr->c_str()) 
 219 WXDLLEXPORT wxString 
wxGetHomeDir(); 
 220 WXDLLEXPORT 
const wxChar
* wxGetHomeDir(wxString 
*pstr
); 
 222 // Get the user's home dir (caller must copy --- volatile) 
 223 // returns NULL is no HOME dir is known 
 224 #if defined(__UNIX__) && wxUSE_UNICODE 
 225 WXDLLEXPORT 
const wxMB2WXbuf 
wxGetUserHome(const wxString
& user 
= wxEmptyString
); 
 227 WXDLLEXPORT wxChar
* wxGetUserHome(const wxString
& user 
= wxEmptyString
); 
 230 #if wxUSE_GUI // GUI only things from now on 
 232 // ---------------------------------------------------------------------------- 
 233 // Menu accelerators related things 
 234 // ---------------------------------------------------------------------------- 
 236 WXDLLEXPORT wxChar
* wxStripMenuCodes(wxChar 
*in
, wxChar 
*out 
= (wxChar 
*) NULL
); 
 237 WXDLLEXPORT wxString 
wxStripMenuCodes(const wxString
& str
); 
 240 class WXDLLEXPORT wxAcceleratorEntry
; 
 241 WXDLLEXPORT wxAcceleratorEntry 
*wxGetAccelFromString(const wxString
& label
); 
 242 #endif // wxUSE_ACCEL 
 244 // ---------------------------------------------------------------------------- 
 246 // ---------------------------------------------------------------------------- 
 248 // Find the window/widget with the given title or label. 
 249 // Pass a parent to begin the search from, or NULL to look through 
 251 WXDLLEXPORT wxWindow
* wxFindWindowByLabel(const wxString
& title
, wxWindow 
*parent 
= (wxWindow 
*) NULL
); 
 253 // Find window by name, and if that fails, by label. 
 254 WXDLLEXPORT wxWindow
* wxFindWindowByName(const wxString
& name
, wxWindow 
*parent 
= (wxWindow 
*) NULL
); 
 256 // Returns menu item id or -1 if none. 
 257 WXDLLEXPORT 
int wxFindMenuItemId(wxFrame 
*frame
, const wxString
& menuString
, const wxString
& itemString
); 
 259 // ---------------------------------------------------------------------------- 
 260 // Message/event queue helpers 
 261 // ---------------------------------------------------------------------------- 
 263 // Yield to other apps/messages 
 264 WXDLLEXPORT 
bool wxYield(); 
 266 // Yield to other apps/messages and disable user input 
 267 WXDLLEXPORT 
bool wxSafeYield(wxWindow 
*win 
= NULL
); 
 269 // Enable or disable input to all top level windows 
 270 WXDLLEXPORT 
void wxEnableTopLevelWindows(bool enable 
= TRUE
); 
 272 // Check whether this window wants to process messages, e.g. Stop button 
 273 // in long calculations. 
 274 WXDLLEXPORT 
bool wxCheckForInterrupt(wxWindow 
*wnd
); 
 276 // Consume all events until no more left 
 277 WXDLLEXPORT 
void wxFlushEvents(); 
 279 // a class which disables all windows (except, may be, thegiven one) in its 
 280 // ctor and enables them back in its dtor 
 281 class WXDLLEXPORT wxWindowDisabler
 
 284     wxWindowDisabler(wxWindow 
*winToSkip 
= (wxWindow 
*)NULL
); 
 288     wxWindowList 
*m_winDisabled
; 
 291 // ---------------------------------------------------------------------------- 
 293 // ---------------------------------------------------------------------------- 
 295 // Set the cursor to the busy cursor for all windows 
 296 class WXDLLEXPORT wxCursor
; 
 297 WXDLLEXPORT_DATA(extern wxCursor
*) wxHOURGLASS_CURSOR
; 
 298 WXDLLEXPORT 
void wxBeginBusyCursor(wxCursor 
*cursor 
= wxHOURGLASS_CURSOR
); 
 300 // Restore cursor to normal 
 301 WXDLLEXPORT 
void wxEndBusyCursor(); 
 303 // TRUE if we're between the above two calls 
 304 WXDLLEXPORT 
bool wxIsBusy(); 
 306 // Convenience class so we can just create a wxBusyCursor object on the stack 
 307 class WXDLLEXPORT wxBusyCursor
 
 310     wxBusyCursor(wxCursor
* cursor 
= wxHOURGLASS_CURSOR
) 
 311         { wxBeginBusyCursor(cursor
); } 
 313         { wxEndBusyCursor(); } 
 316 // ---------------------------------------------------------------------------- 
 317 // Error message functions used by wxWindows (deprecated, use wxLog) 
 318 // ---------------------------------------------------------------------------- 
 320 // Format a message on the standard error (UNIX) or the debugging 
 322 WXDLLEXPORT 
void wxDebugMsg(const wxChar 
*fmt 
...); 
 324 // Non-fatal error (continues) 
 325 WXDLLEXPORT_DATA(extern const wxChar
*) wxInternalErrorStr
; 
 326 WXDLLEXPORT 
void wxError(const wxString
& msg
, const wxString
& title 
= wxInternalErrorStr
); 
 328 // Fatal error (exits) 
 329 WXDLLEXPORT_DATA(extern const wxChar
*) wxFatalErrorStr
; 
 330 WXDLLEXPORT 
void wxFatalError(const wxString
& msg
, const wxString
& title 
= wxFatalErrorStr
); 
 332 // ---------------------------------------------------------------------------- 
 333 // Reading and writing resources (eg WIN.INI, .Xdefaults) 
 334 // ---------------------------------------------------------------------------- 
 337 WXDLLEXPORT 
bool wxWriteResource(const wxString
& section
, const wxString
& entry
, const wxString
& value
, const wxString
& file 
= wxEmptyString
); 
 338 WXDLLEXPORT 
bool wxWriteResource(const wxString
& section
, const wxString
& entry
, float value
, const wxString
& file 
= wxEmptyString
); 
 339 WXDLLEXPORT 
bool wxWriteResource(const wxString
& section
, const wxString
& entry
, long value
, const wxString
& file 
= wxEmptyString
); 
 340 WXDLLEXPORT 
bool wxWriteResource(const wxString
& section
, const wxString
& entry
, int value
, const wxString
& file 
= wxEmptyString
); 
 342 WXDLLEXPORT 
bool wxGetResource(const wxString
& section
, const wxString
& entry
, wxChar 
**value
, const wxString
& file 
= wxEmptyString
); 
 343 WXDLLEXPORT 
bool wxGetResource(const wxString
& section
, const wxString
& entry
, float *value
, const wxString
& file 
= wxEmptyString
); 
 344 WXDLLEXPORT 
bool wxGetResource(const wxString
& section
, const wxString
& entry
, long *value
, const wxString
& file 
= wxEmptyString
); 
 345 WXDLLEXPORT 
bool wxGetResource(const wxString
& section
, const wxString
& entry
, int *value
, const wxString
& file 
= wxEmptyString
); 
 346 #endif // wxUSE_RESOURCES 
 348 void WXDLLEXPORT 
wxGetMousePosition( int* x
, int* y 
); 
 350 // MSW only: get user-defined resource from the .res file. 
 351 // Returns NULL or newly-allocated memory, so use delete[] to clean up. 
 353 WXDLLEXPORT 
extern const wxChar
* wxUserResourceStr
; 
 354 WXDLLEXPORT wxChar
* wxLoadUserResource(const wxString
& resourceName
, const wxString
& resourceType 
= wxUserResourceStr
); 
 356 // Implemented in utils.cpp: VC++, Win95 only. Sets up a console for standard 
 358 WXDLLEXPORT 
void wxRedirectIOToConsole(); 
 362 // ---------------------------------------------------------------------------- 
 363 // Display and colorss (X only) 
 364 // ---------------------------------------------------------------------------- 
 367     void *wxGetDisplay(); 
 371     WXDisplay 
*wxGetDisplay(); 
 372     bool wxSetDisplay(const wxString
& display_name
); 
 373     wxString 
wxGetDisplayName(); 
 378 #ifdef __VMS__ // Xlib.h for VMS is not (yet) compatible with C++ 
 379                // The resulting warnings are switched off here 
 380 #pragma message disable nosimpint 
 382 #include <X11/Xlib.h> 
 384 #pragma message enable nosimpint 
 387 #define wxMAX_RGB           0xff 
 388 #define wxMAX_SV            1000 
 389 #define wxSIGN(x)           ((x < 0) ? -x : x) 
 394 typedef struct wx_hsv 
{ 
 398 #define wxMax3(x,y,z) ((x > y) ? ((x > z) ? x : z) : ((y > z) ? y : z)) 
 399 #define wxMin3(x,y,z) ((x < y) ? ((x < z) ? x : z) : ((y < z) ? y : z)) 
 401 void wxHSVToXColor(wxHSV 
*hsv
,XColor 
*xcolor
); 
 402 void wxXColorToHSV(wxHSV 
*hsv
,XColor 
*xcolor
); 
 403 void wxAllocNearestColor(Display 
*display
,Colormap colormap
,XColor 
*xcolor
); 
 404 void wxAllocColor(Display 
*display
,Colormap colormap
,XColor 
*xcolor
);