X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=src%2Fviews.cpp;h=0b8290d0005465c89a5db873ae17384e6c544134;hp=bc58da2dd3667a509058ed812574de1e7d0eafac;hb=01ed72399d433ce45a0195f8acaea349a421461e;hpb=0914a8f418770303edfc8d00d68d53061cf01c93 diff --git a/src/views.cpp b/src/views.cpp index bc58da2..0b8290d 100644 --- a/src/views.cpp +++ b/src/views.cpp @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2000 Kevin Rosenberg ** -** $Id: views.cpp,v 1.67 2001/01/18 23:34:01 kevin Exp $ +** $Id: views.cpp,v 1.68 2001/01/20 08:10:33 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 @@ -121,7 +121,10 @@ ImageFileCanvas::OnMouseEvent(wxMouseEvent& event) wxPoint pt(event.GetLogicalPosition(dc)); - const ImageFile& rIF = m_pView->GetDocument()->getImageFile(); + const ImageFileDocument* pIFDoc = m_pView->GetDocument(); + if (! pIFDoc) + return; + const ImageFile& rIF = pIFDoc->getImageFile(); ImageFileArrayConst v = rIF.getArray(); int nx = rIF.nx(); int ny = rIF.ny(); @@ -161,6 +164,17 @@ ImageFileCanvas::OnMouseEvent(wxMouseEvent& event) } } +wxSize +ImageFileCanvas::GetBestSize() const +{ + if (! m_pView) + return wxSize(0,0); + + const ImageFile& rIF = m_pView->GetDocument()->getImageFile(); + return wxSize (rIF.nx(), rIF.ny()); +} + + // ImageFileView IMPLEMENT_DYNAMIC_CLASS(ImageFileView, wxView) @@ -245,7 +259,7 @@ ImageFileView::OnProperties (wxCommandEvent& event) rIF.printLabelsBrief (os); } *theApp->getLog() << os.str().c_str(); - wxMessageDialog dialogMsg (m_frame, os.str().c_str(), "Imagefile Properties", wxOK | wxICON_INFORMATION); + wxMessageDialog dialogMsg (getFrameForChild(), os.str().c_str(), "Imagefile Properties", wxOK | wxICON_INFORMATION); dialogMsg.ShowModal(); } } @@ -256,7 +270,7 @@ ImageFileView::OnScaleAuto (wxCommandEvent& event) const ImageFile& rIF = GetDocument()->getImageFile(); double min, max, mean, mode, median, stddev; rIF.statistics(min, max, mean, mode, median, stddev); - DialogAutoScaleParameters dialogAutoScale (m_frame, mean, mode, median, stddev, m_dAutoScaleFactor); + DialogAutoScaleParameters dialogAutoScale (getFrameForChild(), mean, mode, median, stddev, m_dAutoScaleFactor); int iRetVal = dialogAutoScale.ShowModal(); if (iRetVal == wxID_OK) { m_bMinSpecified = true; @@ -284,7 +298,7 @@ ImageFileView::OnScaleMinMax (wxCommandEvent& event) if (m_bMaxSpecified) max = m_dMaxPixel; - DialogGetMinMax dialogMinMax (m_frame, "Set Image Minimum & Maximum", min, max); + DialogGetMinMax dialogMinMax (getFrameForChild(), "Set Image Minimum & Maximum", min, max); int retVal = dialogMinMax.ShowModal(); if (retVal == wxID_OK) { m_bMinSpecified = true; @@ -314,7 +328,7 @@ ImageFileView::OnCompare (wxCommandEvent& event) if (vecIF.size() == 0) { wxMessageBox("There are no compatible image files open for comparision", "No comparison images"); } else { - DialogGetComparisonImage dialogGetCompare(m_frame, "Get Comparison Image", vecIF, true); + DialogGetComparisonImage dialogGetCompare(getFrameForChild(), "Get Comparison Image", vecIF, true); if (dialogGetCompare.ShowModal() == wxID_OK) { const ImageFile& rIF = GetDocument()->getImageFile(); @@ -428,7 +442,7 @@ ImageFileView::OnAdd (wxCommandEvent& event) if (vecIF.size() == 0) { wxMessageBox ("There are no compatible image files open for comparision", "No comparison images"); } else { - DialogGetComparisonImage dialogGetCompare (m_frame, "Get Image to Add", vecIF, false); + DialogGetComparisonImage dialogGetCompare (getFrameForChild(), "Get Image to Add", vecIF, false); if (dialogGetCompare.ShowModal() == wxID_OK) { ImageFile& rIF = GetDocument()->getImageFile(); @@ -468,7 +482,7 @@ ImageFileView::OnSubtract (wxCommandEvent& event) if (vecIF.size() == 0) { wxMessageBox ("There are no compatible image files open for comparision", "No comparison images"); } else { - DialogGetComparisonImage dialogGetCompare (m_frame, "Get Image to Subtract", vecIF, false); + DialogGetComparisonImage dialogGetCompare (getFrameForChild(), "Get Image to Subtract", vecIF, false); if (dialogGetCompare.ShowModal() == wxID_OK) { ImageFile& rIF = GetDocument()->getImageFile(); @@ -508,7 +522,7 @@ ImageFileView::OnMultiply (wxCommandEvent& event) if (vecIF.size() == 0) { wxMessageBox ("There are no compatible image files open for comparision", "No comparison images"); } else { - DialogGetComparisonImage dialogGetCompare (m_frame, "Get Image to Multiply", vecIF, false); + DialogGetComparisonImage dialogGetCompare (getFrameForChild(), "Get Image to Multiply", vecIF, false); if (dialogGetCompare.ShowModal() == wxID_OK) { ImageFile& rIF = GetDocument()->getImageFile(); @@ -548,7 +562,7 @@ ImageFileView::OnDivide (wxCommandEvent& event) if (vecIF.size() == 0) { wxMessageBox ("There are no compatible image files open for comparision", "No comparison images"); } else { - DialogGetComparisonImage dialogGetCompare (m_frame, "Get Image to Divide", vecIF, false); + DialogGetComparisonImage dialogGetCompare (getFrameForChild(), "Get Image to Divide", vecIF, false); if (dialogGetCompare.ShowModal() == wxID_OK) { ImageFile& rIF = GetDocument()->getImageFile(); @@ -664,7 +678,7 @@ void ImageFileView::OnFourier (wxCommandEvent& event) { ImageFile& rIF = GetDocument()->getImageFile(); - wxProgressDialog dlgProgress (wxString("Fourier"), wxString("Fourier Progress"), 1, m_frame, wxPD_APP_MODAL); + wxProgressDialog dlgProgress (wxString("Fourier"), wxString("Fourier Progress"), 1, getFrameForChild(), wxPD_APP_MODAL); rIF.fourier (rIF); rIF.labelAdd ("Fourier Image"); m_bMinSpecified = false; @@ -678,7 +692,7 @@ void ImageFileView::OnInverseFourier (wxCommandEvent& event) { ImageFile& rIF = GetDocument()->getImageFile(); - wxProgressDialog dlgProgress (wxString("Inverse Fourier"), wxString("Inverse Fourier Progress"), 1, m_frame, wxPD_APP_MODAL); + wxProgressDialog dlgProgress (wxString("Inverse Fourier"), wxString("Inverse Fourier Progress"), 1, getFrameForChild(), wxPD_APP_MODAL); rIF.inverseFourier (rIF); rIF.labelAdd ("Inverse Fourier Image"); m_bMinSpecified = false; @@ -765,9 +779,9 @@ wxFrame* ImageFileView::CreateChildFrame(wxDocument *doc, wxView *view) { #if CTSIM_MDI - wxMDIChildFrame *subframe = new wxMDIChildFrame (theApp->getMainFrame(), -1, "ImageFile Frame", wxPoint(-1, -1), wxSize(0, 0), wxDEFAULT_FRAME_STYLE); + wxDocMDIChildFrame* subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, "ImageFile Frame", wxPoint(-1, -1), wxSize(0, 0), wxDEFAULT_FRAME_STYLE); #else - wxDocChildFrame *subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, "ImageFile Frame", wxPoint(-1, -1), wxSize(0, 0), wxDEFAULT_FRAME_STYLE); + wxDocChildFrame* subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, "ImageFile Frame", wxPoint(-1, -1), wxSize(0, 0), wxDEFAULT_FRAME_STYLE); #endif theApp->setIconForFrame (subframe); @@ -852,7 +866,7 @@ ImageFileView::CreateChildFrame(wxDocument *doc, wxView *view) menu_bar->Append(filter_menu, "Fi<er"); menu_bar->Append(analyze_menu, "&Analyze"); menu_bar->Append(help_menu, "&Help"); - + subframe->SetMenuBar(menu_bar); subframe->Centre(wxBOTH); @@ -903,6 +917,11 @@ ImageFileView::OnCreate (wxDocument *doc, long WXUNUSED(flags) ) void ImageFileView::OnDraw (wxDC* dc) { + wxSize sizeWindow = m_frame->GetClientSize(); + wxSize sizeBest = m_canvas->GetBestSize(); + if (sizeWindow.x > sizeBest.x || sizeWindow.y > sizeBest.y) + m_frame->SetClientSize (sizeBest); + if (m_bitmap.Ok()) dc->DrawBitmap(m_bitmap, 0, 0, false); @@ -962,8 +981,8 @@ ImageFileView::OnClose (bool deleteWindow) if (!GetDocument()->Close()) return false; - // m_canvas->Clear(); - m_canvas->m_pView = NULL; + m_canvas->Clear(); + //m_canvas->m_pView = NULL; m_canvas = NULL; wxString s(theApp->GetAppName()); if (m_frame) @@ -996,7 +1015,7 @@ ImageFileView::OnExport (wxCommandEvent& event) m_dMaxPixel = max; } - DialogExportParameters dialogExport (m_frame, m_iDefaultExportFormatID); + DialogExportParameters dialogExport (getFrameForChild(), m_iDefaultExportFormatID); if (dialogExport.ShowModal() == wxID_OK) { wxString strFormatName (dialogExport.getFormatName ()); m_iDefaultExportFormatID = ImageFile::convertFormatNameToID (strFormatName.c_str()); @@ -1031,7 +1050,7 @@ ImageFileView::OnScaleSize (wxCommandEvent& event) unsigned int iOldNX = rIF.nx(); unsigned int iOldNY = rIF.ny(); - DialogGetXYSize dialogGetXYSize (m_frame, "Set New X & Y Dimensions", iOldNX, iOldNY); + DialogGetXYSize dialogGetXYSize (getFrameForChild(), "Set New X & Y Dimensions", iOldNX, iOldNY); if (dialogGetXYSize.ShowModal() == wxID_OK) { unsigned int iNewNX = dialogGetXYSize.getXSize(); unsigned int iNewNY = dialogGetXYSize.getYSize(); @@ -1431,7 +1450,7 @@ ImageFileView::OnCompareCol (wxCommandEvent& event) wxMessageBox ("No compatible images for Column Comparison", "Error"); return; } - DialogGetComparisonImage dialogGetCompare (m_frame, "Get Comparison Image", vecIFDoc, false); + DialogGetComparisonImage dialogGetCompare (getFrameForChild(), "Get Comparison Image", vecIFDoc, false); if (dialogGetCompare.ShowModal() == wxID_OK) { ImageFileDocument* pCompareDoc = dialogGetCompare.getImageFileDocument(); @@ -1522,7 +1541,7 @@ ImageFileView::OnCompareRow (wxCommandEvent& event) return; } - DialogGetComparisonImage dialogGetCompare (m_frame, "Get Comparison Image", vecIFDoc, false); + DialogGetComparisonImage dialogGetCompare (getFrameForChild(), "Get Comparison Image", vecIFDoc, false); if (dialogGetCompare.ShowModal() == wxID_OK) { ImageFileDocument* pCompareDoc = dialogGetCompare.getImageFileDocument(); @@ -1727,7 +1746,7 @@ PhantomView::OnProperties (wxCommandEvent& event) void PhantomView::OnProjections (wxCommandEvent& event) { - DialogGetProjectionParameters dialogProjection (m_frame, m_iDefaultNDet, m_iDefaultNView, m_iDefaultNSample, m_dDefaultRotation, m_dDefaultFocalLength, m_dDefaultFieldOfView, m_iDefaultGeometry, m_iDefaultTrace); + DialogGetProjectionParameters dialogProjection (getFrameForChild(), m_iDefaultNDet, m_iDefaultNView, m_iDefaultNSample, m_dDefaultRotation, m_dDefaultFocalLength, m_dDefaultFieldOfView, m_iDefaultGeometry, m_iDefaultTrace); int retVal = dialogProjection.ShowModal(); if (retVal == wxID_OK) { m_iDefaultNDet = dialogProjection.getNDet(); @@ -1758,7 +1777,7 @@ PhantomView::OnProjections (wxCommandEvent& event) Timer timer; if (m_iDefaultTrace > Trace::TRACE_CONSOLE) { - ProjectionsDialog dialogProjections (theScanner, rProj, rPhantom, m_iDefaultTrace, dynamic_cast(m_frame)); + ProjectionsDialog dialogProjections (theScanner, rProj, rPhantom, m_iDefaultTrace, dynamic_cast(getFrameForChild())); for (int iView = 0; iView < rProj.nView(); iView++) { ::wxYield(); ::wxYield(); @@ -1774,7 +1793,7 @@ PhantomView::OnProjections (wxCommandEvent& event) } } } else { - wxProgressDialog dlgProgress (wxString("Projection"), wxString("Projection Progress"), rProj.nView() + 1, m_frame, wxPD_CAN_ABORT); + 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); if (! dlgProgress.Update (i+1)) { @@ -1816,7 +1835,7 @@ PhantomView::OnProjections (wxCommandEvent& event) void PhantomView::OnRasterize (wxCommandEvent& event) { - DialogGetRasterParameters dialogRaster (m_frame, m_iDefaultRasterNX, m_iDefaultRasterNY, m_iDefaultRasterNSamples); + DialogGetRasterParameters dialogRaster (getFrameForChild(), m_iDefaultRasterNX, m_iDefaultRasterNY, m_iDefaultRasterNSamples); int retVal = dialogRaster.ShowModal(); if (retVal == wxID_OK) { m_iDefaultRasterNX = dialogRaster.getXSize(); @@ -1834,7 +1853,7 @@ PhantomView::OnRasterize (wxCommandEvent& event) ImageFile& imageFile = pRasterDoc->getImageFile(); imageFile.setArraySize (m_iDefaultRasterNX, m_iDefaultRasterNX); - wxProgressDialog dlgProgress (wxString("Rasterize"), wxString("Rasterization Progress"), imageFile.nx() + 1, m_frame, wxPD_CAN_ABORT); + wxProgressDialog dlgProgress (wxString("Rasterize"), wxString("Rasterization Progress"), imageFile.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); @@ -1881,9 +1900,9 @@ wxFrame* PhantomView::CreateChildFrame(wxDocument *doc, wxView *view) { #if CTSIM_MDI - wxMDIChildFrame *subframe = new wxMDIChildFrame(theApp->getMainFrame(), -1, "Phantom Frame", wxPoint(10, 10), wxSize(256, 256), wxDEFAULT_FRAME_STYLE); + wxDocMDIChildFrame *subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, "Phantom Frame", wxPoint(10, 10), wxSize(256, 256), wxDEFAULT_FRAME_STYLE); #else - wxDocChildFrame *subframe = new wxDocChildFrame(doc, view, theApp->getMainFrame(), -1, "Phantom Frame", wxPoint(10, 10), wxSize(256, 256), wxDEFAULT_FRAME_STYLE); + wxDocChildFrame *subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, "Phantom Frame", wxPoint(10, 10), wxSize(256, 256), wxDEFAULT_FRAME_STYLE); #endif theApp->setIconForFrame (subframe); @@ -1919,7 +1938,6 @@ PhantomView::CreateChildFrame(wxDocument *doc, wxView *view) menu_bar->Append(help_menu, "&Help"); subframe->SetMenuBar(menu_bar); - subframe->Centre(wxBOTH); wxAcceleratorEntry accelEntries[8]; @@ -1947,7 +1965,7 @@ PhantomView::OnCreate(wxDocument *doc, long WXUNUSED(flags) ) int width, height; m_frame->GetClientSize(&width, &height); m_frame->SetTitle("PhantomView"); - m_canvas = CreateCanvas(this, m_frame); + m_canvas = CreateCanvas (this, m_frame); #ifdef __X__ int x, y; // X requires a forced resize @@ -1961,7 +1979,6 @@ PhantomView::OnCreate(wxDocument *doc, long WXUNUSED(flags) ) return true; } - void PhantomView::OnUpdate(wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint) ) { @@ -1975,21 +1992,19 @@ PhantomView::OnClose (bool deleteWindow) if (!GetDocument()->Close()) return false; -// m_canvas->Clear(); - m_canvas->m_pView = NULL; + m_canvas->Clear(); + //m_canvas->m_pView = NULL; m_canvas = NULL; -// wxString s(wxTheApp->GetAppName()); -// if (m_frame) -// m_frame->SetTitle(s); + wxString s(wxTheApp->GetAppName()); + if (m_frame) + m_frame->SetTitle(s); SetFrame(NULL); Activate(false); - if (deleteWindow) { - + if (deleteWindow) delete m_frame; - return true; - } + return true; } @@ -2020,6 +2035,19 @@ ProjectionFileCanvas::OnDraw(wxDC& dc) m_pView->OnDraw(& dc); } +wxSize +ProjectionFileCanvas::GetBestSize () const +{ + wxSize best (0, 0); + if (m_pView) { + Projections& rProj = m_pView->GetDocument()->getProjections(); + best.Set (rProj.nDet(), rProj.nView()); + } + + return best; +} + + // ProjectionFileView IMPLEMENT_DYNAMIC_CLASS(ProjectionFileView, wxView) @@ -2068,7 +2096,7 @@ ProjectionFileView::OnProperties (wxCommandEvent& event) std::ostringstream os; rProj.printScanInfo(os); *theApp->getLog() << os.str().c_str(); - wxMessageDialog dialogMsg (m_frame, os.str().c_str(), "Projection File Properties", wxOK | wxICON_INFORMATION); + wxMessageDialog dialogMsg (getFrameForChild(), os.str().c_str(), "Projection File Properties", wxOK | wxICON_INFORMATION); dialogMsg.ShowModal(); } @@ -2077,7 +2105,7 @@ void ProjectionFileView::OnConvertPolar (wxCommandEvent& event) { Projections& rProj = GetDocument()->getProjections(); - DialogGetConvertPolarParameters dialogPolar (m_frame, "Convert Polar", m_iDefaultPolarNX, m_iDefaultPolarNY, + DialogGetConvertPolarParameters dialogPolar (getFrameForChild(), "Convert Polar", m_iDefaultPolarNX, m_iDefaultPolarNY, m_iDefaultPolarInterpolation, -1); if (dialogPolar.ShowModal() == wxID_OK) { wxString strInterpolation (dialogPolar.getInterpolationName()); @@ -2110,7 +2138,7 @@ void ProjectionFileView::OnConvertFFTPolar (wxCommandEvent& event) { Projections& rProj = GetDocument()->getProjections(); - DialogGetConvertPolarParameters dialogPolar (m_frame, "Convert to FFT Polar", m_iDefaultPolarNX, m_iDefaultPolarNY, + DialogGetConvertPolarParameters dialogPolar (getFrameForChild(), "Convert to FFT Polar", m_iDefaultPolarNX, m_iDefaultPolarNY, m_iDefaultPolarInterpolation, m_iDefaultPolarZeropad); if (dialogPolar.ShowModal() == wxID_OK) { wxString strInterpolation (dialogPolar.getInterpolationName()); @@ -2148,7 +2176,7 @@ ProjectionFileView::OnReconstructFourier (wxCommandEvent& event) void ProjectionFileView::OnReconstructFBP (wxCommandEvent& event) { - DialogGetReconstructionParameters dialogReconstruction (m_frame, m_iDefaultNX, m_iDefaultNY, m_iDefaultFilter, m_dDefaultFilterParam, m_iDefaultFilterMethod, m_iDefaultFilterGeneration, m_iDefaultZeropad, m_iDefaultInterpolation, m_iDefaultInterpParam, m_iDefaultBackprojector, m_iDefaultTrace); + DialogGetReconstructionParameters dialogReconstruction (getFrameForChild(), m_iDefaultNX, m_iDefaultNY, m_iDefaultFilter, m_dDefaultFilterParam, m_iDefaultFilterMethod, m_iDefaultFilterGeneration, m_iDefaultZeropad, m_iDefaultInterpolation, m_iDefaultInterpParam, m_iDefaultBackprojector, m_iDefaultTrace); int retVal = dialogReconstruction.ShowModal(); if (retVal == wxID_OK) { @@ -2182,7 +2210,7 @@ ProjectionFileView::OnReconstructFBP (wxCommandEvent& event) Timer timerRecon; if (m_iDefaultTrace > Trace::TRACE_CONSOLE) { - ReconstructDialog* pDlgReconstruct = new ReconstructDialog (*pReconstruct, rProj, imageFile, m_iDefaultTrace, m_frame); + ReconstructDialog* pDlgReconstruct = new ReconstructDialog (*pReconstruct, rProj, imageFile, m_iDefaultTrace, getFrameForChild()); for (int iView = 0; iView < rProj.nView(); iView++) { ::wxYield(); ::wxYield(); @@ -2201,7 +2229,7 @@ ProjectionFileView::OnReconstructFBP (wxCommandEvent& event) } delete pDlgReconstruct; } else { - wxProgressDialog dlgProgress (wxString("Reconstruction"), wxString("Reconstruction Progress"), rProj.nView() + 1, m_frame, wxPD_CAN_ABORT); + 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)) { @@ -2250,9 +2278,9 @@ wxFrame* ProjectionFileView::CreateChildFrame(wxDocument *doc, wxView *view) { #ifdef CTSIM_MDI - wxMDIChildFrame *subframe = new wxMDIChildFrame (theApp->getMainFrame(), -1, "Projection Frame", wxPoint(10, 10), wxSize(0, 0), wxDEFAULT_FRAME_STYLE); + wxDocMDIChildFrame *subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, "Projection Frame", wxPoint(10, 10), wxSize(0, 0), wxDEFAULT_FRAME_STYLE); #else - wxDocChildFrame *subframe = new wxDocChildFrame(doc, view, theApp->getMainFrame(), -1, "Projection Frame", wxPoint(10, 10), wxSize(0, 0), wxDEFAULT_FRAME_STYLE); + wxDocChildFrame *subframe = new wxDocChildFrame (doc, view, theApp->getMainFrame(), -1, "Projection Frame", wxPoint(10, 10), wxSize(0, 0), wxDEFAULT_FRAME_STYLE); #endif theApp->setIconForFrame (subframe); @@ -2293,8 +2321,7 @@ ProjectionFileView::CreateChildFrame(wxDocument *doc, wxView *view) menu_bar->Append (reconstruct_menu, "&Reconstruct"); menu_bar->Append (help_menu, "&Help"); - subframe->SetMenuBar(menu_bar); - + subframe->SetMenuBar(menu_bar); subframe->Centre(wxBOTH); wxAcceleratorEntry accelEntries[11]; @@ -2342,6 +2369,12 @@ ProjectionFileView::OnCreate(wxDocument *doc, long WXUNUSED(flags) ) void ProjectionFileView::OnDraw (wxDC* dc) { + wxSize clientSize = m_frame->GetClientSize(); + wxSize bestSize = m_canvas->GetBestSize(); + + if (clientSize.x > bestSize.x || clientSize.y > bestSize.y) + m_frame->SetClientSize (bestSize); + if (m_bitmap.Ok()) dc->DrawBitmap (m_bitmap, 0, 0, false); } @@ -2402,8 +2435,8 @@ ProjectionFileView::OnClose (bool deleteWindow) if (!GetDocument()->Close()) return false; - // m_canvas->Clear(); - m_canvas->m_pView = NULL; + m_canvas->Clear(); + // m_canvas->m_pView = NULL; m_canvas = NULL; wxString s(wxTheApp->GetAppName()); if (m_frame) @@ -2468,7 +2501,7 @@ PlotFileView::OnProperties (wxCommandEvent& event) os << "Columns: " << rPlot.getNumColumns() << ", Records: " << rPlot.getNumRecords() << "\n"; rPlot.printHeadersBrief (os); *theApp->getLog() << os.str().c_str(); - wxMessageDialog dialogMsg (m_frame, os.str().c_str(), "Plot File Properties", wxOK | wxICON_INFORMATION); + wxMessageDialog dialogMsg (getFrameForChild(), os.str().c_str(), "Plot File Properties", wxOK | wxICON_INFORMATION); dialogMsg.ShowModal(); } @@ -2479,7 +2512,7 @@ PlotFileView::OnScaleAuto (wxCommandEvent& event) const PlotFile& rPlotFile = GetDocument()->getPlotFile(); double min, max, mean, mode, median, stddev; rPlotFile.statistics (1, min, max, mean, mode, median, stddev); - DialogAutoScaleParameters dialogAutoScale (m_frame, mean, mode, median, stddev, m_dAutoScaleFactor); + DialogAutoScaleParameters dialogAutoScale (getFrameForChild(), mean, mode, median, stddev, m_dAutoScaleFactor); int iRetVal = dialogAutoScale.ShowModal(); if (iRetVal == wxID_OK) { m_bMinSpecified = true; @@ -2513,7 +2546,7 @@ PlotFileView::OnScaleMinMax (wxCommandEvent& event) if (m_bMaxSpecified) max = m_dMaxPixel; - DialogGetMinMax dialogMinMax (m_frame, "Set Y-axis Minimum & Maximum", min, max); + DialogGetMinMax dialogMinMax (getFrameForChild(), "Set Y-axis Minimum & Maximum", min, max); int retVal = dialogMinMax.ShowModal(); if (retVal == wxID_OK) { m_bMinSpecified = true; @@ -2554,7 +2587,7 @@ wxFrame* PlotFileView::CreateChildFrame(wxDocument *doc, wxView *view) { #ifdef CTSIM_MDI - wxMDIChildFrame *subframe = new wxMDIChildFrame (theApp->getMainFrame(), -1, "Plot Frame", wxPoint(10, 10), wxSize(500, 300), wxDEFAULT_FRAME_STYLE); + wxDocMDIChildFrame *subframe = new wxDocMDIChildFrame (doc, view, theApp->getMainFrame(), -1, "Plot Frame", wxPoint(10, 10), wxSize(500, 300), wxDEFAULT_FRAME_STYLE); #else wxDocChildFrame *subframe = new wxDocChildFrame(doc, view, theApp->getMainFrame(), -1, "Plot Frame", wxPoint(10, 10), wxSize(500, 300), wxDEFAULT_FRAME_STYLE); #endif @@ -2594,7 +2627,6 @@ PlotFileView::CreateChildFrame(wxDocument *doc, wxView *view) menu_bar->Append(help_menu, "&Help"); subframe->SetMenuBar(menu_bar); - subframe->Centre(wxBOTH); wxAcceleratorEntry accelEntries[10]; @@ -2713,8 +2745,8 @@ PlotFileView::OnClose (bool deleteWindow) if (!GetDocument()->Close()) return false; - // m_canvas->Clear(); - m_canvas->m_pView = NULL; + m_canvas->Clear(); + // m_canvas->m_pView = NULL; m_canvas = NULL; wxString s(wxTheApp->GetAppName()); if (m_frame)