home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2240.zip / wxWindows-2.4.0 / samples / minifram / minifram.cpp < prev    next >
C/C++ Source or Header  |  2002-12-16  |  6KB  |  200 lines

  1. /////////////////////////////////////////////////////////////////////////////
  2. // Name:        minifram.cpp
  3. // Purpose:     wxMiniFrame sample
  4. // Author:      Robert Roebling
  5. // Modified by:
  6. // Created:     04/01/98
  7. // RCS-ID:      $Id: minifram.cpp,v 1.5.2.1 2002/12/15 17:25:12 MBN Exp $
  8. // Copyright:   (c) Julian Smart and Robert Roebling
  9. // Licence:     wxWindows licence
  10. /////////////////////////////////////////////////////////////////////////////
  11.  
  12. // For compilers that support precompilation, includes "wx/wx.h".
  13. #include "wx/wxprec.h"
  14.  
  15. #ifdef __BORLANDC__
  16. #pragma hdrstop
  17. #endif
  18.  
  19. #ifndef WX_PRECOMP
  20. #include "wx/wx.h"
  21. #endif
  22.  
  23. #include "wx/toolbar.h"
  24. #include "minifram.h"
  25.  
  26. #if !defined(__WXMSW__) 
  27. #include "mondrian.xpm"
  28. #endif
  29. #include "bitmaps/new.xpm"
  30. #include "bitmaps/open.xpm"
  31. #include "bitmaps/save.xpm"
  32. #include "bitmaps/copy.xpm"
  33. #include "bitmaps/cut.xpm"
  34. // #include "bitmaps/paste.xpm"
  35. #include "bitmaps/print.xpm"
  36. #include "bitmaps/preview.xpm"
  37. #include "bitmaps/help.xpm"
  38.  
  39.  
  40. // start wxWindows
  41.  
  42. IMPLEMENT_APP(MyApp)
  43.  
  44. // globas
  45.  
  46. MyMainFrame   *main_frame = (MyMainFrame*) NULL;
  47. MyMiniFrame   *mini_frame = (MyMiniFrame*) NULL;
  48. bool           mini_frame_exists = FALSE;
  49. wxButton      *button     = (wxButton*) NULL;
  50.  
  51. // The `main program' equivalent, creating the windows and returning the
  52. // main frame
  53. bool MyApp::OnInit()
  54. {
  55.   // Create the main frame window
  56.   main_frame = new MyMainFrame((wxFrame *) NULL, -1, _T("wxFrame sample"),
  57.      wxPoint(100, 100), wxSize(300, 200));
  58.  
  59.   main_frame->CreateToolBar(wxNO_BORDER|wxTB_VERTICAL, ID_TOOLBAR);
  60.   InitToolbar(main_frame->GetToolBar());
  61.  
  62.   button = new wxButton( main_frame, ID_REPARENT, _T("Press to reparent!") );
  63.  
  64.   // Create the mini frame window
  65.   mini_frame = new MyMiniFrame( main_frame, -1, _T("wxMiniFrame sample"),
  66.      wxPoint(100, 100), wxSize(220, 100));
  67.   mini_frame_exists = TRUE;
  68.  
  69.   mini_frame->CreateToolBar(wxNO_BORDER|wxTB_HORIZONTAL|wxTB_FLAT, ID_TOOLBAR);
  70.   InitToolbar(mini_frame->GetToolBar());
  71.  
  72.   main_frame->SetIcon(wxICON(mondrian));
  73.   mini_frame->SetIcon(wxICON(mondrian));
  74.  
  75.   SetTopWindow(main_frame);
  76.  
  77.   main_frame->Show(TRUE);
  78.   mini_frame->Show(TRUE);
  79.  
  80.   return TRUE;
  81. }
  82.  
  83. bool MyApp::InitToolbar(wxToolBar* toolBar)
  84. {
  85.   toolBar->SetMargins(5, 5);
  86.  
  87.   // Set up toolbar
  88.   wxBitmap* toolBarBitmaps[8];
  89.  
  90.   toolBarBitmaps[0] = new wxBitmap( new_xpm );
  91.   toolBarBitmaps[1] = new wxBitmap( open_xpm );
  92.   toolBarBitmaps[2] = new wxBitmap( save_xpm );
  93.   toolBarBitmaps[3] = new wxBitmap( copy_xpm );
  94.   toolBarBitmaps[4] = new wxBitmap( cut_xpm );
  95. //  toolBarBitmaps[5] = new wxBitmap( paste_xpm );
  96.   toolBarBitmaps[5] = new wxBitmap( preview_xpm );
  97.   toolBarBitmaps[6] = new wxBitmap( print_xpm );
  98.   toolBarBitmaps[7] = new wxBitmap( help_xpm );
  99.  
  100.   int width = 16;
  101.   int currentX = 5;
  102.  
  103.   toolBar->AddTool(wxID_NEW, *(toolBarBitmaps[0]), wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, _T("New file"));
  104.   currentX += width + 5;
  105.   toolBar->AddTool(wxID_OPEN, *(toolBarBitmaps[1]), wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, _T("Open file"));
  106.   currentX += width + 5;
  107.   toolBar->AddTool(wxID_SAVE, *(toolBarBitmaps[2]), wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, _T("Save file"));
  108.   currentX += width + 5;
  109.   toolBar->AddSeparator();
  110.   toolBar->AddTool(wxID_COPY, *(toolBarBitmaps[3]), wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, _T("Copy"));
  111.   currentX += width + 5;
  112.   toolBar->AddTool(wxID_CUT, *(toolBarBitmaps[4]), wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, _T("Cut"));
  113.   currentX += width + 5;
  114.   toolBar->AddTool(wxID_PASTE, *(toolBarBitmaps[5]), wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, _T("Paste"));
  115.   currentX += width + 5;
  116.   toolBar->AddSeparator();
  117.   toolBar->AddTool(wxID_PRINT, *(toolBarBitmaps[6]), wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, _T("Reparent the button"));
  118.   currentX += width + 5;
  119.   toolBar->AddSeparator();
  120.   toolBar->AddTool(wxID_HELP, *(toolBarBitmaps[7]), wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, _T("Help"));
  121.  
  122.   toolBar->Realize();
  123.  
  124.   toolBar->EnableTool( wxID_HELP, FALSE );
  125.  
  126.   // Can delete the bitmaps since they're reference counted
  127.   int i;
  128.   for (i = 0; i < 8; i++)
  129.     delete toolBarBitmaps[i];
  130.  
  131.   return TRUE;
  132. }
  133.  
  134. // MyMiniFrame
  135.  
  136. BEGIN_EVENT_TABLE(MyMiniFrame, wxMiniFrame)
  137.     EVT_CLOSE  (              MyMiniFrame::OnCloseWindow)
  138.     EVT_BUTTON (ID_REPARENT,  MyMiniFrame::OnReparent)
  139.     EVT_MENU   (wxID_PRINT,   MyMiniFrame::OnReparent)
  140. END_EVENT_TABLE()
  141.  
  142. MyMiniFrame::MyMiniFrame(wxFrame* parent, wxWindowID id, const wxString& title, const wxPoint& pos,
  143.         const wxSize& size ) :
  144.   wxMiniFrame(parent, id, title, pos, size )
  145. {
  146. }
  147.  
  148. void MyMiniFrame::OnCloseWindow(wxCloseEvent& WXUNUSED(event))
  149. {
  150.   // make it known that the miniframe is no more
  151.   mini_frame_exists = FALSE;
  152.   Destroy();
  153. }
  154.  
  155. void MyMiniFrame::OnReparent(wxCommandEvent& WXUNUSED(event))
  156. {
  157.   button->Reparent( main_frame );
  158.  
  159.   // we need to force the frame to size its (new) child correctly
  160.   main_frame->SendSizeEvent();
  161. }
  162.  
  163. // MyMainFrame
  164.  
  165. BEGIN_EVENT_TABLE(MyMainFrame, wxFrame)
  166.     EVT_CLOSE  (              MyMainFrame::OnCloseWindow)
  167.     EVT_BUTTON (ID_REPARENT,  MyMainFrame::OnReparent)
  168.     EVT_MENU   (wxID_PRINT,   MyMainFrame::OnReparent)
  169. END_EVENT_TABLE()
  170.  
  171. MyMainFrame::MyMainFrame(wxFrame* parent, wxWindowID id, const wxString& title, const wxPoint& pos,
  172.         const wxSize& size ) :
  173.   wxFrame(parent, id, title, pos, size )
  174. {
  175. }
  176.  
  177. void MyMainFrame::OnCloseWindow(wxCloseEvent& WXUNUSED(event))
  178. {
  179.   Destroy();
  180. }
  181.  
  182. void MyMainFrame::OnReparent(wxCommandEvent& WXUNUSED(event))
  183. {
  184.   // practical jokers might find satisfaction in reparenting the button
  185.   // after closing the mini_frame. We'll have the last laugh.
  186.   if (! mini_frame_exists)
  187.     wxMessageBox(_T("The miniframe no longer exists.\n")
  188.                  _T("You don't want to make this button an orphan, do you?"),
  189.                  _T("You got to be kidding"));
  190.   else
  191.   {
  192.     button->Reparent( mini_frame );
  193.  
  194.     // same as above
  195.     mini_frame->SendSizeEvent();
  196.   }
  197. }
  198.  
  199.  
  200.