** Date Started: July 2000
**
** This is part of the CTSim program
-** Copyright (C) 1983-2000 Kevin Rosenberg
+** Copyright (c) 1983-2001 Kevin Rosenberg
**
-** $Id: views.cpp,v 1.72 2001/01/26 09:54:31 kevin Exp $
+** $Id: views.cpp,v 1.94 2001/01/31 01:01:22 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
BEGIN_EVENT_TABLE(ImageFileCanvas, wxScrolledWindow)
EVT_MOUSE_EVENTS(ImageFileCanvas::OnMouseEvent)
+EVT_CHAR(ImageFileCanvas::OnChar)
END_EVENT_TABLE()
ImageFileCanvas::ImageFileCanvas (ImageFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style)
-: wxScrolledWindow(frame, -1, pos, size, style)
+: wxScrolledWindow(frame, -1, pos, size, style), m_pView(v), m_xCursor(-1), m_yCursor(-1)
{
- m_pView = v;
- m_xCursor = -1;
- m_yCursor = -1;
}
ImageFileCanvas::~ImageFileCanvas()
{
- if (m_pView) {
- wxMenu* pMenu = m_pView->getFileMenu();
- theApp->getDocManager()->FileHistoryRemoveMenu (pMenu);
- m_pView->canvasClosed();
- m_pView = NULL;
- }
+ m_pView = NULL;
}
void
DrawRubberBandCursor (dc, pt.x, yPt);
m_xCursor = pt.x;
m_yCursor = yPt;
+ wxMenu* pMenu = m_pView->getMenuAnalyze();
+ if (pMenu && ! pMenu->IsEnabled(IFMENU_PLOT_ROW)) {
+ pMenu->Enable (IFMENU_PLOT_ROW, true);
+ pMenu->Enable (IFMENU_PLOT_COL, true);
+ pMenu->Enable (IFMENU_COMPARE_ROW, true);
+ pMenu->Enable (IFMENU_COMPARE_COL, true);
+ pMenu->Enable (IFMENU_PLOT_FFT_ROW, true);
+ pMenu->Enable (IFMENU_PLOT_FFT_COL, true);
+ }
} else
*theApp->getLog() << "Mouse out of image range (" << pt.x << "," << yPt << ")\n";
}
}
}
+void
+ImageFileCanvas::OnChar (wxKeyEvent& event)
+{
+ if (event.GetKeyCode() == WXK_ESCAPE) {
+ m_xCursor = -1;
+ m_yCursor = -1;
+ if (m_pView)
+ m_pView->OnUpdate (NULL);
+ } else
+ wxScrolledWindow::OnChar (event);
+}
+
wxSize
ImageFileCanvas::GetBestSize() const
{
EVT_MENU(IFMENU_IMAGE_MULTIPLY, ImageFileView::OnMultiply)
EVT_MENU(IFMENU_IMAGE_DIVIDE, ImageFileView::OnDivide)
EVT_MENU(IFMENU_IMAGE_SCALESIZE, ImageFileView::OnScaleSize)
+#if wxUSE_GLCANVAS
+EVT_MENU(IFMENU_IMAGE_CONVERT3D, ImageFileView::OnConvert3d)
+#endif
#ifdef HAVE_FFT
EVT_MENU(IFMENU_FILTER_FFT, ImageFileView::OnFFT)
EVT_MENU(IFMENU_FILTER_IFFT, ImageFileView::OnIFFT)
EVT_MENU(IFMENU_PLOT_HISTOGRAM, ImageFileView::OnPlotHistogram)
END_EVENT_TABLE()
-ImageFileView::ImageFileView(void)
-: wxView(), m_canvas(NULL), m_frame(NULL), m_bMinSpecified(false), m_bMaxSpecified(false), m_pFileMenu(0)
+ImageFileView::ImageFileView()
+: wxView(), m_pFrame(NULL), m_pCanvas(NULL), m_pFileMenu(0), m_bMinSpecified(false), m_bMaxSpecified(false)
{
m_iDefaultExportFormatID = ImageFile::FORMAT_PNG;
}
-ImageFileView::~ImageFileView(void)
+ImageFileView::~ImageFileView()
{
+ GetDocumentManager()->FileHistoryRemoveMenu (m_pFileMenu);
+ GetDocumentManager()->ActivateView(this, FALSE, TRUE);
}
+
void
ImageFileView::OnProperties (wxCommandEvent& event)
{
os << "Complex\n";
else
os << "Real\n";
- os << "\nMinimum: "<<min<<"\nMaximum: "<<max<<"\nMean: "<<mean<<"\nMedian: "<<median<<"\nMode: "<<mode<<"\nStandard Deviation: "<<stddev << "\n";
+ os << "Minimum: "<<min<<"\nMaximum: "<<max<<"\nMean: "<<mean<<"\nMedian: "<<median<<"\nMode: "<<mode<<"\nStandard Deviation: "<<stddev << "\n";
if (rIF.isComplex()) {
rIF.statistics (rIF.getImaginaryArray(), min, max, mean, mode, median, stddev);
- os << "\nImaginary: min: "<<min<<"\nmax: "<<max<<"\nmean: "<<mean<<"\nmedian: "<<median<<"\nmode: "<<mode<<"\nstddev: "<<stddev << "\n";
+ os << "Imaginary: min: "<<min<<"\nmax: "<<max<<"\nmean: "<<mean<<"\nmedian: "<<median<<"\nmode: "<<mode<<"\nstddev: "<<stddev << "\n";
}
if (rIF.nLabels() > 0) {
- os << "\n";
rIF.printLabelsBrief (os);
}
- *theApp->getLog() << os.str().c_str();
+ *theApp->getLog() << ">>>>\n" << os.str().c_str() << "<<<<\n";
wxMessageDialog dialogMsg (getFrameForChild(), os.str().c_str(), "Imagefile Properties", wxOK | wxICON_INFORMATION);
dialogMsg.ShowModal();
}
os << GetFrame()->GetTitle().c_str() << ": minimum=" << min << ", maximum=" << max << ", mean=" << mean << ", mode=" << mode << ", median=" << median << ", stddev=" << stddev << "\n";
rCompareIF.statistics (min, max, mean, mode, median, stddev);
os << pCompareDoc->GetFirstView()->GetFrame()->GetTitle().c_str() << ": minimum=" << min << ", maximum=" << max << ", mean=" << mean << ", mode=" << mode << ", median=" << median << ", stddev=" << stddev << "\n";
- os << "\n";
double d, r, e;
rIF.comparativeStatistics (rCompareIF, d, r, e);
os << "Comparative Statistics: d=" << d << ", r=" << r << ", e=" << e << "\n";
- *theApp->getLog() << os.str().c_str();
+ *theApp->getLog() << ">>>>\n" << os.str().c_str() << "<<<<\n";
if (dialogGetCompare.getMakeDifferenceImage()) {
+ ImageFile* pDifferenceImage = new ImageFile;
+
+ pDifferenceImage->setArraySize (rIF.nx(), rIF.ny());
+ if (! rIF.subtractImages (rCompareIF, *pDifferenceImage)) {
+ *theApp->getLog() << "Unable to subtract images\n";
+ delete pDifferenceImage;
+ return;
+ }
ImageFileDocument* pDifferenceDoc = theApp->newImageDoc();
if (! pDifferenceDoc) {
sys_error (ERR_SEVERE, "Unable to create image file");
return;
}
- ImageFile& differenceImage = pDifferenceDoc->getImageFile();
-
- differenceImage.setArraySize (rIF.nx(), rIF.ny());
- if (! rIF.subtractImages (rCompareIF, differenceImage)) {
- pDifferenceDoc->DeleteAllViews();
- return;
- }
-
+ pDifferenceDoc->setImageFile (pDifferenceImage);
+
wxString s = GetFrame()->GetTitle() + ": ";
- differenceImage.labelsCopy (rIF, s.c_str());
+ pDifferenceImage->labelsCopy (rIF, s.c_str());
s = pCompareDoc->GetFirstView()->GetFrame()->GetTitle() + ": ";
- differenceImage.labelsCopy (rCompareIF, s.c_str());
+ pDifferenceImage->labelsCopy (rCompareIF, s.c_str());
std::ostringstream osLabel;
osLabel << "Compare image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str()
<< " and " << pCompareDoc->GetFirstView()->GetFrame()->GetTitle().c_str() << ": "
<< os.str().c_str();
- differenceImage.labelAdd (os.str().c_str());
- if (theApp->getSetModifyNewDocs())
- pDifferenceDoc->Modify(true);
- pDifferenceDoc->UpdateAllViews(this);
- pDifferenceDoc->GetFirstView()->OnUpdate (this, NULL);
+ pDifferenceImage->labelAdd (os.str().c_str());
+ pDifferenceDoc->Modify (true);
+ pDifferenceDoc->UpdateAllViews (this);
+ pDifferenceDoc->getView()->OnUpdate (this, NULL);
+ pDifferenceDoc->getView()->getFrame()->Show(true);
}
wxMessageBox(os.str().c_str(), "Image Comparison");
}
ImageFile& rIF = GetDocument()->getImageFile();
rIF.invertPixelValues (rIF);
rIF.labelAdd ("Invert Pixel Values");
- if (theApp->getSetModifyNewDocs())
- GetDocument()->Modify(TRUE);
- GetDocument()->UpdateAllViews(this);
+ GetDocument()->Modify (true);
+ GetDocument()->UpdateAllViews (this);
}
void
ImageFile& rIF = GetDocument()->getImageFile();
rIF.square (rIF);
rIF.labelAdd ("Square Pixel Values");
- if (theApp->getSetModifyNewDocs())
- GetDocument()->Modify(TRUE);
- GetDocument()->UpdateAllViews(this);
+ GetDocument()->Modify (true);
+ GetDocument()->UpdateAllViews (this);
}
void
ImageFile& rIF = GetDocument()->getImageFile();
rIF.sqrt (rIF);
rIF.labelAdd ("Square-root Pixel Values");
- if (theApp->getSetModifyNewDocs())
- GetDocument()->Modify(TRUE);
- GetDocument()->UpdateAllViews(this);
+ GetDocument()->Modify (true);
+ GetDocument()->UpdateAllViews (this);
}
void
ImageFile& rIF = GetDocument()->getImageFile();
rIF.log (rIF);
rIF.labelAdd ("Logrithm base-e Pixel Values");
- if (theApp->getSetModifyNewDocs())
- GetDocument()->Modify(TRUE);
- GetDocument()->UpdateAllViews(this);
+ GetDocument()->Modify (true);
+ GetDocument()->UpdateAllViews (this);
}
void
ImageFile& rIF = GetDocument()->getImageFile();
rIF.exp (rIF);
rIF.labelAdd ("Exponent base-e Pixel Values");
- if (theApp->getSetModifyNewDocs())
- GetDocument()->Modify(TRUE);
- GetDocument()->UpdateAllViews(this);
+ GetDocument()->Modify (true);
+ GetDocument()->UpdateAllViews (this);
}
void
newImage.labelsCopy (rRHSIF, s.c_str());
newImage.labelAdd (os.str().c_str());
*theApp->getLog() << os.str().c_str() << "\n";
- if (theApp->getSetModifyNewDocs())
- pNewDoc->Modify(TRUE);
- pNewDoc->UpdateAllViews(this);
- pNewDoc->GetFirstView()->OnUpdate (this, NULL);
+ pNewDoc->Modify (true);
+ pNewDoc->UpdateAllViews (this);
+ pNewDoc->getView()->OnUpdate (this, NULL);
+ pNewDoc->getView()->getFrame()->Show(true);
}
}
}
newImage.labelsCopy (rRHSIF, s.c_str());
newImage.labelAdd (os.str().c_str());
*theApp->getLog() << os.str().c_str() << "\n";
- if (theApp->getSetModifyNewDocs())
- pNewDoc->Modify(TRUE);
- pNewDoc->UpdateAllViews(this);
- pNewDoc->GetFirstView()->OnUpdate (this, NULL);
+ pNewDoc->Modify (true);
+ pNewDoc->UpdateAllViews (this);
+ pNewDoc->getView()->OnUpdate (this, NULL);
+ pNewDoc->getView()->getFrame()->Show(true);
}
}
}
newImage.labelsCopy (rRHSIF, s.c_str());
newImage.labelAdd (os.str().c_str());
*theApp->getLog() << os.str().c_str() << "\n";
- if (theApp->getSetModifyNewDocs())
- pNewDoc->Modify(TRUE);
- pNewDoc->UpdateAllViews(this);
- pNewDoc->GetFirstView()->OnUpdate (this, NULL);
+ pNewDoc->Modify (true);
+ pNewDoc->UpdateAllViews (this);
+ pNewDoc->getView()->OnUpdate (this, NULL);
+ pNewDoc->getView()->getFrame()->Show(true);
}
}
}
newImage.labelsCopy (rRHSIF, s.c_str());
newImage.labelAdd (os.str().c_str());
*theApp->getLog() << os.str().c_str() << "\n";
- if (theApp->getSetModifyNewDocs())
- pNewDoc->Modify(TRUE);
- pNewDoc->UpdateAllViews(this);
- pNewDoc->GetFirstView()->OnUpdate (this, NULL);
+ pNewDoc->Modify (true);
+ pNewDoc->UpdateAllViews (this);
+ pNewDoc->getView()->OnUpdate (this, NULL);
+ pNewDoc->getView()->getFrame()->Show(true);
}
}
}
rIF.labelAdd ("FFT Image");
m_bMinSpecified = false;
m_bMaxSpecified = false;
- if (theApp->getSetModifyNewDocs())
- GetDocument()->Modify(TRUE);
- GetDocument()->UpdateAllViews(this);
+ GetDocument()->Modify (true);
+ GetDocument()->UpdateAllViews (this);
}
void
rIF.labelAdd ("IFFT Image");
m_bMinSpecified = false;
m_bMaxSpecified = false;
- if (theApp->getSetModifyNewDocs())
- GetDocument()->Modify(TRUE);
- GetDocument()->UpdateAllViews(this);
+ GetDocument()->Modify (true);
+ GetDocument()->UpdateAllViews (this);
}
void
rIF.labelAdd ("FFT Rows");
m_bMinSpecified = false;
m_bMaxSpecified = false;
- if (theApp->getSetModifyNewDocs())
- GetDocument()->Modify(TRUE);
- GetDocument()->UpdateAllViews(this);
+ GetDocument()->Modify (true);
+ GetDocument()->UpdateAllViews (this);
}
void
rIF.labelAdd ("IFFT Rows");
m_bMinSpecified = false;
m_bMaxSpecified = false;
- if (theApp->getSetModifyNewDocs())
- GetDocument()->Modify(TRUE);
- GetDocument()->UpdateAllViews(this);
+ GetDocument()->Modify (true);
+ GetDocument()->UpdateAllViews (this);
}
void
rIF.labelAdd ("FFT Columns");
m_bMinSpecified = false;
m_bMaxSpecified = false;
- if (theApp->getSetModifyNewDocs())
- GetDocument()->Modify(TRUE);
- GetDocument()->UpdateAllViews(this);
+ GetDocument()->Modify (true);
+ GetDocument()->UpdateAllViews (this);
}
void
rIF.labelAdd ("IFFT Columns");
m_bMinSpecified = false;
m_bMaxSpecified = false;
- if (theApp->getSetModifyNewDocs())
- GetDocument()->Modify(TRUE);
- GetDocument()->UpdateAllViews(this);
+ GetDocument()->Modify (true);
+ GetDocument()->UpdateAllViews (this);
}
#endif
rIF.labelAdd ("Fourier Image");
m_bMinSpecified = false;
m_bMaxSpecified = false;
- if (theApp->getSetModifyNewDocs())
- GetDocument()->Modify(TRUE);
- GetDocument()->UpdateAllViews(this);
+ GetDocument()->Modify (true);
+ GetDocument()->UpdateAllViews (this);
}
void
rIF.labelAdd ("Inverse Fourier Image");
m_bMinSpecified = false;
m_bMaxSpecified = false;
- if (theApp->getSetModifyNewDocs())
- GetDocument()->Modify(TRUE);
- GetDocument()->UpdateAllViews(this);
+ GetDocument()->Modify (true);
+ GetDocument()->UpdateAllViews (this);
}
void
rIF.labelAdd ("Shuffle Natural To Fourier Order");
m_bMinSpecified = false;
m_bMaxSpecified = false;
- if (theApp->getSetModifyNewDocs())
- GetDocument()->Modify(TRUE);
- GetDocument()->UpdateAllViews(this);
+ GetDocument()->Modify (true);
+ GetDocument()->UpdateAllViews (this);
}
void
rIF.labelAdd ("Shuffle Fourier To Natural Order");
m_bMinSpecified = false;
m_bMaxSpecified = false;
- if (theApp->getSetModifyNewDocs())
- GetDocument()->Modify(TRUE);
- GetDocument()->UpdateAllViews(this);
+ GetDocument()->Modify (true);
+ GetDocument()->UpdateAllViews (this);
}
void
rIF.labelAdd ("Magnitude of complex-image");
m_bMinSpecified = false;
m_bMaxSpecified = false;
- if (theApp->getSetModifyNewDocs())
- GetDocument()->Modify(TRUE);
- GetDocument()->UpdateAllViews(this);
+ GetDocument()->Modify (true);
+ GetDocument()->UpdateAllViews (this);
}
}
rIF.labelAdd ("Phase of complex-image");
m_bMinSpecified = false;
m_bMaxSpecified = false;
- if (theApp->getSetModifyNewDocs())
- GetDocument()->Modify(TRUE);
- GetDocument()->UpdateAllViews(this);
+ GetDocument()->Modify (true);
+ GetDocument()->UpdateAllViews (this);
}
}
ImageFileCanvas*
-ImageFileView::CreateCanvas (wxView *view, wxFrame *parent)
+ImageFileView::CreateCanvas (wxFrame* parent)
{
ImageFileCanvas* pCanvas;
int width, height;
parent->GetClientSize(&width, &height);
- pCanvas = new ImageFileCanvas (dynamic_cast<ImageFileView*>(view), parent, wxPoint(0, 0), wxSize(width, height), 0);
+ pCanvas = new ImageFileCanvas (this, parent, wxPoint(0, 0), wxSize(width, height), 0);
pCanvas->SetScrollbars(20, 20, 50, 50);
pCanvas->SetBackgroundColour(*wxWHITE);
return pCanvas;
}
-wxFrame*
+#if CTSIM_MDI
+wxDocMDIChildFrame*
+#else
+wxDocChildFrame*
+#endif
ImageFileView::CreateChildFrame(wxDocument *doc, wxView *view)
{
#if CTSIM_MDI
#endif
theApp->setIconForFrame (subframe);
- wxMenu *m_pFileMenu = new wxMenu;
+ m_pFileMenu = new wxMenu;
m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...\tCtrl-P");
m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter...\tCtrl-F");
m_pFileMenu->Append(wxID_SAVE, "&Save\tCtrl-S");
m_pFileMenu->Append(wxID_SAVEAS, "Save &As...");
m_pFileMenu->Append(wxID_CLOSE, "&Close\tCtrl-W");
+ m_pFileMenu->Append(wxID_REVERT, "Re&vert");
m_pFileMenu->AppendSeparator();
m_pFileMenu->Append(IFMENU_FILE_PROPERTIES, "P&roperties");
m_pFileMenu->AppendSeparator();
m_pFileMenu->Append(wxID_PRINT, "&Print...");
m_pFileMenu->Append(wxID_PRINT_SETUP, "Print &Setup...");
- m_pFileMenu->Append(wxID_PREVIEW, "Print Pre&view");
+ m_pFileMenu->Append(wxID_PREVIEW, "Print Preview");
#ifdef CTSIM_MDI
m_pFileMenu->AppendSeparator();
m_pFileMenu->Append(MAINMENU_FILE_EXIT, "E&xit");
#endif
- theApp->getDocManager()->FileHistoryAddFilesToMenu(m_pFileMenu);
- theApp->getDocManager()->FileHistoryUseMenu(m_pFileMenu);
+ GetDocumentManager()->FileHistoryAddFilesToMenu(m_pFileMenu);
+ GetDocumentManager()->FileHistoryUseMenu(m_pFileMenu);
wxMenu *view_menu = new wxMenu;
view_menu->Append(IFMENU_VIEW_SCALE_MINMAX, "Display Scale S&et...\tCtrl-E");
image_menu->Append (IFMENU_IMAGE_DIVIDE, "&Divide...");
image_menu->AppendSeparator();
image_menu->Append (IFMENU_IMAGE_SCALESIZE, "S&cale Size...");
+#if wxUSE_GLCANVAS
+ image_menu->Append (IFMENU_IMAGE_CONVERT3D, "Convert &3-D\tCtrl-3");
+#endif
- wxMenu *analyze_menu = new wxMenu;
- analyze_menu->Append (IFMENU_PLOT_ROW, "Plot &Row");
- analyze_menu->Append (IFMENU_PLOT_COL, "Plot &Column");
- analyze_menu->Append (IFMENU_PLOT_HISTOGRAM, "Plot &Histogram");
- analyze_menu->AppendSeparator();
- analyze_menu->Append (IFMENU_PLOT_FFT_ROW, "Plot FFT Row");
- analyze_menu->Append (IFMENU_PLOT_FFT_COL, "Plot FFT Column");
- analyze_menu->AppendSeparator();
- analyze_menu->Append (IFMENU_COMPARE_IMAGES, "Compare &Images...");
- analyze_menu->Append (IFMENU_COMPARE_ROW, "Compare &Row");
- analyze_menu->Append (IFMENU_COMPARE_COL, "Compare &Column");
+ m_pMenuAnalyze = new wxMenu;
+ m_pMenuAnalyze->Append (IFMENU_PLOT_ROW, "Plot &Row");
+ m_pMenuAnalyze->Append (IFMENU_PLOT_COL, "Plot &Column");
+ m_pMenuAnalyze->Append (IFMENU_PLOT_HISTOGRAM, "Plot &Histogram");
+ m_pMenuAnalyze->AppendSeparator();
+ m_pMenuAnalyze->Append (IFMENU_PLOT_FFT_ROW, "Plot FFT Row");
+ m_pMenuAnalyze->Append (IFMENU_PLOT_FFT_COL, "Plot FFT Column");
+ m_pMenuAnalyze->AppendSeparator();
+ m_pMenuAnalyze->Append (IFMENU_COMPARE_IMAGES, "Compare &Images...");
+ m_pMenuAnalyze->Append (IFMENU_COMPARE_ROW, "Compare &Row");
+ m_pMenuAnalyze->Append (IFMENU_COMPARE_COL, "Compare &Column");
+ m_pMenuAnalyze->Enable (IFMENU_PLOT_ROW, false);
+ m_pMenuAnalyze->Enable (IFMENU_PLOT_COL, false);
+ m_pMenuAnalyze->Enable (IFMENU_COMPARE_ROW, false);
+ m_pMenuAnalyze->Enable (IFMENU_COMPARE_COL, false);
+ m_pMenuAnalyze->Enable (IFMENU_PLOT_FFT_ROW, false);
+ m_pMenuAnalyze->Enable (IFMENU_PLOT_FFT_COL, false);
wxMenu *help_menu = new wxMenu;
help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1");
menu_bar->Append(view_menu, "&View");
menu_bar->Append(image_menu, "&Image");
menu_bar->Append(filter_menu, "Fi<er");
- menu_bar->Append(analyze_menu, "&Analyze");
+ menu_bar->Append(m_pMenuAnalyze, "&Analyze");
menu_bar->Append(help_menu, "&Help");
subframe->SetMenuBar(menu_bar);
subframe->Centre(wxBOTH);
- wxAcceleratorEntry accelEntries[10];
+ wxAcceleratorEntry accelEntries[11];
accelEntries[0].Set (wxACCEL_CTRL, static_cast<int>('O'), wxID_OPEN);
accelEntries[1].Set (wxACCEL_CTRL, static_cast<int>('S'), wxID_SAVE);
accelEntries[2].Set (wxACCEL_CTRL, static_cast<int>('W'), wxID_CLOSE);
accelEntries[7].Set (wxACCEL_CTRL, static_cast<int>('A'), IFMENU_VIEW_SCALE_AUTO);
accelEntries[8].Set (wxACCEL_CTRL, static_cast<int>('U'), IFMENU_VIEW_SCALE_FULL);
accelEntries[9].Set (wxACCEL_CTRL, static_cast<int>('E'), IFMENU_VIEW_SCALE_MINMAX);
+#if wxUSE_GLCANVAS
+ accelEntries[10].Set (wxACCEL_CTRL, static_cast<int>('3'), IFMENU_IMAGE_CONVERT3D);
+ wxAcceleratorTable accelTable (11, accelEntries);
+#else
wxAcceleratorTable accelTable (10, accelEntries);
+#endif
+
subframe->SetAcceleratorTable (accelTable);
return subframe;
bool
ImageFileView::OnCreate (wxDocument *doc, long WXUNUSED(flags) )
{
- m_frame = CreateChildFrame(doc, this);
- SetFrame (m_frame);
+ m_pFrame = CreateChildFrame(doc, this);
+ (m_pFrame);
m_bMinSpecified = false;
m_bMaxSpecified = false;
m_dAutoScaleFactor = 1.;
int width, height;
- m_frame->GetClientSize (&width, &height);
- m_frame->SetTitle("ImageFileView");
- m_canvas = CreateCanvas (this, m_frame);
+ m_pFrame->GetClientSize (&width, &height);
+ m_pFrame->SetTitle("ImageFileView");
+ m_pCanvas = CreateCanvas (m_pFrame);
int x, y; // X requires a forced resize
- m_frame->GetSize(&x, &y);
- m_frame->SetSize(-1, -1, x, y);
- m_frame->SetFocus();
- m_frame->Show(true);
+ m_pFrame->GetSize(&x, &y);
+ m_pFrame->SetSize(-1, -1, x, y);
+ m_pFrame->SetFocus();
+ m_pFrame->Show(true);
Activate(true);
return true;
void
ImageFileView::OnDraw (wxDC* dc)
{
- wxSize sizeWindow = m_frame->GetClientSize();
- wxSize sizeBest = m_canvas->GetBestSize();
+ wxSize sizeWindow = m_pFrame->GetClientSize();
+ wxSize sizeBest = m_pCanvas->GetBestSize();
if (sizeWindow.x > sizeBest.x || sizeWindow.y > sizeBest.y)
- m_frame->SetClientSize (sizeBest);
+ m_pFrame->SetClientSize (sizeBest);
if (m_bitmap.Ok())
dc->DrawBitmap(m_bitmap, 0, 0, false);
int xCursor, yCursor;
- if (m_canvas->GetCurrentCursor (xCursor, yCursor))
- m_canvas->DrawRubberBandCursor (*dc, xCursor, yCursor);
+ if (m_pCanvas->GetCurrentCursor (xCursor, yCursor))
+ m_pCanvas->DrawRubberBandCursor (*dc, xCursor, yCursor);
}
void
ImageFileView::OnUpdate (wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint) )
{
- const ImageFile& rIF = dynamic_cast<ImageFileDocument*>(GetDocument())->getImageFile();
+ const ImageFile& rIF = GetDocument()->getImageFile();
ImageFileArrayConst v = rIF.getArray();
int nx = rIF.nx();
int ny = rIF.ny();
int xSize = nx;
int ySize = ny;
ySize = clamp (ySize, 0, 800);
- m_frame->SetClientSize (xSize, ySize);
- m_canvas->SetScrollbars(20, 20, nx/20, ny/20);
- m_canvas->SetBackgroundColour(*wxWHITE);
+ m_pFrame->SetClientSize (xSize, ySize);
+ m_pCanvas->SetScrollbars(20, 20, nx/20, ny/20);
+ m_pCanvas->SetBackgroundColour(*wxWHITE);
}
- if (m_canvas)
- m_canvas->Refresh();
+ if (m_pCanvas)
+ m_pCanvas->Refresh();
}
bool
ImageFileView::OnClose (bool deleteWindow)
{
- if (!GetDocument()->Close())
+ //GetDocumentManager()->ActivateView (this, false, true);
+ if (! GetDocument() || ! GetDocument()->Close())
return false;
-
- if (m_canvas) {
- // m_canvas->Clear();
- m_canvas->setView(NULL);
- m_canvas = NULL;
+
+ Activate (false);
+ if (m_pCanvas) {
+ m_pCanvas->setView(NULL);
+ m_pCanvas = NULL;
}
wxString s(theApp->GetAppName());
-// if (m_frame)
-// m_frame->SetTitle(s);
- SetFrame(NULL);
+ if (m_pFrame)
+ m_pFrame->SetTitle(s);
- Activate(false);
+ SetFrame(NULL);
if (deleteWindow) {
- delete m_frame;
- return true;
+ m_pFrame->Destroy();
+ m_pFrame = NULL;
+ if (GetDocument() && GetDocument()->getBadFileOpen())
+ ::wxYield(); // wxWindows bug workaround
}
+
return true;
}
void
ImageFileView::OnExport (wxCommandEvent& event)
{
- ImageFile& rIF = dynamic_cast<ImageFileDocument*>(GetDocument())->getImageFile();
+ ImageFile& rIF = GetDocument()->getImageFile();
ImageFileArrayConst v = rIF.getArray();
int nx = rIF.nx();
int ny = rIF.ny();
rScaledIF.labelAdd (os.str().c_str());
rIF.scaleImage (rScaledIF);
*theApp->getLog() << os.str().c_str() << "\n";
- if (theApp->getSetModifyNewDocs())
- pScaledDoc->Modify(TRUE);
+ pScaledDoc->Modify (true);
pScaledDoc->UpdateAllViews (this);
- pScaledDoc->GetFirstView()->OnUpdate (this, NULL);
+ pScaledDoc->getView()->OnUpdate (this, NULL);
+ pScaledDoc->getView()->getFrame()->Show(true);
}
}
+#if wxUSE_GLCANVAS
+void
+ImageFileView::OnConvert3d (wxCommandEvent& event)
+{
+ ImageFile& rIF = GetDocument()->getImageFile();
+ Graph3dFileDocument* pGraph3d = theApp->newGraph3dDoc();
+ pGraph3d->setBadFileOpen();
+ pGraph3d->createFromImageFile (rIF);
+ pGraph3d->getView()->getFrame()->SetClientSize (200, 200);
+ pGraph3d->getView()->getFrame()->Show (true);
+}
+#endif
+
void
ImageFileView::OnPlotRow (wxCommandEvent& event)
{
int xCursor, yCursor;
- if (! m_canvas->GetCurrentCursor (xCursor, yCursor)) {
+ if (! m_pCanvas->GetCurrentCursor (xCursor, yCursor)) {
wxMessageBox ("No row selected. Please use left mouse button on image to select column","Error");
return;
}
- const ImageFile& rIF = dynamic_cast<ImageFileDocument*>(GetDocument())->getImageFile();
+ const ImageFile& rIF = GetDocument()->getImageFile();
ImageFileArrayConst v = rIF.getArray();
ImageFileArrayConst vImag = rIF.getImaginaryArray();
int nx = rIF.nx();
delete pYImag;
delete pYMag;
}
- if (theApp->getSetModifyNewDocs())
- pPlotDoc->Modify(true);
- pPlotDoc->UpdateAllViews();
+ pPlotDoc->Modify (true);
+ pPlotDoc->UpdateAllViews ();
+ pPlotDoc->getView()->OnUpdate (this, NULL);
+ pPlotDoc->getView()->getFrame()->Show(true);
}
}
ImageFileView::OnPlotCol (wxCommandEvent& event)
{
int xCursor, yCursor;
- if (! m_canvas->GetCurrentCursor (xCursor, yCursor)) {
+ if (! m_pCanvas->GetCurrentCursor (xCursor, yCursor)) {
wxMessageBox ("No column selected. Please use left mouse button on image to select column","Error");
return;
}
- const ImageFile& rIF = dynamic_cast<ImageFileDocument*>(GetDocument())->getImageFile();
+ const ImageFile& rIF = GetDocument()->getImageFile();
ImageFileArrayConst v = rIF.getArray();
ImageFileArrayConst vImag = rIF.getImaginaryArray();
int nx = rIF.nx();
delete pYImag;
delete pYMag;
}
- if (theApp->getSetModifyNewDocs())
- pPlotDoc->Modify(true);
- pPlotDoc->UpdateAllViews();
+ pPlotDoc->Modify (true);
+ pPlotDoc->UpdateAllViews ();
+ pPlotDoc->getView()->OnUpdate (this, NULL);
+ pPlotDoc->getView()->getFrame()->Show(true);
}
}
ImageFileView::OnPlotFFTRow (wxCommandEvent& event)
{
int xCursor, yCursor;
- if (! m_canvas->GetCurrentCursor (xCursor, yCursor)) {
+ if (! m_pCanvas->GetCurrentCursor (xCursor, yCursor)) {
wxMessageBox ("No row selected. Please use left mouse button on image to select column","Error");
return;
}
- const ImageFile& rIF = dynamic_cast<ImageFileDocument*>(GetDocument())->getImageFile();
+ const ImageFile& rIF = GetDocument()->getImageFile();
ImageFileArrayConst v = rIF.getArray();
ImageFileArrayConst vImag = rIF.getImaginaryArray();
int nx = rIF.nx();
delete pYMag;
delete [] pcIn;
- if (theApp->getSetModifyNewDocs())
- pPlotDoc->Modify(true);
- pPlotDoc->UpdateAllViews();
+ pPlotDoc->Modify (true);
+ pPlotDoc->UpdateAllViews ();
+ pPlotDoc->getView()->OnUpdate (this, NULL);
+ pPlotDoc->getView()->getFrame()->Show(true);
}
}
ImageFileView::OnPlotFFTCol (wxCommandEvent& event)
{
int xCursor, yCursor;
- if (! m_canvas->GetCurrentCursor (xCursor, yCursor)) {
+ if (! m_pCanvas->GetCurrentCursor (xCursor, yCursor)) {
wxMessageBox ("No column selected. Please use left mouse button on image to select column","Error");
return;
}
- const ImageFile& rIF = dynamic_cast<ImageFileDocument*>(GetDocument())->getImageFile();
+ const ImageFile& rIF = GetDocument()->getImageFile();
ImageFileArrayConst v = rIF.getArray();
ImageFileArrayConst vImag = rIF.getImaginaryArray();
int nx = rIF.nx();
delete pdTemp;
delete [] pcIn;
- if (theApp->getSetModifyNewDocs())
- pPlotDoc->Modify(true);
- pPlotDoc->UpdateAllViews();
+ pPlotDoc->Modify (true);
+ pPlotDoc->UpdateAllViews ();
+ pPlotDoc->getView()->OnUpdate (this, NULL);
+ pPlotDoc->getView()->getFrame()->Show(true);
}
}
#endif
ImageFileView::OnCompareCol (wxCommandEvent& event)
{
int xCursor, yCursor;
- if (! m_canvas->GetCurrentCursor (xCursor, yCursor)) {
+ if (! m_pCanvas->GetCurrentCursor (xCursor, yCursor)) {
wxMessageBox ("No column selected. Please use left mouse button on image to select column","Error");
return;
}
delete pX;
delete pY1;
delete pY2;
- if (theApp->getSetModifyNewDocs())
- pPlotDoc->Modify(true);
- pPlotDoc->UpdateAllViews();
+ pPlotDoc->Modify (true);
+ pPlotDoc->UpdateAllViews ();
+ pPlotDoc->getView()->OnUpdate (this, NULL);
+ pPlotDoc->getView()->getFrame()->Show(true);
}
}
}
ImageFileView::OnCompareRow (wxCommandEvent& event)
{
int xCursor, yCursor;
- if (! m_canvas->GetCurrentCursor (xCursor, yCursor)) {
+ if (! m_pCanvas->GetCurrentCursor (xCursor, yCursor)) {
wxMessageBox ("No column selected. Please use left mouse button on image to select column","Error");
return;
}
delete pX;
delete pY1;
delete pY2;
- if (theApp->getSetModifyNewDocs())
- pPlotDoc->Modify(true);
- pPlotDoc->UpdateAllViews();
+ pPlotDoc->Modify (true);
+ pPlotDoc->UpdateAllViews ();
+ pPlotDoc->getView()->OnUpdate (this, NULL);
+ pPlotDoc->getView()->getFrame()->Show(true);
}
}
}
void
ImageFileView::OnPlotHistogram (wxCommandEvent& event)
{
- const ImageFile& rIF = dynamic_cast<ImageFileDocument*>(GetDocument())->getImageFile();
+ const ImageFile& rIF = GetDocument()->getImageFile();
ImageFileArrayConst v = rIF.getArray();
int nx = rIF.nx();
int ny = rIF.ny();
rPlotFile.addDescription (os.str().c_str());
delete pX;
delete pY;
- if (theApp->getSetModifyNewDocs())
- pPlotDoc->Modify(true);
- pPlotDoc->UpdateAllViews();
+ pPlotDoc->Modify (true);
+ pPlotDoc->UpdateAllViews ();
+ pPlotDoc->getView()->OnUpdate (this, NULL);
+ pPlotDoc->getView()->getFrame()->Show(true);
}
}
PhantomCanvas::~PhantomCanvas ()
{
- if (m_pView) {
- wxMenu* pMenu = m_pView->getFileMenu();
- theApp->getDocManager()->FileHistoryRemoveMenu (pMenu);
- m_pView->canvasClosed();
- m_pView = NULL;
- }
+ m_pView = NULL;
}
void
EVT_MENU(PHMMENU_PROCESS_PROJECTIONS, PhantomFileView::OnProjections)
END_EVENT_TABLE()
-PhantomFileView::PhantomFileView(void)
-: wxView(), m_canvas(NULL), m_frame(NULL), m_pFileMenu(0)
+PhantomFileView::PhantomFileView()
+: wxView(), m_pFrame(NULL), m_pCanvas(NULL), m_pFileMenu(0)
{
+#if defined(DEBUG) || defined(_DEBUG)
+ m_iDefaultNDet = 165;
+ m_iDefaultNView = 180;
+#else
m_iDefaultNDet = 367;
m_iDefaultNView = 320;
- m_iDefaultNSample = 2;
+#endif
+ m_iDefaultNSample = 1;
m_dDefaultRotation = 1;
m_dDefaultFocalLength = 2;
m_dDefaultFieldOfView = 1;
m_iDefaultGeometry = Scanner::GEOMETRY_PARALLEL;
m_iDefaultTrace = Trace::TRACE_NONE;
+#ifdef DEBUG
+ m_iDefaultRasterNX = 115;
+ m_iDefaultRasterNY = 115;
+ m_iDefaultRasterNSamples = 1;
+#else
m_iDefaultRasterNX = 256;
m_iDefaultRasterNY = 256;
m_iDefaultRasterNSamples = 2;
+#endif
}
PhantomFileView::~PhantomFileView()
{
+ GetDocumentManager()->FileHistoryRemoveMenu (m_pFileMenu);
+ GetDocumentManager()->ActivateView(this, FALSE, TRUE);
}
void
#if DEBUG
rPhantom.print (os);
#endif
- *theApp->getLog() << os.str().c_str() << "\n";
+ *theApp->getLog() << ">>>>\n" << os.str().c_str() << "<<<<\n";
wxMessageBox (os.str().c_str(), "Phantom Properties");
}
if (m_iDefaultNDet > 0 && m_iDefaultNView > 0 && sGeometry != "") {
const Phantom& rPhantom = GetDocument()->getPhantom();
- ProjectionFileDocument* pProjectionDoc = theApp->newProjectionDoc();
- if (! pProjectionDoc) {
- sys_error (ERR_SEVERE, "Unable to create projection document");
- return;
- }
- Projections& rProj = pProjectionDoc->getProjections();
- Scanner theScanner (rPhantom, sGeometry.c_str(), m_iDefaultNDet, m_iDefaultNView, m_iDefaultNSample, m_dDefaultRotation, m_dDefaultFocalLength, m_dDefaultFieldOfView);
+ Projections* pProj = new Projections;
+ Scanner theScanner (rPhantom, sGeometry.c_str(), m_iDefaultNDet, m_iDefaultNView, m_iDefaultNSample,
+ m_dDefaultRotation, m_dDefaultFocalLength, m_dDefaultFieldOfView);
if (theScanner.fail()) {
*theApp->getLog() << "Failed making scanner: " << theScanner.failMessage().c_str() << "\n";
return;
}
- rProj.initFromScanner (theScanner);
+ pProj->initFromScanner (theScanner);
m_dDefaultRotation /= PI; // convert back to PI units
Timer timer;
if (m_iDefaultTrace > Trace::TRACE_CONSOLE) {
- ProjectionsDialog dialogProjections (theScanner, rProj, rPhantom, m_iDefaultTrace, dynamic_cast<wxWindow*>(getFrameForChild()));
- for (int iView = 0; iView < rProj.nView(); iView++) {
- ::wxYield();
+ ProjectionsDialog dialogProjections (theScanner, *pProj, rPhantom, m_iDefaultTrace, dynamic_cast<wxWindow*>(getFrameForChild()));
+ for (int iView = 0; iView < pProj->nView(); iView++) {
::wxYield();
if (dialogProjections.isCancelled() || ! dialogProjections.projectView (iView)) {
- pProjectionDoc->DeleteAllViews();
+ delete pProj;
return;
}
::wxYield();
- ::wxYield();
while (dialogProjections.isPaused()) {
::wxYield();
::wxUsleep(50);
}
}
} else {
- wxProgressDialog dlgProgress (wxString("Projection"), wxString("Projection Progress"), rProj.nView() + 1, getFrameForChild(), wxPD_CAN_ABORT);
- for (int i = 0; i < rProj.nView(); i++) {
- theScanner.collectProjections (rProj, rPhantom, i, 1, true, m_iDefaultTrace);
+ wxProgressDialog dlgProgress (wxString("Projection"), wxString("Projection Progress"), pProj->nView() + 1, getFrameForChild(), wxPD_CAN_ABORT);
+ for (int i = 0; i < pProj->nView(); i++) {
+ theScanner.collectProjections (*pProj, rPhantom, i, 1, true, m_iDefaultTrace);
if (! dlgProgress.Update (i+1)) {
- pProjectionDoc->DeleteAllViews();
+ delete pProj;
return;
}
}
std::ostringstream os;
os << "Projections for " << rPhantom.name() << ": nDet=" << m_iDefaultNDet << ", nView=" << m_iDefaultNView << ", nSamples=" << m_iDefaultNSample << ", RotAngle=" << m_dDefaultRotation << ", FocalLengthRatio=" << m_dDefaultFocalLength << ", FieldOfViewRatio=" << m_dDefaultFieldOfView << ", Geometry=" << sGeometry.c_str();
- rProj.setCalcTime (timer.timerEnd());
- rProj.setRemark (os.str());
+ pProj->setCalcTime (timer.timerEnd());
+ pProj->setRemark (os.str());
*theApp->getLog() << os.str().c_str() << "\n";
- m_frame->Lower();
::wxYield();
- ProjectionFileView* projView = dynamic_cast<ProjectionFileView*>(pProjectionDoc->GetFirstView());
+ ProjectionFileDocument* pProjectionDoc = theApp->newProjectionDoc();
+ if (! pProjectionDoc) {
+ sys_error (ERR_SEVERE, "Unable to create projection document");
+ return;
+ }
+ pProjectionDoc->setProjections (pProj);
+ ProjectionFileView* projView = pProjectionDoc->getView();
if (projView) {
- projView->getFrame()->SetFocus();
projView->OnUpdate (projView, NULL);
- }
- if (wxView* pView = pProjectionDoc->GetFirstView()) {
- if (wxFrame* pFrame = pView->GetFrame()) {
+ if (projView->getCanvas())
+ projView->getCanvas()->SetClientSize (m_iDefaultNDet, m_iDefaultNView);
+ if (wxFrame* pFrame = projView->getFrame()) {
+ pFrame->Show(true);
pFrame->SetFocus();
pFrame->Raise();
}
- theApp->getDocManager()->ActivateView (pView, true, false);
+ GetDocumentManager()->ActivateView (projView, true, false);
}
::wxYield();
- if (theApp->getSetModifyNewDocs())
- pProjectionDoc->Modify(true);
- pProjectionDoc->UpdateAllViews(this);
+ pProjectionDoc-> Modify(true);
+ pProjectionDoc->UpdateAllViews (this);
}
}
}
m_iDefaultRasterNSamples = 1;
if (m_iDefaultRasterNX > 0 && m_iDefaultRasterNY > 0) {
const Phantom& rPhantom = GetDocument()->getPhantom();
- ImageFileDocument* pRasterDoc = theApp->newImageDoc();
- if (! pRasterDoc) {
- sys_error (ERR_SEVERE, "Unable to create image file");
- return;
- }
- ImageFile& imageFile = pRasterDoc->getImageFile();
+
+ ImageFile* pImageFile = new ImageFile;
- imageFile.setArraySize (m_iDefaultRasterNX, m_iDefaultRasterNX);
- wxProgressDialog dlgProgress (wxString("Rasterize"), wxString("Rasterization Progress"), imageFile.nx() + 1, getFrameForChild(), wxPD_CAN_ABORT);
+ pImageFile->setArraySize (m_iDefaultRasterNX, m_iDefaultRasterNY);
+ wxProgressDialog dlgProgress (wxString("Rasterize"), wxString("Rasterization Progress"),
+ pImageFile->nx() + 1, getFrameForChild(), wxPD_CAN_ABORT);
Timer timer;
- for (unsigned int i = 0; i < imageFile.nx(); i++) {
- rPhantom.convertToImagefile (imageFile, m_iDefaultRasterNSamples, Trace::TRACE_NONE, i, 1, true);
- if (! dlgProgress.Update(i+1)) {
- pRasterDoc->DeleteAllViews();
+ for (unsigned int i = 0; i < pImageFile->nx(); i++) {
+ rPhantom.convertToImagefile (*pImageFile, m_iDefaultRasterNSamples, Trace::TRACE_NONE, i, 1, true);
+ if (! dlgProgress.Update (i+1)) {
+ delete pImageFile;
return;
}
}
- if (theApp->getSetModifyNewDocs())
- pRasterDoc->Modify(true);
- pRasterDoc->UpdateAllViews(this);
+
+ ImageFileDocument* pRasterDoc = theApp->newImageDoc();
+ if (! pRasterDoc) {
+ sys_error (ERR_SEVERE, "Unable to create image file");
+ return;
+ }
+ pRasterDoc->setImageFile (pImageFile);
+
+ pRasterDoc->Modify (true);
+ pRasterDoc->UpdateAllViews (this);
+ pRasterDoc->getView()->getFrame()->Show(true);
std::ostringstream os;
os << "Rasterize Phantom " << rPhantom.name() << ": XSize=" << m_iDefaultRasterNX << ", YSize="
<< m_iDefaultRasterNY << ", nSamples=" << m_iDefaultRasterNSamples;
*theApp->getLog() << os.str().c_str() << "\n";
- imageFile.labelAdd (os.str().c_str(), timer.timerEnd());
- ImageFileView* rasterView = dynamic_cast<ImageFileView*>(pRasterDoc->GetFirstView());
+ pImageFile->labelAdd (os.str().c_str(), timer.timerEnd());
+ ImageFileView* rasterView = pRasterDoc->getView();
if (rasterView) {
rasterView->getFrame()->SetFocus();
rasterView->OnUpdate (rasterView, NULL);
PhantomCanvas*
-PhantomFileView::CreateCanvas (wxView *view, wxFrame *parent)
+PhantomFileView::CreateCanvas (wxFrame *parent)
{
PhantomCanvas* pCanvas;
int width, height;
parent->GetClientSize(&width, &height);
- pCanvas = new PhantomCanvas (dynamic_cast<PhantomFileView*>(view), parent, wxPoint(0, 0), wxSize(width, height), 0);
+ pCanvas = new PhantomCanvas (this, parent, wxPoint(0, 0), wxSize(width, height), 0);
pCanvas->SetBackgroundColour(*wxWHITE);
pCanvas->Clear();
return pCanvas;
}
-wxFrame*
+#if CTSIM_MDI
+wxDocMDIChildFrame*
+#else
+wxDocChildFrame*
+#endif
PhantomFileView::CreateChildFrame(wxDocument *doc, wxView *view)
{
#if CTSIM_MDI
#endif
theApp->setIconForFrame (subframe);
- wxMenu *m_pFileMenu = new wxMenu;
+ m_pFileMenu = new wxMenu;
m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...\tCtrl-P");
m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter...\tCtrl-F");
m_pFileMenu->AppendSeparator();
m_pFileMenu->Append(MAINMENU_FILE_EXIT, "E&xit");
#endif
- theApp->getDocManager()->FileHistoryAddFilesToMenu(m_pFileMenu);
- theApp->getDocManager()->FileHistoryUseMenu(m_pFileMenu);
+ GetDocumentManager()->FileHistoryAddFilesToMenu(m_pFileMenu);
+ GetDocumentManager()->FileHistoryUseMenu(m_pFileMenu);
wxMenu *process_menu = new wxMenu;
process_menu->Append(PHMMENU_PROCESS_RASTERIZE, "&Rasterize...\tCtrl-R");
bool
PhantomFileView::OnCreate(wxDocument *doc, long WXUNUSED(flags) )
{
- m_frame = CreateChildFrame(doc, this);
- SetFrame(m_frame);
+ m_pFrame = CreateChildFrame(doc, this);
+ SetFrame(m_pFrame);
int width, height;
- m_frame->GetClientSize(&width, &height);
- m_frame->SetTitle("PhantomFileView");
- m_canvas = CreateCanvas (this, m_frame);
+ m_pFrame->GetClientSize(&width, &height);
+ m_pFrame->SetTitle("PhantomFileView");
+ m_pCanvas = CreateCanvas (m_pFrame);
#ifdef __X__
int x, y; // X requires a forced resize
- m_frame->GetSize(&x, &y);
- m_frame->SetSize(-1, -1, x, y);
+ m_pFrame->GetSize(&x, &y);
+ m_pFrame->SetSize(-1, -1, x, y);
#endif
- m_frame->Show(true);
+ m_pFrame->Show(true);
Activate(true);
return true;
}
void
-PhantomFileView::OnUpdate(wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint) )
+PhantomFileView::OnUpdate (wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint) )
{
- if (m_canvas)
- m_canvas->Refresh();
+ if (m_pCanvas)
+ m_pCanvas->Refresh();
}
bool
PhantomFileView::OnClose (bool deleteWindow)
{
- if (!GetDocument()->Close())
+ //GetDocumentManager()->ActivateView (this, false, true);
+ if (! GetDocument() || ! GetDocument()->Close())
return false;
- if (m_canvas) {
- m_canvas->Clear();
- m_canvas->setView(NULL);
- m_canvas = NULL;
+ Activate(false);
+ if (m_pCanvas) {
+ m_pCanvas->setView(NULL);
+ m_pCanvas = NULL;
}
wxString s(wxTheApp->GetAppName());
- if (m_frame)
- m_frame->SetTitle(s);
- SetFrame(NULL);
+ if (m_pFrame)
+ m_pFrame->SetTitle(s);
- Activate(false);
+ SetFrame(NULL);
if (deleteWindow) {
- delete m_frame;
- m_frame = NULL;
+ delete m_pFrame;
+ m_pFrame = NULL;
+ if (GetDocument() && GetDocument()->getBadFileOpen())
+ ::wxYield(); // wxWindows bug workaround
}
return true;
PhantomFileView::OnDraw (wxDC* dc)
{
int xsize, ysize;
- m_canvas->GetClientSize (&xsize, &ysize);
+ m_pCanvas->GetClientSize (&xsize, &ysize);
SGPDriver driver (dc, xsize, ysize);
SGP sgp (driver);
const Phantom& rPhantom = GetDocument()->getPhantom();
ProjectionFileCanvas::~ProjectionFileCanvas ()
{
- if (m_pView) {
- wxMenu* pMenu = m_pView->getFileMenu();
- theApp->getDocManager()->FileHistoryRemoveMenu (pMenu);
- m_pView->canvasClosed();
- m_pView = NULL;
- }
+ m_pView = NULL;
}
void
EVT_MENU(PJMENU_CONVERT_FFT_POLAR, ProjectionFileView::OnConvertFFTPolar)
END_EVENT_TABLE()
-ProjectionFileView::ProjectionFileView(void)
-: wxView(), m_canvas(NULL), m_frame(NULL), m_pFileMenu(0)
+ProjectionFileView::ProjectionFileView()
+: wxView(), m_pCanvas(NULL), m_pFrame(NULL), m_pFileMenu(0)
{
+#ifdef DEBUG
+ m_iDefaultNX = 115;
+ m_iDefaultNY = 115;
+#else
m_iDefaultNX = 256;
m_iDefaultNY = 256;
+#endif
+
m_iDefaultFilter = SignalFilter::FILTER_ABS_BANDLIMIT;
m_dDefaultFilterParam = 1.;
#if HAVE_FFTW
m_iDefaultPolarZeropad = 1;
}
-ProjectionFileView::~ProjectionFileView(void)
+ProjectionFileView::~ProjectionFileView()
{
+ GetDocumentManager()->FileHistoryRemoveMenu (m_pFileMenu);
+ GetDocumentManager()->ActivateView(this, FALSE, TRUE);;
}
void
const Projections& rProj = GetDocument()->getProjections();
std::ostringstream os;
rProj.printScanInfo(os);
- *theApp->getLog() << os.str().c_str();
+ *theApp->getLog() << ">>>>\n" << os.str().c_str() << "<<<<\n";
wxMessageDialog dialogMsg (getFrameForChild(), os.str().c_str(), "Projection File Properties", wxOK | wxICON_INFORMATION);
dialogMsg.ShowModal();
}
<< strInterpolation.c_str();
*theApp->getLog() << os.str().c_str() << "\n";
rIF.labelAdd (os.str().c_str());
- if (theApp->getSetModifyNewDocs())
- pPolarDoc->Modify(true);
- pPolarDoc->UpdateAllViews();
- pPolarDoc->GetFirstView()->OnUpdate (this, NULL);
+ pPolarDoc->Modify (true);
+ pPolarDoc->UpdateAllViews ();
+ pPolarDoc->getView()->OnUpdate (this, NULL);
+ pPolarDoc->getView()->getFrame()->Show(true);
}
}
<< strInterpolation.c_str() << ", zeropad=" << m_iDefaultPolarZeropad;
*theApp->getLog() << os.str().c_str() << "\n";
rIF.labelAdd (os.str().c_str());
- if (theApp->getSetModifyNewDocs())
- pPolarDoc->Modify(true);
- pPolarDoc->UpdateAllViews();
- pPolarDoc->GetFirstView()->OnUpdate (this, NULL);
-}}
+ pPolarDoc->Modify (true);
+ pPolarDoc->UpdateAllViews ();
+ pPolarDoc->getView()->OnUpdate (this, NULL);
+ pPolarDoc->getView()->getFrame()->Show(true);
+ }
+}
void
ProjectionFileView::OnReconstructFourier (wxCommandEvent& event)
m_iDefaultBackprojector = Backprojector::convertBackprojectNameToID (optBackprojectName.c_str());
m_iDefaultTrace = dialogReconstruction.getTrace();
if (m_iDefaultNX > 0 && m_iDefaultNY > 0) {
- ImageFileDocument* pReconDoc = theApp->newImageDoc();
- if (! pReconDoc) {
- sys_error (ERR_SEVERE, "Unable to create image file");
- return;
- }
- ImageFile& imageFile = pReconDoc->getImageFile();
const Projections& rProj = GetDocument()->getProjections();
- imageFile.setArraySize (m_iDefaultNX, m_iDefaultNY);
+
+ ImageFile* pImageFile = new ImageFile;
+ pImageFile->setArraySize (m_iDefaultNX, m_iDefaultNY);
- Reconstructor* pReconstruct = new Reconstructor (rProj, imageFile, optFilterName.c_str(), m_dDefaultFilterParam, optFilterMethodName.c_str(), m_iDefaultZeropad, optFilterGenerationName.c_str(), optInterpName.c_str(), m_iDefaultInterpParam, optBackprojectName.c_str(), m_iDefaultTrace);
+ Reconstructor* pReconstructor = new Reconstructor (rProj, *pImageFile, optFilterName.c_str(), m_dDefaultFilterParam, optFilterMethodName.c_str(), m_iDefaultZeropad, optFilterGenerationName.c_str(), optInterpName.c_str(), m_iDefaultInterpParam, optBackprojectName.c_str(), m_iDefaultTrace);
Timer timerRecon;
if (m_iDefaultTrace > Trace::TRACE_CONSOLE) {
- ReconstructDialog* pDlgReconstruct = new ReconstructDialog (*pReconstruct, rProj, imageFile, m_iDefaultTrace, getFrameForChild());
+ ReconstructDialog* pDlgReconstruct = new ReconstructDialog (*pReconstructor, rProj, *pImageFile, m_iDefaultTrace, getFrameForChild());
for (int iView = 0; iView < rProj.nView(); iView++) {
- ::wxYield();
::wxYield();
if (pDlgReconstruct->isCancelled() || ! pDlgReconstruct->reconstructView (iView)) {
delete pDlgReconstruct;
- delete pReconstruct;
- pReconDoc->DeleteAllViews();
+ delete pReconstructor;
+ delete pImageFile;
return;
}
::wxYield();
- ::wxYield();
while (pDlgReconstruct->isPaused()) {
::wxYield();
::wxUsleep(50);
} else {
wxProgressDialog dlgProgress (wxString("Reconstruction"), wxString("Reconstruction Progress"), rProj.nView() + 1, getFrameForChild(), wxPD_CAN_ABORT);
for (int i = 0; i < rProj.nView(); i++) {
- pReconstruct->reconstructView (i, 1);
- if (! dlgProgress.Update(i + 1)) {
- delete pReconstruct;
- pReconDoc->DeleteAllViews();
+ pReconstructor->reconstructView (i, 1);
+ if (! dlgProgress.Update (i + 1)) {
+ delete pReconstructor;
+ delete pImageFile;
return;
}
}
}
- delete pReconstruct;
- if (theApp->getSetModifyNewDocs())
- pReconDoc->Modify(true);
- pReconDoc->UpdateAllViews(this);
- ImageFileView* rasterView = dynamic_cast<ImageFileView*>(pReconDoc->GetFirstView());
- if (rasterView) {
- rasterView->getFrame()->SetFocus();
+ delete pReconstructor;
+ ImageFileDocument* pReconDoc = theApp->newImageDoc();
+ if (! pReconDoc) {
+ sys_error (ERR_SEVERE, "Unable to create image file");
+ return;
+ }
+ pReconDoc->setImageFile (pImageFile);
+ pReconDoc->Modify (true);
+ pReconDoc->UpdateAllViews (this);
+ if (ImageFileView* rasterView = pReconDoc->getView()) {
rasterView->OnUpdate (rasterView, NULL);
+ rasterView->getFrame()->SetFocus();
+ rasterView->getFrame()->Show(true);
}
std::ostringstream os;
os << "Reconstruct " << rProj.getFilename() << ": xSize=" << m_iDefaultNX << ", ySize=" << m_iDefaultNY << ", Filter=" << optFilterName.c_str() << ", FilterParam=" << m_dDefaultFilterParam << ", FilterMethod=" << optFilterMethodName.c_str() << ", FilterGeneration=" << optFilterGenerationName.c_str() << ", Zeropad=" << m_iDefaultZeropad << ", Interpolation=" << optInterpName.c_str() << ", InterpolationParam=" << m_iDefaultInterpParam << ", Backprojection=" << optBackprojectName.c_str();
*theApp->getLog() << os.str().c_str() << "\n";
- imageFile.labelAdd (rProj.getLabel());
- imageFile.labelAdd (os.str().c_str(), timerRecon.timerEnd());
+ pImageFile->labelAdd (rProj.getLabel());
+ pImageFile->labelAdd (os.str().c_str(), timerRecon.timerEnd());
}
}
}
ProjectionFileCanvas*
-ProjectionFileView::CreateCanvas (wxView *view, wxFrame *parent)
+ProjectionFileView::CreateCanvas (wxFrame *parent)
{
ProjectionFileCanvas* pCanvas;
int width, height;
parent->GetClientSize(&width, &height);
- pCanvas = new ProjectionFileCanvas (dynamic_cast<ProjectionFileView*>(view), parent, wxPoint(0, 0), wxSize(width, height), 0);
+ pCanvas = new ProjectionFileCanvas (this, parent, wxPoint(0, 0), wxSize(width, height), 0);
pCanvas->SetScrollbars(20, 20, 50, 50);
pCanvas->SetBackgroundColour(*wxWHITE);
return pCanvas;
}
-wxFrame*
+#if CTSIM_MDI
+wxDocMDIChildFrame*
+#else
+wxDocChildFrame*
+#endif
ProjectionFileView::CreateChildFrame(wxDocument *doc, wxView *view)
{
#ifdef CTSIM_MDI
#endif
theApp->setIconForFrame (subframe);
- wxMenu *m_pFileMenu = new wxMenu;
+ m_pFileMenu = new wxMenu;
m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...\tCtrl-P");
m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter...\tCtrl-F");
m_pFileMenu->AppendSeparator();
m_pFileMenu->Append(MAINMENU_FILE_EXIT, "E&xit");
#endif
- theApp->getDocManager()->FileHistoryAddFilesToMenu(m_pFileMenu);
- theApp->getDocManager()->FileHistoryUseMenu(m_pFileMenu);
+ GetDocumentManager()->FileHistoryAddFilesToMenu(m_pFileMenu);
+ GetDocumentManager()->FileHistoryUseMenu(m_pFileMenu);
wxMenu *convert_menu = new wxMenu;
convert_menu->Append (PJMENU_CONVERT_POLAR, "&Polar Image...\tCtrl-L");
convert_menu->Append (PJMENU_CONVERT_FFT_POLAR, "&FFT->Polar Image...\tCtrl-I");
wxMenu *reconstruct_menu = new wxMenu;
- reconstruct_menu->Append (PJMENU_RECONSTRUCT_FBP, "&Filtered Backprojection...\tCtrl-R");
- reconstruct_menu->Append (PJMENU_RECONSTRUCT_FOURIER, "&Fourier...\tCtrl-E");
+ reconstruct_menu->Append (PJMENU_RECONSTRUCT_FBP, "&Filtered Backprojection...\tCtrl-R", "Reconstruct image using filtered backprojection");
+ reconstruct_menu->Append (PJMENU_RECONSTRUCT_FOURIER, "&Fourier...\tCtrl-E", "Reconstruct image using inverse Fourier");
+ reconstruct_menu->Enable (PJMENU_RECONSTRUCT_FOURIER, false);
wxMenu *help_menu = new wxMenu;
help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1");
bool
ProjectionFileView::OnCreate(wxDocument *doc, long WXUNUSED(flags) )
{
- m_frame = CreateChildFrame(doc, this);
- SetFrame(m_frame);
+ m_pFrame = CreateChildFrame(doc, this);
+ SetFrame(m_pFrame);
int width, height;
- m_frame->GetClientSize(&width, &height);
- m_frame->SetTitle("ProjectionFileView");
- m_canvas = CreateCanvas(this, m_frame);
+ m_pFrame->GetClientSize (&width, &height);
+ m_pFrame->SetTitle ("ProjectionFileView");
+ m_pCanvas = CreateCanvas (m_pFrame);
#ifdef __X__
int x, y; // X requires a forced resize
- m_frame->GetSize(&x, &y);
- m_frame->SetSize(-1, -1, x, y);
+ m_pFrame->GetSize(&x, &y);
+ m_pFrame->SetSize(-1, -1, x, y);
#endif
- m_frame->Show(true);
+ m_pFrame->Show(true);
Activate(true);
return true;
void
ProjectionFileView::OnDraw (wxDC* dc)
{
- wxSize clientSize = m_frame->GetClientSize();
- wxSize bestSize = m_canvas->GetBestSize();
+ wxSize clientSize = m_pFrame->GetClientSize();
+ wxSize bestSize = m_pCanvas->GetBestSize();
if (clientSize.x > bestSize.x || clientSize.y > bestSize.y)
- m_frame->SetClientSize (bestSize);
+ m_pFrame->SetClientSize (bestSize);
if (m_bitmap.Ok())
dc->DrawBitmap (m_bitmap, 0, 0, false);
void
-ProjectionFileView::OnUpdate(wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint) )
+ProjectionFileView::OnUpdate (wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint) )
{
const Projections& rProj = GetDocument()->getProjections();
const int nDet = rProj.nDet();
int ySize = nView;
xSize = clamp (xSize, 0, 800);
ySize = clamp (ySize, 0, 800);
- m_frame->SetClientSize (xSize, ySize);
- m_canvas->SetScrollbars (20, 20, nDet/20, nView/20);
+ m_pFrame->SetClientSize (xSize, ySize);
+ m_pCanvas->SetScrollbars (20, 20, nDet/20, nView/20);
}
- if (m_canvas)
- m_canvas->Refresh();
+ if (m_pCanvas)
+ m_pCanvas->Refresh();
}
bool
ProjectionFileView::OnClose (bool deleteWindow)
{
- if (!GetDocument()->Close())
+ //GetDocumentManager()->ActivateView (this, false, true);
+ if (! GetDocument() || ! GetDocument()->Close())
return false;
- if (m_canvas) {
- //m_canvas->Clear();
- m_canvas->setView(NULL);
- m_canvas = NULL;
+ Activate(false);
+ if (m_pCanvas) {
+ m_pCanvas->setView(NULL);
+ m_pCanvas = NULL;
}
-// wxString s(wxTheApp->GetAppName());
-// if (m_frame)
-// m_frame->SetTitle(s);
- SetFrame(NULL);
+ wxString s(wxTheApp->GetAppName());
+ if (m_pFrame)
+ m_pFrame->SetTitle(s);
- Activate(false);
+ SetFrame(NULL);
if (deleteWindow) {
- delete m_frame;
- return true;
+ delete m_pFrame;
+ m_pFrame = NULL;
+ if (GetDocument() && GetDocument()->getBadFileOpen())
+ ::wxYield(); // wxWindows bug workaround
}
+
return true;
}
PlotFileCanvas::~PlotFileCanvas ()
{
- if (m_pView) {
- wxMenu* pMenu = m_pView->getFileMenu();
- theApp->getDocManager()->FileHistoryRemoveMenu (pMenu);
- m_pView->canvasClosed();
- m_pView = NULL;
- }
+ m_pView = NULL;
}
void
EVT_MENU(PLOTMENU_VIEW_SCALE_FULL, PlotFileView::OnScaleFull)
END_EVENT_TABLE()
-PlotFileView::PlotFileView(void)
-: wxView(), m_canvas(NULL), m_frame(NULL), m_pEZPlot(NULL), m_pFileMenu(0)
+PlotFileView::PlotFileView()
+: wxView(), m_pFrame(NULL), m_pCanvas(NULL), m_pEZPlot(NULL), m_pFileMenu(0), m_bMinSpecified(false), m_bMaxSpecified(false)
{
- m_bMinSpecified = false;
- m_bMaxSpecified = false;
}
-PlotFileView::~PlotFileView(void)
+PlotFileView::~PlotFileView()
{
if (m_pEZPlot)
delete m_pEZPlot;
+
+ GetDocumentManager()->FileHistoryRemoveMenu (m_pFileMenu);
}
void
std::ostringstream os;
os << "Columns: " << rPlot.getNumColumns() << ", Records: " << rPlot.getNumRecords() << "\n";
rPlot.printHeadersBrief (os);
- *theApp->getLog() << os.str().c_str();
+ *theApp->getLog() << ">>>>\n" << os.str().c_str() << "<<<<<\n";
wxMessageDialog dialogMsg (getFrameForChild(), os.str().c_str(), "Plot File Properties", wxOK | wxICON_INFORMATION);
dialogMsg.ShowModal();
}
PlotFileCanvas*
-PlotFileView::CreateCanvas (wxView *view, wxFrame *parent)
+PlotFileView::CreateCanvas (wxFrame* parent)
{
PlotFileCanvas* pCanvas;
int width, height;
parent->GetClientSize(&width, &height);
- pCanvas = new PlotFileCanvas (dynamic_cast<PlotFileView*>(view), parent, wxPoint(0, 0), wxSize(width, height), 0);
+ pCanvas = new PlotFileCanvas (this, parent, wxPoint(0, 0), wxSize(width, height), 0);
pCanvas->SetBackgroundColour(*wxWHITE);
pCanvas->Clear();
return pCanvas;
}
-wxFrame*
+#if CTSIM_MDI
+wxDocMDIChildFrame*
+#else
+wxDocChildFrame*
+#endif
PlotFileView::CreateChildFrame(wxDocument *doc, wxView *view)
{
#ifdef CTSIM_MDI
#endif
theApp->setIconForFrame (subframe);
- wxMenu *m_pFileMenu = new wxMenu;
+ m_pFileMenu = new wxMenu;
m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...\tCtrl-P");
m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter...\tCtrl-F");
m_pFileMenu->AppendSeparator();
m_pFileMenu->Append(MAINMENU_FILE_EXIT, "E&xit");
#endif
- theApp->getDocManager()->FileHistoryAddFilesToMenu(m_pFileMenu);
- theApp->getDocManager()->FileHistoryUseMenu(m_pFileMenu);
+ GetDocumentManager()->FileHistoryAddFilesToMenu(m_pFileMenu);
+ GetDocumentManager()->FileHistoryUseMenu(m_pFileMenu);
wxMenu *view_menu = new wxMenu;
view_menu->Append(PLOTMENU_VIEW_SCALE_MINMAX, "Display Scale &Set...\tCtrl-E");
bool
PlotFileView::OnCreate (wxDocument *doc, long WXUNUSED(flags) )
{
- m_frame = CreateChildFrame(doc, this);
- SetFrame(m_frame);
+ m_pFrame = CreateChildFrame(doc, this);
+ SetFrame(m_pFrame);
m_bMinSpecified = false;
m_bMaxSpecified = false;
m_dAutoScaleFactor = 1.;
int width, height;
- m_frame->GetClientSize(&width, &height);
- m_frame->SetTitle ("Plot File");
- m_canvas = CreateCanvas (this, m_frame);
+ m_pFrame->GetClientSize(&width, &height);
+ m_pFrame->SetTitle ("Plot File");
+ m_pCanvas = CreateCanvas (m_pFrame);
#ifdef __X__
int x, y; // X requires a forced resize
- m_frame->GetSize(&x, &y);
- m_frame->SetSize(-1, -1, x, y);
+ m_pFrame->GetSize(&x, &y);
+ m_pFrame->SetSize(-1, -1, x, y);
#endif
- m_frame->Show(true);
+ m_pFrame->Show(true);
Activate(true);
return true;
if (iNColumns > 0 && iNRecords > 0) {
int xsize, ysize;
- m_canvas->GetClientSize (&xsize, &ysize);
+ m_pCanvas->GetClientSize (&xsize, &ysize);
SGPDriver driver (dc, xsize, ysize);
SGP sgp (driver);
if (m_pEZPlot)
delete pdY;
}
- if (m_canvas)
- m_canvas->Refresh();
+ if (m_pCanvas)
+ m_pCanvas->Refresh();
}
bool
PlotFileView::OnClose (bool deleteWindow)
{
- if (!GetDocument()->Close())
+ //GetDocumentManager()->ActivateView (this, false, true);
+ if (! GetDocument() || ! GetDocument()->Close())
return false;
- if (m_canvas) {
- //m_canvas->Clear();
- m_canvas->setView (NULL);
- m_canvas = NULL;
- }
-// wxString s(wxTheApp->GetAppName());
-// if (m_frame)
-// m_frame->SetTitle(s);
- SetFrame(NULL);
-
Activate(false);
+ if (m_pCanvas) {
+ m_pCanvas->setView (NULL);
+ m_pCanvas = NULL;
+ }
+ wxString s(wxTheApp->GetAppName());
+ if (m_pFrame)
+ m_pFrame->SetTitle(s);
+ SetFrame(NULL);
if (deleteWindow) {
- delete m_frame;
- return true;
- }
+ delete m_pFrame;
+ m_pFrame = NULL;
+ if (GetDocument() && GetDocument()->getBadFileOpen())
+ ::wxYield(); // wxWindows bug workaround
+ }
+
return true;
}
TextFileView::~TextFileView()
{
+ GetDocumentManager()->FileHistoryRemoveMenu (m_pFileMenu);
+ GetDocumentManager()->ActivateView(this, FALSE, TRUE);;
}
bool TextFileView::OnCreate(wxDocument *doc, long WXUNUSED(flags) )
{
}
-void TextFileView::OnUpdate(wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint) )
+void TextFileView::OnUpdate (wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint) )
{
}
bool
TextFileView::OnClose (bool deleteWindow)
{
- return false;
-
- if (!GetDocument()->Close())
+ if (! theApp->getMainFrame()->getShuttingDown())
return false;
Activate(false);
+ //GetDocumentManager()->ActivateView (this, false, true);
+ if (! GetDocument() || ! GetDocument()->Close())
+ return false;
- if (deleteWindow)
- {
+ SetFrame(NULL);
+ if (deleteWindow) {
delete m_pFrame;
- return TRUE;
+ m_pFrame = NULL;
+ if (GetDocument() && GetDocument()->getBadFileOpen())
+ ::wxYield(); // wxWindows bug workaround
}
+
return TRUE;
}
-wxFrame*
+#if CTSIM_MDI
+wxDocMDIChildFrame*
+#else
+wxDocChildFrame*
+#endif
TextFileView::CreateChildFrame (wxDocument *doc, wxView *view)
{
#if CTSIM_MDI
- wxDocMDIChildFrame* subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, "TextFile 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(0,0), wxDEFAULT_FRAME_STYLE, "Log");
#else
- wxDocChildFrame* subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, "TextFile 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, "Log");
#endif
theApp->setIconForFrame (subframe);
- wxMenu *m_pFileMenu = new wxMenu;
+ m_pFileMenu = new wxMenu;
m_pFileMenu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...\tCtrl-P");
m_pFileMenu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter...\tCtrl-F");
m_pFileMenu->AppendSeparator();
m_pFileMenu->Append(MAINMENU_FILE_EXIT, "E&xit");
#endif
- theApp->getDocManager()->FileHistoryAddFilesToMenu(m_pFileMenu);
- theApp->getDocManager()->FileHistoryUseMenu(m_pFileMenu);
+ GetDocumentManager()->FileHistoryAddFilesToMenu(m_pFileMenu);
+ GetDocumentManager()->FileHistoryUseMenu(m_pFileMenu);
wxMenu *help_menu = new wxMenu;
help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1");
// Define a constructor for my text subwindow
TextFileCanvas::TextFileCanvas (TextFileView* v, wxFrame* frame, const wxPoint& pos, const wxSize& size, long style)
- : wxTextCtrl (frame, -1, "", pos, size, style), m_pView(v)
+: wxTextCtrl (frame, -1, "", pos, size, style), m_pView(v)
{
}
TextFileCanvas::~TextFileCanvas ()
{
- if (m_pView) {
- wxMenu* pMenu = m_pView->getFileMenu();
- theApp->getDocManager()->FileHistoryRemoveMenu (pMenu);
- m_pView->canvasClosed();
- m_pView = NULL;
- }
+ m_pView = NULL;
}