]> git.saurik.com Git - wxWidgets.git/blobdiff - contrib/samples/ogl/studio/studio.cpp
Document wxTextCtrl::XYToPosition, PositionToXY and GetLineLength change
[wxWidgets.git] / contrib / samples / ogl / studio / studio.cpp
index 6eacff447e94875e48c7efc9555d182c30d74e8f..982a0bf50b46392de0927db663a7a7bfadcebcff 100644 (file)
 #include "wx/mdi.h"
 #endif
 
-#include <wx/deprecated/setup.h>
-#include <wx/deprecated/resource.h>
+#include "wx/ogl/ogl.h" // base header of OGL, includes and adjusts wx/deprecated/setup.h
+
 #include "wx/config.h"
 #include "wx/laywin.h"
+#include "wx/helpwin.h"
 
 #include "studio.h"
 #include "view.h"
@@ -34,7 +35,6 @@
 #include "project.h"
 #include "symbols.h"
 
-#if defined(__WXGTK__) || defined(__WXX11__) || defined(__WXMOTIF__) || defined(__WXMAC__)
 #include "bitmaps/new.xpm"
 #include "bitmaps/open.xpm"
 #include "bitmaps/save.xpm"
@@ -59,7 +59,6 @@
 #include "bitmaps/straight.xpm"
 
 #include "studio.xpm"
-#endif
 
 IMPLEMENT_APP(csApp)
 
