git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43245
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
protected:
void PageChanged(int old_selection, int new_selection);
protected:
void PageChanged(int old_selection, int new_selection);
+ void OnPageClose(wxAuiNotebookEvent& event);
void OnPageChanged(wxAuiNotebookEvent& event);
void OnSize(wxSizeEvent& evt);
void OnPageChanged(wxAuiNotebookEvent& event);
void OnSize(wxSizeEvent& evt);
if (pParentFrame->GetActiveChild() == this)
{
if (pParentFrame->GetActiveChild() == this)
{
+ // deactivate ourself
+ wxActivateEvent event(wxEVT_ACTIVATE, false, GetId());
+ event.SetEventObject(this);
+ GetEventHandler()->ProcessEvent(event);
+
pParentFrame->SetActiveChild(NULL);
pParentFrame->SetChildMenuBar(NULL);
}
pParentFrame->SetActiveChild(NULL);
pParentFrame->SetChildMenuBar(NULL);
}
- const size_t page_count = pClientWindow->GetPageCount();
+ size_t page_count = pClientWindow->GetPageCount();
for (size_t pos = 0; pos < page_count; pos++)
{
if (pClientWindow->GetPage(pos) == this)
for (size_t pos = 0; pos < page_count; pos++)
{
if (pClientWindow->GetPage(pos) == this)
BEGIN_EVENT_TABLE(wxAuiMDIClientWindow, wxAuiNotebook)
EVT_AUINOTEBOOK_PAGE_CHANGED(wxID_ANY, wxAuiMDIClientWindow::OnPageChanged)
BEGIN_EVENT_TABLE(wxAuiMDIClientWindow, wxAuiNotebook)
EVT_AUINOTEBOOK_PAGE_CHANGED(wxID_ANY, wxAuiMDIClientWindow::OnPageChanged)
+ EVT_AUINOTEBOOK_PAGE_CLOSE(wxID_ANY, wxAuiMDIClientWindow::OnPageClose)
EVT_SIZE(wxAuiMDIClientWindow::OnSize)
END_EVENT_TABLE()
EVT_SIZE(wxAuiMDIClientWindow::OnSize)
END_EVENT_TABLE()
// don't do anything if the page doesn't actually change
if (old_selection == new_selection)
return;
// don't do anything if the page doesn't actually change
if (old_selection == new_selection)
return;
// don't do anything if the new page is already active
if (new_selection != -1)
{
wxAuiMDIChildFrame* child = (wxAuiMDIChildFrame*)GetPage(new_selection);
if (child->GetMDIParentFrame()->GetActiveChild() == child)
return;
// don't do anything if the new page is already active
if (new_selection != -1)
{
wxAuiMDIChildFrame* child = (wxAuiMDIChildFrame*)GetPage(new_selection);
if (child->GetMDIParentFrame()->GetActiveChild() == child)
return;
// notify old active child that it has been deactivated
if (old_selection != -1)
{
// notify old active child that it has been deactivated
if (old_selection != -1)
{
event.SetEventObject(old_child);
old_child->GetEventHandler()->ProcessEvent(event);
}
event.SetEventObject(old_child);
old_child->GetEventHandler()->ProcessEvent(event);
}
// notify new active child that it has been activated
if (new_selection != -1)
{
wxAuiMDIChildFrame* active_child = (wxAuiMDIChildFrame*)GetPage(new_selection);
wxASSERT_MSG(active_child, wxT("wxAuiMDIClientWindow::PageChanged - null page pointer"));
// notify new active child that it has been activated
if (new_selection != -1)
{
wxAuiMDIChildFrame* active_child = (wxAuiMDIChildFrame*)GetPage(new_selection);
wxASSERT_MSG(active_child, wxT("wxAuiMDIClientWindow::PageChanged - null page pointer"));
wxActivateEvent event(wxEVT_ACTIVATE, true, active_child->GetId());
event.SetEventObject(active_child);
active_child->GetEventHandler()->ProcessEvent(event);
wxActivateEvent event(wxEVT_ACTIVATE, true, active_child->GetId());
event.SetEventObject(active_child);
active_child->GetEventHandler()->ProcessEvent(event);
if (active_child->GetMDIParentFrame())
{
active_child->GetMDIParentFrame()->SetActiveChild(active_child);
active_child->GetMDIParentFrame()->SetChildMenuBar(active_child);
}
}
if (active_child->GetMDIParentFrame())
{
active_child->GetMDIParentFrame()->SetActiveChild(active_child);
active_child->GetMDIParentFrame()->SetChildMenuBar(active_child);
}
}
+
+
+}
+
+void wxAuiMDIClientWindow::OnPageClose(wxAuiNotebookEvent& evt)
+{
+ wxAuiMDIChildFrame* wnd;
+ wnd = static_cast<wxAuiMDIChildFrame*>(GetPage(evt.GetSelection()));
+
+ wnd->Close();
+
+ // regardless of the result of wnd->Close(), we've
+ // already taken care of the close operations, so
+ // suppress further processing
+ evt.Veto();
}
void wxAuiMDIClientWindow::OnPageChanged(wxAuiNotebookEvent& evt)
{
PageChanged(evt.GetOldSelection(), evt.GetSelection());
}
void wxAuiMDIClientWindow::OnPageChanged(wxAuiNotebookEvent& evt)
{
PageChanged(evt.GetOldSelection(), evt.GetSelection());
}
void wxAuiMDIClientWindow::OnSize(wxSizeEvent& evt)
}
void wxAuiMDIClientWindow::OnSize(wxSizeEvent& evt)