void CocoaAddChild(wxWindowCocoa *child);
void CocoaRemoveFromParent(void);
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 InitMouseEvent(wxMouseEvent &event, WX_NSEvent cocoaEvent);
virtual void Cocoa_FrameChanged(void);
// NOTE: typically Close() is not virtual, but we want this for Cocoa
virtual bool Close( bool force = false );
virtual bool Show( bool show = true );
+ virtual bool Enable( bool enable = true );
};
#endif // __WX_COCOA_WINDOW_H__
m_cocoaScroller = NULL;
m_isBeingDeleted = FALSE;
m_isInPaint = FALSE;
+ m_shouldBeEnabled = true;
}
// Constructor
[[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)
{
wxAutoNSAutoreleasePool pool;