]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/utilscmn.cpp
allow changing the page from keyboard in property sheet like controls even when the...
[wxWidgets.git] / src / common / utilscmn.cpp
index b79b0847e14a50995cfcfa170bd5aecc205bef31..303e31881fb976462a922ccb4820b30d8c9febfe 100644 (file)
@@ -72,7 +72,6 @@
     #include "wx/colordlg.h"
     #include "wx/fontdlg.h"
     #include "wx/notebook.h"
     #include "wx/colordlg.h"
     #include "wx/fontdlg.h"
     #include "wx/notebook.h"
-    #include "wx/frame.h"
     #include "wx/statusbr.h"
 #endif // wxUSE_GUI
 
     #include "wx/statusbr.h"
 #endif // wxUSE_GUI
 
@@ -97,6 +96,7 @@
 #if defined(__WXMSW__)
     #include "wx/msw/private.h"
     #include "wx/msw/registry.h"
 #if defined(__WXMSW__)
     #include "wx/msw/private.h"
     #include "wx/msw/registry.h"
+    #include <shellapi.h> // needed for SHELLEXECUTEINFO
 #endif
 
 #if wxUSE_BASE
 #endif
 
 #if wxUSE_BASE
@@ -309,61 +309,116 @@ int wxGetOsVersion(int *verMaj, int *verMin)
 
 wxArrayInt*  wxPlatform::sm_customPlatforms = NULL;
 
 
 wxArrayInt*  wxPlatform::sm_customPlatforms = NULL;
 
-wxPlatform& wxPlatform::Is(int platform, long value)
+void wxPlatform::Copy(const wxPlatform& platform)
 {
 {
-    if (wxPlatformIs(platform))
+    m_longValue = platform.m_longValue;
+    m_doubleValue = platform.m_doubleValue;
+    m_stringValue = platform.m_stringValue;
+}
+
+wxPlatform wxPlatform::If(int platform, long value)
+{
+    if (Is(platform))
+        return wxPlatform(value);
+    else
+        return wxPlatform();
+}
+
+wxPlatform wxPlatform::IfNot(int platform, long value)
+{
+    if (!Is(platform))
+        return wxPlatform(value);
+    else
+        return wxPlatform();
+}
+
+wxPlatform& wxPlatform::ElseIf(int platform, long value)
+{
+    if (Is(platform))
         m_longValue = value;
     return *this;
 }
 
         m_longValue = value;
     return *this;
 }
 
-wxPlatform& wxPlatform::IsNot(int platform, long value)
+wxPlatform& wxPlatform::ElseIfNot(int platform, long value)
 {
 {
-    if (!wxPlatformIs(platform))
+    if (!Is(platform))
         m_longValue = value;
     return *this;
 }
 
         m_longValue = value;
     return *this;
 }
 
-wxPlatform& wxPlatform::Is(int platform, double value)
+wxPlatform wxPlatform::If(int platform, double value)
+{
+    if (Is(platform))
+        return wxPlatform(value);
+    else
+        return wxPlatform();
+}
+
+wxPlatform wxPlatform::IfNot(int platform, double value)
 {
 {
-    if (wxPlatformIs(platform))
+    if (!Is(platform))
+        return wxPlatform(value);
+    else
+        return wxPlatform();
+}
+
+wxPlatform& wxPlatform::ElseIf(int platform, double value)
+{
+    if (Is(platform))
         m_doubleValue = value;
     return *this;
 }
 
         m_doubleValue = value;
     return *this;
 }
 
-wxPlatform& wxPlatform::IsNot(int platform, double value)
+wxPlatform& wxPlatform::ElseIfNot(int platform, double value)
 {
 {
-    if (!wxPlatformIs(platform))
+    if (!Is(platform))
         m_doubleValue = value;
     return *this;
 }
 
         m_doubleValue = value;
     return *this;
 }
 
-wxPlatform& wxPlatform::Is(int platform, const wxString& value)
+wxPlatform wxPlatform::If(int platform, const wxString& value)
 {
 {
-    if (wxPlatformIs(platform))
+    if (Is(platform))
+        return wxPlatform(value);
+    else
+        return wxPlatform();
+}
+
+wxPlatform wxPlatform::IfNot(int platform, const wxString& value)
+{
+    if (!Is(platform))
+        return wxPlatform(value);
+    else
+        return wxPlatform();
+}
+
+wxPlatform& wxPlatform::ElseIf(int platform, const wxString& value)
+{
+    if (Is(platform))
         m_stringValue = value;
     return *this;
 }
 
         m_stringValue = value;
     return *this;
 }
 