@@ -92,109 +91,113 @@ csApp::~csApp()
 // Initialise this in OnInit, not statically
 bool csApp::OnInit(void)
 {
-  if (!wxResourceParseFile(_T("studio_resources.wxr")))
-  {
-    wxMessageBox(_T("Could not find or parse resource file: studio_resources.wxr"), _T("Studio"));
-    return false;
-  }
+#if wxUSE_WX_RESOURCES
+    if (!wxResourceParseFile(_T("studio_resources.wxr")))
+    {
+        wxMessageBox(_T("Could not find or parse resource file: studio_resources.wxr"), _T("Studio"));
+        return false;
+    }
+#endif
 
 #if wxUSE_MS_HTML_HELP && !defined(__WXUNIVERSAL__)
-  m_helpController = new wxWinHelpController;
+    m_helpController = new wxWinHelpController;
 #else
-  m_helpController = new wxHtmlHelpController;
+    m_helpController = new wxHtmlHelpController;
 #endif
 
-  m_helpController->Initialize(_T("studio.hlp"));
+    m_helpController->Initialize(_T("studio.hlp"));
 
-  ReadOptions();
+    ReadOptions();
 
-  wxOGLInitialize();
+    wxOGLInitialize();
 
-  InitSymbols();
+    InitSymbols();
 
-  //// Create a document manager
-  m_docManager = new wxDocManager;
+    //// Create a document manager
+    m_docManager = new wxDocManager;
 
-  //// Create a template relating drawing documents to their views
-  (void) new wxDocTemplate(m_docManager, _T("Diagram"), _T("*.dia"), wxEmptyString, _T("dia"), _T("Diagram Doc"), _T("Diagram View"),
-          CLASSINFO(csDiagramDocument), CLASSINFO(csDiagramView));
+    //// Create a template relating drawing documents to their views
+    (void) new wxDocTemplate(m_docManager, _T("Diagram"), _T("*.dia"), wxEmptyString, _T("dia"), _T("Diagram Doc"), _T("Diagram View"),
+            CLASSINFO(csDiagramDocument), CLASSINFO(csDiagramView));
 
-  // Create the main frame window.
-  // Note that we use a frame style that doesn't have wxCLIP_CHILDREN in it
-  // (the default frame style contains wxCLIP_CHILDREN), otherwise the client
-  // area doesn't refresh properly when we change its position, under Windows.
+    // Create the main frame window.
+    // Note that we use a frame style that doesn't have wxCLIP_CHILDREN in it
+    // (the default frame style contains wxCLIP_CHILDREN), otherwise the client
+    // area doesn't refresh properly when we change its position, under Windows.
 
 #define wxDEFAULT_FRAME_STYLE_NO_CLIP \
-  (wxDEFAULT_FRAME_STYLE & ~wxCLIP_CHILDREN)
+    (wxDEFAULT_FRAME_STYLE & ~wxCLIP_CHILDREN)
 
-  csFrame* frame = new csFrame(m_docManager, NULL, wxID_ANY, _T("OGL Studio"), m_mainFramePos, m_mainFrameSize,
-   wxDEFAULT_FRAME_STYLE_NO_CLIP | wxHSCROLL | wxVSCROLL);
+    csFrame* frame = new csFrame(m_docManager, NULL, wxID_ANY, _T("OGL Studio"), m_mainFramePos, m_mainFrameSize,
+                     wxDEFAULT_FRAME_STYLE_NO_CLIP | wxHSCROLL | wxVSCROLL);
 
-  // Give it an icon
-  frame->SetIcon(wxICON(studio));
+    // Give it an icon
+    frame->SetIcon(wxIcon(studio_xpm));
 
-  // Make a menubar
-  wxMenu *fileMenu = new wxMenu;
+    // Make a menubar
+    wxMenu *fileMenu = new wxMenu;
 
-  fileMenu->Append(wxID_NEW, _T("&New...\tCtrl+N"));
-  fileMenu->Append(wxID_OPEN, _T("&Open...\tCtrl+O"));
+    fileMenu->Append(wxID_NEW, _T("&New...\tCtrl+N"));
+    fileMenu->Append(wxID_OPEN, _T("&Open...\tCtrl+O"));
 
-  fileMenu->AppendSeparator();
+    fileMenu->AppendSeparator();
 
-  fileMenu->Append(wxID_PRINT, _T("&Print...\tCtrl+P"));
-  fileMenu->Append(wxID_PRINT_SETUP, _T("Print &Setup..."));
-  fileMenu->Append(wxID_PREVIEW, _T("Print Pre&view"));
-  fileMenu->AppendSeparator();
-  fileMenu->Append(wxID_EXIT, _T("E&xit"));
+    fileMenu->Append(wxID_PRINT, _T("&Print...\tCtrl+P"));
+    fileMenu->Append(wxID_PRINT_SETUP, _T("Print &Setup..."));
+    fileMenu->Append(wxID_PREVIEW, _T("Print Pre&view"));
+    fileMenu->AppendSeparator();
+    fileMenu->Append(wxID_EXIT, _T("E&xit"));
 
-  // A history of files visited. Use this menu.
-  m_docManager->FileHistoryUseMenu(fileMenu);
+    // A history of files visited. Use this menu.
+    m_docManager->FileHistoryUseMenu(fileMenu);
 
-  wxMenu *viewMenu = new wxMenu;
-  viewMenu->Append(ID_CS_SETTINGS, _T("&Settings..."));
+    wxMenu *viewMenu = new wxMenu;
+    viewMenu->Append(ID_CS_SETTINGS, _T("&Settings..."));
 
-  wxMenu *helpMenu = new wxMenu;
-  helpMenu->Append(wxID_HELP, _T("&Help Contents\tF1"));
-  helpMenu->Append(ID_CS_ABOUT, _T("&About"));
+    wxMenu *helpMenu = new wxMenu;
+    helpMenu->Append(wxID_HELP, _T("&Help Contents\tF1"));
+    helpMenu->Append(ID_CS_ABOUT, _T("&About"));
 
-  wxMenuBar *menuBar = new wxMenuBar;
+    wxMenuBar *menuBar = new wxMenuBar;
 
-  menuBar->Append(fileMenu, _T("&File"));
-  menuBar->Append(viewMenu, _T("&View"));
-  menuBar->Append(helpMenu, _T("&Help"));
+    menuBar->Append(fileMenu, _T("&File"));
+    menuBar->Append(viewMenu, _T("&View"));
+    menuBar->Append(helpMenu, _T("&Help"));
 
-  // Associate the menu bar with the frame
-  frame->SetMenuBar(menuBar);
+    // Associate the menu bar with the frame
+    frame->SetMenuBar(menuBar);
 
-  // Load the file history
-  wxConfig config(_T("OGL Studio"), _T("wxWidgets"));
-  m_docManager->FileHistoryLoad(config);
+    // Load the file history
+    wxConfig config(_T("OGL Studio"), _T("wxWidgets"));
+    m_docManager->FileHistoryLoad(config);
 
-  frame->CreateStatusBar();
+#if wxUSE_STATUSBAR
+    frame->CreateStatusBar();
+#endif // wxUSE_STATUSBAR
 
-  // The ordering of these is important for layout purposes
-  CreateDiagramToolBar(frame);
-  CreatePalette(frame);
+    // The ordering of these is important for layout purposes
+    CreateDiagramToolBar(frame);
+    CreatePalette(frame);
 
-  /*
-  CreateProjectWindow(frame);
-  FillProjectTreeCtrl();
-  */
+    /*
+    CreateProjectWindow(frame);
+    FillProjectTreeCtrl();
+    */
 
-  // Create the shape editing menu
-  m_shapeEditMenu = new ShapeEditMenu;
-  m_shapeEditMenu->Append(ID_CS_EDIT_PROPERTIES, _T("Edit properties"));
-  m_shapeEditMenu->AppendSeparator();
-  m_shapeEditMenu->Append(ID_CS_ROTATE_CLOCKWISE, _T("Rotate clockwise"));
-  m_shapeEditMenu->Append(ID_CS_ROTATE_ANTICLOCKWISE, _T("Rotate anticlockwise"));
-  m_shapeEditMenu->AppendSeparator();
-  m_shapeEditMenu->Append(ID_CS_CUT, _T("Cut"));
+    // Create the shape editing menu
+    m_shapeEditMenu = new ShapeEditMenu;
+    m_shapeEditMenu->Append(ID_CS_EDIT_PROPERTIES, _T("Edit properties"));
+    m_shapeEditMenu->AppendSeparator();
+    m_shapeEditMenu->Append(ID_CS_ROTATE_CLOCKWISE, _T("Rotate clockwise"));
+    m_shapeEditMenu->Append(ID_CS_ROTATE_ANTICLOCKWISE, _T("Rotate anticlockwise"));
+    m_shapeEditMenu->AppendSeparator();
+    m_shapeEditMenu->Append(ID_CS_CUT, _T("Cut"));
 
-  frame->Show(true);
+    frame->Show(true);
 
-  SetTopWindow(frame);
+    SetTopWindow(frame);
 
-  return true;
+    return true;
 }
 
 int csApp::OnExit(void)
