]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/mdi/mdi.cpp
Various wxMotif changes including size optimisation and debugging operator fix.
[wxWidgets.git] / samples / mdi / mdi.cpp
index 114eb4c78dd3dc0a8a96ce1f582dd64c71c4e50c..4dbb0c058bdaa46847c34c6a8a76fac721847ad0 100644 (file)
 #include "wx/mdi.h"
 #endif
 
-#ifdef __WXMSW__
-#ifdef __WIN95__
-#include <wx/tbar95.h>
-#else
-#include <wx/tbarmsw.h>
-#endif
+#include <wx/toolbar.h>
+
+#if defined(__WXGTK__) || defined(__WXMOTIF__)
+#include "mondrian.xpm"
+#include "bitmaps/new.xpm"
+#include "bitmaps/open.xpm"
+#include "bitmaps/save.xpm"
+#include "bitmaps/copy.xpm"
+#include "bitmaps/cut.xpm"
+#include "bitmaps/paste.xpm"
+#include "bitmaps/print.xpm"
+#include "bitmaps/help.xpm"
 #endif
 
-#ifdef __WXGTK__
-//#include "list.xpm"
-//#include "folder.xpm"
-#endif
 
 #include "mdi.h"
 
-MyFrame *frame = NULL;
+MyFrame *frame = (MyFrame *) NULL;
 wxList my_children;
 
 IMPLEMENT_APP(MyApp)
@@ -52,15 +54,14 @@ bool MyApp::OnInit(void)
 {
   // Create the main frame window
 
-  frame = new MyFrame(NULL, -1, "MDI Demo", wxPoint(0, 0), wxSize(500, 400),
+  frame = new MyFrame((wxFrame *) NULL, -1, (char *) "MDI Demo", wxPoint(-1, -1), wxSize(500, 400),
    wxDEFAULT_FRAME | wxHSCROLL | wxVSCROLL);
 
-  // Give it an icon (this is ignored in MDI mode: uses resources)
+  // Give it an icon
 #ifdef __WXMSW__
   frame->SetIcon(wxIcon("mdi_icn"));
-#endif
-#ifdef __X__
-  frame->SetIcon(wxIcon("aiai.xbm"));
+#else
+  frame->SetIcon(wxIcon( mondrian_xpm ));
 #endif
 
   // Make a menubar
@@ -105,43 +106,45 @@ MyFrame::MyFrame(wxWindow *parent, const wxWindowID id, const wxString& title, c
         wxTE_MULTILINE|wxSUNKEN_BORDER);
     textWindow->SetValue("A help window");
 
-#ifdef __WXMSW__
-    toolBar = new TestRibbon(this, 0, 0, 100, 30, wxNO_BORDER, wxVERTICAL, 1);
-    SetToolBar(toolBar);
-#endif
+    CreateToolBar(wxNO_BORDER|wxTB_FLAT|wxTB_HORIZONTAL);
+    InitToolBar(GetToolBar());
+
+    // Accelerators
+    wxAcceleratorEntry entries[3];
+    entries[0].Set(wxACCEL_CTRL, (int) 'N', MDI_NEW_WINDOW);
+    entries[1].Set(wxACCEL_CTRL, (int) 'X', MDI_QUIT);
+    entries[2].Set(wxACCEL_CTRL, (int) 'A', MDI_ABOUT);
+    wxAcceleratorTable accel(3, entries);
+    SetAcceleratorTable(accel);
 }
 
-void MyFrame::OnQuit(wxCommandEvent& event)
+void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event) )
 {
       Close(TRUE);
 }
 
-void MyFrame::OnAbout(wxCommandEvent& event)
+void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) )
 {
       (void)wxMessageBox("wxWindows 2.0 MDI Demo\nAuthor: Julian Smart (c) 1997\nUsage: mdi.exe", "About MDI Demo");
 }
 
