]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/wincmn.cpp
wxTextOutputStream::PutChar and text stream test
[wxWidgets.git] / src / common / wincmn.cpp
index c4fba2a8abe3bbbe6450409ba0c38725c2c4c53e..f906802a0f49a1c0b45d3c5f8d974e7736c03cb2 100644 (file)
     #include "wx/caret.h"
 #endif // wxUSE_CARET
 
+#if wxUSE_SYSTEM_OPTIONS
+    #include "wx/sysopt.h"
+#endif
+
 // ----------------------------------------------------------------------------
 // static data
 // ----------------------------------------------------------------------------
@@ -152,7 +156,7 @@ wxWindowBase::wxWindowBase()
     // no style bits
     m_exStyle =
     m_windowStyle = 0;
-    
+
     m_backgroundStyle = wxBG_STYLE_SYSTEM;
 
 #if wxUSE_CONSTRAINTS
@@ -193,6 +197,12 @@ wxWindowBase::wxWindowBase()
     m_maxVirtualHeight = wxDefaultCoord;
 
     m_windowVariant = wxWINDOW_VARIANT_NORMAL;
+#if wxUSE_SYSTEM_OPTIONS
+    if ( wxSystemOptions::HasOption(wxWINDOW_DEFAULT_VARIANT) )
+    {
+       m_windowVariant = (wxWindowVariant) wxSystemOptions::GetOptionInt( wxWINDOW_DEFAULT_VARIANT ) ;
+    }
+#endif
 
     // Whether we're using the current theme for this window (wxGTK only for now)
     m_themeEnabled = false;
@@ -480,7 +490,7 @@ void wxWindowBase::Centre(int direction)
     }
 
     // move the window to this position (keeping the old size but using
-    // SetSize() and not Move() to allow xNew and/or yNew to be -1)
+    // SetSize() and not Move() to allow xNew and/or yNew to be wxDefaultCoord)
     SetSize(xNew, yNew, width, height, wxSIZE_ALLOW_MINUS_ONE);
 }
 
@@ -508,7 +518,7 @@ void wxWindowBase::FitInside()
 static bool wxHasRealChildren(const wxWindowBase* win)
 {
     int realChildCount = 0;
-    
+
     for ( wxWindowList::compatibility_iterator node = win->GetChildren().GetFirst();
           node;
           node = node->GetNext() )
@@ -520,6 +530,16 @@ static bool wxHasRealChildren(const wxWindowBase* win)
     return (realChildCount > 0);
 }
 #endif
+    
+void wxWindowBase::InvalidateBestSize()
+{
+    m_bestSizeCache = wxDefaultSize;
+
+    // parent's best size calculation may depend on its children's
+    // best sizes, so let's invalidate it as well to be safe:
+    if (m_parent)
+        m_parent->InvalidateBestSize();
+}
 
 // return the size best suited for the current window
 wxSize wxWindowBase::DoGetBestSize() const
@@ -650,7 +670,7 @@ void wxWindowBase::SetBestFittingSize(const wxSize& size)
 
     // Merge the size with the best size if needed
     wxSize best = GetBestFittingSize();
-    
+
     // If the current size doesn't match then change it
     if (GetSize() != best)
         SetSize(best);
@@ -664,9 +684,9 @@ wxPoint wxWindowBase::GetClientAreaOrigin() const
 }
 
 // set the min/max size of the window
-void wxWindowBase::SetSizeHints(int minW, int minH,
-                                int maxW, int maxH,
-                                int WXUNUSED(incW), int WXUNUSED(incH))
+void wxWindowBase::DoSetSizeHints(int minW, int minH,
+                                  int maxW, int maxH,
+                                  int WXUNUSED(incW), int WXUNUSED(incH))
 {
     // setting min width greater than max width leads to infinite loops under
     // X11 and generally doesn't make any sense, so don't allow it
@@ -1017,10 +1037,13 @@ wxColour wxWindowBase::GetForegroundColour() const
 
 bool wxWindowBase::SetBackgroundColour( const wxColour &colour )
 {
-    if ( colour == m_backgroundColour ) 
+    if ( colour == m_backgroundColour )
         return false;
 
     m_hasBgCol = colour.Ok();
+    if ( m_backgroundStyle != wxBG_STYLE_CUSTOM )
+        m_backgroundStyle = m_hasBgCol ? wxBG_STYLE_COLOUR : wxBG_STYLE_SYSTEM;
+
     m_inheritBgCol = m_hasBgCol;
     m_backgroundColour = colour;
     SetThemeEnabled( !m_hasBgCol && !m_foregroundColour.Ok() );
@@ -2033,12 +2056,16 @@ void wxWindowBase::DoUpdateWindowUI(wxUpdateUIEvent& event)
             if ( event.GetText() != control->GetLabel() )
                 control->SetLabel(event.GetText());
         }
+    }
+#endif // wxUSE_CONTROLS
+
+    if ( event.GetSetChecked() )
+    {
 #if wxUSE_CHECKBOX
         wxCheckBox *checkbox = wxDynamicCastThis(wxCheckBox);
         if ( checkbox )
         {
-            if ( event.GetSetChecked() )
-                checkbox->SetValue(event.GetChecked());
+            checkbox->SetValue(event.GetChecked());
         }
 #endif // wxUSE_CHECKBOX
 
@@ -2046,12 +2073,10 @@ void wxWindowBase::DoUpdateWindowUI(wxUpdateUIEvent& event)
         wxRadioButton *radiobtn = wxDynamicCastThis(wxRadioButton);
         if ( radiobtn )
         {
-            if ( event.GetSetChecked() )
-                radiobtn->SetValue(event.GetChecked());
+            radiobtn->SetValue(event.GetChecked());
         }
 #endif // wxUSE_RADIOBTN
     }