@@ -222,115 +225,103 @@ int csApp::OnExit(void)
  * Centralised code for creating a document frame.
  * Called from view.cpp, when a view is created.
  */
+
 wxMDIChildFrame *csApp::CreateChildFrame(wxDocument *doc, wxView *view, wxMenu** editMenuRet)
 {
-  //// Make a child frame
-  csMDIChildFrame *subframe = new csMDIChildFrame(doc, view, ((wxDocMDIParentFrame*)GetTopWindow()), wxID_ANY, _T("Child Frame"),
-        wxPoint(10, 10), wxSize(300, 300), wxDEFAULT_FRAME_STYLE);
+    //// Make a child frame
+    csMDIChildFrame *subframe = new csMDIChildFrame(doc, view, ((wxDocMDIParentFrame*)GetTopWindow()), wxID_ANY, _T("Child Frame"),
+                                                    wxPoint(10, 10), wxSize(300, 300), wxDEFAULT_FRAME_STYLE);
 
 #ifdef __WXMSW__
-  subframe->SetIcon(wxString(_T("chart")));
+    subframe->SetIcon(wxString(_T("chart")));
 #endif
 #ifdef __X__
-  subframe->SetIcon(wxIcon(_T("doc.xbm")));
+    subframe->SetIcon(wxIcon(_T("doc.xbm")));
 #endif
 
-  //// Make a menubar
-  wxMenu *fileMenu = new wxMenu;
+    //// Make a menubar
+    wxMenu *fileMenu = new wxMenu;
 
-  fileMenu->Append(wxID_NEW, _T("&New...\tCtrl+N"));
-  fileMenu->Append(wxID_OPEN, _T("&Open...\tCtrl+O"));
-  fileMenu->Append(wxID_CLOSE, _T("&Close\tCtrl+W"));
-  fileMenu->Append(wxID_SAVE, _T("&Save\tCtrl+S"));
-  fileMenu->Append(wxID_SAVEAS, _T("Save &As...\tF12"));
+    fileMenu->Append(wxID_NEW, _T("&New...\tCtrl+N"));
+    fileMenu->Append(wxID_OPEN, _T("&Open...\tCtrl+O"));
+    fileMenu->Append(wxID_CLOSE, _T("&Close\tCtrl+W"));
+    fileMenu->Append(wxID_SAVE, _T("&Save\tCtrl+S"));
+    fileMenu->Append(wxID_SAVEAS, _T("Save &As...\tF12"));
 
-  fileMenu->AppendSeparator();
-  fileMenu->Append(wxID_PRINT, _T("&Print...\tCtrl+P"));
-  fileMenu->Append(wxID_PRINT_SETUP, _T("Print &Setup..."));
-  fileMenu->Append(wxID_PREVIEW, _T("Print Pre&view"));
+    fileMenu->AppendSeparator();
+    fileMenu->Append(wxID_PRINT, _T("&Print...\tCtrl+P"));
+    fileMenu->Append(wxID_PRINT_SETUP, _T("Print &Setup..."));
+    fileMenu->Append(wxID_PREVIEW, _T("Print Pre&view"));
 
-  fileMenu->AppendSeparator();
-  fileMenu->Append(wxID_EXIT, _T("E&xit"));
+    fileMenu->AppendSeparator();
+    fileMenu->Append(wxID_EXIT, _T("E&xit"));
 
-  wxMenu* editMenu = new wxMenu;
-  editMenu->Append(wxID_UNDO, _T("&Undo\tCtrl+Z"));
-  editMenu->Append(wxID_REDO, _T("&Redo\tCtrl+Y"));
-  editMenu->AppendSeparator();
-  editMenu->Append(wxID_CUT, _T("Cu&t\tCtrl+X"));
-  editMenu->Append(wxID_COPY, _T("&Copy\tCtrl+C"));
-  editMenu->Append(wxID_PASTE, _T("&Paste\tCtrl+V"));
-  editMenu->Append(wxID_DUPLICATE, _T("&Duplicate\tCtrl+D"));
-  editMenu->AppendSeparator();
-  editMenu->Append(wxID_CLEAR, _T("Cle&ar\tDelete"));
-  editMenu->Append(ID_CS_SELECT_ALL, _T("Select A&ll\tCtrl+A"));
-  editMenu->AppendSeparator();
-  editMenu->Append(ID_CS_EDIT_PROPERTIES, _T("Edit P&roperties..."));
+    wxMenu* editMenu = new wxMenu;
+    editMenu->Append(wxID_UNDO, _T("&Undo\tCtrl+Z"));
+    editMenu->Append(wxID_REDO, _T("&Redo\tCtrl+Y"));
+    editMenu->AppendSeparator();
+    editMenu->Append(wxID_CUT, _T("Cu&t\tCtrl+X"));
+    editMenu->Append(wxID_COPY, _T("&Copy\tCtrl+C"));
+    editMenu->Append(wxID_PASTE, _T("&Paste\tCtrl+V"));
+    editMenu->Append(wxID_DUPLICATE, _T("&Duplicate\tCtrl+D"));
+    editMenu->AppendSeparator();
+    editMenu->Append(wxID_CLEAR, _T("Cle&ar\tDelete"));
+    editMenu->Append(ID_CS_SELECT_ALL, _T("Select A&ll\tCtrl+A"));
+    editMenu->AppendSeparator();
+    editMenu->Append(ID_CS_EDIT_PROPERTIES, _T("Edit P&roperties..."));
 
-  *editMenuRet = editMenu;
+    *editMenuRet = editMenu;
 
-  m_docManager->FileHistoryUseMenu(fileMenu);
-  m_docManager->FileHistoryAddFilesToMenu(fileMenu);
+    m_docManager->FileHistoryUseMenu(fileMenu);
+    m_docManager->FileHistoryAddFilesToMenu(fileMenu);
 
-  doc->GetCommandProcessor()->SetEditMenu(editMenu);
+    doc->GetCommandProcessor()->SetEditMenu(editMenu);
 
-  wxMenu *viewMenu = new wxMenu;
-  viewMenu->Append(ID_CS_SETTINGS, _T("&Settings..."));
+    wxMenu *viewMenu = new wxMenu;
+    viewMenu->Append(ID_CS_SETTINGS, _T("&Settings..."));
 
-  wxMenu *helpMenu = new wxMenu;
-  helpMenu->Append(wxID_HELP, _T("&Help Contents\tF1"));
-  helpMenu->Append(ID_CS_ABOUT, _T("&About"));
+    wxMenu *helpMenu = new wxMenu;
+    helpMenu->Append(wxID_HELP, _T("&Help Contents\tF1"));
+    helpMenu->Append(ID_CS_ABOUT, _T("&About"));
 
-  wxMenuBar *menuBar = new wxMenuBar;
+    wxMenuBar *menuBar = new wxMenuBar;
 
-  menuBar->Append(fileMenu, _T("&File"));
-  menuBar->Append(editMenu, _T("&Edit"));
-  menuBar->Append(viewMenu, _T("&View"));
-  menuBar->Append(helpMenu, _T("&Help"));
+    menuBar->Append(fileMenu, _T("&File"));
+    menuBar->Append(editMenu, _T("&Edit"));
+    menuBar->Append(viewMenu, _T("&View"));
+    menuBar->Append(helpMenu, _T("&Help"));
 
-  //// Associate the menu bar with the frame
-  subframe->SetMenuBar(menuBar);
+    //// Associate the menu bar with the frame
+    subframe->SetMenuBar(menuBar);
 
-  return subframe;
+    return subframe;
 }
 
 // Creates a canvas. Called by OnInit as a child of the main window
 csCanvas *csApp::CreateCanvas(wxView *view, wxMDIChildFrame *parent)
 {
-  int width, height;
-  parent->GetClientSize(&width, &height);
+    int width, height;
+    parent->GetClientSize(&width, &height);
 
-  // Non-retained canvas
-  csCanvas *canvas = new csCanvas((csDiagramView*) view, parent, 1000, wxPoint(0, 0), wxSize(width, height), wxSUNKEN_BORDER);
+    // Non-retained canvas
+    csCanvas *canvas = new csCanvas((csDiagramView*) view, parent, 1000, wxPoint(0, 0), wxSize(width, height), wxSUNKEN_BORDER);
 
-  wxColour bgColour(_T("WHITE"));
-  canvas->SetBackgroundColour(bgColour);
+    wxColour bgColour(_T("WHITE"));
+    canvas->SetBackgroundColour(bgColour);
 
-  wxCursor cursor(wxCURSOR_HAND);
-  canvas->SetCursor(cursor);
+    wxCursor cursor(wxCURSOR_HAND);
+    canvas->SetCursor(cursor);
 
-  // Give it scrollbars
-  canvas->SetScrollbars(20, 20, 100, 100);
+    // Give it scrollbars
+    canvas->SetScrollbars(20, 20, 100, 100);
 
-  return canvas;
+    return canvas;
 }
 
 void csApp::InitToolBar(wxToolBar* toolBar)
 {
     wxBitmap* bitmaps[10];
 
-#ifdef __WXMSW__
-    bitmaps[0] = new wxBitmap(_T("new"), wxBITMAP_TYPE_RESOURCE);
-    bitmaps[1] = new wxBitmap(_T("open"), wxBITMAP_TYPE_RESOURCE);
-    bitmaps[2] = new wxBitmap(_T("save"), wxBITMAP_TYPE_RESOURCE);
-    bitmaps[3] = new wxBitmap(_T("copy"), wxBITMAP_TYPE_RESOURCE);
-    bitmaps[4] = new wxBitmap(_T("cut"), wxBITMAP_TYPE_RESOURCE);
-    bitmaps[5] = new wxBitmap(_T("paste"), wxBITMAP_TYPE_RESOURCE);
-    bitmaps[6] = new wxBitmap(_T("print"), wxBITMAP_TYPE_RESOURCE);
-    bitmaps[7] = new wxBitmap(_T("help"), wxBITMAP_TYPE_RESOURCE);
-    bitmaps[8] = new wxBitmap(_T("undo"), wxBITMAP_TYPE_RESOURCE);
-    bitmaps[9] = new wxBitmap(_T("redo"), wxBITMAP_TYPE_RESOURCE);
-#elif defined(__WXGTK__) || defined(__WXX11__) || defined(__WXMOTIF__) || defined(__WXMAC__)
     bitmaps[0] = new wxBitmap( new_xpm );
     bitmaps[1] = new wxBitmap( open_xpm );
     bitmaps[2] = new wxBitmap( save_xpm );
@@ -341,36 +332,33 @@ void csApp::InitToolBar(wxToolBar* toolBar)
     bitmaps[7] = new wxBitmap( help_xpm );
     bitmaps[8] = new wxBitmap( undo_xpm );
     bitmaps[9] = new wxBitmap( redo_xpm );
-#else
-#error "Not implemented for this platform."
-#endif
 
-  toolBar->AddTool(wxID_NEW, *bitmaps[0], wxNullBitmap, false, wxDefaultPosition.x, wxDefaultPosition.y, NULL, _T("New file"));
-  toolBar->AddTool(wxID_OPEN, *bitmaps[1], wxNullBitmap, false, wxDefaultPosition.x, wxDefaultPosition.y, NULL, _T("Open file"));
-  toolBar->AddTool(wxID_SAVE, *bitmaps[2], wxNullBitmap, false, wxDefaultPosition.x, wxDefaultPosition.y, NULL, _T("Save file"));
-  toolBar->AddSeparator();
-  toolBar->AddTool(wxID_PRINT, *bitmaps[6], wxNullBitmap, false, wxDefaultPosition.x, wxDefaultPosition.y, NULL, _T("Print"));
-  toolBar->AddSeparator();
-  toolBar->AddTool(wxID_COPY, *bitmaps[3], wxNullBitmap, false, wxDefaultPosition.x, wxDefaultPosition.y, NULL, _T("Copy"));
-  toolBar->AddTool(wxID_CUT, *bitmaps[4], wxNullBitmap, false, wxDefaultPosition.x, wxDefaultPosition.y, NULL, _T("Cut"));
-  toolBar->AddTool(wxID_PASTE, *bitmaps[5], wxNullBitmap, false, wxDefaultPosition.x, wxDefaultPosition.y, NULL, _T("Paste"));
-  toolBar->AddSeparator();
-  toolBar->AddTool(wxID_UNDO, *bitmaps[8], wxNullBitmap, false, wxDefaultPosition.x, wxDefaultPosition.y, NULL, _T("Undo"));
-  toolBar->AddTool(wxID_REDO, *bitmaps[9], wxNullBitmap, false, wxDefaultPosition.x, wxDefaultPosition.y, NULL, _T("Redo"));
-  toolBar->AddSeparator();
-  toolBar->AddTool(wxID_HELP, *bitmaps[7], wxNullBitmap, false, wxDefaultPosition.x, wxDefaultPosition.y, NULL, _T("Help"));
-
-  toolBar->Realize();
-
-  toolBar->EnableTool(wxID_COPY, false);
-  toolBar->EnableTool(wxID_PASTE, false);
-  toolBar->EnableTool(wxID_PRINT, false);
-  toolBar->EnableTool(wxID_UNDO, false);
-  toolBar->EnableTool(wxID_REDO, false);
-
-  int i;
-  for (i = 0; i < 10; i++)
-    delete bitmaps[i];
+    toolBar->AddTool(wxID_NEW, *bitmaps[0], wxNullBitmap, false, wxDefaultCoord, wxDefaultCoord, NULL, _T("New file"));
+    toolBar->AddTool(wxID_OPEN, *bitmaps[1], wxNullBitmap, false, wxDefaultCoord, wxDefaultCoord, NULL, _T("Open file"));
+    toolBar->AddTool(wxID_SAVE, *bitmaps[2], wxNullBitmap, false, wxDefaultCoord, wxDefaultCoord, NULL, _T("Save file"));
+    toolBar->AddSeparator();
+    toolBar->AddTool(wxID_PRINT, *bitmaps[6], wxNullBitmap, false, wxDefaultCoord, wxDefaultCoord, NULL, _T("Print"));
+    toolBar->AddSeparator();
+    toolBar->AddTool(wxID_COPY, *bitmaps[3], wxNullBitmap, false, wxDefaultCoord, wxDefaultCoord, NULL, _T("Copy"));
+    toolBar->AddTool(wxID_CUT, *bitmaps[4], wxNullBitmap, false, wxDefaultCoord, wxDefaultCoord, NULL, _T("Cut"));
+    toolBar->AddTool(wxID_PASTE, *bitmaps[5], wxNullBitmap, false, wxDefaultCoord, wxDefaultCoord, NULL, _T("Paste"));
+    toolBar->AddSeparator();
+    toolBar->AddTool(wxID_UNDO, *bitmaps[8], wxNullBitmap, false, wxDefaultCoord, wxDefaultCoord, NULL, _T("Undo"));
+    toolBar->AddTool(wxID_REDO, *bitmaps[9], wxNullBitmap, false, wxDefaultCoord, wxDefaultCoord, NULL, _T("Redo"));
+    toolBar->AddSeparator();
+    toolBar->AddTool(wxID_HELP, *bitmaps[7], wxNullBitmap, false, wxDefaultCoord, wxDefaultCoord, NULL, _T("Help"));
+
+    toolBar->Realize();
+
+    toolBar->EnableTool(wxID_COPY, false);
+    toolBar->EnableTool(wxID_PASTE, false);
+    toolBar->EnableTool(wxID_PRINT, false);
+    toolBar->EnableTool(wxID_UNDO, false);
+    toolBar->EnableTool(wxID_REDO, false);
+
+    int i;
+    for (i = 0; i < 10; i++)
+        delete bitmaps[i];
 }
 
 // Create and initialise the diagram toolbar