-void MyFrame::OnNewWindow(wxCommandEvent& event)
+void MyFrame::OnNewWindow(wxCommandEvent& WXUNUSED(event) )
 {
       // Make another frame, containing a canvas
-      MyChild *subframe = new MyChild(frame, "Canvas Frame", wxPoint(10, 10), wxSize(300, 300),
+      MyChild *subframe = new MyChild(frame, "Canvas Frame", wxPoint(-1, -1), wxSize(-1, -1),
                              wxDEFAULT_FRAME);
 
-      char titleBuf[100];
-      sprintf(titleBuf, "Canvas Frame %d", winNumber);
-      subframe->SetTitle(titleBuf);
+      wxString title;
+      title.Printf("Canvas Frame %d", winNumber);
+      subframe->SetTitle(title);
       winNumber ++;
 
-      // Give it an icon (this is ignored in MDI mode: uses resources)
+      // Give it an icon
 #ifdef __WXMSW__
       subframe->SetIcon(wxIcon("chrt_icn"));
+#else
+      subframe->SetIcon(wxIcon( mondrian_xpm ));
 #endif
-#ifdef __X__
-      subframe->SetIcon(wxIcon("aiai.xbm"));
-#endif
-
-      // Give it a status line
-      subframe->CreateStatusBar();
 
       // Make a menubar
       wxMenu *file_menu = new wxMenu;
@@ -185,8 +188,9 @@ END_EVENT_TABLE()
 
 // Define a constructor for my canvas
 MyCanvas::MyCanvas(wxWindow *parent, const wxPoint& pos, const wxSize& size):
- wxScrolledWindow(parent, -1, pos, size, wxSUNKEN_BORDER)
+ wxScrolledWindow(parent, -1, pos, size, wxSUNKEN_BORDER|wxVSCROLL|wxHSCROLL)
 {
+    SetBackgroundColour(wxColour("WHITE"));
 }
 
 // Define the repainting behaviour
@@ -250,24 +254,13 @@ bool MyFrame::OnClose(void)
   return TRUE;
 }
 
-void MyFrame::OnSize(wxSizeEvent& event)
+void MyFrame::OnSize(wxSizeEvent& WXUNUSED(event) )
 {
     int w, h;
     GetClientSize(&w, &h);
-    int tw = 0;
-    int th = 0;
     
-#ifdef __WXMSW__
-    wxWindow* tbar = GetToolBar();
-    if (tbar)
-    {
-        tbar->GetSize(&tw, &th);
-        tbar->SetSize(w, th);
-    }
-#endif
-
-    textWindow->SetSize(0, th, 200, h-th);
-    GetClientWindow()->SetSize(200, th, w - 200, h-th);
+    textWindow->SetSize(0, 0, 200, h);
+    GetClientWindow()->SetSize(200, 0, w - 200, h);
 }
 
 // Note that MDI_NEW_WINDOW and MDI_ABOUT commands get passed
@@ -275,7 +268,6 @@ void MyFrame::OnSize(wxSizeEvent& event)
 // duplicate event handlers here.
 
 BEGIN_EVENT_TABLE(MyChild, wxMDIChildFrame)
-  EVT_SIZE( MyChild::OnSize)
   EVT_MENU(MDI_CHILD_QUIT, MyChild::OnQuit)
 END_EVENT_TABLE()
 
@@ -283,7 +275,7 @@ MyChild::MyChild(wxMDIParentFrame *parent, const wxString& title, const wxPoint&
 const long style):
   wxMDIChildFrame(parent, -1, title, pos, size, style)
 {
-  canvas = NULL;
+  canvas = (MyCanvas *) NULL;
   my_children.Append(this);
 }
 
@@ -292,14 +284,6 @@ MyChild::~MyChild(void)
   my_children.DeleteObject(this);
 }
 
-void MyChild::OnSize(wxSizeEvent& WXUNUSED(event))
-{
-  int x = 0;
-  int y = 0;
-  GetClientSize( &x, &y );
-  if (canvas) canvas->SetSize( x, y );
-}
-
 void MyChild::OnQuit(wxCommandEvent& WXUNUSED(event))
 {
       Close(TRUE);
@@ -316,18 +300,11 @@ bool MyChild::OnClose(void)
   return TRUE;
 }
 
