home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wxos2240.zip / wxWindows-2.4.0 / contrib / samples / ogl / ogledit / ogledit.cpp < prev    next >
C/C++ Source or Header  |  2002-03-21  |  6KB  |  214 lines

  1. /////////////////////////////////////////////////////////////////////////////
  2. // Name:        ogledit.cpp
  3. // Purpose:     OGLEdit sample app
  4. // Author:      Julian Smart
  5. // Modified by:
  6. // Created:     12/07/98
  7. // RCS-ID:      $Id: ogledit.cpp,v 1.4 2002/03/21 10:32:03 JS Exp $
  8. // Copyright:   (c) Julian Smart
  9. // Licence:       wxWindows licence
  10. /////////////////////////////////////////////////////////////////////////////
  11.  
  12. #ifdef __GNUG__
  13. // #pragma implementation
  14. #endif
  15.  
  16. // For compilers that support precompilation, includes "wx.h".
  17. #include "wx/wxprec.h"
  18.  
  19. #ifdef __BORLANDC__
  20. #pragma hdrstop
  21. #endif
  22.  
  23. #ifndef WX_PRECOMP
  24. #include <wx/wx.h>
  25. #endif
  26.  
  27. #if !wxUSE_DOC_VIEW_ARCHITECTURE
  28. #error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in wx_setup.h!
  29. #endif
  30.  
  31. #include "ogledit.h"
  32. #include "palette.h"
  33. #include "doc.h"
  34. #include "view.h"
  35.  
  36. #if defined(__WXGTK__) || defined(__WXX11__) || defined(__WXMOTIF__) || defined(__WXMAC__)
  37. #include "ogl.xpm"
  38. #endif
  39.  
  40. // A macro needed for some compilers (AIX) that need 'main' to be defined
  41. // in the application itself.
  42. IMPLEMENT_APP(MyApp)
  43.  
  44. MyApp::MyApp(void)
  45. {
  46.   frame = NULL;
  47.   myDocManager= NULL;
  48. }
  49.  
  50. // The `main program' equivalent, creating the windows and returning the
  51. // main frame
  52. bool MyApp::OnInit(void)
  53. {
  54.   wxOGLInitialize();
  55.   
  56.   //// Create a document manager
  57.   myDocManager = new wxDocManager;
  58.  
  59.   //// Create a template relating drawing documents to their views
  60.   (void) new wxDocTemplate(myDocManager, "Diagram", "*.dia", "", "dia", "Diagram Doc", "Diagram View",
  61.           CLASSINFO(DiagramDocument), CLASSINFO(DiagramView));
  62.  
  63.   // If we've only got one window, we only get to edit
  64.   // one document at a time.
  65.   myDocManager->SetMaxDocsOpen(1);
  66.  
  67.   //// Create the main frame window
  68.   frame = new MyFrame(myDocManager, NULL, "OGLEdit Demo", wxPoint(0, 0), wxSize(500, 400), wxDEFAULT_FRAME_STYLE);
  69.  
  70.   //// Give it an icon
  71.   frame->SetIcon(wxICON(ogl));
  72.  
  73.   //// Make a menubar
  74.   wxMenu *file_menu = new wxMenu;
  75.   wxMenu *edit_menu = NULL;
  76.  
  77.   file_menu->Append(wxID_NEW, "&New...");
  78.   file_menu->Append(wxID_OPEN, "&Open...");
  79.  
  80.   file_menu->Append(wxID_CLOSE, "&Close");
  81.   file_menu->Append(wxID_SAVE, "&Save");
  82.   file_menu->Append(wxID_SAVEAS, "Save &As...");
  83.   file_menu->AppendSeparator();
  84.   file_menu->Append(wxID_PRINT, "&Print...");
  85.   file_menu->Append(wxID_PRINT_SETUP, "Print &Setup...");
  86.   file_menu->Append(wxID_PREVIEW, "Print Pre&view");
  87.  
  88.   edit_menu = new wxMenu;
  89.   edit_menu->Append(wxID_UNDO, "&Undo");
  90.   edit_menu->Append(wxID_REDO, "&Redo");
  91.   edit_menu->AppendSeparator();
  92.   edit_menu->Append(OGLEDIT_CUT, "&Cut");
  93.   edit_menu->AppendSeparator();
  94.   edit_menu->Append(OGLEDIT_CHANGE_BACKGROUND_COLOUR, "Change &background colour");
  95.   edit_menu->Append(OGLEDIT_EDIT_LABEL, "Edit &label");
  96.  
  97.   frame->editMenu = edit_menu;
  98.   
  99.   file_menu->AppendSeparator();
  100.   file_menu->Append(wxID_EXIT, "E&xit");
  101.  
  102.   // A nice touch: a history of files visited. Use this menu.
  103.   myDocManager->FileHistoryUseMenu(file_menu);
  104.  
  105.   wxMenu *help_menu = new wxMenu;
  106.   help_menu->Append(OGLEDIT_ABOUT, "&About");
  107.  
  108.   wxMenuBar *menu_bar = new wxMenuBar;
  109.  
  110.   menu_bar->Append(file_menu, "&File");
  111.   if (edit_menu)
  112.     menu_bar->Append(edit_menu, "&Edit");
  113.   menu_bar->Append(help_menu, "&Help");
  114.  
  115.   frame->canvas = frame->CreateCanvas(NULL, frame);
  116.   frame->palette = wxGetApp().CreatePalette(frame);
  117.   myDocManager->CreateDocument("", wxDOC_NEW);
  118.  
  119.   //// Associate the menu bar with the frame
  120.   frame->SetMenuBar(menu_bar);
  121.  
  122.   frame->CreateStatusBar(1);
  123.  
  124.   frame->Centre(wxBOTH);
  125.   frame->Show(TRUE);
  126.  
  127.   return TRUE;
  128. }
  129.  
  130. int MyApp::OnExit(void)
  131. {
  132.     wxOGLCleanUp();
  133.     delete myDocManager;
  134.     return 0;
  135. }
  136.  
  137. /*
  138.  * This is the top-level window of the application.
  139.  */
  140.  
  141. IMPLEMENT_CLASS(MyFrame, wxDocParentFrame)
  142.  
  143. BEGIN_EVENT_TABLE(MyFrame, wxDocParentFrame)
  144.     EVT_MENU(OGLEDIT_ABOUT, MyFrame::OnAbout)
  145.     EVT_SIZE(MyFrame::OnSize)
  146.     EVT_CLOSE(MyFrame::OnCloseWindow)
  147. END_EVENT_TABLE()
  148.  
  149. MyFrame::MyFrame(wxDocManager *manager, wxFrame *frame, const wxString& title,
  150.     const wxPoint& pos, const wxSize& size, long type):
  151.   wxDocParentFrame(manager, frame, -1, title, pos, size, type)
  152. {
  153.   canvas = NULL;
  154.   palette = NULL;
  155.   editMenu = NULL;
  156. }
  157.  
  158. void MyFrame::OnSize(wxSizeEvent& event)
  159. {
  160.   if (canvas && palette)
  161.   {
  162.     int cw, ch;
  163.     GetClientSize(&cw, &ch);
  164.     int paletteX = 0;
  165.     int paletteY = 0;
  166.     int paletteW = 30;
  167.     int paletteH = ch;
  168.     int canvasX = paletteX + paletteW;
  169.     int canvasY = 0;
  170.     int canvasW = cw - paletteW;
  171.     int canvasH = ch;
  172.     
  173.     palette->SetSize(paletteX, paletteY, paletteW, paletteH);
  174.     canvas->SetSize(canvasX, canvasY, canvasW, canvasH);
  175.   }
  176. }
  177.  
  178. void MyFrame::OnCloseWindow(wxCloseEvent& event)
  179. {
  180.   wxDocParentFrame::OnCloseWindow(event);
  181.   if (!event.GetVeto())
  182.   {
  183.     wxOGLCleanUp();
  184.   }
  185. }
  186.  
  187. // Intercept menu commands
  188. void MyFrame::OnAbout(wxCommandEvent& event)
  189. {
  190.       (void)wxMessageBox("OGLEdit Demo\nTo draw a shape, select a shape on the toolbar and left-click on the canvas.\nTo draw a line, right-drag between shapes.\nFor further details, see the OGL manual.\n (c) Julian Smart 1996", "About OGLEdit");
  191. }
  192.  
  193. // Creates a canvas. Called by OnInit as a child of the main window
  194. MyCanvas *MyFrame::CreateCanvas(wxView *view, wxFrame *parent)
  195. {
  196.   int width, height;
  197.   parent->GetClientSize(&width, &height);
  198.  
  199.   // Non-retained canvas
  200.   MyCanvas *canvas = new MyCanvas(view, parent, -1, wxPoint(0, 0), wxSize(width, height), 0);
  201.   canvas->SetCursor(wxCursor(wxCURSOR_HAND));
  202.  
  203.   // Give it scrollbars
  204.   canvas->SetScrollbars(20, 20, 50, 50);
  205.  
  206.   return canvas;
  207. }
  208.  
  209. MyFrame *GetMainFrame(void)
  210. {
  211.   return wxGetApp().frame;
  212. }
  213.  
  214.