]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/statusbr.cpp
Allow wxSplitterWindow::Initialize(NULL) in case we've deleted both child
[wxWidgets.git] / src / generic / statusbr.cpp
index 00588ff0f6277bbbb7b8baeacde932c8c48301b1..c12bce49e7d37b1a45b6e38b3a92177a900dfab7 100644 (file)
@@ -5,11 +5,11 @@
 // Modified by:
 // Created:     01/02/97
 // RCS-ID:      $Id$
-// Copyright:   (c) Julian Smart and Markus Holzem
-// Licence:     wxWindows license
+// Copyright:   (c) Julian Smart
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
 #pragma implementation "statusbr.h"
 #endif
 
@@ -104,9 +104,29 @@ bool wxStatusBarGeneric::Create(wxWindow *parent,
 
   SetSize(-1, -1, -1, height);
 
+  SetFieldsCount(1);
+
   return TRUE;
 }
 
+
+wxSize wxStatusBarGeneric::DoGetBestSize() const
+{
+    int width, height;
+
+    // best width is the width of the parent
+    GetParent()->GetClientSize(&width, NULL);
+
+    // best height is as calculated above in Create
+    wxClientDC dc((wxWindow*)this);
+    dc.SetFont(GetFont());
+    wxCoord y;
+    dc.GetTextExtent(_T("X"), NULL, &y );
+    height = (int)( (11*y)/10 + 2*GetBorderY());
+
+    return wxSize(width, height);
+}    
+
 void wxStatusBarGeneric::SetFieldsCount(int number, const int *widths)
 {
     wxASSERT_MSG( number >= 0, _T("negative number of fields in wxStatusBar?") );
@@ -131,12 +151,16 @@ void wxStatusBarGeneric::SetStatusText(const wxString& text, int number)
     wxCHECK_RET( (number >= 0) && (number < m_nFields),
                  _T("invalid status bar field index") );
 
-    m_statusStrings[number] = text;
+    wxString oldText = m_statusStrings[number];
+    if (oldText != text)
+    {
+        m_statusStrings[number] = text;
 
-    wxRect rect;
-    GetFieldRect(number, rect);
+        wxRect rect;
+        GetFieldRect(number, rect);
 
-    Refresh( TRUE, &rect );
+        Refresh( TRUE, &rect );
+    }
 }
 
 wxString wxStatusBarGeneric::GetStatusText(int n) const
@@ -181,7 +205,7 @@ void wxStatusBarGeneric::OnPaint(wxPaintEvent& WXUNUSED(event) )
     {
         int width, height;
         GetClientSize(&width, &height);
-        
+
         gtk_paint_resize_grip( m_widget->style,
                                GTK_PIZZA(m_wxwindow)->bin_window,
                                (GtkStateType) GTK_WIDGET_STATE (m_widget),
@@ -190,13 +214,13 @@ void wxStatusBarGeneric::OnPaint(wxPaintEvent& WXUNUSED(event) )
                                "statusbar",
                                GDK_WINDOW_EDGE_SOUTH_EAST,
                                width-height-2, 1, height-2, height-3 );
-        
+
     }
 #endif
 
   if (GetFont().Ok())
         dc.SetFont(GetFont());
-    
+
   dc.SetBackgroundMode(wxTRANSPARENT);
 
 #ifdef __WXPM__
@@ -328,7 +352,7 @@ bool wxStatusBarGeneric::GetFieldRect(int n, wxRect& rect) const
 void wxStatusBarGeneric::InitColours()
 {
     // Shadow colours
-#if defined(__WIN95__)
+#if defined(__WIN95__) || defined(__WXMAC__)
     wxColour mediumShadowColour(wxSystemSettings::GetColour(wxSYS_COLOUR_3DSHADOW));
     m_mediumShadowPen = wxPen(mediumShadowColour, 1, wxSOLID);
 
@@ -385,7 +409,7 @@ void wxStatusBarGeneric::OnLeftDown(wxMouseEvent& event)
 #ifdef __WXGTK20__
     int width, height;
     GetClientSize(&width, &height);
-    
+
     if (HasFlag( wxST_SIZEGRIP ) && (event.GetX() > width-height))
     {
         GtkWidget *ancestor = gtk_widget_get_toplevel( m_widget );
@@ -402,8 +426,8 @@ void wxStatusBarGeneric::OnLeftDown(wxMouseEvent& event)
         gtk_window_begin_resize_drag (GTK_WINDOW (ancestor),
                                   GDK_WINDOW_EDGE_SOUTH_EAST,
                                   1,
-                                  org_x + event.GetX(), 
-                                  org_y + event.GetY(), 
+                                  org_x + event.GetX(),
+                                  org_y + event.GetY(),
                                   0);
     }
     else
@@ -420,7 +444,7 @@ void wxStatusBarGeneric::OnRightDown(wxMouseEvent& event)
 #ifdef __WXGTK20__
     int width, height;
     GetClientSize(&width, &height);
-    
+
     if (HasFlag( wxST_SIZEGRIP ) && (event.GetX() > width-height))
     {
         GtkWidget *ancestor = gtk_widget_get_toplevel( m_widget );
@@ -433,11 +457,11 @@ void wxStatusBarGeneric::OnRightDown(wxMouseEvent& event)
         int org_x = 0;
         int org_y = 0;
         gdk_window_get_origin( source, &org_x, &org_y );
-    
+
         gtk_window_begin_move_drag (GTK_WINDOW (ancestor),
                                 2,
-                                org_x + event.GetX(), 
-                                org_y + event.GetY(), 
+                                org_x + event.GetX(),
+                                org_y + event.GetY(),
                                 0);
     }
     else