// headers
// ----------------------------------------------------------------------------
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) && !defined(__EMX__)
+// Some older compilers (such as EMX) cannot handle
+// #pragma interface/implementation correctly, iff
+// #pragma implementation is used in _two_ translation
+// units (as created by e.g. event.cpp compiled for
+// libwx_base and event.cpp compiled for libwx_gui_core).
+// So we must not use those pragmas for those compilers in
+// such files.
#pragma implementation "utils.h"
#endif
#include "wx/log.h"
#if wxUSE_GUI
- #include "wx/app.h"
#include "wx/window.h"
#include "wx/frame.h"
#include "wx/menu.h"
#endif // wxUSE_GUI
#endif // WX_PRECOMP
-#ifndef __WIN16__
+#include "wx/apptrait.h"
+
#include "wx/process.h"
#include "wx/txtstrm.h"
+
+#if defined(__WXWINCE__) && wxUSE_DATETIME
+#include "wx/datetime.h"
#endif
#include <ctype.h>
#include "wx/statusbr.h"
#endif // wxUSE_GUI
+#ifndef __WXWINCE__
#include <time.h>
+#else
+#include "wx/msw/wince/time.h"
+#endif
-#ifndef __MWERKS__
+#if !defined(__MWERKS__) && !defined(__WXWINCE__)
#include <sys/types.h>
#include <sys/stat.h>
#endif
-#ifdef __SALFORDC__
- #include <clib.h>
-#endif
-
#ifdef __WXMSW__
#include "wx/msw/private.h"
#endif
// ----------------------------------------------------------------------------
#if WXWIN_COMPATIBILITY_2_2
- const wxChar *wxInternalErrorStr = wxT("wxWindows Internal Error");
- const wxChar *wxFatalErrorStr = wxT("wxWindows Fatal Error");
+ const wxChar *wxInternalErrorStr = wxT("wxWidgets Internal Error");
+ const wxChar *wxFatalErrorStr = wxT("wxWidgets Fatal Error");
#endif // WXWIN_COMPATIBILITY_2_2
// ============================================================================
#endif // WXWIN_COMPATIBILITY_2_4
-// Id generation
-static long wxCurrentId = 100;
-
-long
-wxNewId (void)
-{
- return wxCurrentId++;
-}
-
-long
-wxGetCurrentId(void) { return wxCurrentId; }
-
-void
-wxRegisterId (long id)
-{
- if (id >= wxCurrentId)
- wxCurrentId = id + 1;
-}
-
// ----------------------------------------------------------------------------
// String <-> Number conversions (deprecated)
// ----------------------------------------------------------------------------
#if WXWIN_COMPATIBILITY_2_4
-WXDLLEXPORT_DATA(const wxChar *) wxFloatToStringStr = wxT("%.2f");
-WXDLLEXPORT_DATA(const wxChar *) wxDoubleToStringStr = wxT("%.2f");
+WXDLLIMPEXP_DATA_BASE(const wxChar *) wxFloatToStringStr = wxT("%.2f");
+WXDLLIMPEXP_DATA_BASE(const wxChar *) wxDoubleToStringStr = wxT("%.2f");
void
StringToFloat (const wxChar *s, float *number)
// Return the current date/time
wxString wxNow()
{
+#ifdef __WXWINCE__
+#if wxUSE_DATETIME
+ wxDateTime now = wxDateTime::Now();
+ return now.Format();
+#else
+ return wxEmptyString;
+#endif
+#else
time_t now = time((time_t *) NULL);
char *date = ctime(&now);
date[24] = '\0';
return wxString::FromAscii(date);
+#endif
+}
+
+void wxUsleep(unsigned long milliseconds)
+{
+ wxMilliSleep(milliseconds);
}
const wxChar *wxGetInstallPrefix()
wxString wxGetDataDir()
{
- wxString format = wxGetInstallPrefix();
- format << wxFILE_SEP_PATH
- << wxT("share") << wxFILE_SEP_PATH
- << wxT("wx") << wxFILE_SEP_PATH
- << wxT("%i.%i");
- wxString dir;
- dir.Printf(format.c_str(), wxMAJOR_VERSION, wxMINOR_VERSION);
+ wxString dir = wxGetInstallPrefix();
+ dir << wxFILE_SEP_PATH << wxT("share") << wxFILE_SEP_PATH << wxT("wx");
return dir;
}
+int wxGetOsVersion(int *verMaj, int *verMin)
+{
+ // we want this function to work even if there is no wxApp
+ wxConsoleAppTraits traitsConsole;
+ wxAppTraits *traits = wxTheApp ? wxTheApp->GetTraits() : NULL;
+ if ( ! traits )
+ traits = &traitsConsole;
+
+ wxToolkitInfo& info = traits->GetToolkitInfo();
+ if ( verMaj )
+ *verMaj = info.versionMajor;
+ if ( verMin )
+ *verMin = info.versionMinor;
+ return info.os;
+}
// ----------------------------------------------------------------------------
// network and user id functions
{
wxString email = wxGetEmailAddress();
if ( !email )
- return FALSE;
+ return false;
wxStrncpy(address, email, maxSize - 1);
address[maxSize - 1] = wxT('\0');
- return TRUE;
+ return true;
}
wxString wxGetEmailAddress()
wxString email;
wxString host = wxGetFullHostName();
- if ( !!host )
+ if ( !host.IsEmpty() )
{
wxString user = wxGetUserId();
- if ( !!user )
+ if ( !user.IsEmpty() )
{
email << user << wxT('@') << host;
}
static const int maxLoginLen = 256; // FIXME arbitrary number
wxString buf;
- bool ok = wxGetUserId(buf.GetWriteBuf(maxLoginLen), maxLoginLen);
- buf.UngetWriteBuf();
+ bool ok = wxGetUserId(wxStringBuffer(buf, maxLoginLen), maxLoginLen);
if ( !ok )
buf.Empty();
static const int maxUserNameLen = 1024; // FIXME arbitrary number
wxString buf;
- bool ok = wxGetUserName(buf.GetWriteBuf(maxUserNameLen), maxUserNameLen);
- buf.UngetWriteBuf();
+ bool ok = wxGetUserName(wxStringBuffer(buf, maxUserNameLen), maxUserNameLen);
if ( !ok )
buf.Empty();
static const size_t hostnameSize = 257;
wxString buf;
- bool ok = wxGetHostName(buf.GetWriteBuf(hostnameSize), hostnameSize);
-
- buf.UngetWriteBuf();
+ bool ok = wxGetHostName(wxStringBuffer(buf, hostnameSize), hostnameSize);
if ( !ok )
buf.Empty();
static const size_t hostnameSize = 257;
wxString buf;
- bool ok = wxGetFullHostName(buf.GetWriteBuf(hostnameSize), hostnameSize);
-
- buf.UngetWriteBuf();
+ bool ok = wxGetFullHostName(wxStringBuffer(buf, hostnameSize), hostnameSize);
if ( !ok )
buf.Empty();
// wxDoExecuteWithCapture() helper: reads an entire stream into one array
//
-// returns TRUE if ok, FALSE if error
+// returns true if ok, false if error
#if wxUSE_STREAMS
static bool ReadAll(wxInputStream *is, wxArrayString& output)
{
- wxCHECK_MSG( is, FALSE, _T("NULL stream in wxExecute()?") );
+ wxCHECK_MSG( is, false, _T("NULL stream in wxExecute()?") );
// the stream could be already at EOF or in wxSTREAM_BROKEN_PIPE state
is->Reset();
wxTextInputStream tis(*is);
- bool cont = TRUE;
+ bool cont = true;
while ( cont )
{
wxString line = tis.ReadLine();
if ( !*is )
{
- cont = FALSE;
+ cont = false;
}
else
{
wxArrayString& output,
wxArrayString* error)
{
-#ifdef __WIN16__
- wxFAIL_MSG("Sorry, this version of wxExecute not implemented on WIN16.");
-
- return 0;
-#else // !Win16
// create a wxProcess which will capture the output
wxProcess *process = new wxProcess;
process->Redirect();
}
}
-#endif // wxUSE_STREAMS
+#else
+ wxUnusedVar(output);
+ wxUnusedVar(error);
+#endif // wxUSE_STREAMS/!wxUSE_STREAMS
delete process;
return rc;
-#endif // IO redirection supported
}
long wxExecute(const wxString& command, wxArrayString& output)
bool wxYieldIfNeeded()
{
- return wxTheApp && wxTheApp->Yield(TRUE);
+ return wxTheApp && wxTheApp->Yield(true);
}
#endif // wxUSE_BASE
#if wxUSE_GUI
+// Id generation
+static long wxCurrentId = 100;
+
+long
+wxNewId (void)
+{
+ return wxCurrentId++;
+}
+
+long
+wxGetCurrentId(void) { return wxCurrentId; }
+
+void
+wxRegisterId (long id)
+{
+ if (id >= wxCurrentId)
+ wxCurrentId = id + 1;
+}
+
#if wxUSE_MENUS
// ----------------------------------------------------------------------------
}
else
{
- out = copystring(s);
+ // MYcopystring - for easier search...
+ out = new wxChar[s.length() + 1];
+ wxStrcpy(out, s.c_str());
}
return out;
return wxWindow::FindWindowByName( name, parent );
}
-// Returns menu item id or -1 if none.
+// Returns menu item id or wxNOT_FOUND if none.
int
wxFindMenuItemId (wxFrame * frame, const wxString& menuString, const wxString& itemString)
{
return menuBar->FindMenuItem (menuString, itemString);
#endif // wxUSE_MENUS
- return -1;
+ return wxNOT_FOUND;
}
// Try to find the deepest child that contains 'pt'.
}
#endif
- wxWindowList::Node *node = win->GetChildren().GetLast();
+ wxWindowList::compatibility_iterator node = win->GetChildren().GetLast();
while (node)
{
wxWindow* child = node->GetData();
// Go backwards through the list since windows
// on top are likely to have been appended most
// recently.
- wxWindowList::Node *node = wxTopLevelWindows.GetLast();
+ wxWindowList::compatibility_iterator node = wxTopLevelWindows.GetLast();
while (node)
{
wxWindow* win = node->GetData();
int wxMessageBox(const wxString& message, const wxString& caption, long style,
wxWindow *parent, int WXUNUSED(x), int WXUNUSED(y) )
{
- wxMessageDialog dialog(parent, message, caption, style);
+ long decorated_style = style;
+
+ if ( ( style & ( wxICON_EXCLAMATION | wxICON_HAND | wxICON_INFORMATION | wxICON_QUESTION ) ) == 0 )
+ {
+ decorated_style |= ( style & wxYES ) ? wxICON_QUESTION : wxICON_INFORMATION ;
+ }
+
+ wxMessageDialog dialog(parent, message, caption, decorated_style);
int ans = dialog.ShowModal();
switch ( ans )
wxString wxGetTextFromUser(const wxString& message, const wxString& caption,
const wxString& defaultValue, wxWindow *parent,
- int x, int y, bool WXUNUSED(centre) )
+ wxCoord x, wxCoord y, bool centre )
{
wxString str;
- wxTextEntryDialog dialog(parent, message, caption, defaultValue, wxOK|wxCANCEL, wxPoint(x, y));
+ long style = wxTextEntryDialogStyle;
+
+ if (centre)
+ style |= wxCENTRE;
+ else
+ style &= ~wxCENTRE;
+
+ wxTextEntryDialog dialog(parent, message, caption, defaultValue, style, wxPoint(x, y));
+
if (dialog.ShowModal() == wxID_OK)
{
str = dialog.GetValue();
wxColour wxGetColourFromUser(wxWindow *parent, const wxColour& colInit)
{
wxColourData data;
- data.SetChooseFull(TRUE);
+ data.SetChooseFull(true);
if ( colInit.Ok() )
{
data.SetColour((wxColour &)colInit); // const_cast
}
#endif // wxUSE_FONTDLG
-// ----------------------------------------------------------------------------
-// missing C RTL functions (FIXME shouldn't be here at all)
-// ----------------------------------------------------------------------------
-
-#if defined( __MWERKS__ ) && !defined(__MACH__)
-char *strdup(const char *s)
-{
- return strcpy( (char*) malloc( strlen( s ) + 1 ) , s ) ;
-}
-int isascii( int c )
-{
- return ( c >= 0 && c < 128 ) ;
-}
-#endif // __MWERKS__
// ----------------------------------------------------------------------------
// wxSafeYield and supporting functions
void wxEnableTopLevelWindows(bool enable)
{
- wxWindowList::Node *node;
+ wxWindowList::compatibility_iterator node;
for ( node = wxTopLevelWindows.GetFirst(); node; node = node->GetNext() )
node->GetData()->Enable(enable);
}
// don't reenable them later
m_winDisabled = NULL;
- wxWindowList::Node *node;
+ wxWindowList::compatibility_iterator node;
for ( node = wxTopLevelWindows.GetFirst(); node; node = node->GetNext() )
{
wxWindow *winTop = node->GetData();
wxWindowDisabler::~wxWindowDisabler()
{
- wxWindowList::Node *node;
+ wxWindowList::compatibility_iterator node;
for ( node = wxTopLevelWindows.GetFirst(); node; node = node->GetNext() )
{
wxWindow *winTop = node->GetData();
#ifndef __WXGTK__
bool wxSetDetectableAutoRepeat( bool WXUNUSED(flag) )
{
- return TRUE; // detectable auto-repeat is the only mode MSW supports
+ return true; // detectable auto-repeat is the only mode MSW supports
}
#endif // !wxGTK