X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/49f1dc5e8a15653df6e4ca8144e4c22a9fb5e168..4aae4a085cf105551590b2a999758e0762743352:/include/wx/window.h diff --git a/include/wx/window.h b/include/wx/window.h index 87dc4cc691..247786e090 100644 --- a/include/wx/window.h +++ b/include/wx/window.h @@ -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 @@ -492,9 +513,17 @@ public: // set this child as temporary default virtual void SetTmpDefaultItem(wxWindow * WXUNUSED(win)) { } - // Navigates in the specified direction by sending a wxNavigationKeyEvent + // 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 // ------------------------- @@ -512,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) @@ -704,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 @@ -1012,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 @@ -1101,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, @@ -1136,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) // @@ -1155,6 +1193,7 @@ protected: // can be accurately calculated virtual void SetInitialBestSize(const wxSize& WXUNUSED(size)) {} + // more pure virtual functions // --------------------------- @@ -1228,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()