virtual void SetExtraStyle(long exStyle) { m_exStyle = exStyle; }
long GetExtraStyle() const { return m_exStyle; }
+ bool HasExtraStyle(int exFlag) const { return (m_exStyle & exFlag) != 0; }
+
// make the window modal (all other windows unresponsive)
virtual void MakeModal(bool modal = true);
static wxWindow *DoFindFocus() /* = 0: implement in derived classes */;
- // can this window have focus?
- virtual bool AcceptsFocus() const { return IsShown() && IsEnabled(); }
+ // can this window have focus in principle?
+ //
+ // the difference between AcceptsFocus[FromKeyboard]() and CanAcceptFocus
+ // [FromKeyboard]() is that the former functions are meant to be
+ // overridden in the derived classes to simply return false if the
+ // control can't have focus, while the latter are meant to be used by
+ // this class clients and take into account the current window state
+ virtual bool AcceptsFocus() const { return true; }
+
+ // can this window have focus right now?
+ bool CanAcceptFocus() const { return AcceptsFocus() && IsShown() && IsEnabled(); }
// can this window be given focus by keyboard navigation? if not, the
// only way to give it focus (provided it accepts it at all) is to
// click it
virtual bool AcceptsFocusFromKeyboard() const { return AcceptsFocus(); }
- // navigates in the specified direction by sending a wxNavigationKeyEvent
- virtual bool Navigate(int flags = wxNavigationKeyEvent::IsForward);
+ // can this window be assigned focus from keyboard right now?
+ bool CanAcceptFocusFromKeyboard() const
+ { return AcceptsFocusFromKeyboard() && CanAcceptFocus(); }
+
+ // call this when the return value of AcceptsFocus() changes
+ virtual void SetCanFocus(bool WXUNUSED(canFocus)) { }
+
+ // navigates inside this window
+ bool NavigateIn(int flags = wxNavigationKeyEvent::IsForward)
+ { return DoNavigateIn(flags); }
+
+ // navigates in the specified direction from this window, this is
+ // equivalent to GetParent()->NavigateIn()
+ bool Navigate(int flags = wxNavigationKeyEvent::IsForward)
+ { return m_parent && ((wxWindowBase *)m_parent)->DoNavigateIn(flags); }
// move this window just before/after the specified one in tab order
// (the other window must be our sibling!)
void SetAccessible(wxAccessible* accessible) ;
// Returns the accessible object.
- wxAccessible* GetAccessible() { return m_accessible; };
+ wxAccessible* GetAccessible() { return m_accessible; }
// Returns the accessible object, creating if necessary.
wxAccessible* GetOrCreateAccessible() ;
};
virtual void DoMoveInTabOrder(wxWindow *win, MoveKind move);
+ // implementation of Navigate() and NavigateIn()
+ virtual bool DoNavigateIn(int flags);
+
+
#if wxUSE_CONSTRAINTS
// satisfy the constraints for the windows but don't set the window sizes
void SatisfyConstraints();