@@ -391,19 +379,6 @@ void csApp::CreateDiagramToolBar(wxFrame* parent)
 
     wxBitmap* bitmaps[11];
 
-#ifdef __WXMSW__
-    bitmaps[0] = new wxBitmap(_T("alignl"), wxBITMAP_TYPE_RESOURCE);
-    bitmaps[1] = new wxBitmap(_T("alignr"), wxBITMAP_TYPE_RESOURCE);
-    bitmaps[2] = new wxBitmap(_T("alignt"), wxBITMAP_TYPE_RESOURCE);
-    bitmaps[3] = new wxBitmap(_T("alignb"), wxBITMAP_TYPE_RESOURCE);
-    bitmaps[4] = new wxBitmap(_T("horiz"), wxBITMAP_TYPE_RESOURCE);
-    bitmaps[5] = new wxBitmap(_T("vert"), wxBITMAP_TYPE_RESOURCE);
-    bitmaps[6] = new wxBitmap(_T("copysize"), wxBITMAP_TYPE_RESOURCE);
-    bitmaps[7] = new wxBitmap(_T("linearrow"), wxBITMAP_TYPE_RESOURCE);
-    bitmaps[8] = new wxBitmap(_T("newpoint"), wxBITMAP_TYPE_RESOURCE);
-    bitmaps[9] = new wxBitmap(_T("cutpoint"), wxBITMAP_TYPE_RESOURCE);
-    bitmaps[10] = new wxBitmap(_T("straighten"), wxBITMAP_TYPE_RESOURCE);
-#elif defined(__WXGTK__) || defined(__WXX11__) || defined(__WXMOTIF__) || defined(__WXMAC__)
     bitmaps[0] = new wxBitmap( alignl_xpm );
     bitmaps[1] = new wxBitmap( alignr_xpm );
     bitmaps[2] = new wxBitmap( alignt_xpm );
