// 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/process.h"
#include "wx/txtstrm.h"
+#if defined(__WXWINCE__) && wxUSE_DATETIME
+#include "wx/datetime.h"
+#endif
+
#include <ctype.h>
#include <stdio.h>
#include <stdlib.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__
+#if defined(__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
// ============================================================================
wxChar *
copystring (const wxChar *s)
{
- if (s == NULL) s = wxT("");
+ if (s == NULL) s = wxEmptyString;
size_t len = wxStrlen (s) + 1;
wxChar *news = new wxChar[len];
#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)
// ----------------------------------------------------------------------------
// 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()
#ifdef wxINSTALL_PREFIX
return wxT(wxINSTALL_PREFIX);
#else
- return wxT("");
+ return wxEmptyString;
#endif
}
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;
}
if ( ! traits )
traits = &traitsConsole;
- return traits->GetOSVersion(verMaj, verMin);
+ wxToolkitInfo& info = traits->GetToolkitInfo();
+ if ( verMaj )
+ *verMaj = info.versionMajor;
+ if ( verMin )
+ *verMin = info.versionMinor;
+ return info.os;
}
// ----------------------------------------------------------------------------
{
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.empty() )
{
wxString user = wxGetUserId();
- if ( !!user )
+ if ( !user.empty() )
{
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
{
// public versions of wxExecute() below
static long wxDoExecuteWithCapture(const wxString& command,
wxArrayString& output,
- wxArrayString* error)
+ wxArrayString* error,
+ int flags)
{
// create a wxProcess which will capture the output
wxProcess *process = new wxProcess;
process->Redirect();
- long rc = wxExecute(command, wxEXEC_SYNC, process);
+ long rc = wxExecute(command, wxEXEC_SYNC | flags, process);
#if wxUSE_STREAMS
if ( rc != -1 )
}
}
-#endif // wxUSE_STREAMS
+#else
+ wxUnusedVar(output);
+ wxUnusedVar(error);
+#endif // wxUSE_STREAMS/!wxUSE_STREAMS
delete process;
return rc;
}
-long wxExecute(const wxString& command, wxArrayString& output)
+long wxExecute(const wxString& command, wxArrayString& output, int flags)
{
- return wxDoExecuteWithCapture(command, output, NULL);
+ return wxDoExecuteWithCapture(command, output, NULL, flags);
}
long wxExecute(const wxString& command,
wxArrayString& output,
- wxArrayString& error)
+ wxArrayString& error,
+ int flags)
{
- return wxDoExecuteWithCapture(command, output, &error);
+ return wxDoExecuteWithCapture(command, output, &error, flags);
}
// ----------------------------------------------------------------------------
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()
+{
+ // skip the part of IDs space that contains hard-coded values:
+ if (wxCurrentId == wxID_LOWEST)
+ wxCurrentId = wxID_HIGHEST + 1;
+
+ return wxCurrentId++;
+}
+
+long
+wxGetCurrentId(void) { return wxCurrentId; }
+
+void
+wxRegisterId (long id)
+{
+ if (id >= wxCurrentId)
+ wxCurrentId = id + 1;
+}
+
#if wxUSE_MENUS
// ----------------------------------------------------------------------------
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'.
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();
wxString wxGetPasswordFromUser(const wxString& message,
const wxString& caption,
const wxString& defaultValue,
- wxWindow *parent)
+ wxWindow *parent,
+ wxCoord x, wxCoord y, bool centre )
{
wxString str;
- wxTextEntryDialog dialog(parent, message, caption, defaultValue,
- wxOK | wxCANCEL | wxTE_PASSWORD);
+ long style = wxTextEntryDialogStyle;
+
+ if (centre)
+ style |= wxCENTRE;
+ else
+ style &= ~wxCENTRE;
+
+ wxPasswordEntryDialog 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
#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