-#ifdef __WXMSW__
-
-BEGIN_EVENT_TABLE(TestRibbon, wxToolBar)
-    EVT_PAINT(TestRibbon::OnPaint)
-END_EVENT_TABLE()
-
-TestRibbon::TestRibbon(wxFrame *frame, int x, int y, int w, int h,
-            long style, int direction, int RowsOrColumns):
-  wxToolBar(frame, -1, wxPoint(x, y), wxSize(w, h), style, direction, RowsOrColumns)
+void MyFrame::InitToolBar(wxToolBar* toolBar)
 {
     wxBitmap* bitmaps[8];
 
+#ifdef __WXMSW__
     bitmaps[0] = new wxBitmap("icon1", wxBITMAP_TYPE_RESOURCE);
     bitmaps[1] = new wxBitmap("icon2", wxBITMAP_TYPE_RESOURCE);
     bitmaps[2] = new wxBitmap("icon3", wxBITMAP_TYPE_RESOURCE);
@@ -336,71 +313,47 @@ TestRibbon::TestRibbon(wxFrame *frame, int x, int y, int w, int h,
     bitmaps[5] = new wxBitmap("icon6", wxBITMAP_TYPE_RESOURCE);
     bitmaps[6] = new wxBitmap("icon7", wxBITMAP_TYPE_RESOURCE);
     bitmaps[7] = new wxBitmap("icon8", wxBITMAP_TYPE_RESOURCE);
+#else
+  bitmaps[0] = new wxBitmap( new_xpm );
+  bitmaps[1] = new wxBitmap( open_xpm );
+  bitmaps[2] = new wxBitmap( save_xpm );
+  bitmaps[3] = new wxBitmap( copy_xpm );
+  bitmaps[4] = new wxBitmap( cut_xpm );
+  bitmaps[5] = new wxBitmap( paste_xpm );
+  bitmaps[6] = new wxBitmap( print_xpm );
+  bitmaps[7] = new wxBitmap( help_xpm );
+#endif
 
 #ifdef __WXMSW__
   int width = 24;
 #else
   int width = 16;
 #endif
-  int offX = 5;
   int currentX = 5;
 
-  AddTool(0, *bitmaps[0], wxNullBitmap, FALSE, currentX, -1, NULL, "New file");
+  toolBar->AddTool( MDI_NEW_WINDOW, *(bitmaps[0]), wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "New file");
   currentX += width + 5;
-  AddTool(1, *bitmaps[1], wxNullBitmap, FALSE, currentX, -1, NULL, "Open file");
+  toolBar->AddTool(1, *bitmaps[1], wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "Open file");
   currentX += width + 5;
-  AddTool(2, *bitmaps[2], wxNullBitmap, FALSE, currentX, -1, NULL, "Save file");
+  toolBar->AddTool(2, *bitmaps[2], wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "Save file");
   currentX += width + 5;
-  AddSeparator();
-  AddTool(3, *bitmaps[3], wxNullBitmap, FALSE, currentX, -1, NULL, "Copy");
+  toolBar->AddSeparator();
+  toolBar->AddTool(3, *bitmaps[3], wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "Copy");
   currentX += width + 5;
-  AddTool(4, *bitmaps[4], wxNullBitmap, FALSE, currentX, -1, NULL, "Cut");
+  toolBar->AddTool(4, *bitmaps[4], wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "Cut");
   currentX += width + 5;
-  AddTool(5, *bitmaps[5], wxNullBitmap, FALSE, currentX, -1, NULL, "Paste");
+  toolBar->AddTool(5, *bitmaps[5], wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "Paste");
   currentX += width + 5;
-  AddSeparator();
-  AddTool(6, *bitmaps[6], wxNullBitmap, FALSE, currentX, -1, NULL, "Print");
+  toolBar->AddSeparator();
+  toolBar->AddTool(6, *bitmaps[6], wxNullBitmap, FALSE, currentX, -1, (wxObject *) NULL, "Print");
   currentX += width + 5;
-  AddSeparator();
-  AddTool(7, *bitmaps[7], wxNullBitmap, TRUE, currentX, -1, NULL, "Help");
+  toolBar->AddSeparator();
+  toolBar->AddTool(7, *bitmaps[7], wxNullBitmap, TRUE, currentX, -1, (wxObject *) NULL, "Help");
 
-  CreateTools();
+  toolBar->Realize();
 
   int i;
   for (i = 0; i < 8; i++)
     delete bitmaps[i];
 }
 
-bool TestRibbon::OnLeftClick(int toolIndex, bool toggled)
-{
-  char buf[200];
-  sprintf(buf, "Clicked on tool %d", toolIndex);
-  frame->SetStatusText(buf);
-  return TRUE;
-}
-
-void TestRibbon::OnMouseEnter(int toolIndex)
-{
-  char buf[200];
-  if (toolIndex > -1)
-  {
-    sprintf(buf, "This is tool number %d", toolIndex);
-    frame->SetStatusText(buf);
-  }
-  else frame->SetStatusText("");
-}
-
-void TestRibbon::OnPaint(wxPaintEvent& event)
-{
-  wxToolBar::OnPaint(event);
-
-  wxPaintDC dc(this);
-  
-  int w, h;
-  GetSize(&w, &h);
-  dc.SetPen(*wxBLACK_PEN);
-  dc.SetBrush(*wxTRANSPARENT_BRUSH);
-  dc.DrawLine(0, h-1, w, h-1);
-}
-
-#endif