+}
+
+
+PhantomCanvas*
+PhantomView::CreateCanvas (wxView *view, wxFrame *parent)
+{
+ PhantomCanvas* pCanvas;
+ int width, height;
+ parent->GetClientSize(&width, &height);
+
+ pCanvas = new PhantomCanvas (dynamic_cast<PhantomView*>(view), parent, wxPoint(0, 0), wxSize(width, height), 0);
+
+ pCanvas->SetBackgroundColour(*wxWHITE);
+ pCanvas->Clear();
+
+ return pCanvas;
+}
+
+wxFrame*
+PhantomView::CreateChildFrame(wxDocument *doc, wxView *view)
+{
+ wxDocChildFrame *subframe = new wxDocChildFrame(doc, view, theApp->getMainFrame(), -1, "Phantom Frame", wxPoint(10, 10), wxSize(256, 256), wxDEFAULT_FRAME_STYLE);
+
+ wxMenu *file_menu = new wxMenu;
+
+ file_menu->Append(MAINMENU_FILE_CREATE_PHANTOM, "&Create Phantom...");
+ file_menu->Append(wxID_OPEN, "&Open...");
+ file_menu->Append(wxID_CLOSE, "&Close");
+
+ file_menu->AppendSeparator();
+ file_menu->Append(PHMMENU_FILE_PROPERTIES, "P&roperties");
+
+ file_menu->AppendSeparator();
+ file_menu->Append(wxID_PRINT, "&Print...");
+ file_menu->Append(wxID_PRINT_SETUP, "Print &Setup...");
+ file_menu->Append(wxID_PREVIEW, "Print Pre&view");
+
+ wxMenu *process_menu = new wxMenu;
+ process_menu->Append(PHMMENU_PROCESS_RASTERIZE, "&Rasterize...");
+ process_menu->Append(PHMMENU_PROCESS_PROJECTIONS, "&Projections...");
+
+ wxMenu *help_menu = new wxMenu;
+ help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents");
+ help_menu->Append(MAINMENU_HELP_ABOUT, "&About");
+
+ wxMenuBar *menu_bar = new wxMenuBar;
+
+ menu_bar->Append(file_menu, "&File");
+ menu_bar->Append(process_menu, "&Process");
+ menu_bar->Append(help_menu, "&Help");
+
+ subframe->SetMenuBar(menu_bar);
+
+ subframe->Centre(wxBOTH);
+
+ return subframe;
+}
+
+
+bool
+PhantomView::OnCreate(wxDocument *doc, long WXUNUSED(flags) )
+{
+ m_frame = CreateChildFrame(doc, this);
+
+ int width, height;
+ m_frame->GetClientSize(&width, &height);
+ m_frame->SetTitle("PhantomView");
+ m_canvas = CreateCanvas(this, m_frame);
+
+#ifdef __X__
+ int x, y; // X requires a forced resize
+ m_frame->GetSize(&x, &y);
+ m_frame->SetSize(-1, -1, x, y);