]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/window.h
wxGTK/Cygwin fix (patch 914565)
[wxWidgets.git] / include / wx / window.h
index bf670b3b3250b320c97d41ee8e19ef24580618fd..247786e0900fd928f3179d776d0294bfb616fd32 100644 (file)
@@ -294,17 +294,29 @@ public:
     }
 
         // get the size best suited for the window (in fact, minimal
-        // acceptable size using which it will still look "nice")
-    wxSize GetBestSize() const { return DoGetBestSize(); }
+        // acceptable size using which it will still look "nice" in
+        // most situations)
+    wxSize GetBestSize() const
+    {
+        if (m_bestSizeCache.IsFullySpecified())
+            return m_bestSizeCache;
+        return DoGetBestSize();
+    }
     void GetBestSize(int *w, int *h) const
     {
-        wxSize s = DoGetBestSize();
+        wxSize s = GetBestSize();
         if ( w )
             *w = s.x;
         if ( h )
             *h = s.y;
     }
 
+        // reset the cached best size value so it will be recalculated the
+        // next time it is needed.
+    void InvalidateBestSize() { m_bestSizeCache = wxDefaultSize; }
+    void CacheBestSize(const wxSize& size) const
+        { wxConstCast(this, wxWindowBase)->m_bestSizeCache = size; }
+    
         // There are times (and windows) where 'Best' size and 'Min' size
         // are vastly out of sync.  This should be remedied somehow, but in
         // the meantime, this method will return the larger of BestSize
@@ -312,10 +324,19 @@ public:
         // MinSize hint.
     wxSize GetAdjustedBestSize() const
     {
-        wxSize  s( DoGetBestSize() );
+        wxSize  s( GetBestSize() );
         return wxSize( wxMax( s.x, GetMinWidth() ), wxMax( s.y, GetMinHeight() ) );
     }
 
+        // This function will merge the window's best size into the window's
+        // minimum size, giving priority to the min size components, and
+        // returns the results.
+    wxSize GetBestFittingSize() const;
+    
+        // A 'Smart' SetSize that will fill in default size values with 'best'
+        // size.  Sets the minsize to what was passed in.
+    void SetBestFittingSize(const wxSize& size=wxDefaultSize);
+
         // the generic centre function - centers the window on parent by`
         // default or on screen if it doesn't have parent or
         // wxCENTER_ON_SCREEN flag is given
@@ -366,6 +387,9 @@ public:
     virtual wxSize GetMaxSize() const { return wxSize( m_maxWidth, m_maxHeight ); }
     virtual wxSize GetMinSize() const { return wxSize( m_minWidth, m_minHeight ); }
 
+    void SetMinSize(const wxSize& minSize) { SetSizeHints(minSize); }
+    void SetMaxSize(const wxSize& maxSize) { SetSizeHints(GetMinSize(), maxSize); }
+    
         // Methods for accessing the virtual size of a window.  For most
         // windows this is just the client area of the window, but for
         // some like scrolled windows it is more or less independent of
@@ -489,6 +513,17 @@ public:
         // set this child as temporary default
     virtual void SetTmpDefaultItem(wxWindow * WXUNUSED(win)) { }
 
+        // navigates in the specified direction by sending a wxNavigationKeyEvent
+    virtual bool Navigate(int flags = wxNavigationKeyEvent::IsForward);
+
+        // move this window just before/after the specified one in tab order
+        // (the other window must be our sibling!)
+    void MoveBeforeInTabOrder(wxWindow *win)
+        { DoMoveInTabOrder(win, MoveBefore); }
+    void MoveAfterInTabOrder(wxWindow *win)
+        { DoMoveInTabOrder(win, MoveAfter); }
+
+
     // parent/children relations
     // -------------------------
 
@@ -506,7 +541,7 @@ public:
         // is this window a top level one?
     virtual bool IsTopLevel() const;
 
-        // it doesn't really change parent, use ReParent() instead
+        // it doesn't really change parent, use Reparent() instead
     void SetParent( wxWindowBase *parent ) { m_parent = (wxWindow *)parent; }
         // change the real parent of this window, return true if the parent
         // was changed, false otherwise (error or newParent == oldParent)
@@ -698,40 +733,38 @@ public:
 
         // set/retrieve the window colours (system defaults are used by
         // default): SetXXX() functions return true if colour was changed,
-        // SetDefaultXXX() reset the "m_hasXXX" flag after setting the value
-        // to prevent it from being inherited by our children
+        // SetDefaultXXX() reset the "m_inheritXXX" flag after setting the
+        // value to prevent it from being inherited by our children
     virtual bool SetBackgroundColour(const wxColour& colour);
-    void SetDefaultBackgroundColour(const wxColour& colour)
+    void SetOwnBackgroundColour(const wxColour& colour)
     {
         if ( SetBackgroundColour(colour) )
-            m_hasBgCol = false;
+            m_inheritBgCol = false;
     }
     wxColour GetBackgroundColour() const;
 
     virtual bool SetForegroundColour(const wxColour& colour);
