All (GUI):
+- added wxWindow::MoveBefore/AfterInTabOrder() to change tab navigation order
- added wxTaskBarIcon::CreatePopupMenu which is now recommended way
of showing popup menu; calling wxTaskBarIcon::PopupMenu directly
is discouraged
-- Added ..._CMD_...(id) variants for wxGrid event table entry macros
-- Added wxWindow::Navigate for programmatic navigation to the next control.
+- added ..._CMD_...(id) variants for wxGrid event table entry macros
+- added wxWindow::Navigate for programmatic navigation to the next control.
- wxTextCtrl::OnChar now inserts a tab character if wxTE_PROCESS_TAB is set
- added wxKeyEvent::GetUnicodeKey()
- added wxKeyEvent::CmdDown() and wxMouseEvent::CmdDown()
\end{twocollist}}
}
+
+\membersection{wxWindow::MoveAfterInTabOrder}\label{wxwindowmoveafterintaborder}
+
+\func{void}{MoveAfterInTabOrder}{\param{wxWindow *}{win}}
+
+Moves this window in the tab navigation order after the specified \arg{win}.
+This means that when the user presses \texttt{TAB} key on that other window,
+the focus switches to this window.
+
+Default tab order is the same as creation order, this function and
+\helpref{MoveBeforeInTabOrder()}{wxwindowmovebeforeintaborder} allow to change
+it after creating all the windows.
+
+\wxheading{Parameters}
+
+\docparam{win}{A sibling of this window which should precede it in tab order,
+must not be NULL}
+
+
+\membersection{wxWindow::MoveBeforeInTabOrder}\label{wxwindowmovebeforeintaborder}
+
+\func{void}{MoveBeforeInTabOrder}{\param{wxWindow *}{win}}
+
+Same as \helpref{MoveAfterInTabOrder}{wxwindowmoveafterintaborder} except that
+it inserts this window just before \arg{win} instead of putting it right after
+it.
+
+
\membersection{wxWindow::Navigate}\label{wxwindownavigate}
\func{bool}{Navigate}{\param{int}{ flags = wxNavigationKeyEvent::IsForward}}
// 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
// -------------------------
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
}
// ----------------------------------------------------------------------------
-// navigation
+// keyboard navigation
// ----------------------------------------------------------------------------
// Navigates in the specified direction.
return false;
}
+void wxWindowBase::DoMoveInTabOrder(wxWindow *win, MoveKind move)
+{
+ // check that we're not a top level window
+ wxCHECK_RET( GetParent(),
+ _T("MoveBefore/AfterInTabOrder() don't work for TLWs!") );
+
+ // find the target window in the siblings list
+ wxWindowList& siblings = GetParent()->GetChildren();
+ wxWindowList::compatibility_iterator i = siblings.Find(win);
+ wxCHECK_RET( i, _T("MoveBefore/AfterInTabOrder(): win is not a sibling") );
+
+ // unfortunately, when wxUSE_STL == 1 DetachNode() is not implemented so we
+ // can't just move the node around
+ siblings.DeleteObject(this);
+ if ( move == MoveBefore || ((i = i->GetNext()) != NULL) )
+ {
+ siblings.Insert(i, this);
+ }
+ else // MoveAfter and win was the last sibling
+ {
+ siblings.Append(this);
+ }
+}
+
// ----------------------------------------------------------------------------
// global functions
// ----------------------------------------------------------------------------