-wxPlatform& wxPlatform::IsNot(int platform, const wxString& value)
+wxPlatform& wxPlatform::ElseIfNot(int platform, const wxString& value)
 {
 {
-    if (!wxPlatformIs(platform))
+    if (!Is(platform))
         m_stringValue = value;
     return *this;
 }
 
         m_stringValue = value;
     return *this;
 }
 
-wxPlatform& wxPlatform::Default(long value)
+wxPlatform& wxPlatform::Else(long value)
 {
     m_longValue = value;
     return *this;
 }
 
 {
     m_longValue = value;
     return *this;
 }
 
-wxPlatform& wxPlatform::Default(double value)
+wxPlatform& wxPlatform::Else(double value)
 {
     m_doubleValue = value;
     return *this;
 }
 
 {
     m_doubleValue = value;
     return *this;
 }
 
-wxPlatform& wxPlatform::Default(const wxString& value)
+wxPlatform& wxPlatform::Else(const wxString& value)
 {
     m_stringValue = value;
     return *this;
 {
     m_stringValue = value;
     return *this;
@@ -384,7 +439,7 @@ void wxPlatform::ClearPlatforms()
 
 /// Function for testing current platform
 
 
 /// Function for testing current platform
 
-bool wxPlatform::PlatformIs(int platform)
+bool wxPlatform::Is(int platform)
 {
 #ifdef __WXMSW__
     if (platform == wxMSW)
 {
 #ifdef __WXMSW__
     if (platform == wxMSW)
@@ -399,7 +454,7 @@ bool wxPlatform::PlatformIs(int platform)
         return true;
 #endif
 #if defined(__WXWINCE__) && defined(__SMARTPHONE__)
         return true;
 #endif
 #if defined(__WXWINCE__) && defined(__SMARTPHONE__)
-    if (platform == wxWinSmartphone)
+    if (platform == wxWinSmartPhone)
         return true;
 #endif
 #ifdef __WXGTK__
         return true;
 #endif
 #ifdef __WXGTK__
@@ -426,7 +481,7 @@ bool wxPlatform::PlatformIs(int platform)
     if (platform == wxOS2)
         return true;
 #endif
     if (platform == wxOS2)
         return true;
 #endif
-#ifdef __WXCOCA__
+#ifdef __WXCOCOA__
     if (platform == wxCocoa)
         return true;
 #endif
     if (platform == wxCocoa)
         return true;
 #endif
@@ -764,7 +819,7 @@ bool wxLaunchDefaultBrowser(const wxString& urlOrig, int flags)
         {
             ConstStr255Param hint = 0;
             startSel = 0;
         {
             ConstStr255Param hint = 0;
             startSel = 0;
-            endSel = url.Length();
+            endSel = url.length();
             err = ICLaunchURL(inst, hint, url.fn_str(), endSel, &startSel, &endSel);
             if (err != noErr)
                 wxLogDebug(wxT("ICLaunchURL error %d"), (int) err);
             err = ICLaunchURL(inst, hint, url.fn_str(), endSel, &startSel, &endSel);
             if (err != noErr)
                 wxLogDebug(wxT("ICLaunchURL error %d"), (int) err);
@@ -859,15 +914,18 @@ wxRegisterId (long id)
     wxCurrentId = id + 1;
 }
 
     wxCurrentId = id + 1;
 }
 
-#if wxUSE_MENUS
-
 // ----------------------------------------------------------------------------
 // Menu accelerators related functions
 // ----------------------------------------------------------------------------
 
 wxChar *wxStripMenuCodes(const wxChar *in, wxChar *out)
 {
 // ----------------------------------------------------------------------------
 // Menu accelerators related functions
 // ----------------------------------------------------------------------------
 
 wxChar *wxStripMenuCodes(const wxChar *in, wxChar *out)
 {
+#if wxUSE_MENUS
     wxString s = wxMenuItem::GetLabelFromText(in);
     wxString s = wxMenuItem::GetLabelFromText(in);
+#else
+    wxString str(in);
+    wxString s = wxStripMenuCodes(str);
+#endif // wxUSE_MENUS
     if ( out )
     {
         // go smash their buffer if it's not big enough - I love char * params
     if ( out )
     {
         // go smash their buffer if it's not big enough - I love char * params
@@ -883,8 +941,10 @@ wxChar *wxStripMenuCodes(const wxChar *in, wxChar *out)
     return out;
 }
 
     return out;
 }
 
-wxString wxStripMenuCodes(const wxString& in)
+wxString wxStripMenuCodes(const wxString& in, int flags)
 {
 {
+    wxASSERT_MSG( flags, _T("this is useless to call without any flags") );
+
     wxString out;
 
     size_t len = in.length();
     wxString out;
 
     size_t len = in.length();
@@ -893,7 +953,7 @@ wxString wxStripMenuCodes(const wxString& in)
     for ( size_t n = 0; n < len; n++ )
     {
         wxChar ch = in[n];
     for ( size_t n = 0; n < len; n++ )
     {
         wxChar ch = in[n];
-        if ( ch == _T('&') )
+        if ( (flags & wxStrip_Mnemonics) && ch == _T('&') )
         {
             // skip it, it is used to introduce the accel char (or to quote
             // itself in which case it should still be skipped): note that it
         {
             // skip it, it is used to introduce the accel char (or to quote
             // itself in which case it should still be skipped): note that it
@@ -908,7 +968,7 @@ wxString wxStripMenuCodes(const wxString& in)
                 ch = in[n];
             }
         }
                 ch = in[n];
             }
         }
-        else if ( ch == _T('\t') )
+        else if ( (flags & wxStrip_Accel) && ch == _T('\t') )
         {
             // everything after TAB is accel string, exit the loop
             break;
         {
             // everything after TAB is accel string, exit the loop
             break;
@@ -920,8 +980,6 @@ wxString wxStripMenuCodes(const wxString& in)
     return out;
 }
 
     return out;
 }
 
-#endif // wxUSE_MENUS
-
 // ----------------------------------------------------------------------------
 // Window search functions
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 // Window search functions
 // ----------------------------------------------------------------------------
@@ -956,12 +1014,12 @@ int
 wxFindMenuItemId (wxFrame * frame, const wxString& menuString, const wxString& itemString)
 {
 #if wxUSE_MENUS
 wxFindMenuItemId (wxFrame * frame, const wxString& menuString, const wxString& itemString)
 {
 #if wxUSE_MENUS
-  wxMenuBar *menuBar = frame->GetMenuBar ();
-  if ( menuBar )
-      return menuBar->FindMenuItem (menuString, itemString);
+    wxMenuBar *menuBar = frame->GetMenuBar ();
+    if ( menuBar )
+        return menuBar->FindMenuItem (menuString, itemString);
 #endif // wxUSE_MENUS
 
 #endif // wxUSE_MENUS
 
-  return wxNOT_FOUND;
+    return wxNOT_FOUND;
 }
 
 // Try to find the deepest child that contains 'pt'.
 }
 
 // Try to find the deepest child that contains 'pt'.
@@ -1003,7 +1061,7 @@ wxWindow* wxFindWindowAtPoint(wxWindow* win, const wxPoint& pt)
 
     wxPoint pos = win->GetPosition();
     wxSize sz = win->GetSize();
 
     wxPoint pos = win->GetPosition();
     wxSize sz = win->GetSize();
-    if (win->GetParent())
+    if ( !win->IsTopLevel() && win->GetParent() )
     {
         pos = win->GetParent()->ClientToScreen(pos);
     }
     {
         pos = win->GetParent()->ClientToScreen(pos);
     }
@@ -1011,8 +1069,8 @@ wxWindow* wxFindWindowAtPoint(wxWindow* win, const wxPoint& pt)
     wxRect rect(pos, sz);
     if (rect.Inside(pt))
         return win;
     wxRect rect(pos, sz);
     if (rect.Inside(pt))
         return win;
-    else
-        return NULL;
+
+    return NULL;
 }
 
 wxWindow* wxGenericFindWindowAtPoint(const wxPoint& pt)
 }
 
 wxWindow* wxGenericFindWindowAtPoint(const wxPoint& pt)
@@ -1138,7 +1196,7 @@ wxColour wxGetColourFromUser(wxWindow *parent, const wxColour& colInit, const wx
 
     wxColour colRet;
     wxColourDialog dialog(parent, &data);
 
     wxColour colRet;
     wxColourDialog dialog(parent, &data);
-    if (!caption.IsEmpty())
+    if (!caption.empty())
         dialog.SetTitle(caption);
     if ( dialog.ShowModal() == wxID_OK )
     {
         dialog.SetTitle(caption);
     if ( dialog.ShowModal() == wxID_OK )
     {
@@ -1163,7 +1221,7 @@ wxFont wxGetFontFromUser(wxWindow *parent, const wxFont& fontInit, const wxStrin
 
     wxFont fontRet;
     wxFontDialog dialog(parent, data);
 
     wxFont fontRet;
     wxFontDialog dialog(parent, data);
-    if (!caption.IsEmpty())
+    if (!caption.empty())
         dialog.SetTitle(caption);
     if ( dialog.ShowModal() == wxID_OK )
     {
         dialog.SetTitle(caption);
     if ( dialog.ShowModal() == wxID_OK )
     {