-    void SetDefaultForegroundColour(const wxColour& colour)
+    void SetOwnForegroundColour(const wxColour& colour)
     {
         if ( SetForegroundColour(colour) )
-            m_hasFgCol = false;
+            m_inheritFgCol = false;
     }
     wxColour GetForegroundColour() const;
 
         // set/retrieve the font for the window (SetFont() returns true if the
         // font really changed)
     virtual bool SetFont(const wxFont& font) = 0;
-    void SetDefaultFont(const wxFont& font)
+    void SetOwnFont(const wxFont& font)
     {
         if ( SetFont(font) )
-            m_hasFont = false;
+            m_inheritFont = false;
     }
-    const wxFont& GetFont() const { return DoGetFont(); }
-    wxFont& GetFont() { return DoGetFont(); }
+    wxFont GetFont() const;
 
         // set/retrieve the cursor for this window (SetCursor() returns true
         // if the cursor was really changed)
     virtual bool SetCursor( const wxCursor &cursor );
     const wxCursor& GetCursor() const { return m_cursor; }
-    wxCursor& GetCursor() { return m_cursor; }
 
 #if wxUSE_CARET
         // associate a caret with the window
@@ -804,9 +837,9 @@ public:
     virtual void DoUpdateWindowUI(wxUpdateUIEvent& event) ;
 
 #if wxUSE_MENUS
-    bool PopupMenu( wxMenu *menu, const wxPoint& pos )
+    bool PopupMenu(wxMenu *menu, const wxPoint& pos = wxDefaultPosition)
         { return DoPopupMenu(menu, pos.x, pos.y); }
-    bool PopupMenu( wxMenu *menu, int x, int y )
+    bool PopupMenu(wxMenu *menu, int x, int y)
         { return DoPopupMenu(menu, x, y); }
 #endif // wxUSE_MENUS
 
@@ -1006,6 +1039,13 @@ protected:
     virtual bool TryValidator(wxEvent& event);
     virtual bool TryParent(wxEvent& event);
 
+    // common part of MoveBefore/AfterInTabOrder()
+    enum MoveKind
+    {
+        MoveBefore,     // insert before the given window
+        MoveAfter       // insert after the given window
+    };
+    virtual void DoMoveInTabOrder(wxWindow *win, MoveKind move);
 
 #if wxUSE_CONSTRAINTS
     // satisfy the constraints for the windows but don't set the window sizes
@@ -1095,6 +1135,11 @@ protected:
     bool                 m_hasBgCol:1;
     bool                 m_hasFgCol:1;
     bool                 m_hasFont:1;
+    
+    // and should it be inherited by children?
+    bool                 m_inheritBgCol:1;
+    bool                 m_inheritFgCol:1;
+    bool                 m_inheritFont:1;
 
     // window attributes
     long                 m_windowStyle,
@@ -1130,16 +1175,15 @@ protected:
     static int WidthDefault(int w) { return w == -1 ? 20 : w; }
     static int HeightDefault(int h) { return h == -1 ? 20 : h; }
 
-    // set the best size for the control if the default size was given:
-    // replaces the fields of size == -1 with the best values for them and
-    // calls SetSize() if needed
-    //
-    // This function is rather unfortunately named..  it's really just a
-    // smarter SetSize / convenience function for expanding wxDefaultSize.
-    // Note that it does not influence the value returned by GetBestSize
-    // at all.
-    void SetBestSize(const wxSize& size);
 
+    // Used to save the results of DoGetBestSize so it doesn't need to be
+    // recalculated each time the value is needed.
+    wxSize m_bestSizeCache;
+
+    // keep the old name for compatibility, at least until all the internal
+    // usages of it are changed to SetBestFittingSize
+    void SetBestSize(const wxSize& size) { SetBestFittingSize(size); }
+        
     // set the initial window size if none is given (i.e. at least one of the
     // components of the size passed to ctor/Create() is -1)
     //
@@ -1149,6 +1193,7 @@ protected:
     // can be accurately calculated
     virtual void SetInitialBestSize(const wxSize& WXUNUSED(size)) {}
 
+    
 
     // more pure virtual functions
     // ---------------------------
@@ -1203,7 +1248,7 @@ protected:
 #endif // wxUSE_TOOLTIPS
 
 #if wxUSE_MENUS
-    virtual bool DoPopupMenu( wxMenu *menu, int x, int y ) = 0;
+    virtual bool DoPopupMenu(wxMenu *menu, int x, int y) = 0;
 #endif // wxUSE_MENUS
 
     // Makes an adjustment to the window position to make it relative to the
@@ -1222,10 +1267,6 @@ private:
     // the stack of windows which have captured the mouse
     static struct WXDLLEXPORT wxWindowNext *ms_winCaptureNext;
 
-    // implementation of both const and non-const versions of GetFont()
-    wxFont& DoGetFont() const;
-
-
     DECLARE_ABSTRACT_CLASS(wxWindowBase)
     DECLARE_NO_COPY_CLASS(wxWindowBase)
     DECLARE_EVENT_TABLE()