r441: no message
[ctsim.git] / src / views.cpp
index 65ab9f6d744797083b2121f84652ebaf1708f546..4e970c173bd2bb43a6739d96d5c419797c6ba51f 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: views.cpp,v 1.70 2001/01/26 00:45:24 kevin Exp $
+**  $Id: views.cpp,v 1.74 2001/01/26 21:33:06 kevin Exp $
 **
 **  This program is free software; you can redistribute it and/or modify
 **  it under the terms of the GNU General Public License (version 2) as
@@ -231,14 +231,15 @@ EVT_MENU(IFMENU_PLOT_FFT_COL, ImageFileView::OnPlotFFTCol)
 EVT_MENU(IFMENU_PLOT_HISTOGRAM, ImageFileView::OnPlotHistogram)
 END_EVENT_TABLE()
 
-ImageFileView::ImageFileView(void
+ImageFileView::ImageFileView() 
 : wxView(), m_canvas(NULL), m_frame(NULL), m_bMinSpecified(false), m_bMaxSpecified(false), m_pFileMenu(0)
 {
   m_iDefaultExportFormatID = ImageFile::FORMAT_PNG;
 }
 
-ImageFileView::~ImageFileView(void)
+ImageFileView::~ImageFileView()
 {
+
 }
 
 void
@@ -356,7 +357,7 @@ ImageFileView::OnCompare (wxCommandEvent& event)
       os << "Comparative Statistics: d=" << d << ", r=" << r << ", e=" << e << "\n";
       *theApp->getLog() << os.str().c_str();
       if (dialogGetCompare.getMakeDifferenceImage()) {
-        ImageFileDocument* pDifferenceDoc = dynamic_cast<ImageFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.if", wxDOC_SILENT));
+        ImageFileDocument* pDifferenceDoc = theApp->newImageDoc();
         if (! pDifferenceDoc) {
           sys_error (ERR_SEVERE, "Unable to create image file");
           return;
@@ -458,7 +459,7 @@ ImageFileView::OnAdd (wxCommandEvent& event)
       ImageFile& rIF = GetDocument()->getImageFile();
       ImageFileDocument* pRHSDoc = dialogGetCompare.getImageFileDocument();
       const ImageFile& rRHSIF = pRHSDoc->getImageFile();
-      ImageFileDocument* pNewDoc = dynamic_cast<ImageFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.if", wxDOC_SILENT));
+      ImageFileDocument* pNewDoc = theApp->newImageDoc();
       if (! pNewDoc) {
         sys_error (ERR_SEVERE, "Unable to create image file");
         return;
@@ -498,7 +499,7 @@ ImageFileView::OnSubtract (wxCommandEvent& event)
       ImageFile& rIF = GetDocument()->getImageFile();
       ImageFileDocument* pRHSDoc = dialogGetCompare.getImageFileDocument();
       const ImageFile& rRHSIF = pRHSDoc->getImageFile();
-      ImageFileDocument* pNewDoc = dynamic_cast<ImageFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.if", wxDOC_SILENT));
+      ImageFileDocument* pNewDoc = theApp->newImageDoc();
       if (! pNewDoc) {
         sys_error (ERR_SEVERE, "Unable to create image file");
         return;
@@ -538,7 +539,7 @@ ImageFileView::OnMultiply (wxCommandEvent& event)
       ImageFile& rIF = GetDocument()->getImageFile();
       ImageFileDocument* pRHSDoc = dialogGetCompare.getImageFileDocument();
       const ImageFile& rRHSIF = pRHSDoc->getImageFile();
-      ImageFileDocument* pNewDoc = dynamic_cast<ImageFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.if", wxDOC_SILENT));
+      ImageFileDocument* pNewDoc = theApp->newImageDoc();
       if (! pNewDoc) {
         sys_error (ERR_SEVERE, "Unable to create image file");
         return;
@@ -578,7 +579,7 @@ ImageFileView::OnDivide (wxCommandEvent& event)
       ImageFile& rIF = GetDocument()->getImageFile();
       ImageFileDocument* pRHSDoc = dialogGetCompare.getImageFileDocument();
       const ImageFile& rRHSIF = pRHSDoc->getImageFile();
-      ImageFileDocument* pNewDoc = dynamic_cast<ImageFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.if", wxDOC_SILENT));
+      ImageFileDocument* pNewDoc = theApp->newImageDoc();
       if (! pNewDoc) {
         sys_error (ERR_SEVERE, "Unable to create image file");
         return;
@@ -993,12 +994,14 @@ ImageFileView::OnUpdate (wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint) )
 bool 
 ImageFileView::OnClose (bool deleteWindow)
 {
-  if (!GetDocument()->Close())
+  if (! GetDocument() || ! GetDocument()->Close())
     return false;
   
-//  m_canvas->Clear();
-//  m_canvas->setView(NULL);
-  m_canvas = NULL;
+  if (m_canvas) {
+  //  m_canvas->Clear();
+    m_canvas->setView(NULL);
+    m_canvas = NULL;
+  }
   wxString s(theApp->GetAppName());
 //  if (m_frame)
 //    m_frame->SetTitle(s);
@@ -1071,7 +1074,7 @@ ImageFileView::OnScaleSize (wxCommandEvent& event)
     unsigned int iNewNY = dialogGetXYSize.getYSize();
     std::ostringstream os;
     os << "Scale Size from (" << iOldNX << "," << iOldNY << ") to (" << iNewNX << "," << iNewNY << ")";
-    ImageFileDocument* pScaledDoc = dynamic_cast<ImageFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.if", wxDOC_SILENT));
+    ImageFileDocument* pScaledDoc = theApp->newImageDoc();
     if (! pScaledDoc) {
       sys_error (ERR_SEVERE, "Unable to create image file");
       return;
@@ -1121,7 +1124,7 @@ ImageFileView::OnPlotRow (wxCommandEvent& event)
         pYMag[i] = ::sqrt (v[i][yCursor] * v[i][yCursor] + vImag[i][yCursor] * vImag[i][yCursor]);
       }
     }
-    PlotFileDocument* pPlotDoc = dynamic_cast<PlotFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.plt", wxDOC_SILENT));
+    PlotFileDocument* pPlotDoc = theApp->newPlotDoc();
     if (! pPlotDoc) {
       sys_error (ERR_SEVERE, "Internal error: unable to create Plot file");
     } else {
@@ -1205,7 +1208,7 @@ ImageFileView::OnPlotCol (wxCommandEvent& event)
         pYMag[i] = ::sqrt (v[xCursor][i] * v[xCursor][i] + vImag[xCursor][i] * vImag[xCursor][i]);
       }
     }
-    PlotFileDocument* pPlotDoc = dynamic_cast<PlotFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.plt", wxDOC_SILENT));
+    PlotFileDocument* pPlotDoc = theApp->newPlotDoc();
     if (! pPlotDoc) {
       sys_error (ERR_SEVERE, "Internal error: unable to create Plot file");
     } else {
@@ -1303,7 +1306,7 @@ ImageFileView::OnPlotFFTRow (wxCommandEvent& event)
     Fourier::shuffleFourierToNaturalOrder (pYImag, nx);
     Fourier::shuffleFourierToNaturalOrder (pYMag, nx);
     
-    PlotFileDocument* pPlotDoc = dynamic_cast<PlotFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.plt", wxDOC_SILENT));
+    PlotFileDocument* pPlotDoc = theApp->newPlotDoc();
     if (! pPlotDoc) {
       sys_error (ERR_SEVERE, "Internal error: unable to create Plot file");
     } else {
@@ -1401,7 +1404,7 @@ ImageFileView::OnPlotFFTCol (wxCommandEvent& event)
       pYMag[i] = ::sqrt (pcIn[i].re * pcIn[i].re + pcIn[i].im * pcIn[i].im);
     }
     
-    PlotFileDocument* pPlotDoc = dynamic_cast<PlotFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.plt", wxDOC_SILENT));
+    PlotFileDocument* pPlotDoc = theApp->newPlotDoc();
     if (! pPlotDoc) {
       sys_error (ERR_SEVERE, "Internal error: unable to create Plot file");
     } else {
@@ -1486,7 +1489,7 @@ ImageFileView::OnCompareCol (wxCommandEvent& event)
         pY1[i] = v1[xCursor][i];
         pY2[i] = v2[xCursor][i];
       }
-      PlotFileDocument* pPlotDoc = dynamic_cast<PlotFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.plt", wxDOC_SILENT));
+      PlotFileDocument* pPlotDoc = theApp->newPlotDoc();
       if (! pPlotDoc) {
         sys_error (ERR_SEVERE, "Internal error: unable to create Plot file");
       } else {
@@ -1577,7 +1580,7 @@ ImageFileView::OnCompareRow (wxCommandEvent& event)
         pY1[i] = v1[i][yCursor];
         pY2[i] = v2[i][yCursor];
       }
-      PlotFileDocument* pPlotDoc = dynamic_cast<PlotFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.plt", wxDOC_SILENT));
+      PlotFileDocument* pPlotDoc = theApp->newPlotDoc();
       if (! pPlotDoc) {
         sys_error (ERR_SEVERE, "Internal error: unable to create Plot file");
       } else {
@@ -1640,7 +1643,7 @@ ImageFileView::OnPlotHistogram (wxCommandEvent& event)
   int ny = rIF.ny();
   
   if (v != NULL && nx > 0 && ny > 0) {
-    PlotFileDocument* pPlotDoc = dynamic_cast<PlotFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.plt", wxDOC_SILENT));
+    PlotFileDocument* pPlotDoc = theApp->newPlotDoc();
     if (! pPlotDoc) {
       sys_error (ERR_SEVERE, "Internal error: unable to create Plot file");
       return;
@@ -1696,7 +1699,7 @@ ImageFileView::OnPlotHistogram (wxCommandEvent& event)
 
 // PhantomCanvas
 
-PhantomCanvas::PhantomCanvas (PhantomView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style)
+PhantomCanvas::PhantomCanvas (PhantomFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style)
 : wxScrolledWindow(frame, -1, pos, size, style)
 {
   m_pView = v;
@@ -1720,17 +1723,17 @@ PhantomCanvas::OnDraw (wxDC& dc)
 }
 
 
-// PhantomView
+// PhantomFileView
 
-IMPLEMENT_DYNAMIC_CLASS(PhantomView, wxView)
+IMPLEMENT_DYNAMIC_CLASS(PhantomFileView, wxView)
 
-BEGIN_EVENT_TABLE(PhantomView, wxView)
-EVT_MENU(PHMMENU_FILE_PROPERTIES, PhantomView::OnProperties)
-EVT_MENU(PHMMENU_PROCESS_RASTERIZE, PhantomView::OnRasterize)
-EVT_MENU(PHMMENU_PROCESS_PROJECTIONS, PhantomView::OnProjections)
+BEGIN_EVENT_TABLE(PhantomFileView, wxView)
+EVT_MENU(PHMMENU_FILE_PROPERTIES, PhantomFileView::OnProperties)
+EVT_MENU(PHMMENU_PROCESS_RASTERIZE, PhantomFileView::OnRasterize)
+EVT_MENU(PHMMENU_PROCESS_PROJECTIONS, PhantomFileView::OnProjections)
 END_EVENT_TABLE()
 
-PhantomView::PhantomView(void
+PhantomFileView::PhantomFileView(
 : wxView(), m_canvas(NULL), m_frame(NULL), m_pFileMenu(0)
 {
   m_iDefaultNDet = 367;
@@ -1747,12 +1750,13 @@ PhantomView::PhantomView(void)
   m_iDefaultRasterNSamples = 2;
 }
 
-PhantomView::~PhantomView()
+PhantomFileView::~PhantomFileView()
 {
+       
 }
 
 void
-PhantomView::OnProperties (wxCommandEvent& event)
+PhantomFileView::OnProperties (wxCommandEvent& event)
 {
   const int idPhantom = GetDocument()->getPhantomID();
   const wxString& namePhantom = GetDocument()->getPhantomName();
@@ -1769,7 +1773,7 @@ PhantomView::OnProperties (wxCommandEvent& event)
 
 
 void
-PhantomView::OnProjections (wxCommandEvent& event)
+PhantomFileView::OnProjections (wxCommandEvent& event)
 {
   DialogGetProjectionParameters dialogProjection (getFrameForChild(), m_iDefaultNDet, m_iDefaultNView, m_iDefaultNSample, m_dDefaultRotation, m_dDefaultFocalLength, m_dDefaultFieldOfView, m_iDefaultGeometry, m_iDefaultTrace);
   int retVal = dialogProjection.ShowModal();
@@ -1786,7 +1790,7 @@ PhantomView::OnProjections (wxCommandEvent& event)
     
     if (m_iDefaultNDet > 0 && m_iDefaultNView > 0 && sGeometry != "") {
       const Phantom& rPhantom = GetDocument()->getPhantom();
-      ProjectionFileDocument* pProjectionDoc = dynamic_cast<ProjectionFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.pj", wxDOC_SILENT));
+      ProjectionFileDocument* pProjectionDoc = theApp->newProjectionDoc();
       if (! pProjectionDoc) {
         sys_error (ERR_SEVERE, "Unable to create projection document");
         return;
@@ -1858,7 +1862,7 @@ PhantomView::OnProjections (wxCommandEvent& event)
 
 
 void
-PhantomView::OnRasterize (wxCommandEvent& event)
+PhantomFileView::OnRasterize (wxCommandEvent& event)
 {
   DialogGetRasterParameters dialogRaster (getFrameForChild(), m_iDefaultRasterNX, m_iDefaultRasterNY, m_iDefaultRasterNSamples);
   int retVal = dialogRaster.ShowModal();
@@ -1870,7 +1874,7 @@ PhantomView::OnRasterize (wxCommandEvent& event)
       m_iDefaultRasterNSamples = 1;
     if (m_iDefaultRasterNX > 0 && m_iDefaultRasterNY > 0) {
       const Phantom& rPhantom = GetDocument()->getPhantom();
-      ImageFileDocument* pRasterDoc = dynamic_cast<ImageFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.if", wxDOC_SILENT));
+      ImageFileDocument* pRasterDoc = theApp->newImageDoc();
       if (! pRasterDoc) {
         sys_error (ERR_SEVERE, "Unable to create image file");
         return;
@@ -1907,13 +1911,13 @@ PhantomView::OnRasterize (wxCommandEvent& event)
 
 
 PhantomCanvas* 
-PhantomView::CreateCanvas (wxView *view, wxFrame *parent)
+PhantomFileView::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 = new PhantomCanvas (dynamic_cast<PhantomFileView*>(view), parent, wxPoint(0, 0), wxSize(width, height), 0);
   
   pCanvas->SetBackgroundColour(*wxWHITE);
   pCanvas->Clear();
@@ -1922,7 +1926,7 @@ PhantomView::CreateCanvas (wxView *view, wxFrame *parent)
 }
 
 wxFrame*
-PhantomView::CreateChildFrame(wxDocument *doc, wxView *view)
+PhantomFileView::CreateChildFrame(wxDocument *doc, wxView *view)
 {
 #if CTSIM_MDI
   wxDocMDIChildFrame *subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, "Phantom Frame", wxPoint(10, 10), wxSize(256, 256), wxDEFAULT_FRAME_STYLE);
@@ -1988,14 +1992,14 @@ PhantomView::CreateChildFrame(wxDocument *doc, wxView *view)
 
 
 bool 
-PhantomView::OnCreate(wxDocument *doc, long WXUNUSED(flags) )
+PhantomFileView::OnCreate(wxDocument *doc, long WXUNUSED(flags) )
 {
   m_frame = CreateChildFrame(doc, this);
   SetFrame(m_frame);
   
   int width, height;
   m_frame->GetClientSize(&width, &height);
-  m_frame->SetTitle("PhantomView");
+  m_frame->SetTitle("PhantomFileView");
   m_canvas = CreateCanvas (this, m_frame);
   
 #ifdef __X__
@@ -2011,21 +2015,23 @@ PhantomView::OnCreate(wxDocument *doc, long WXUNUSED(flags) )
 }
 
 void 
-PhantomView::OnUpdate(wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint) )
+PhantomFileView::OnUpdate(wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint) )
 {
   if (m_canvas)
     m_canvas->Refresh();
 }
 
 bool 
-PhantomView::OnClose (bool deleteWindow)
+PhantomFileView::OnClose (bool deleteWindow)
 {
-  if (!GetDocument()->Close())
+  if (! GetDocument() || ! GetDocument()->Close())
     return false;
   
-//  m_canvas->Clear();
-//  m_canvas->setView(NULL);
-  m_canvas = NULL;
+  if (m_canvas) {
+    m_canvas->Clear();
+    m_canvas->setView(NULL);
+    m_canvas = NULL;
+  }
   wxString s(wxTheApp->GetAppName());
   if (m_frame)
     m_frame->SetTitle(s);
@@ -2042,7 +2048,7 @@ PhantomView::OnClose (bool deleteWindow)
 }
 
 void
-PhantomView::OnDraw (wxDC* dc)
+PhantomFileView::OnDraw (wxDC* dc)
 {
   int xsize, ysize;
   m_canvas->GetClientSize (&xsize, &ysize);
@@ -2102,7 +2108,7 @@ EVT_MENU(PJMENU_CONVERT_POLAR, ProjectionFileView::OnConvertPolar)
 EVT_MENU(PJMENU_CONVERT_FFT_POLAR, ProjectionFileView::OnConvertFFTPolar)
 END_EVENT_TABLE()
 
-ProjectionFileView::ProjectionFileView(void
+ProjectionFileView::ProjectionFileView() 
 : wxView(), m_canvas(NULL), m_frame(NULL), m_pFileMenu(0)
 {
   m_iDefaultNX = 256;
@@ -2128,8 +2134,9 @@ ProjectionFileView::ProjectionFileView(void)
   m_iDefaultPolarZeropad = 1;
 }
 
-ProjectionFileView::~ProjectionFileView(void)
+ProjectionFileView::~ProjectionFileView()
 {
+       
 }
 
 void
@@ -2154,7 +2161,7 @@ ProjectionFileView::OnConvertPolar (wxCommandEvent& event)
     wxString strInterpolation (dialogPolar.getInterpolationName());
     m_iDefaultPolarNX = dialogPolar.getXSize();
     m_iDefaultPolarNY = dialogPolar.getYSize();
-    ImageFileDocument* pPolarDoc = dynamic_cast<ImageFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.if", wxDOC_SILENT));
+    ImageFileDocument* pPolarDoc = theApp->newImageDoc();
     ImageFile& rIF = pPolarDoc->getImageFile();
     if (! pPolarDoc) {
       sys_error (ERR_SEVERE, "Unable to create image file");
@@ -2188,7 +2195,7 @@ ProjectionFileView::OnConvertFFTPolar (wxCommandEvent& event)
     m_iDefaultPolarNX = dialogPolar.getXSize();
     m_iDefaultPolarNY = dialogPolar.getYSize();
     m_iDefaultPolarZeropad = dialogPolar.getZeropad();
-    ImageFileDocument* pPolarDoc = dynamic_cast<ImageFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.if", wxDOC_SILENT));
+    ImageFileDocument* pPolarDoc = theApp->newImageDoc();
     ImageFile& rIF = pPolarDoc->getImageFile();
     if (! pPolarDoc) {
       sys_error (ERR_SEVERE, "Unable to create image file");
@@ -2240,7 +2247,7 @@ ProjectionFileView::OnReconstructFBP (wxCommandEvent& event)
     m_iDefaultBackprojector = Backprojector::convertBackprojectNameToID (optBackprojectName.c_str());
     m_iDefaultTrace = dialogReconstruction.getTrace();
     if (m_iDefaultNX > 0 && m_iDefaultNY > 0) {
-      ImageFileDocument* pReconDoc = dynamic_cast<ImageFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.if", wxDOC_SILENT));
+      ImageFileDocument* pReconDoc = theApp->newImageDoc();
       if (! pReconDoc) {
         sys_error (ERR_SEVERE, "Unable to create image file");
         return;
@@ -2481,12 +2488,14 @@ ProjectionFileView::OnUpdate(wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint)
 bool 
 ProjectionFileView::OnClose (bool deleteWindow)
 {
-  if (!GetDocument()->Close())
+  if (! GetDocument() || ! GetDocument()->Close())
     return false;
   
-  //m_canvas->Clear();
-  //m_canvas->setView(NULL);
-  m_canvas = NULL;
+  if (m_canvas) {
+    //m_canvas->Clear();
+    m_canvas->setView(NULL);
+    m_canvas = NULL;
+  }
 //  wxString s(wxTheApp->GetAppName());
 //  if (m_frame)
 //    m_frame->SetTitle(s);
@@ -2539,17 +2548,19 @@ EVT_MENU(PLOTMENU_VIEW_SCALE_AUTO, PlotFileView::OnScaleAuto)
 EVT_MENU(PLOTMENU_VIEW_SCALE_FULL, PlotFileView::OnScaleFull)
 END_EVENT_TABLE()
 
-PlotFileView::PlotFileView(void
+PlotFileView::PlotFileView() 
 : wxView(), m_canvas(NULL), m_frame(NULL), m_pEZPlot(NULL), m_pFileMenu(0)
 {
   m_bMinSpecified = false;
   m_bMaxSpecified = false;
 }
 
-PlotFileView::~PlotFileView(void)
+PlotFileView::~PlotFileView()
 {
   if (m_pEZPlot)
     delete m_pEZPlot;
+
+  
 }
 
 void
@@ -2807,12 +2818,14 @@ PlotFileView::OnUpdate (wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint) )
 bool 
 PlotFileView::OnClose (bool deleteWindow)
 {
-  if (!GetDocument()->Close())
+  if (! GetDocument() || ! GetDocument()->Close())
     return false;
   
-  //m_canvas->Clear();
-  //m_canvas->setView (NULL);
-  m_canvas = NULL;
+  if (m_canvas) {
+    //m_canvas->Clear();
+    m_canvas->setView (NULL);
+    m_canvas = NULL;
+  }
 //  wxString s(wxTheApp->GetAppName());
 //  if (m_frame)
 //    m_frame->SetTitle(s);
@@ -2831,21 +2844,22 @@ PlotFileView::OnClose (bool deleteWindow)
 ////////////////////////////////////////////////////////////////
 
 
-IMPLEMENT_DYNAMIC_CLASS(TextEditView, wxView)
+IMPLEMENT_DYNAMIC_CLASS(TextFileView, wxView)
 
-TextEditView::~TextEditView() 
+TextFileView::~TextFileView() 
 {
+       
 }
 
-bool TextEditView::OnCreate(wxDocument *doc, long WXUNUSED(flags) )
+bool TextFileView::OnCreate(wxDocument *doc, long WXUNUSED(flags) )
 {
   m_pFrame = CreateChildFrame(doc, this);
   SetFrame (m_pFrame);
   
   int width, height;
   m_pFrame->GetClientSize(&width, &height);
-  m_pFrame->SetTitle("TextEdit");
-  m_pCanvas = new TextEditCanvas (this, m_pFrame, wxPoint(0, 0), wxSize(width, height), wxTE_MULTILINE | wxTE_READONLY);
+  m_pFrame->SetTitle("TextFile");
+  m_pCanvas = new TextFileCanvas (this, m_pFrame, wxPoint(0, 0), wxSize(width, height), wxTE_MULTILINE | wxTE_READONLY);
   m_pFrame->SetTitle("Log");
   
 #ifdef __X__
@@ -2862,20 +2876,21 @@ bool TextEditView::OnCreate(wxDocument *doc, long WXUNUSED(flags) )
 }
 
 // Handled by wxTextWindow
-void TextEditView::OnDraw(wxDC *WXUNUSED(dc) )
+void TextFileView::OnDraw(wxDC *WXUNUSED(dc) )
 {
 }
 
-void TextEditView::OnUpdate(wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint) )
+void TextFileView::OnUpdate(wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint) )
 {
 }
 
 bool 
-TextEditView::OnClose (bool deleteWindow)
+TextFileView::OnClose (bool deleteWindow)
 {
-  return false;
+       if (m_pFrame && m_pFrame->GetTitle() == "Log")
+       return false;
   
-  if (!GetDocument()->Close())
+  if (! GetDocument() || ! GetDocument()->Close())
     return false;
   
   Activate(false);
@@ -2883,18 +2898,19 @@ TextEditView::OnClose (bool deleteWindow)
   if (deleteWindow)
   {
     delete m_pFrame;
-    return TRUE;
+       m_pFrame = NULL;
+   
   }
   return TRUE;
 }
 
 wxFrame*
-TextEditView::CreateChildFrame (wxDocument *doc, wxView *view)
+TextFileView::CreateChildFrame (wxDocument *doc, wxView *view)
 {
 #if CTSIM_MDI
-  wxDocMDIChildFrame* subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, "TextEdit Frame", wxPoint(-1, -1), wxSize(300, 150), wxDEFAULT_FRAME_STYLE);
+  wxDocMDIChildFrame* subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, "TextFile Frame", wxPoint(-1, -1), wxSize(300, 150), wxDEFAULT_FRAME_STYLE);
 #else
-  wxDocChildFrame* subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, "TextEdit Frame", wxPoint(-1, -1), wxSize(300, 150), wxDEFAULT_FRAME_STYLE);
+  wxDocChildFrame* subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, "TextFile Frame", wxPoint(-1, -1), wxSize(300, 150), wxDEFAULT_FRAME_STYLE);
 #endif
   theApp->setIconForFrame (subframe);
   
@@ -2945,12 +2961,12 @@ TextEditView::CreateChildFrame (wxDocument *doc, wxView *view)
 
 
 // Define a constructor for my text subwindow
-TextEditCanvas::TextEditCanvas (TextEditView* v, wxFrame* frame, const wxPoint& pos, const wxSize& size, long style)
+TextFileCanvas::TextFileCanvas (TextFileView* v, wxFrame* frame, const wxPoint& pos, const wxSize& size, long style)
   : wxTextCtrl (frame, -1, "", pos, size, style), m_pView(v)
 {
 }
 
-TextEditCanvas::~TextEditCanvas ()
+TextFileCanvas::~TextFileCanvas ()
 {
   if (m_pView) {
     wxMenu* pMenu = m_pView->getFileMenu();