]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/utilscmn.cpp
fixed rounding errors in variable status bar panes widths computation (patch 1030021)
[wxWidgets.git] / src / common / utilscmn.cpp
index 03deb7925c19e244716b311ef6e53e2021c77aeb..6c7f69d3b93cd3a437545985fdf2645eacb96903 100644 (file)
 // 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__
     #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
 
 // ============================================================================
@@ -119,25 +130,6 @@ copystring (const wxChar *s)
 
 #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)
 // ----------------------------------------------------------------------------
@@ -259,10 +251,24 @@ wxString wxDecToHex(int dec)
 // 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()
@@ -299,7 +305,12 @@ int wxGetOsVersion(int *verMaj, int *verMin)
     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;
 }
 
 // ----------------------------------------------------------------------------
@@ -341,8 +352,7 @@ wxString wxGetUserId()
     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();
@@ -355,8 +365,7 @@ wxString wxGetUserName()
     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();
@@ -369,9 +378,7 @@ wxString wxGetHostName()
     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();
@@ -384,9 +391,7 @@ wxString wxGetFullHostName()
     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();
@@ -500,7 +505,10 @@ static long wxDoExecuteWithCapture(const wxString& command,
         }
 
     }
-#endif // wxUSE_STREAMS
+#else
+    wxUnusedVar(output);
+    wxUnusedVar(error);
+#endif // wxUSE_STREAMS/!wxUSE_STREAMS
 
     delete process;
 
@@ -541,6 +549,25 @@ bool wxYieldIfNeeded()
 
 #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
 
 // ----------------------------------------------------------------------------
@@ -557,7 +584,9 @@ wxChar *wxStripMenuCodes(const wxChar *in, wxChar *out)
     }
     else
     {
-        out = copystring(s);
+        // MYcopystring - for easier search...
+        out = new wxChar[s.length() + 1];
+        wxStrcpy(out, s.c_str());
     }
 
     return out;
@@ -671,7 +700,7 @@ wxWindow* wxFindWindowAtPoint(wxWindow* win, const wxPoint& pt)
     }
 #endif
 
-    wxWindowList::Node  *node = win->GetChildren().GetLast();
+    wxWindowList::compatibility_iterator node = win->GetChildren().GetLast();
     while (node)
     {
         wxWindow* child = node->GetData();
@@ -700,7 +729,7 @@ wxWindow* wxGenericFindWindowAtPoint(const wxPoint& pt)
     // 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();
@@ -726,7 +755,14 @@ wxWindow* wxGenericFindWindowAtPoint(const wxPoint& 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 )
@@ -752,10 +788,18 @@ int wxMessageBox(const wxString& message, const wxString& caption, long style,
 
 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();
@@ -828,20 +872,6 @@ wxFont wxGetFontFromUser(wxWindow *parent, const wxFont& fontInit)
 }
 
 #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
@@ -849,7 +879,7 @@ int isascii( int c )
 
 void wxEnableTopLevelWindows(bool enable)
 {
-    wxWindowList::Node *node;
+    wxWindowList::compatibility_iterator node;
     for ( node = wxTopLevelWindows.GetFirst(); node; node = node->GetNext() )
         node->GetData()->Enable(enable);
 }
@@ -860,7 +890,7 @@ wxWindowDisabler::wxWindowDisabler(wxWindow *winToSkip)
     // 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();
@@ -886,7 +916,7 @@ wxWindowDisabler::wxWindowDisabler(wxWindow *winToSkip)
 
 wxWindowDisabler::~wxWindowDisabler()
 {
-    wxWindowList::Node *node;
+    wxWindowList::compatibility_iterator node;
     for ( node = wxTopLevelWindows.GetFirst(); node; node = node->GetNext() )
     {
         wxWindow *winTop = node->GetData();