make IsEnabled() return false even if the window parent, and not the window itself, is disabled and added IsThisEnabled() implementing the old IsEnabled() behaviour; also significantly simplify the window state management code in all ports by factoring out the common parts in wxWindowBase
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45031 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -49,6 +49,19 @@
|
||||
#define wxUSE_MENUS_NATIVE wxUSE_MENUS
|
||||
#endif // __WXUNIVERSAL__/!__WXUNIVERSAL__
|
||||
|
||||
|
||||
// Define this macro if the corresponding operating system handles the state
|
||||
// of children windows automatically when the parent is enabled/disabled.
|
||||
// Otherwise wx itself must ensure that when the parent is disabled its
|
||||
// children are disabled too, and their initial state is restored when the
|
||||
// parent is enabled back.
|
||||
#if defined(__WXMSW__) || defined(__WXPM__)
|
||||
// must do everything ourselves
|
||||
#undef wxHAS_NATIVE_ENABLED_MANAGEMENT
|
||||
#else
|
||||
#define wxHAS_NATIVE_ENABLED_MANAGEMENT
|
||||
#endif
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// forward declarations
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -366,7 +379,7 @@ public:
|
||||
void SetInitialSize(const wxSize& size=wxDefaultSize);
|
||||
wxDEPRECATED( void SetBestFittingSize(const wxSize& size=wxDefaultSize) ); // replaced by SetInitialSize
|
||||
|
||||
|
||||
|
||||
// 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
|
||||
@@ -389,7 +402,7 @@ public:
|
||||
// and it is therefore overridden in wxTLW to do that.
|
||||
// In wxWindow(Base), it has (unfortunately) been abused
|
||||
// to mean the same as SetMinSize() and SetMaxSize().
|
||||
|
||||
|
||||
virtual void SetSizeHints( int minW, int minH,
|
||||
int maxW = wxDefaultCoord, int maxH = wxDefaultCoord,
|
||||
int incW = wxDefaultCoord, int incH = wxDefaultCoord )
|
||||
@@ -416,14 +429,14 @@ public:
|
||||
}
|
||||
|
||||
|
||||
// Call these to override what GetBestSize() returns. This
|
||||
// Call these to override what GetBestSize() returns. This
|
||||
// method is only virtual because it is overriden in wxTLW
|
||||
// as a different API for SetSizeHints().
|
||||
virtual void SetMinSize(const wxSize& minSize) { m_minWidth = minSize.x; m_minHeight = minSize.y; }
|
||||
virtual void SetMaxSize(const wxSize& maxSize) { m_maxWidth = maxSize.x; m_maxHeight = maxSize.y; }
|
||||
|
||||
// Override these methods to impose restrictions on min/max size.
|
||||
// The easier way is to call SetMinSize() and SetMaxSize() which
|
||||
// The easier way is to call SetMinSize() and SetMaxSize() which
|
||||
// will have the same effect. Doing both is non-sense.
|
||||
virtual wxSize GetMinSize() const { return wxSize(m_minWidth, m_minHeight); }
|
||||
virtual wxSize GetMaxSize() const { return wxSize(m_maxWidth, m_maxHeight); }
|
||||
@@ -491,7 +504,21 @@ public:
|
||||
bool Disable() { return Enable(false); }
|
||||
|
||||
virtual bool IsShown() const { return m_isShown; }
|
||||
virtual bool IsEnabled() const { return m_isEnabled; }
|
||||
// returns true if the window is really enabled and false otherwise,
|
||||
// whether because it had been explicitly disabled itself or because
|
||||
// its parent is currently disabled -- then this method returns false
|
||||
// whatever is the intrinsic state of this window, use IsThisEnabled(0
|
||||
// to retrieve it. In other words, this relation always holds:
|
||||
//
|
||||
// IsEnabled() == IsThisEnabled() && parent.IsEnabled()
|
||||
//
|
||||
bool IsEnabled() const;
|
||||
|
||||
// returns the internal window state independently of the parent(s)
|
||||
// state, i.e. the state in which the window would be if all its
|
||||
// parents were enabled (use IsEnabled() above to get the effective
|
||||
// window state)
|
||||
bool IsThisEnabled() const { return m_isEnabled; }
|
||||
|
||||
// returns true if the window is visible, i.e. IsShown() returns true
|
||||
// if called on it and all its parents up to the first TLW
|
||||
@@ -1174,6 +1201,18 @@ protected:
|
||||
virtual wxWindow *GetMainWindowOfCompositeControl()
|
||||
{ return (wxWindow*)this; }
|
||||
|
||||
// this method should be implemented to use operating system specific code
|
||||
// to really enable/disable the widget, it will only be called when we
|
||||
// really need to enable/disable window and so no additional checks on the
|
||||
// widgets state are necessary
|
||||
virtual void DoEnable(bool WXUNUSED(enable)) { }
|
||||
|
||||
// called when the on-screen widget state changes and provides an
|
||||
// an opportunity for the widget to update its visual state (colours,
|
||||
// fonts, anything else) as necessary
|
||||
virtual void OnEnabled(bool WXUNUSED(enabled)) { }
|
||||
|
||||
|
||||
// the window id - a number which uniquely identifies a window among
|
||||
// its siblings unless it is wxID_ANY
|
||||
wxWindowID m_windowId;
|
||||
@@ -1394,6 +1433,12 @@ protected:
|
||||
static void NotifyCaptureLost();
|
||||
|
||||
private:
|
||||
// recursively call our own and our children OnEnabled() when the
|
||||
// enabled/disabled status changed because a parent window had been
|
||||
// enabled/disabled
|
||||
void NotifyWindowOnEnableChange(bool enabled);
|
||||
|
||||
|
||||
// contains the last id generated by NewControlId
|
||||
static int ms_lastControlId;
|
||||
|
||||
|
Reference in New Issue
Block a user