]> git.saurik.com Git - wxWidgets.git/blame_incremental - include/wx/utils.h
Added WX_DEFINE_*_USER_EXPORTED_ARRAY macros for external dlls.
[wxWidgets.git] / include / wx / utils.h
... / ...
CommitLineData
1/////////////////////////////////////////////////////////////////////////////
2// Name: utils.h
3// Purpose: Miscellaneous utilities
4// Author: Julian Smart
5// Modified by:
6// Created: 29/01/98
7// RCS-ID: $Id$
8// Copyright: (c) 1998 Julian Smart
9// Licence: wxWindows license
10/////////////////////////////////////////////////////////////////////////////
11
12#ifndef _WX_UTILSH__
13#define _WX_UTILSH__
14
15// ----------------------------------------------------------------------------
16// headers
17// ----------------------------------------------------------------------------
18
19#ifdef __GNUG__
20 #pragma interface "utils.h"
21#endif
22
23#include "wx/object.h"
24#include "wx/list.h"
25#include "wx/filefn.h"
26
27// need this for wxGetDiskSpace() as we can't, unfortunately, forward declare
28// wxLongLong
29#include "wx/longlong.h"
30
31#ifdef __X__
32 #include <dirent.h>
33 #include <unistd.h>
34#endif
35
36#include <stdio.h>
37
38// ----------------------------------------------------------------------------
39// Forward declaration
40// ----------------------------------------------------------------------------
41
42class WXDLLEXPORT wxProcess;
43class WXDLLEXPORT wxFrame;
44class WXDLLEXPORT wxWindow;
45class WXDLLEXPORT wxWindowList;
46class WXDLLEXPORT wxPoint;
47
48// ----------------------------------------------------------------------------
49// Macros
50// ----------------------------------------------------------------------------
51
52#define wxMax(a,b) (((a) > (b)) ? (a) : (b))
53#define wxMin(a,b) (((a) < (b)) ? (a) : (b))
54
55// ----------------------------------------------------------------------------
56// String functions (deprecated, use wxString)
57// ----------------------------------------------------------------------------
58
59// Useful buffer (FIXME VZ: To be removed!!!)
60WXDLLEXPORT_DATA(extern wxChar*) wxBuffer;
61
62// Make a copy of this string using 'new'
63WXDLLEXPORT wxChar* copystring(const wxChar *s);
64
65// Matches string one within string two regardless of case
66WXDLLEXPORT bool StringMatch(wxChar *one, wxChar *two, bool subString = TRUE, bool exact = FALSE);
67
68// A shorter way of using strcmp
69#define wxStringEq(s1, s2) (s1 && s2 && (wxStrcmp(s1, s2) == 0))
70
71// ----------------------------------------------------------------------------
72// Miscellaneous functions
73// ----------------------------------------------------------------------------
74
75// Sound the bell
76WXDLLEXPORT void wxBell();
77
78// Get OS description as a user-readable string
79WXDLLEXPORT wxString wxGetOsDescription();
80
81// Get OS version
82WXDLLEXPORT int wxGetOsVersion(int *majorVsn = (int *) NULL,
83 int *minorVsn = (int *) NULL);
84
85// Return a string with the current date/time
86WXDLLEXPORT wxString wxNow();
87
88// Return path where wxWindows is installed (mostly useful in Unices)
89WXDLLEXPORT const wxChar *wxGetInstallPrefix();
90
91
92#if wxUSE_GUI
93// Don't synthesize KeyUp events holding down a key and producing
94// KeyDown events with autorepeat. On by default and always on
95// in wxMSW.
96WXDLLEXPORT bool wxSetDetectableAutoRepeat( bool flag );
97
98// ----------------------------------------------------------------------------
99// Window ID management
100// ----------------------------------------------------------------------------
101
102// Generate a unique ID
103WXDLLEXPORT long wxNewId();
104#if !defined(NewId) && defined(WXWIN_COMPATIBILITY)
105 #define NewId wxNewId
106#endif
107
108// Ensure subsequent IDs don't clash with this one
109WXDLLEXPORT void wxRegisterId(long id);
110#if !defined(RegisterId) && defined(WXWIN_COMPATIBILITY)
111 #define RegisterId wxRegisterId
112#endif
113
114// Return the current ID
115WXDLLEXPORT long wxGetCurrentId();
116
117#endif // wxUSE_GUI
118
119// ----------------------------------------------------------------------------
120// Various conversions
121// ----------------------------------------------------------------------------
122
123WXDLLEXPORT_DATA(extern const wxChar*) wxFloatToStringStr;
124WXDLLEXPORT_DATA(extern const wxChar*) wxDoubleToStringStr;
125
126WXDLLEXPORT void StringToFloat(wxChar *s, float *number);
127WXDLLEXPORT wxChar* FloatToString(float number, const wxChar *fmt = wxFloatToStringStr);
128WXDLLEXPORT void StringToDouble(wxChar *s, double *number);
129WXDLLEXPORT wxChar* DoubleToString(double number, const wxChar *fmt = wxDoubleToStringStr);
130WXDLLEXPORT void StringToInt(wxChar *s, int *number);
131WXDLLEXPORT void StringToLong(wxChar *s, long *number);
132WXDLLEXPORT wxChar* IntToString(int number);
133WXDLLEXPORT wxChar* LongToString(long number);
134
135// Convert 2-digit hex number to decimal
136WXDLLEXPORT int wxHexToDec(const wxString& buf);
137
138// Convert decimal integer to 2-character hex string
139WXDLLEXPORT void wxDecToHex(int dec, wxChar *buf);
140WXDLLEXPORT wxString wxDecToHex(int dec);
141
142// ----------------------------------------------------------------------------
143// Process management
144// ----------------------------------------------------------------------------
145
146// Execute another program. Returns 0 if there was an error, a PID otherwise.
147WXDLLEXPORT long wxExecute(wxChar **argv, bool sync = FALSE,
148 wxProcess *process = (wxProcess *) NULL);
149WXDLLEXPORT long wxExecute(const wxString& command, bool sync = FALSE,
150 wxProcess *process = (wxProcess *) NULL);
151
152// execute the command capturing its output into an array line by line
153WXDLLEXPORT long wxExecute(const wxString& command,
154 wxArrayString& output);
155
156// also capture stderr
157WXDLLEXPORT long wxExecute(const wxString& command,
158 wxArrayString& output,
159 wxArrayString& error);
160
161enum wxSignal
162{
163 wxSIGNONE = 0, // verify if the process exists under Unix
164 wxSIGHUP,
165 wxSIGINT,
166 wxSIGQUIT,
167 wxSIGILL,
168 wxSIGTRAP,
169 wxSIGABRT,
170 wxSIGIOT = wxSIGABRT, // another name
171 wxSIGEMT,
172 wxSIGFPE,
173 wxSIGKILL,
174 wxSIGBUS,
175 wxSIGSEGV,
176 wxSIGSYS,
177 wxSIGPIPE,
178 wxSIGALRM,
179 wxSIGTERM
180
181 // further signals are different in meaning between different Unix systems
182};
183
184enum wxKillError
185{
186 wxKILL_OK, // no error
187 wxKILL_BAD_SIGNAL, // no such signal
188 wxKILL_ACCESS_DENIED, // permission denied
189 wxKILL_NO_PROCESS, // no such process
190 wxKILL_ERROR // another, unspecified error
191};
192
193// send the given signal to the process (only NONE and KILL are supported under
194// Windows, all others mean TERM), return 0 if ok and -1 on error
195//
196// return detailed error in rc if not NULL
197WXDLLEXPORT int wxKill(long pid,
198 wxSignal sig = wxSIGTERM,
199 wxKillError *rc = NULL);
200
201// Execute a command in an interactive shell window (always synchronously)
202// If no command then just the shell
203WXDLLEXPORT bool wxShell(const wxString& command = wxEmptyString);
204
205// As wxShell(), but must give a (non interactive) command and its output will
206// be returned in output array
207WXDLLEXPORT bool wxShell(const wxString& command, wxArrayString& output);
208
209// Sleep for nSecs seconds
210WXDLLEXPORT void wxSleep(int nSecs);
211
212// Sleep for a given amount of milliseconds
213WXDLLEXPORT void wxUsleep(unsigned long milliseconds);
214
215// Get free memory in bytes, or -1 if cannot determine amount (e.g. on UNIX)
216WXDLLEXPORT long wxGetFreeMemory();
217
218// should wxApp::OnFatalException() be called?
219WXDLLEXPORT bool wxHandleFatalExceptions(bool doit = TRUE);
220
221// ----------------------------------------------------------------------------
222// Environment variables
223// ----------------------------------------------------------------------------
224
225// returns TRUE if variable exists (value may be NULL if you just want to check
226// for this)
227WXDLLEXPORT bool wxGetEnv(const wxString& var, wxString *value);
228
229// set the env var name to the given value, return TRUE on success
230WXDLLEXPORT bool wxSetEnv(const wxString& var, const wxChar *value);
231
232// remove the env var from environment
233inline bool wxUnsetEnv(const wxString& var) { return wxSetEnv(var, NULL); }
234
235// ----------------------------------------------------------------------------
236// Network and username functions.
237// ----------------------------------------------------------------------------
238
239// NB: "char *" functions are deprecated, use wxString ones!
240
241// Get eMail address
242WXDLLEXPORT bool wxGetEmailAddress(wxChar *buf, int maxSize);
243WXDLLEXPORT wxString wxGetEmailAddress();
244
245// Get hostname.
246WXDLLEXPORT bool wxGetHostName(wxChar *buf, int maxSize);
247WXDLLEXPORT wxString wxGetHostName();
248
249// Get FQDN
250WXDLLEXPORT wxString wxGetFullHostName();
251WXDLLEXPORT bool wxGetFullHostName(wxChar *buf, int maxSize);
252
253// Get user ID e.g. jacs (this is known as login name under Unix)
254WXDLLEXPORT bool wxGetUserId(wxChar *buf, int maxSize);
255WXDLLEXPORT wxString wxGetUserId();
256
257// Get user name e.g. Julian Smart
258WXDLLEXPORT bool wxGetUserName(wxChar *buf, int maxSize);
259WXDLLEXPORT wxString wxGetUserName();
260
261// Get current Home dir and copy to dest (returns pstr->c_str())
262WXDLLEXPORT wxString wxGetHomeDir();
263WXDLLEXPORT const wxChar* wxGetHomeDir(wxString *pstr);
264
265// Get the user's home dir (caller must copy --- volatile)
266// returns NULL is no HOME dir is known
267#if defined(__UNIX__) && wxUSE_UNICODE
268WXDLLEXPORT const wxMB2WXbuf wxGetUserHome(const wxString& user = wxEmptyString);
269#else
270WXDLLEXPORT wxChar* wxGetUserHome(const wxString& user = wxEmptyString);
271#endif
272
273#ifdef __WXMAC__
274WXDLLEXPORT wxString wxMacFindFolder(short vRefNum,
275 OSType folderType,
276 Boolean createFolder);
277#endif
278
279// get number of total/free bytes on the disk where path belongs
280WXDLLEXPORT bool wxGetDiskSpace(const wxString& path,
281 wxLongLong *pTotal = NULL,
282 wxLongLong *pFree = NULL);
283
284#if wxUSE_GUI // GUI only things from now on
285
286// ----------------------------------------------------------------------------
287// Menu accelerators related things
288// ----------------------------------------------------------------------------
289
290WXDLLEXPORT wxChar* wxStripMenuCodes(wxChar *in, wxChar *out = (wxChar *) NULL);
291WXDLLEXPORT wxString wxStripMenuCodes(const wxString& str);
292
293#if wxUSE_ACCEL
294class WXDLLEXPORT wxAcceleratorEntry;
295WXDLLEXPORT wxAcceleratorEntry *wxGetAccelFromString(const wxString& label);
296#endif // wxUSE_ACCEL
297
298// ----------------------------------------------------------------------------
299// Window search
300// ----------------------------------------------------------------------------
301
302// Find the window/widget with the given title or label.
303// Pass a parent to begin the search from, or NULL to look through
304// all windows.
305WXDLLEXPORT wxWindow* wxFindWindowByLabel(const wxString& title, wxWindow *parent = (wxWindow *) NULL);
306
307// Find window by name, and if that fails, by label.
308WXDLLEXPORT wxWindow* wxFindWindowByName(const wxString& name, wxWindow *parent = (wxWindow *) NULL);
309
310// Returns menu item id or -1 if none.
311WXDLLEXPORT int wxFindMenuItemId(wxFrame *frame, const wxString& menuString, const wxString& itemString);
312
313// Find the wxWindow at the given point. wxGenericFindWindowAtPoint
314// is always present but may be less reliable than a native version.
315WXDLLEXPORT wxWindow* wxGenericFindWindowAtPoint(const wxPoint& pt);
316WXDLLEXPORT wxWindow* wxFindWindowAtPoint(const wxPoint& pt);
317
318// ----------------------------------------------------------------------------
319// Message/event queue helpers
320// ----------------------------------------------------------------------------
321
322// Yield to other apps/messages
323WXDLLEXPORT bool wxYield();
324
325// Like wxYield, but fails silently if the yield is recursive.
326WXDLLEXPORT bool wxYieldIfNeeded();
327
328// Yield to other apps/messages and disable user input
329WXDLLEXPORT bool wxSafeYield(wxWindow *win = NULL);
330
331// Enable or disable input to all top level windows
332WXDLLEXPORT void wxEnableTopLevelWindows(bool enable = TRUE);
333
334// Check whether this window wants to process messages, e.g. Stop button
335// in long calculations.
336WXDLLEXPORT bool wxCheckForInterrupt(wxWindow *wnd);
337
338// Consume all events until no more left
339WXDLLEXPORT void wxFlushEvents();
340
341// a class which disables all windows (except, may be, thegiven one) in its
342// ctor and enables them back in its dtor
343class WXDLLEXPORT wxWindowDisabler
344{
345public:
346 wxWindowDisabler(wxWindow *winToSkip = (wxWindow *)NULL);
347 ~wxWindowDisabler();
348
349private:
350 wxWindowList *m_winDisabled;
351};
352
353// ----------------------------------------------------------------------------
354// Cursors
355// ----------------------------------------------------------------------------
356
357// Set the cursor to the busy cursor for all windows
358class WXDLLEXPORT wxCursor;
359WXDLLEXPORT_DATA(extern wxCursor*) wxHOURGLASS_CURSOR;
360WXDLLEXPORT void wxBeginBusyCursor(wxCursor *cursor = wxHOURGLASS_CURSOR);
361
362// Restore cursor to normal
363WXDLLEXPORT void wxEndBusyCursor();
364
365// TRUE if we're between the above two calls
366WXDLLEXPORT bool wxIsBusy();
367
368// Convenience class so we can just create a wxBusyCursor object on the stack
369class WXDLLEXPORT wxBusyCursor
370{
371public:
372 wxBusyCursor(wxCursor* cursor = wxHOURGLASS_CURSOR)
373 { wxBeginBusyCursor(cursor); }
374 ~wxBusyCursor()
375 { wxEndBusyCursor(); }
376
377 // FIXME: These two methods are currently only implemented (and needed?)
378 // in wxGTK. BusyCursor handling should probably be moved to
379 // common code since the wxGTK and wxMSW implementations are very
380 // similar except for wxMSW using HCURSOR directly instead of
381 // wxCursor.. -- RL.
382 static const wxCursor &GetStoredCursor();
383 static const wxCursor GetBusyCursor();
384};
385
386
387// ----------------------------------------------------------------------------
388// Reading and writing resources (eg WIN.INI, .Xdefaults)
389// ----------------------------------------------------------------------------
390
391#if wxUSE_RESOURCES
392WXDLLEXPORT bool wxWriteResource(const wxString& section, const wxString& entry, const wxString& value, const wxString& file = wxEmptyString);
393WXDLLEXPORT bool wxWriteResource(const wxString& section, const wxString& entry, float value, const wxString& file = wxEmptyString);
394WXDLLEXPORT bool wxWriteResource(const wxString& section, const wxString& entry, long value, const wxString& file = wxEmptyString);
395WXDLLEXPORT bool wxWriteResource(const wxString& section, const wxString& entry, int value, const wxString& file = wxEmptyString);
396
397WXDLLEXPORT bool wxGetResource(const wxString& section, const wxString& entry, wxChar **value, const wxString& file = wxEmptyString);
398WXDLLEXPORT bool wxGetResource(const wxString& section, const wxString& entry, float *value, const wxString& file = wxEmptyString);
399WXDLLEXPORT bool wxGetResource(const wxString& section, const wxString& entry, long *value, const wxString& file = wxEmptyString);
400WXDLLEXPORT bool wxGetResource(const wxString& section, const wxString& entry, int *value, const wxString& file = wxEmptyString);
401#endif // wxUSE_RESOURCES
402
403void WXDLLEXPORT wxGetMousePosition( int* x, int* y );
404
405// MSW only: get user-defined resource from the .res file.
406// Returns NULL or newly-allocated memory, so use delete[] to clean up.
407#ifdef __WXMSW__
408WXDLLEXPORT extern const wxChar* wxUserResourceStr;
409WXDLLEXPORT wxChar* wxLoadUserResource(const wxString& resourceName, const wxString& resourceType = wxUserResourceStr);
410
411// Implemented in utils.cpp: VC++, Win95 only. Sets up a console for standard
412// input/output
413WXDLLEXPORT void wxRedirectIOToConsole();
414
415#endif // MSW
416
417// ----------------------------------------------------------------------------
418// Display and colorss (X only)
419// ----------------------------------------------------------------------------
420
421#ifdef __WXGTK__
422 void *wxGetDisplay();
423#endif
424
425#ifdef __X__
426 WXDisplay *wxGetDisplay();
427 bool wxSetDisplay(const wxString& display_name);
428 wxString wxGetDisplayName();
429#endif // X or GTK+
430
431#ifdef __X__
432
433#ifdef __VMS__ // Xlib.h for VMS is not (yet) compatible with C++
434 // The resulting warnings are switched off here
435#pragma message disable nosimpint
436#endif
437#include <X11/Xlib.h>
438#ifdef __VMS__
439#pragma message enable nosimpint
440#endif
441
442#define wxMAX_RGB 0xff
443#define wxMAX_SV 1000
444#define wxSIGN(x) ((x < 0) ? -x : x)
445#define wxH_WEIGHT 4
446#define wxS_WEIGHT 1
447#define wxV_WEIGHT 2
448
449typedef struct wx_hsv {
450 int h,s,v;
451 } wxHSV;
452
453#define wxMax3(x,y,z) ((x > y) ? ((x > z) ? x : z) : ((y > z) ? y : z))
454#define wxMin3(x,y,z) ((x < y) ? ((x < z) ? x : z) : ((y < z) ? y : z))
455
456void wxHSVToXColor(wxHSV *hsv,XColor *xcolor);
457void wxXColorToHSV(wxHSV *hsv,XColor *xcolor);
458void wxAllocNearestColor(Display *display,Colormap colormap,XColor *xcolor);
459void wxAllocColor(Display *display,Colormap colormap,XColor *xcolor);
460
461#endif //__X__
462
463#endif // wxUSE_GUI
464
465// ----------------------------------------------------------------------------
466// Error message functions used by wxWindows (deprecated, use wxLog)
467// ----------------------------------------------------------------------------
468
469// Format a message on the standard error (UNIX) or the debugging
470// stream (Windows)
471WXDLLEXPORT void wxDebugMsg(const wxChar *fmt ...);
472
473// Non-fatal error (continues)
474WXDLLEXPORT_DATA(extern const wxChar*) wxInternalErrorStr;
475WXDLLEXPORT void wxError(const wxString& msg, const wxString& title = wxInternalErrorStr);
476
477// Fatal error (exits)
478WXDLLEXPORT_DATA(extern const wxChar*) wxFatalErrorStr;
479WXDLLEXPORT void wxFatalError(const wxString& msg, const wxString& title = wxFatalErrorStr);
480
481
482#endif
483 // _WX_UTILSH__