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

  1. /////////////////////////////////////////////////////////////////////////////
  2. // Name:        docview.cpp
  3. // Purpose:     Document/view demo
  4. // Author:      Julian Smart
  5. // Modified by:
  6. // Created:     04/01/98
  7. // RCS-ID:      $Id: docview.cpp,v 1.12.2.1 2002/12/16 20:22:53 MBN Exp $
  8. // Copyright:   (c) Julian Smart and Markus Holzem
  9. // Licence:     wxWindows license
  10. /////////////////////////////////////////////////////////////////////////////
  11.  
  12. #ifdef __GNUG__
  13. // #pragma implementation "docview.h"
  14. #endif
  15.  
  16. /*
  17.  * Purpose:  Document/view architecture demo for wxWindows class library - MDI
  18.  */
  19.  
  20.  
  21. // For compilers that support precompilation, includes "wx/wx.h".
  22. #include "wx/wxprec.h"
  23.  
  24. #ifdef __BORLANDC__
  25. #pragma hdrstop
  26. #endif
  27.  
  28. #ifndef WX_PRECOMP
  29. #include "wx/wx.h"
  30. #endif
  31.  
  32. #if !wxUSE_DOC_VIEW_ARCHITECTURE
  33. #error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in setup.h!
  34. #endif
  35.  
  36. #if !wxUSE_MDI_ARCHITECTURE
  37. #error You must set wxUSE_MDI_ARCHITECTURE to 1 in setup.h!
  38. #endif
  39.  
  40. #include "docview.h"
  41. #include "doc.h"
  42. #include "view.h"
  43.  
  44. MyFrame *frame = (MyFrame *) NULL;
  45.  
  46. IMPLEMENT_APP(MyApp)
  47.  
  48. MyApp::MyApp(void)
  49. {
  50.     m_docManager = (wxDocManager *) NULL;
  51. }
  52.  
  53. bool MyApp::OnInit(void)
  54. {
  55.   //// Create a document manager
  56.   m_docManager = new wxDocManager;
  57.  
  58.   //// Create a template relating drawing documents to their views
  59.   (void) new wxDocTemplate((wxDocManager *) m_docManager, _T("Drawing"), _T("*.drw"), _T(""), _T("drw"), _T("Drawing Doc"), _T("Drawing View"),
  60.           CLASSINFO(DrawingDocument), CLASSINFO(DrawingView));
  61.  
  62.   //// Create a template relating text documents to their views
  63.   (void) new wxDocTemplate(m_docManager, _T("Text"), _T("*.txt"), _T(""), _T("txt"), _T("Text Doc"), _T("Text View"),
  64.           CLASSINFO(TextEditDocument), CLASSINFO(TextEditView));
  65.  
  66.   //// Create the main frame window
  67.   frame = new MyFrame((wxDocManager *) m_docManager, (wxFrame *) NULL,
  68.                       _T("DocView Demo"), wxPoint(0, 0), wxSize(500, 400),
  69.                       wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE);
  70.  
  71.   //// Give it an icon (this is ignored in MDI mode: uses resources)
  72. #ifdef __WXMSW__
  73.   frame->SetIcon(wxIcon(_T("doc")));
  74. #endif
  75. #ifdef __X__
  76.   frame->SetIcon(wxIcon(_T("doc.xbm")));
  77. #endif
  78.  
  79.   //// Make a menubar
  80.   wxMenu *file_menu = new wxMenu;
  81.   wxMenu *edit_menu = (wxMenu *) NULL;
  82.  
  83.   file_menu->Append(wxID_NEW, _T("&New...\tCtrl-N"));
  84.   file_menu->Append(wxID_OPEN, _T("&Open...\tCtrl-X"));
  85.  
  86.   file_menu->AppendSeparator();
  87.   file_menu->Append(wxID_EXIT, _T("E&xit\tAlt-X"));
  88.   
  89.   // A nice touch: a history of files visited. Use this menu.
  90.   m_docManager->FileHistoryUseMenu(file_menu);
  91.  
  92.   wxMenu *help_menu = new wxMenu;
  93.   help_menu->Append(DOCVIEW_ABOUT, _T("&About\tF1"));
  94.  
  95.   wxMenuBar *menu_bar = new wxMenuBar;
  96.  
  97.   menu_bar->Append(file_menu, _T("&File"));
  98.   if (edit_menu)
  99.     menu_bar->Append(edit_menu, _T("&Edit"));
  100.   menu_bar->Append(help_menu, _T("&Help"));
  101.  
  102.   //// Associate the menu bar with the frame
  103.   frame->SetMenuBar(menu_bar);
  104.  
  105.   frame->Centre(wxBOTH);
  106.   frame->Show(TRUE);
  107.  
  108.   SetTopWindow(frame);
  109.   return TRUE;
  110. }
  111.  
  112. int MyApp::OnExit(void)
  113. {
  114.     delete m_docManager;
  115.     return 0;
  116. }
  117.  
  118. /*
  119.  * Centralised code for creating a document frame.
  120.  * Called from view.cpp, when a view is created.
  121.  */
  122.  
  123. wxMDIChildFrame *MyApp::CreateChildFrame(wxDocument *doc, wxView *view, bool isCanvas)
  124. {
  125.   //// Make a child frame
  126.   wxDocMDIChildFrame *subframe =
  127.       new wxDocMDIChildFrame(doc, view, GetMainFrame(), -1, _T("Child Frame"),
  128.                              wxPoint(10, 10), wxSize(300, 300),
  129.                              wxDEFAULT_FRAME_STYLE |
  130.                              wxNO_FULL_REPAINT_ON_RESIZE);
  131.  
  132. #ifdef __WXMSW__
  133.   subframe->SetIcon(wxString(isCanvas ? _T("chart") : _T("notepad")));
  134. #endif
  135. #ifdef __X__
  136.   subframe->SetIcon(wxIcon(_T("doc.xbm")));
  137. #endif
  138.  
  139.   //// Make a menubar
  140.   wxMenu *file_menu = new wxMenu;
  141.  
  142.   file_menu->Append(wxID_NEW, _T("&New..."));
  143.   file_menu->Append(wxID_OPEN, _T("&Open..."));
  144.   file_menu->Append(wxID_CLOSE, _T("&Close"));
  145.   file_menu->Append(wxID_SAVE, _T("&Save"));
  146.   file_menu->Append(wxID_SAVEAS, _T("Save &As..."));
  147.  
  148.   if (isCanvas)
  149.   {
  150.     file_menu->AppendSeparator();
  151.     file_menu->Append(wxID_PRINT, _T("&Print..."));
  152.     file_menu->Append(wxID_PRINT_SETUP, _T("Print &Setup..."));
  153.     file_menu->Append(wxID_PREVIEW, _T("Print Pre&view"));
  154.   }
  155.  
  156.   file_menu->AppendSeparator();
  157.   file_menu->Append(wxID_EXIT, _T("E&xit"));
  158.  
  159.   wxMenu *edit_menu = (wxMenu *) NULL;
  160.  
  161.   if (isCanvas)
  162.   {
  163.     edit_menu = new wxMenu;
  164.     edit_menu->Append(wxID_UNDO, _T("&Undo"));
  165.     edit_menu->Append(wxID_REDO, _T("&Redo"));
  166.     edit_menu->AppendSeparator();
  167.     edit_menu->Append(DOCVIEW_CUT, _T("&Cut last segment"));
  168.  
  169.     doc->GetCommandProcessor()->SetEditMenu(edit_menu);
  170.   }
  171.  
  172.   wxMenu *help_menu = new wxMenu;
  173.   help_menu->Append(DOCVIEW_ABOUT, _T("&About"));
  174.  
  175.   wxMenuBar *menu_bar = new wxMenuBar;
  176.  
  177.   menu_bar->Append(file_menu, _T("&File"));
  178.   if (isCanvas)
  179.     menu_bar->Append(edit_menu, _T("&Edit"));
  180.   menu_bar->Append(help_menu, _T("&Help"));
  181.  
  182.   //// Associate the menu bar with the frame
  183.   subframe->SetMenuBar(menu_bar);
  184.  
  185.   return subframe;
  186. }
  187.  
  188. /*
  189.  * This is the top-level window of the application.
  190.  */
  191.  
  192. IMPLEMENT_CLASS(MyFrame, wxDocMDIParentFrame)
  193. BEGIN_EVENT_TABLE(MyFrame, wxDocMDIParentFrame)
  194.     EVT_MENU(DOCVIEW_ABOUT, MyFrame::OnAbout)
  195. END_EVENT_TABLE()
  196.  
  197. MyFrame::MyFrame(wxDocManager *manager, wxFrame *frame, const wxString& title,
  198.     const wxPoint& pos, const wxSize& size, long type):
  199.   wxDocMDIParentFrame(manager, frame, -1, title, pos, size, type, _T("myFrame"))
  200. {
  201.   editMenu = (wxMenu *) NULL;
  202. }
  203.  
  204. void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) )
  205. {
  206.     (void)wxMessageBox(_T("DocView Demo\nAuthor: Julian Smart\nUsage: docview.exe"), _T("About DocView"));
  207. }
  208.  
  209. // Creates a canvas. Called from view.cpp when a new drawing
  210. // view is created.
  211. MyCanvas *MyFrame::CreateCanvas(wxView *view, wxMDIChildFrame *parent)
  212. {
  213.   int width, height;
  214.   parent->GetClientSize(&width, &height);
  215.  
  216.   // Non-retained canvas
  217.   MyCanvas *canvas = new MyCanvas(view, parent, wxPoint(0, 0), wxSize(width, height), 0);
  218.   canvas->SetCursor(wxCursor(wxCURSOR_PENCIL));
  219.  
  220.   // Give it scrollbars
  221.   canvas->SetScrollbars(20, 20, 50, 50);
  222.  
  223.   return canvas;
  224. }
  225.  
  226. MyFrame *GetMainFrame(void)
  227. {
  228.   return frame;
  229. }
  230.  
  231.