Added machinery to Enable/Disable windows. When a window is disabled, it
disables all of its children. Every window maintains a bool indicating whether it should be enabled (i.e. Enable() was called on it directly). When a window is reenabled, it reenables children, but only if they are actually supposed to be enabled. Override CocoaSetEnabled() in subclasses to actually enable/disable a Cocoa control. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@23014 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -68,6 +68,14 @@ public:
|
|||||||
void CocoaAddChild(wxWindowCocoa *child);
|
void CocoaAddChild(wxWindowCocoa *child);
|
||||||
void CocoaRemoveFromParent(void);
|
void CocoaRemoveFromParent(void);
|
||||||
protected:
|
protected:
|
||||||
|
// enable==false: disables the control
|
||||||
|
// enable==true: enables the control IF it should be enabled
|
||||||
|
bool EnableSelfAndChildren(bool enable);
|
||||||
|
// actually enable/disable the cocoa control, overridden by subclasses
|
||||||
|
virtual void CocoaSetEnabled(bool enable) { }
|
||||||
|
// Reflects the state for THIS window (ignoring disables by parents)
|
||||||
|
bool m_shouldBeEnabled;
|
||||||
|
|
||||||
void CocoaCreateNSScrollView();
|
void CocoaCreateNSScrollView();
|
||||||
void InitMouseEvent(wxMouseEvent &event, WX_NSEvent cocoaEvent);
|
void InitMouseEvent(wxMouseEvent &event, WX_NSEvent cocoaEvent);
|
||||||
virtual void Cocoa_FrameChanged(void);
|
virtual void Cocoa_FrameChanged(void);
|
||||||
@@ -164,6 +172,7 @@ public:
|
|||||||
// NOTE: typically Close() is not virtual, but we want this for Cocoa
|
// NOTE: typically Close() is not virtual, but we want this for Cocoa
|
||||||
virtual bool Close( bool force = false );
|
virtual bool Close( bool force = false );
|
||||||
virtual bool Show( bool show = true );
|
virtual bool Show( bool show = true );
|
||||||
|
virtual bool Enable( bool enable = true );
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // __WX_COCOA_WINDOW_H__
|
#endif // __WX_COCOA_WINDOW_H__
|
||||||
|
@@ -202,6 +202,7 @@ void wxWindowCocoa::Init()
|
|||||||
m_cocoaScroller = NULL;
|
m_cocoaScroller = NULL;
|
||||||
m_isBeingDeleted = FALSE;
|
m_isBeingDeleted = FALSE;
|
||||||
m_isInPaint = FALSE;
|
m_isInPaint = FALSE;
|
||||||
|
m_shouldBeEnabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
@@ -416,6 +417,34 @@ void wxWindow::CocoaReplaceView(WX_NSView oldView, WX_NSView newView)
|
|||||||
[[oldView superview] replaceSubview:oldView with:newView];
|
[[oldView superview] replaceSubview:oldView with:newView];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool wxWindow::EnableSelfAndChildren(bool enable)
|
||||||
|
{
|
||||||
|
// If the state isn't changing, don't do anything
|
||||||
|
if(!wxWindowBase::Enable(enable && m_shouldBeEnabled))
|
||||||
|
return false;
|
||||||
|
// Set the state of the Cocoa window
|
||||||
|
CocoaSetEnabled(m_isEnabled);
|
||||||
|
// Disable all children or (if enabling) return them to their proper state
|
||||||
|
for(wxWindowList::compatibility_iterator node = GetChildren().GetFirst();
|
||||||
|
node; node = node->GetNext())
|
||||||
|
{
|
||||||
|
node->GetData()->EnableSelfAndChildren(enable);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxWindow::Enable(bool enable)
|
||||||
|
{
|
||||||
|
// Keep track of what the window SHOULD be doing
|
||||||
|
m_shouldBeEnabled = enable;
|
||||||
|
// If the parent is disabled for any reason, then this window will be too.
|
||||||
|
if(!IsTopLevel() && GetParent())
|
||||||
|
{
|
||||||
|
enable = enable && GetParent()->IsEnabled();
|
||||||
|
}
|
||||||
|
return EnableSelfAndChildren(enable);
|
||||||
|
}
|
||||||
|
|
||||||
bool wxWindow::Show(bool show)
|
bool wxWindow::Show(bool show)
|
||||||
{
|
{
|
||||||
wxAutoNSAutoreleasePool pool;
|
wxAutoNSAutoreleasePool pool;
|
||||||
|
Reference in New Issue
Block a user