#include "bitmaps/help.xpm"
#endif
+// start wxWindows
+
IMPLEMENT_APP(MyApp)
+// globas
+
+MyMainFrame *main_frame = (MyMainFrame*) NULL;
+MyMiniFrame *mini_frame = (MyMiniFrame*) NULL;
+bool mini_frame_exists = FALSE;
+wxButton *button = (wxButton*) NULL;
// The `main program' equivalent, creating the windows and returning the
// main frame
bool MyApp::OnInit(void)
{
+ // Create the mini frame window
+ mini_frame = new MyMiniFrame((wxFrame *) NULL, -1, "wxMiniFrame sample",
+ wxPoint(100, 100), wxSize(220, 100));
+ mini_frame_exists = TRUE;
+
+ mini_frame->CreateToolBar(wxNO_BORDER|wxTB_HORIZONTAL|wxTB_FLAT, ID_TOOLBAR);
+ InitToolbar(mini_frame->GetToolBar());
+
// Create the main frame window
- MyFrame* frame = new MyFrame((wxFrame *) NULL, -1, (const wxString) "wxMiniFrame sample",
- wxPoint(100, 100), wxSize(200, 42));
+ main_frame = new MyMainFrame((wxFrame *) NULL, -1, "wxFrame sample",
+ wxPoint(100, 100), wxSize(300, 200));
+
+ main_frame->CreateToolBar(wxNO_BORDER|wxTB_VERTICAL, ID_TOOLBAR);
+ InitToolbar(main_frame->GetToolBar());
+
+ button = new wxButton( main_frame, ID_REPARENT, "Press to reparent!" );
#ifdef __WXMSW__
- frame->SetIcon(wxIcon("mondrian"));
+ main_frame->SetIcon(wxIcon("mondrian"));
+ mini_frame->SetIcon(wxIcon("mondrian"));
#else
- frame->SetIcon( wxIcon(mondrian_xpm) );
+ main_frame->SetIcon( wxIcon(mondrian_xpm) );
+ mini_frame->SetIcon( wxIcon(mondrian_xpm) );
#endif
- // Create the toolbar
- frame->CreateToolBar(wxNO_BORDER|wxHORIZONTAL|wxTB_FLAT, ID_TOOLBAR);
-
- InitToolbar(frame->GetToolBar());
-
- frame->Show(TRUE);
- SetTopWindow(frame);
+ SetTopWindow(main_frame);
+
+ main_frame->Show(TRUE);
+ mini_frame->Show(TRUE);
return TRUE;
}
toolBar->AddTool(wxID_PASTE, *(toolBarBitmaps[5]), wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "Paste");
currentX += width + 5;
toolBar->AddSeparator();
- toolBar->AddTool(wxID_PRINT, *(toolBarBitmaps[6]), wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "Print");
+ toolBar->AddTool(wxID_PRINT, *(toolBarBitmaps[6]), wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "Reparent the button");
currentX += width + 5;
toolBar->AddSeparator();
toolBar->AddTool(wxID_HELP, *(toolBarBitmaps[7]), wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "Help");
toolBar->Realize();
+
+ toolBar->EnableTool( wxID_HELP, FALSE );
// Can delete the bitmaps since they're reference counted
int i;
return TRUE;
}
-BEGIN_EVENT_TABLE(MyFrame, wxMiniFrame)
- EVT_CLOSE(MyFrame::OnCloseWindow)
+// MyMiniFrame
+
+BEGIN_EVENT_TABLE(MyMiniFrame, wxMiniFrame)
+ EVT_CLOSE ( MyMiniFrame::OnCloseWindow)
+ EVT_BUTTON (ID_REPARENT, MyMiniFrame::OnReparent)
+ EVT_MENU (wxID_PRINT, MyMiniFrame::OnReparent)
END_EVENT_TABLE()
-// Define my frame constructor
-MyFrame::MyFrame(wxFrame* parent, wxWindowID id, const wxString& title, const wxPoint& pos,
+MyMiniFrame::MyMiniFrame(wxFrame* parent, wxWindowID id, const wxString& title, const wxPoint& pos,
const wxSize& size ) :
wxMiniFrame(parent, id, title, pos, size )
{
}
-// - must delete all frames except for the main one.
-void MyFrame::OnCloseWindow(wxCloseEvent& WXUNUSED(event))
+void MyMiniFrame::OnCloseWindow(wxCloseEvent& WXUNUSED(event))
{
+ // make it known that the miniframe is no more
+ mini_frame_exists = FALSE;
Destroy();
}
+void MyMiniFrame::OnReparent(wxCommandEvent& WXUNUSED(event))
+{
+ button->Reparent( main_frame );
+}
+
+// MyMainFrame
+
+BEGIN_EVENT_TABLE(MyMainFrame, wxFrame)
+ EVT_CLOSE ( MyMainFrame::OnCloseWindow)
+ EVT_BUTTON (ID_REPARENT, MyMainFrame::OnReparent)
+ EVT_MENU (wxID_PRINT, MyMainFrame::OnReparent)
+END_EVENT_TABLE()
+
+MyMainFrame::MyMainFrame(wxFrame* parent, wxWindowID id, const wxString& title, const wxPoint& pos,
+ const wxSize& size ) :
+ wxFrame(parent, id, title, pos, size )
+{
+}
+
+void MyMainFrame::OnCloseWindow(wxCloseEvent& WXUNUSED(event))
+{
+ Destroy();
+}
+
+void MyMainFrame::OnReparent(wxCommandEvent& WXUNUSED(event))
+{
+ // practical jokers might find satisfaction in reparenting the button
+ // after closing the mini_frame. We'll have the last laugh.
+ if (! mini_frame_exists)
+ wxMessageBox("The miniframe no longer exists.\n"
+ "You don't want to make this button an orphan, do you?",
+ "You got to be kidding");
+ else
+ button->Reparent( mini_frame );
+}
+
+