-#endif
 }
 
 #if 0
@@ -2079,10 +2104,10 @@ wxPoint wxWindowBase::ConvertPixelsToDialog(const wxPoint& pt)
 {
     int charWidth = GetCharWidth();
     int charHeight = GetCharHeight();
-    wxPoint pt2(-1, -1);
-    if (pt.x != -1)
+    wxPoint pt2 = wxDefaultPosition;
+    if (pt.x != wxDefaultCoord)
         pt2.x = (int) ((pt.x * 4) / charWidth);
-    if (pt.y != -1)
+    if (pt.y != wxDefaultCoord)
         pt2.y = (int) ((pt.y * 8) / charHeight);
 
     return pt2;
@@ -2092,10 +2117,10 @@ wxPoint wxWindowBase::ConvertDialogToPixels(const wxPoint& pt)
 {
     int charWidth = GetCharWidth();
     int charHeight = GetCharHeight();
-    wxPoint pt2(-1, -1);
-    if (pt.x != -1)
+    wxPoint pt2 = wxDefaultPosition;
+    if (pt.x != wxDefaultCoord)
         pt2.x = (int) ((pt.x * charWidth) / 4);
-    if (pt.y != -1)
+    if (pt.y != wxDefaultCoord)
         pt2.y = (int) ((pt.y * charHeight) / 8);
 
     return pt2;
@@ -2177,7 +2202,7 @@ void wxWindowBase::OnMiddleClick( wxMouseEvent& event )
 
         wxMessageBox(wxString::Format(
                                       _T(
-                                        "       wxWidgets Library (%s port)\nVersion %u.%u.%u%s, compiled at %s %s\n   Copyright (c) 1995-2002 wxWidgets team"
+                                        "       wxWidgets Library (%s port)\nVersion %u.%u.%u%s%s, compiled at %s %s\n   Copyright (c) 1995-2004 wxWidgets team"
                                         ),
                                       port.c_str(),
                                       wxMAJOR_VERSION,
@@ -2187,6 +2212,11 @@ void wxWindowBase::OnMiddleClick( wxMouseEvent& event )
                                       L" (Unicode)",
 #else
                                       "",
+#endif
+#ifdef __WXDEBUG__
+                                      _T(" Debug build"),
+#else
+                                      _T(""),
 #endif
                                       __TDATE__,
                                       __TTIME__
@@ -2433,6 +2463,11 @@ void wxWindowBase::DoMoveInTabOrder(wxWindow *win, MoveKind move)
     wxCHECK_RET( GetParent(),
                     _T("MoveBefore/AfterInTabOrder() don't work for TLWs!") );
 
+    // detect the special case when we have nothing to do anyhow and when the
+    // code below wouldn't work
+    if ( win == this )
+        return;
+
     // find the target window in the siblings list
     wxWindowList& siblings = GetParent()->GetChildren();
     wxWindowList::compatibility_iterator i = siblings.Find(win);
@@ -2457,6 +2492,16 @@ void wxWindowBase::DoMoveInTabOrder(wxWindow *win, MoveKind move)
     }
 }
 
+// ----------------------------------------------------------------------------
+// focus handling
+// ----------------------------------------------------------------------------
+
+/*static*/ wxWindow* wxWindowBase::FindFocus()
+{
+    wxWindowBase *win = DoFindFocus();
+    return win ? win->GetMainWindowOfCompositeControl() : NULL;
+}
+
 // ----------------------------------------------------------------------------
 // global functions
 // ----------------------------------------------------------------------------
@@ -2876,7 +2921,7 @@ wxAccStatus wxWindowAccessible::GetFocus(int* WXUNUSED(childId), wxAccessible**
 // Gets a variant representing the selected children
 // of this object.
 // Acceptable values:
-// - a null variant (IsNull() returns TRUE)
+// - a null variant (IsNull() returns true)
 // - a list variant (GetType() == wxT("list")
 // - an integer representing the selected child element,
 //   or 0 if this object is selected (GetType() == wxT("long")