@@ -415,22 +390,19 @@ void csApp::CreateDiagramToolBar(wxFrame* parent)
     bitmaps[8] = new wxBitmap( newpoint_xpm );
     bitmaps[9] = new wxBitmap( cutpoint_xpm );
     bitmaps[10] = new wxBitmap( straight_xpm );
-#else
-#error "Not implemented for this platform."
-#endif
 
-    m_diagramToolBar->AddTool(DIAGRAM_TOOLBAR_ALIGNL, *bitmaps[0], wxNullBitmap, false, wxDefaultPosition.x, wxDefaultPosition.y, NULL, _T("Align left"));
-    m_diagramToolBar->AddTool(DIAGRAM_TOOLBAR_ALIGNR, *bitmaps[1], wxNullBitmap, false, wxDefaultPosition.x, wxDefaultPosition.y, NULL, _T("Align right"));
-    m_diagramToolBar->AddTool(DIAGRAM_TOOLBAR_ALIGNT, *bitmaps[2], wxNullBitmap, false, wxDefaultPosition.x, wxDefaultPosition.y, NULL, _T("Align top"));
-    m_diagramToolBar->AddTool(DIAGRAM_TOOLBAR_ALIGNB, *bitmaps[3], wxNullBitmap, false, wxDefaultPosition.x, wxDefaultPosition.y, NULL, _T("Align bottom"));
-    m_diagramToolBar->AddTool(DIAGRAM_TOOLBAR_ALIGN_HORIZ, *bitmaps[4], wxNullBitmap, false, wxDefaultPosition.x, wxDefaultPosition.y, NULL, _T("Align horizontally"));
-    m_diagramToolBar->AddTool(DIAGRAM_TOOLBAR_ALIGN_VERT, *bitmaps[5], wxNullBitmap, false, wxDefaultPosition.x, wxDefaultPosition.y, NULL, _T("Align vertically"));
-    m_diagramToolBar->AddTool(DIAGRAM_TOOLBAR_COPY_SIZE, *bitmaps[6], wxNullBitmap, false, wxDefaultPosition.x, wxDefaultPosition.y, NULL, _T("Copy size"));
+    m_diagramToolBar->AddTool(DIAGRAM_TOOLBAR_ALIGNL, *bitmaps[0], wxNullBitmap, false, wxDefaultCoord, wxDefaultCoord, NULL, _T("Align left"));
+    m_diagramToolBar->AddTool(DIAGRAM_TOOLBAR_ALIGNR, *bitmaps[1], wxNullBitmap, false, wxDefaultCoord, wxDefaultCoord, NULL, _T("Align right"));
+    m_diagramToolBar->AddTool(DIAGRAM_TOOLBAR_ALIGNT, *bitmaps[2], wxNullBitmap, false, wxDefaultCoord, wxDefaultCoord, NULL, _T("Align top"));
+    m_diagramToolBar->AddTool(DIAGRAM_TOOLBAR_ALIGNB, *bitmaps[3], wxNullBitmap, false, wxDefaultCoord, wxDefaultCoord, NULL, _T("Align bottom"));
+    m_diagramToolBar->AddTool(DIAGRAM_TOOLBAR_ALIGN_HORIZ, *bitmaps[4], wxNullBitmap, false, wxDefaultCoord, wxDefaultCoord, NULL, _T("Align horizontally"));
+    m_diagramToolBar->AddTool(DIAGRAM_TOOLBAR_ALIGN_VERT, *bitmaps[5], wxNullBitmap, false, wxDefaultCoord, wxDefaultCoord, NULL, _T("Align vertically"));
+    m_diagramToolBar->AddTool(DIAGRAM_TOOLBAR_COPY_SIZE, *bitmaps[6], wxNullBitmap, false, wxDefaultCoord, wxDefaultCoord, NULL, _T("Copy size"));
     m_diagramToolBar->AddSeparator();
