X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/29094af062083050334b348d447fcae7d513b62a..85f138db83939ce7c59a942aaecca7fa98168db3:/include/wx/window.h diff --git a/include/wx/window.h b/include/wx/window.h index 97b35334c0..a407cbbb04 100644 --- a/include/wx/window.h +++ b/include/wx/window.h @@ -230,9 +230,6 @@ public: void Move(const wxPoint& pt, int flags = wxSIZE_USE_EXISTING) { Move(pt.x, pt.y, flags); } - // A 'Smart' SetSize that will fill in default size values with 'best' size - void SetBestFittingSize(const wxSize& size=wxDefaultSize); - // Z-order virtual void Raise() = 0; virtual void Lower() = 0; @@ -297,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 @@ -315,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 @@ -495,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 // ------------------------- @@ -515,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) @@ -707,31 +733,36 @@ 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/get the background style. + // Pass one of wxBG_STYLE_SYSTEM, wxBG_STYLE_COLOUR, wxBG_STYLE_CUSTOM + virtual bool SetBackgroundStyle(wxBackgroundStyle style) { m_backgroundStyle = style; return true; } + virtual wxBackgroundStyle GetBackgroundStyle() const { return m_backgroundStyle; } + // 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; } wxFont GetFont() const; @@ -880,6 +911,10 @@ public: // get the associated tooltip or NULL if none wxToolTip* GetToolTip() const { return m_tooltip; } wxString GetToolTipText() const ; +#else + // make it much easier to compile apps in an environment + // that doesn't support tooltips, such as PocketPC + inline void SetToolTip( const wxString & WXUNUSED(tip) ) {} #endif // wxUSE_TOOLTIPS // drag and drop @@ -1013,6 +1048,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 @@ -1102,13 +1144,18 @@ 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, m_exStyle; wxString m_windowName; bool m_themeEnabled; - + wxBackgroundStyle m_backgroundStyle; #if wxUSE_PALETTE wxPalette m_palette; bool m_hasCustomPalette; @@ -1137,11 +1184,15 @@ protected: static int WidthDefault(int w) { return w == -1 ? 20 : w; } static int HeightDefault(int h) { return h == -1 ? 20 : h; } + + // 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) // @@ -1151,6 +1202,7 @@ protected: // can be accurately calculated virtual void SetInitialBestSize(const wxSize& WXUNUSED(size)) {} + // more pure virtual functions // ---------------------------