wxControlContainer(wxWindow *winParent = NULL);
void SetContainerWindow(wxWindow *winParent) { m_winParent = winParent; }
- // default item access: we have a permanent default item which is the one
- // set by the user code but we may also have a temporary default item which
- // would be chosen if the user pressed "Enter" now but the default action
- // reverts to the "permanent" default as soon as this temporary default
- // item lsoes focus
-
- // get the default item, temporary or permanent
- wxWindow *GetDefaultItem() const
- { return m_winTmpDefault ? m_winTmpDefault : m_winDefault; }
-
- // set the permanent default item, return its old value
- wxWindow *SetDefaultItem(wxWindow *win)
- { wxWindow *winOld = m_winDefault; m_winDefault = win; return winOld; }
-
- // set a temporary default item, SetTmpDefaultItem(NULL) should be called
- // soon after a call to SetTmpDefaultItem(window)
- void SetTmpDefaultItem(wxWindow *win) { m_winTmpDefault = win; }
-
- // return the temporary default item, can be NULL
- wxWindow *GetTmpDefaultItem() const { return m_winTmpDefault; }
-
-
// the methods to be called from the window event handlers
void HandleOnNavigationKey(wxNavigationKeyEvent& event);
void HandleOnFocus(wxFocusEvent& event);
// the child which had the focus last time this panel was activated
wxWindow *m_winLastFocused;
- // a default window (usually a button) or NULL
- wxWindow *m_winDefault;
-
- // a temporary override of m_winDefault, use the latter if NULL
- wxWindow *m_winTmpDefault;
-
// a guard against infinite recursion
bool m_inSetFocus;
virtual void SetFocus(); \
virtual void SetFocusIgnoringChildren(); \
virtual void RemoveChild(wxWindowBase *child); \
- virtual wxWindow *GetDefaultItem() const; \
- virtual wxWindow *SetDefaultItem(wxWindow *child); \
- virtual void SetTmpDefaultItem(wxWindow *win); \
- virtual wxWindow *GetTmpDefaultItem() const; \
virtual bool AcceptsFocus() const; \
\
protected: \
EVT_NAVIGATION_KEY(classname::OnNavigationKey)
// implement the methods forwarding to the wxControlContainer
-#define WX_DELEGATE_TO_CONTROL_CONTAINER(classname) \
-wxWindow *classname::SetDefaultItem(wxWindow *child) \
-{ \
- return m_container.SetDefaultItem(child); \
-} \
- \
-void classname::SetTmpDefaultItem(wxWindow *child) \
-{ \
- m_container.SetTmpDefaultItem(child); \
-} \
- \
-wxWindow *classname::GetDefaultItem() const \
-{ \
- return m_container.GetDefaultItem(); \
-} \
- \
-wxWindow *classname::GetTmpDefaultItem() const \
-{ \
- return m_container.GetTmpDefaultItem(); \
-} \
- \
+#define WX_DELEGATE_TO_CONTROL_CONTAINER(classname, basename) \
void classname::OnNavigationKey( wxNavigationKeyEvent& event ) \
{ \
m_container.HandleOnNavigationKey(event); \
{ \
m_container.HandleOnWindowDestroy(child); \
\
- wxWindow::RemoveChild(child); \
+ basename::RemoveChild(child); \
} \
\
void classname::SetFocus() \
{ \
if ( !m_container.DoSetFocus() ) \
- wxWindow::SetFocus(); \
+ basename::SetFocus(); \
} \
\
void classname::SetFocusIgnoringChildren() \
{ \
- wxWindow::SetFocus(); \
+ basename::SetFocus(); \
} \
\
void classname::OnChildFocus(wxChildFocusEvent& event) \
virtual bool SetTransparent(wxByte WXUNUSED(alpha)) { return false; }
virtual bool CanSetTransparent() { return false; }
-
+
+ // default item access: we have a permanent default item which is the one
+ // set by the user code but we may also have a temporary default item which
+ // would be chosen if the user pressed "Enter" now but the default action
+ // reverts to the "permanent" default as soon as this temporary default
+ // item loses focus
+
+ // used to reset default if pointing to removed child
+ virtual void RemoveChild(wxWindowBase *child);
+
+ // get the default item, temporary or permanent
+ wxWindow *GetDefaultItem() const
+ { return m_winTmpDefault ? m_winTmpDefault : m_winDefault; }
+
+ // set the permanent default item, return the old default
+ wxWindow *SetDefaultItem(wxWindow *win)
+ { wxWindow *old = GetDefaultItem(); m_winDefault = win; return old; }
+
+ // return the temporary default item, can be NULL
+ wxWindow *GetTmpDefaultItem() const { return m_winTmpDefault; }
+
+ // set a temporary default item, SetTmpDefaultItem(NULL) should be called
+ // soon after a call to SetTmpDefaultItem(window), return the old default
+ wxWindow *SetTmpDefaultItem(wxWindow *win)
+ { wxWindow *old = GetDefaultItem(); m_winTmpDefault = win; return old; }
+
+
// implementation only from now on
// -------------------------------
// the frame icon
wxIconBundle m_icons;
+ // a default window (usually a button) or NULL
+ wxWindow *m_winDefault;
+
+ // a temporary override of m_winDefault, use the latter if NULL
+ wxWindow *m_winTmpDefault;
+
DECLARE_NO_COPY_CLASS(wxTopLevelWindowBase)
DECLARE_EVENT_TABLE()
};
// click it
virtual bool AcceptsFocusFromKeyboard() const { return AcceptsFocus(); }
- // NB: these methods really don't belong here but with the current
- // class hierarchy there is no other place for them :-(
-
- // get the default child of this parent, i.e. the one which is
- // activated by pressing <Enter>
- virtual wxWindow *GetDefaultItem() const { return NULL; }
-
- // set this child as default, return the old default
- virtual wxWindow *SetDefaultItem(wxWindow * WXUNUSED(child))
- { return NULL; }
-
- // set this child as temporary default
- virtual void SetTmpDefaultItem(wxWindow * WXUNUSED(win)) { }
-
- // return the temporary default item, can be NULL
- virtual wxWindow *GetTmpDefaultItem() const { return NULL; }
-
// navigates in the specified direction by sending a wxNavigationKeyEvent
virtual bool Navigate(int flags = wxNavigationKeyEvent::IsForward);
wxControlContainer::wxControlContainer(wxWindow *winParent)
{
m_winParent = winParent;
-
- m_winLastFocused =
- m_winTmpDefault =
- m_winDefault = NULL;
+ m_winLastFocused = NULL;
m_inSetFocus = false;
}
{
if ( child == m_winLastFocused )
m_winLastFocused = NULL;
-
- if ( child == m_winDefault )
- m_winDefault = NULL;
-
- if ( child == m_winTmpDefault )
- m_winTmpDefault = NULL;
}
// ----------------------------------------------------------------------------
WX_EVENT_TABLE_CONTROL_CONTAINER(wxDialogBase)
END_EVENT_TABLE()
-WX_DELEGATE_TO_CONTROL_CONTAINER(wxDialogBase)
+WX_DELEGATE_TO_CONTROL_CONTAINER(wxDialogBase, wxTopLevelWindow)
#endif
void wxDialogBase::Init()
EVT_SIZE(wxPickerBase::OnSize)
WX_EVENT_TABLE_CONTROL_CONTAINER(wxPickerBase)
END_EVENT_TABLE()
-WX_DELEGATE_TO_CONTROL_CONTAINER(wxPickerBase)
+WX_DELEGATE_TO_CONTROL_CONTAINER(wxPickerBase, wxControl)
// ----------------------------------------------------------------------------
{
// Unlike windows, top level windows are created hidden by default.
m_isShown = false;
+ m_winDefault = NULL;
+ m_winTmpDefault = NULL;
}
wxTopLevelWindowBase::~wxTopLevelWindowBase()
// it's probably better than do nothing, isn't it?
Raise();
}
+
+void wxTopLevelWindowBase::RemoveChild(wxWindowBase *child)
+{
+ if ( child == m_winDefault )
+ m_winDefault = NULL;
+
+ if ( child == m_winTmpDefault )
+ m_winTmpDefault = NULL;
+
+ wxWindow::RemoveChild(child);
+}
// reset the dangling pointer our parent window may keep to us
if ( m_parent )
{
- if ( m_parent->GetDefaultItem() == this )
- {
- m_parent->SetDefaultItem(NULL);
- }
-
m_parent->RemoveChild(this);
}
// implementation
// ============================================================================
-WX_DELEGATE_TO_CONTROL_CONTAINER(wxPanel)
+WX_DELEGATE_TO_CONTROL_CONTAINER(wxPanel, wxWindow)
// ----------------------------------------------------------------------------
// wxPanel creation
WX_EVENT_TABLE_CONTROL_CONTAINER(wxSplitterWindow)
END_EVENT_TABLE()
-WX_DELEGATE_TO_CONTROL_CONTAINER(wxSplitterWindow)
+WX_DELEGATE_TO_CONTROL_CONTAINER(wxSplitterWindow, wxWindow)
bool wxSplitterWindow::Create(wxWindow *parent, wxWindowID id,
const wxPoint& pos,
void wxButton::SetDefault()
{
- wxWindow *parent = GetParent();
- wxCHECK_RET( parent, _T("button without parent?") );
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
+ wxCHECK_RET( tlw, _T("button without top level window?") );
- parent->SetDefaultItem(this);
+ tlw->SetDefaultItem(this);
GTK_WIDGET_SET_FLAGS( m_widget, GTK_CAN_DEFAULT );
gtk_widget_grab_default( m_widget );
void wxButton::SetDefault()
{
- wxWindow *parent = GetParent();
- wxCHECK_RET( parent, _T("button without parent?") );
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
+ wxCHECK_RET( tlw, _T("button without top level window?") );
- parent->SetDefaultItem(this);
+ tlw->SetDefaultItem(this);
GTK_WIDGET_SET_FLAGS( m_widget, GTK_CAN_DEFAULT );
gtk_widget_grab_default( m_widget );
{
if ( keyval == WXK_RETURN )
{
- wxButton *def = wxDynamicCast(focus->GetDefaultItem(), wxButton);
- if ( def && def->IsEnabled() )
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(focus), wxTopLevelWindow);
+ if ( tlw && tlw->GetDefaultItem() )
{
- wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() );
- event.SetEventObject(def);
- def->Command(event);
+ wxButton *def = wxDynamicCast(tlw->GetDefaultItem(), wxButton);
+ if ( def && def->IsEnabled() )
+ {
+ wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() );
+ event.SetEventObject(def);
+ def->Command(event);
- return true ;
+ return true ;
+ }
}
}
else if (keyval == WXK_ESCAPE || (keyval == '.' && modifiers & cmdKey ) )
void wxButton::SetDefault()
{
- wxWindow *parent = GetParent();
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
wxButton *btnOldDefault = NULL;
-
- if ( parent )
+ if ( tlw )
{
- btnOldDefault = wxDynamicCast(parent->GetDefaultItem(), wxButton);
- parent->SetDefaultItem(this);
+ btnOldDefault = wxDynamicCast(tlw->GetDefaultItem(), wxButton);
+ tlw->SetDefaultItem(this);
}
if ( btnOldDefault )
IMPLEMENT_DYNAMIC_CLASS(wxComboBox, wxControl)
-WX_DELEGATE_TO_CONTROL_CONTAINER(wxComboBox)
+WX_DELEGATE_TO_CONTROL_CONTAINER(wxComboBox, wxControl)
BEGIN_EVENT_TABLE(wxComboBox, wxControl)
WX_EVENT_TABLE_CONTROL_CONTAINER(wxComboBox)
// such as the clicking the default button.
if (!m_cb->GetEventHandler()->ProcessEvent( event ))
{
- wxWindow *parent = GetParent();
- while ( parent && !parent->IsTopLevel() && parent->GetDefaultItem() == NULL )
- parent = parent->GetParent() ;
-
- if ( parent && parent->GetDefaultItem() )
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
+ if ( tlw && tlw->GetDefaultItem() )
{
- wxButton *def = wxDynamicCast(parent->GetDefaultItem(), wxButton);
+ wxButton *def = wxDynamicCast(tlw->GetDefaultItem(), wxButton);
if ( def && def->IsEnabled() )
{
wxCommandEvent event( wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() );
// This will invoke the dialog default action, such
// as the clicking the default button.
- wxWindow *parent = GetParent();
- while( parent && !parent->IsTopLevel() && parent->GetDefaultItem() == NULL ) {
- parent = parent->GetParent();
- }
- if ( parent && parent->GetDefaultItem() )
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
+ if ( tlw && tlw->GetDefaultItem() )
{
- wxButton *def = wxDynamicCast(parent->GetDefaultItem(),
- wxButton);
+ wxButton *def = wxDynamicCast(tlw->GetDefaultItem(), wxButton);
if ( def && def->IsEnabled() )
{
wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() );
WX_EVENT_TABLE_CONTROL_CONTAINER(wxSpinCtrl)
END_EVENT_TABLE()
-WX_DELEGATE_TO_CONTROL_CONTAINER(wxSpinCtrl)
+WX_DELEGATE_TO_CONTROL_CONTAINER(wxSpinCtrl, wxControl)
// ============================================================================
if ( !(m_windowStyle & wxTE_MULTILINE) )
{
- wxWindow *parent = GetParent();
- while ( parent && !parent->IsTopLevel() && parent->GetDefaultItem() == NULL )
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
+ if ( tlw && tlw->GetDefaultItem() )
{
- parent = parent->GetParent() ;
- }
-
- if ( parent && parent->GetDefaultItem() )
- {
- wxButton *def = wxDynamicCast(parent->GetDefaultItem(), wxButton);
+ wxButton *def = wxDynamicCast(tlw->GetDefaultItem(), wxButton);
if ( def && def->IsEnabled() )
{
wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() );
// wxRemoveMacControlAssociation( this ) ;
// If we delete an item, we should initialize the parent panel,
// because it could now be invalid.
- wxWindow *parent = GetParent() ;
- if ( parent )
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
+ if ( tlw )
{
- if (parent->GetDefaultItem() == (wxButton*) this)
- parent->SetDefaultItem(NULL);
+ if ( tlw->GetDefaultItem() == (wxButton*) this)
+ tlw->SetDefaultItem(NULL);
}
if ( m_peer && m_peer->Ok() )
// backdoor handler for default return and command escape
if ( !handled && (!focus->IsKindOf(CLASSINFO(wxControl) ) || !focus->MacCanFocus() ) )
{
- // if window is not having a focus still testing for default enter or cancel
- // TODO add the UMA version for ActiveNonFloatingWindow
- wxWindow* focus = wxFindWinFromMacWindow( (WXWindow) FrontWindow() ) ;
- if ( focus )
- {
+ // if window is not having a focus still testing for default enter or cancel
+ // TODO add the UMA version for ActiveNonFloatingWindow
+ wxWindow* focus = wxFindWinFromMacWindow( (WXWindow) FrontWindow() ) ;
+ if ( focus )
+ {
if ( keyval == WXK_RETURN )
{
- wxButton *def = wxDynamicCast(focus->GetDefaultItem(),
- wxButton);
- if ( def && def->IsEnabled() )
- {
- wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() );
- event.SetEventObject(def);
- def->Command(event);
- return true ;
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
+ if ( tlw && tlw->GetDefaultItem() )
+ {
+ wxButton *def = wxDynamicCast(tlw->GetDefaultItem(), wxButton);
+ if ( def && def->IsEnabled() )
+ {
+ wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() );
+ event.SetEventObject(def);
+ def->Command(event);
+ return true ;
+ }
}
}
/* generate wxID_CANCEL if command-. or <esc> has been pressed (typically in dialogs) */
else if (keyval == WXK_ESCAPE || (keyval == '.' && modifiers & cmdKey ) )
{
- wxCommandEvent new_event(wxEVT_COMMAND_BUTTON_CLICKED,wxID_CANCEL);
- new_event.SetEventObject( focus );
- handled = focus->GetEventHandler()->ProcessEvent( new_event );
+ wxCommandEvent new_event(wxEVT_COMMAND_BUTTON_CLICKED,wxID_CANCEL);
+ new_event.SetEventObject( focus );
+ handled = focus->GetEventHandler()->ProcessEvent( new_event );
}
- }
+ }
}
return handled ;
}
void wxButton::SetDefault()
{
- wxWindow *parent = GetParent();
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
wxButton *btnOldDefault = NULL;
- if ( parent )
+ if ( tlw )
{
- btnOldDefault = wxDynamicCast(parent->GetDefaultItem(),
- wxButton);
- parent->SetDefaultItem(this);
+ btnOldDefault = wxDynamicCast(tlw->GetDefaultItem(), wxButton);
+ tlw->SetDefaultItem(this);
}
Boolean inData;
// This will invoke the dialog default action, such
// as the clicking the default button.
- wxWindow *parent = GetParent();
- while( parent && !parent->IsTopLevel() && parent->GetDefaultItem() == NULL ) {
- parent = parent->GetParent() ;
- }
- if ( parent && parent->GetDefaultItem() )
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
+ if ( tlw && tlw->GetDefaultItem() )
{
- wxButton *def = wxDynamicCast(parent->GetDefaultItem(),
- wxButton);
+ wxButton *def = wxDynamicCast(tlw->GetDefaultItem(), wxButton);
if ( def && def->IsEnabled() )
{
wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() );
wxRemoveMacControlAssociation( this ) ;
// If we delete an item, we should initialize the parent panel,
// because it could now be invalid.
- wxWindow *parent = GetParent() ;
- if ( parent )
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
+ if ( tlw )
{
- if (parent->GetDefaultItem() == (wxButton*) this)
- parent->SetDefaultItem(NULL);
+ if ( tlw->GetDefaultItem() == (wxButton*) this)
+ tlw->SetDefaultItem(NULL);
}
if ( (ControlHandle) m_macControl )
{
{
if ( event.GetKeyCode() == WXK_RETURN || event.GetKeyCode() == WXK_NUMPAD_ENTER)
{
- wxWindow* parent = GetParent() ;
- while( parent && !parent->IsTopLevel() && parent->GetDefaultItem() == NULL )
- parent = parent->GetParent() ;
-
- if ( parent && parent->GetDefaultItem() )
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
+ if ( tlw && tlw->GetDefaultItem() )
{
- wxButton *def = wxDynamicCast(parent->GetDefaultItem(),
- wxButton);
+ wxButton *def = wxDynamicCast(tlw->GetDefaultItem(), wxButton);
if ( def && def->IsEnabled() )
{
wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() );
}
if ( !(m_windowStyle & wxTE_MULTILINE) )
{
- wxWindow *parent = GetParent();
- while( parent && !parent->IsTopLevel() && parent->GetDefaultItem() == NULL ) {
- parent = parent->GetParent() ;
- }
- if ( parent && parent->GetDefaultItem() )
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
+ if ( tlw && tlw->GetDefaultItem() )
{
- wxButton *def = wxDynamicCast(parent->GetDefaultItem(),
- wxButton);
+ wxButton *def = wxDynamicCast(tlw->GetDefaultItem(), wxButton);
if ( def && def->IsEnabled() )
{
wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() );
void wxButton::SetDefault()
{
- wxWindow *parent = GetParent();
- if ( parent )
- parent->SetDefaultItem(this);
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
+ if ( tlw )
+ tlw->SetDefaultItem(this);
// We initially do not set XmNdefaultShadowThickness, to have
// small buttons. Unfortunately, buttons are now mis-aligned. We
// wxButton in the same row, correction is straighforward: we set
// resource for all wxButton in this parent (but not sub panels)
+ wxWindow *parent = GetParent();
for (wxWindowList::compatibility_iterator node = parent->GetChildren().GetFirst ();
node; node = node->GetNext ())
{
wxButton::~wxButton()
{
- wxWindow *parent = GetParent();
- if ( parent && parent->GetTmpDefaultItem() == this )
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
+ if ( tlw && tlw->GetTmpDefaultItem() == this )
{
UnsetTmpDefault();
}
// set this button as the (permanently) default one in its panel
void wxButton::SetDefault()
{
- wxWindow *parent = GetParent();
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
- wxCHECK_RET( parent, _T("button without parent?") );
+ wxCHECK_RET( tlw, _T("button without top level window?") );
// set this one as the default button both for wxWidgets ...
- wxWindow *winOldDefault = parent->SetDefaultItem(this);
+ wxWindow *winOldDefault = tlw->SetDefaultItem(this);
// ... and Windows
SetDefaultStyle(wxDynamicCast(winOldDefault, wxButton), false);
// set this button as being currently default
void wxButton::SetTmpDefault()
{
- wxWindow *parent = GetParent();
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
- wxCHECK_RET( parent, _T("button without parent?") );
+ wxCHECK_RET( tlw, _T("button without top level window?") );
- wxWindow *winOldDefault = parent->GetDefaultItem();
- parent->SetTmpDefaultItem(this);
+ wxWindow *winOldDefault = tlw->GetDefaultItem();
+ tlw->SetTmpDefaultItem(this);
SetDefaultStyle(wxDynamicCast(winOldDefault, wxButton), false);
SetDefaultStyle(this, true);
// unset this button as currently default, it may still stay permanent default
void wxButton::UnsetTmpDefault()
{
- wxWindow *parent = GetParent();
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
- wxCHECK_RET( parent, _T("button without parent?") );
+ wxCHECK_RET( tlw, _T("button without top level window?") );
- parent->SetTmpDefaultItem(NULL);
+ tlw->SetTmpDefaultItem(NULL);
- wxWindow *winOldDefault = parent->GetDefaultItem();
+ wxWindow *winOldDefault = tlw->GetDefaultItem();
SetDefaultStyle(this, false);
SetDefaultStyle(wxDynamicCast(winOldDefault, wxButton), true);
if ( !wxTheApp->IsActive() )
return;
- wxWindow * const parent = btn->GetParent();
- wxCHECK_RET( parent, _T("button without parent?") );
+ wxWindow * const tlw = wxGetTopLevelParent(btn);
+ wxCHECK_RET( tlw, _T("button without top level window?") );
- ::SendMessage(GetHwndOf(parent), DM_SETDEFID, btn->GetId(), 0L);
+ ::SendMessage(GetHwndOf(tlw), DM_SETDEFID, btn->GetId(), 0L);
// sending DM_SETDEFID also changes the button style to
// BS_DEFPUSHBUTTON so there is nothing more to do
bool selected = (state & ODS_SELECTED) != 0;
if ( !selected )
{
- wxPanel *panel = wxDynamicCast(GetParent(), wxPanel);
- if ( panel )
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
+ if ( tlw )
{
- selected = panel->GetDefaultItem() == this;
+ selected = tlw->GetDefaultItem() == this;
}
}
bool pushed = (SendMessage(GetHwnd(), BM_GETSTATE, 0, 0) & BST_PUSHED) != 0;
else // not a button itself
{
#if wxUSE_BUTTON
- wxButton *btn = wxDynamicCast(GetDefaultItem(),
- wxButton);
- if ( btn && btn->IsEnabled() )
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
+ if ( tlw )
{
- // if we do have a default button, do press it
- btn->MSWCommand(BN_CLICKED, 0 /* unused */);
+ wxButton *btn = wxDynamicCast(tlw->GetDefaultItem(), wxButton);
+ if ( btn && btn->IsEnabled() )
+ {
+ // if we do have a default button, do press it
+ btn->MSWCommand(BN_CLICKED, 0 /* unused */);
- return true;
+ return true;
+ }
}
else // no default button
#endif // wxUSE_BUTTON
wxButton::~wxButton()
{
- wxPanel* pPanel = wxDynamicCast(GetParent(), wxPanel);
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
- if (pPanel)
+ if (tlw)
{
- if (pPanel->GetDefaultItem() == this)
+ if (tlw->GetDefaultItem() == this)
{
//
// Don't leave the panel with invalid default item
//
- pPanel->SetDefaultItem(NULL);
+ tlw->SetDefaultItem(NULL);
}
}
} // end of wxButton::~wxButton
void wxButton::SetDefault()
{
- wxWindow* pParent = GetParent();
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
- wxCHECK_RET( pParent, _T("button without parent?") );
+ wxCHECK_RET( tlw, _T("button without top level window?") );
//
// Set this one as the default button both for wxWidgets and Windows
//
- wxWindow* pWinOldDefault = pParent->SetDefaultItem(this);
+ wxWindow* pWinOldDefault = tlw->SetDefaultItem(this);
SetDefaultStyle( wxDynamicCast(pWinOldDefault, wxButton), false);
SetDefaultStyle( this, true );
void wxButton::SetTmpDefault()
{
- wxWindow* pParent = GetParent();
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
- wxCHECK_RET( pParent, _T("button without parent?") );
+ wxCHECK_RET( tlw, _T("button without top level window?") );
- wxWindow* pWinOldDefault = pParent->GetDefaultItem();
+ wxWindow* pWinOldDefault = tlw->GetDefaultItem();
- pParent->SetTmpDefaultItem(this);
+ tlw->SetTmpDefaultItem(this);
SetDefaultStyle( wxDynamicCast(pWinOldDefault, wxButton), false);
SetDefaultStyle( this, true );
} // end of wxButton::SetTmpDefault
void wxButton::UnsetTmpDefault()
{
- wxWindow* pParent = GetParent();
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
- wxCHECK_RET( pParent, _T("button without parent?") );
+ wxCHECK_RET( tlw, _T("button without top level window?") );
- pParent->SetTmpDefaultItem(NULL);
+ tlw->SetTmpDefaultItem(NULL);
- wxWindow* pWinOldDefault = pParent->GetDefaultItem();
+ wxWindow* pWinOldDefault = tlw->GetDefaultItem();
SetDefaultStyle( this, false );
SetDefaultStyle( wxDynamicCast(pWinOldDefault, wxButton), true );
}
else
{
- wxButton* pBtn = wxDynamicCast( GetDefaultItem()
- ,wxButton
- );
+ wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow);
+ wxButton* pBtn = NULL;
+
+ if (tlw)
+ {
+ pBtn = wxDynamicCast(tlw->GetDefaultItem(), wxButton);
+ }
if (pBtn && pBtn->IsEnabled())
{