-    m_diagramToolBar->AddTool(DIAGRAM_TOOLBAR_LINE_ARROW, *bitmaps[7], wxNullBitmap, true, wxDefaultPosition.x, wxDefaultPosition.y, NULL, _T("Toggle arrow"));
-    m_diagramToolBar->AddTool(DIAGRAM_TOOLBAR_NEW_POINT, *bitmaps[8], wxNullBitmap, false, wxDefaultPosition.x, wxDefaultPosition.y, NULL, _T("New line point"));
-    m_diagramToolBar->AddTool(DIAGRAM_TOOLBAR_CUT_POINT, *bitmaps[9], wxNullBitmap, false, wxDefaultPosition.x, wxDefaultPosition.y, NULL, _T("Cut line point"));
-    m_diagramToolBar->AddTool(DIAGRAM_TOOLBAR_STRAIGHTEN, *bitmaps[10], wxNullBitmap, false, wxDefaultPosition.x, wxDefaultPosition.y, NULL, _T("Straighten lines"));
+    m_diagramToolBar->AddTool(DIAGRAM_TOOLBAR_LINE_ARROW, *bitmaps[7], wxNullBitmap, true, wxDefaultCoord, wxDefaultCoord, NULL, _T("Toggle arrow"));
+    m_diagramToolBar->AddTool(DIAGRAM_TOOLBAR_NEW_POINT, *bitmaps[8], wxNullBitmap, false, wxDefaultCoord, wxDefaultCoord, NULL, _T("New line point"));
+    m_diagramToolBar->AddTool(DIAGRAM_TOOLBAR_CUT_POINT, *bitmaps[9], wxNullBitmap, false, wxDefaultCoord, wxDefaultCoord, NULL, _T("Cut line point"));
+    m_diagramToolBar->AddTool(DIAGRAM_TOOLBAR_STRAIGHTEN, *bitmaps[10], wxNullBitmap, false, wxDefaultCoord, wxDefaultCoord, NULL, _T("Straighten lines"));
 
     m_diagramToolBar->Realize();