X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=src%2Fviews.cpp;h=2d7874d690f5364f46f81e0a1d832b708c87cc4c;hb=a00e02e9fc9fbf1fe0309d0c8955feb10d389823;hp=758390aef76217b731328588ae6bba1daf97fc26;hpb=bcc0f3056ec84efcef9559f23b5513f7ed61f9c3;p=ctsim.git diff --git a/src/views.cpp b/src/views.cpp index 758390a..2d7874d 100644 --- a/src/views.cpp +++ b/src/views.cpp @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (c) 1983-2001 Kevin Rosenberg ** -** $Id: views.cpp,v 1.163 2003/01/22 22:15:10 kevin Exp $ +** $Id: views.cpp,v 1.168 2003/01/29 07:30:49 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 @@ -268,9 +268,9 @@ EVT_MENU(IFMENU_PLOT_HISTOGRAM, ImageFileView::OnPlotHistogram) END_EVENT_TABLE() ImageFileView::ImageFileView() -: wxView(), m_pFrame(0), m_pCanvas(0), m_pFileMenu(0), m_pFilterMenu(0), - m_bMinSpecified(false), m_bMaxSpecified(false), - m_iDefaultExportFormatID(ImageFile::EXPORT_FORMAT_PNG) + : wxView(), m_pBitmap(0), m_pFrame(0), m_pCanvas(0), m_pFileMenu(0), + m_pFilterMenu(0), m_bMinSpecified(false), m_bMaxSpecified(false), + m_iDefaultExportFormatID(ImageFile::EXPORT_FORMAT_PNG) {} ImageFileView::~ImageFileView() @@ -329,6 +329,7 @@ ImageFileView::OnScaleAuto (wxCommandEvent& event) m_dMinPixel = dMin; m_dMaxPixel = dMax; m_dAutoScaleFactor = dialogAutoScale.getAutoScaleFactor(); + OnUpdate(this, NULL); GetDocument()->UpdateAllViews (this); } } @@ -355,6 +356,7 @@ ImageFileView::OnScaleMinMax (wxCommandEvent& event) m_bMaxSpecified = true; m_dMinPixel = dialogMinMax.getMinimum(); m_dMaxPixel = dialogMinMax.getMaximum(); + OnUpdate(this, NULL); GetDocument()->UpdateAllViews (this); } GetDocument()->Activate(); @@ -366,6 +368,7 @@ ImageFileView::OnScaleFull (wxCommandEvent& event) if (m_bMinSpecified || m_bMaxSpecified) { m_bMinSpecified = false; m_bMaxSpecified = false; + OnUpdate(this, NULL); GetDocument()->UpdateAllViews (this); } GetDocument()->Activate(); @@ -423,6 +426,7 @@ ImageFileView::OnCompare (wxCommandEvent& event) pDifferenceImage->labelAdd (os.str().c_str()); if (theApp->getAskDeleteNewDocs()) pDifferenceDoc->Modify (true); + OnUpdate(this, NULL); pDifferenceDoc->UpdateAllViews(this); pDifferenceDoc->getView()->setInitialClientSize(); pDifferenceDoc->Activate(); @@ -440,6 +444,7 @@ ImageFileView::OnInvertValues (wxCommandEvent& event) rIF.labelAdd ("Invert Pixel Values"); if (theApp->getAskDeleteNewDocs()) GetDocument()->Modify (true); + OnUpdate(this, NULL); GetDocument()->UpdateAllViews (this); GetDocument()->Activate(); } @@ -452,6 +457,7 @@ ImageFileView::OnSquare (wxCommandEvent& event) rIF.labelAdd ("Square Pixel Values"); if (theApp->getAskDeleteNewDocs()) GetDocument()->Modify (true); + OnUpdate(this, NULL); GetDocument()->UpdateAllViews (this); GetDocument()->Activate(); } @@ -464,6 +470,7 @@ ImageFileView::OnSquareRoot (wxCommandEvent& event) rIF.labelAdd ("Square-root Pixel Values"); if (theApp->getAskDeleteNewDocs()) GetDocument()->Modify (true); + OnUpdate(this, NULL); GetDocument()->UpdateAllViews (this); GetDocument()->Activate(); } @@ -476,6 +483,7 @@ ImageFileView::OnLog (wxCommandEvent& event) rIF.labelAdd ("Logrithm base-e Pixel Values"); if (theApp->getAskDeleteNewDocs()) GetDocument()->Modify (true); + OnUpdate(this, NULL); GetDocument()->UpdateAllViews (this); GetDocument()->Activate(); } @@ -488,6 +496,7 @@ ImageFileView::OnExp (wxCommandEvent& event) rIF.labelAdd ("Exponent base-e Pixel Values"); if (theApp->getAskDeleteNewDocs()) GetDocument()->Modify (true); + OnUpdate(this, NULL); GetDocument()->UpdateAllViews (this); GetDocument()->Activate(); } @@ -526,6 +535,7 @@ ImageFileView::OnAdd (wxCommandEvent& event) *theApp->getLog() << os.str().c_str() << "\n"; if (theApp->getAskDeleteNewDocs()) pNewDoc->Modify (true); + OnUpdate(this, NULL); pNewDoc->UpdateAllViews (this); pNewDoc->getView()->setInitialClientSize(); pNewDoc->Activate(); @@ -567,6 +577,7 @@ ImageFileView::OnSubtract (wxCommandEvent& event) *theApp->getLog() << os.str().c_str() << "\n"; if (theApp->getAskDeleteNewDocs()) pNewDoc->Modify (true); + OnUpdate(this, NULL); pNewDoc->UpdateAllViews (this); pNewDoc->getView()->setInitialClientSize(); pNewDoc->Activate(); @@ -608,6 +619,7 @@ ImageFileView::OnMultiply (wxCommandEvent& event) *theApp->getLog() << os.str().c_str() << "\n"; if (theApp->getAskDeleteNewDocs()) pNewDoc->Modify (true); + OnUpdate(this, NULL); pNewDoc->UpdateAllViews (this); pNewDoc->getView()->setInitialClientSize(); pNewDoc->Activate(); @@ -649,6 +661,7 @@ ImageFileView::OnDivide (wxCommandEvent& event) *theApp->getLog() << os.str().c_str() << "\n"; if (theApp->getAskDeleteNewDocs()) pNewDoc->Modify (true); + OnUpdate(this, NULL); pNewDoc->UpdateAllViews (this); pNewDoc->getView()->setInitialClientSize(); pNewDoc->Activate(); @@ -668,6 +681,7 @@ ImageFileView::OnFFT (wxCommandEvent& event) m_bMaxSpecified = false; if (theApp->getAskDeleteNewDocs()) GetDocument()->Modify (true); + OnUpdate(this, NULL); GetDocument()->UpdateAllViews (this); GetDocument()->Activate(); } @@ -682,6 +696,7 @@ ImageFileView::OnIFFT (wxCommandEvent& event) m_bMaxSpecified = false; if (theApp->getAskDeleteNewDocs()) GetDocument()->Modify (true); + OnUpdate(this, NULL); GetDocument()->UpdateAllViews (this); GetDocument()->Activate(); } @@ -696,6 +711,7 @@ ImageFileView::OnFFTRows (wxCommandEvent& event) m_bMaxSpecified = false; if (theApp->getAskDeleteNewDocs()) GetDocument()->Modify (true); + OnUpdate(this, NULL); GetDocument()->UpdateAllViews (this); GetDocument()->Activate(); } @@ -710,6 +726,7 @@ ImageFileView::OnIFFTRows (wxCommandEvent& event) m_bMaxSpecified = false; if (theApp->getAskDeleteNewDocs()) GetDocument()->Modify (true); + OnUpdate(this, NULL); GetDocument()->UpdateAllViews (this); GetDocument()->Activate(); } @@ -724,6 +741,7 @@ ImageFileView::OnFFTCols (wxCommandEvent& event) m_bMaxSpecified = false; if (theApp->getAskDeleteNewDocs()) GetDocument()->Modify (true); + OnUpdate(this, NULL); GetDocument()->UpdateAllViews (this); GetDocument()->Activate(); } @@ -738,6 +756,7 @@ ImageFileView::OnIFFTCols (wxCommandEvent& event) m_bMaxSpecified = false; if (theApp->getAskDeleteNewDocs()) GetDocument()->Modify (true); + OnUpdate(this, NULL); GetDocument()->UpdateAllViews (this); GetDocument()->Activate(); } @@ -754,6 +773,7 @@ ImageFileView::OnFourier (wxCommandEvent& event) m_bMaxSpecified = false; if (theApp->getAskDeleteNewDocs()) GetDocument()->Modify (true); + OnUpdate(this, NULL); GetDocument()->UpdateAllViews (this); GetDocument()->Activate(); } @@ -769,6 +789,7 @@ ImageFileView::OnInverseFourier (wxCommandEvent& event) m_bMaxSpecified = false; if (theApp->getAskDeleteNewDocs()) GetDocument()->Modify (true); + OnUpdate(this, NULL); GetDocument()->UpdateAllViews (this); GetDocument()->Activate(); } @@ -783,6 +804,7 @@ ImageFileView::OnShuffleNaturalToFourierOrder (wxCommandEvent& event) m_bMaxSpecified = false; if (theApp->getAskDeleteNewDocs()) GetDocument()->Modify (true); + OnUpdate(this, NULL); GetDocument()->UpdateAllViews (this); GetDocument()->Activate(); } @@ -797,6 +819,7 @@ ImageFileView::OnShuffleFourierToNaturalOrder (wxCommandEvent& event) m_bMaxSpecified = false; if (theApp->getAskDeleteNewDocs()) GetDocument()->Modify (true); + OnUpdate(this, NULL); GetDocument()->UpdateAllViews (this); GetDocument()->Activate(); } @@ -811,6 +834,7 @@ ImageFileView::OnMagnitude (wxCommandEvent& event) m_bMaxSpecified = false; if (theApp->getAskDeleteNewDocs()) GetDocument()->Modify (true); + OnUpdate(this, NULL); GetDocument()->UpdateAllViews (this); GetDocument()->Activate(); } @@ -826,6 +850,7 @@ ImageFileView::OnPhase (wxCommandEvent& event) m_bMaxSpecified = false; if (theApp->getAskDeleteNewDocs()) GetDocument()->Modify (true); + OnUpdate(this, NULL); GetDocument()->UpdateAllViews (this); } GetDocument()->Activate(); @@ -842,6 +867,7 @@ ImageFileView::OnReal (wxCommandEvent& event) m_bMaxSpecified = false; if (theApp->getAskDeleteNewDocs()) GetDocument()->Modify (true); + OnUpdate(this, NULL); GetDocument()->UpdateAllViews (this); } GetDocument()->Activate(); @@ -858,6 +884,7 @@ ImageFileView::OnImaginary (wxCommandEvent& event) m_bMaxSpecified = false; if (theApp->getAskDeleteNewDocs()) GetDocument()->Modify (true); + OnUpdate(this, NULL); GetDocument()->UpdateAllViews (this); } GetDocument()->Activate(); @@ -1060,8 +1087,10 @@ ImageFileView::setInitialClientSize () void ImageFileView::OnDraw (wxDC* dc) { - if (m_bitmap.Ok()) - dc->DrawBitmap(m_bitmap, 0, 0, false); + if (m_pBitmap && m_pBitmap->Ok()) { + *theApp->getLog() << "Drawing bitmap"; + dc->DrawBitmap(*m_pBitmap, 0, 0, false); + } int xCursor, yCursor; if (m_pCanvas->GetCurrentCursor (xCursor, yCursor)) @@ -1111,7 +1140,12 @@ ImageFileView::OnUpdate (wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint) ) } } wxImage image (nx, ny, imageData, true); - m_bitmap = image.ConvertToBitmap(); + if (m_pBitmap) { + delete m_pBitmap; + m_pBitmap = NULL; + } + *theApp->getLog() << "Making new bitmap bitmap"; + m_pBitmap = new wxBitmap (image); delete imageData; m_pCanvas->SetScrollbars(20, 20, nx/20, ny/20); m_pCanvas->SetBackgroundColour(*wxWHITE); @@ -1152,8 +1186,9 @@ void ImageFileView::OnEditCopy (wxCommandEvent& event) { wxBitmapDataObject *pBitmapObject = new wxBitmapDataObject; - - pBitmapObject->SetBitmap (m_bitmap); + + if (m_pBitmap) + pBitmapObject->SetBitmap (*m_pBitmap); if (wxTheClipboard->Open()) { wxTheClipboard->SetData (pBitmapObject); @@ -1196,7 +1231,7 @@ ImageFileView::OnEditPaste (wxCommandEvent& event) bool bMonochrome = false; if (bitmap.Ok() == true && bitmap.GetWidth() == nx && bitmap.GetHeight() == ny) { - wxImage image (bitmap); + wxImage image (bitmap.ConvertToImage()); double dScale3 = 3 * 255; unsigned char* pixels = image.GetData(); ImageFileArray v = rIF.getArray(); @@ -1308,6 +1343,7 @@ ImageFileView::OnScaleSize (wxCommandEvent& event) *theApp->getLog() << os.str().c_str() << "\n"; if (theApp->getAskDeleteNewDocs()) pScaledDoc->Modify (true); + OnUpdate(this, NULL); pScaledDoc->UpdateAllViews (this); pScaledDoc->getView()->setInitialClientSize(); pScaledDoc->Activate(); @@ -2173,6 +2209,7 @@ PhantomFileView::OnProjections (wxCommandEvent& event) pProjectionDoc->setProjections (pProj); if (theApp->getAskDeleteNewDocs()) pProjectionDoc-> Modify(true); + OnUpdate(this, NULL); pProjectionDoc->UpdateAllViews (this); pProjectionDoc->getView()->setInitialClientSize(); pProjectionDoc->Activate(); @@ -2248,6 +2285,7 @@ PhantomFileView::OnRasterize (wxCommandEvent& event) *theApp->getLog() << os.str().c_str() << "\n"; pImageFile->labelAdd (os.str().c_str(), timer.timerEnd()); + OnUpdate(this, NULL); pRasterDoc->UpdateAllViews(this); pRasterDoc->getView()->setInitialClientSize(); pRasterDoc->Activate(); @@ -2461,7 +2499,7 @@ END_EVENT_TABLE() ProjectionFileView::ProjectionFileView() -: wxView(), m_pFrame(0), m_pCanvas(0), m_pFileMenu(0) + : wxView(), m_pBitmap(0), m_pFrame(0), m_pCanvas(0), m_pFileMenu(0) { #ifdef DEBUG m_iDefaultNX = 115; @@ -3094,8 +3132,8 @@ ProjectionFileView::OnCreate(wxDocument *doc, long WXUNUSED(flags) ) void ProjectionFileView::OnDraw (wxDC* dc) { - if (m_bitmap.Ok()) - dc->DrawBitmap (m_bitmap, 0, 0, false); + if (m_pBitmap && m_pBitmap->Ok()) + dc->DrawBitmap (*m_pBitmap, 0, 0, false); } @@ -3150,7 +3188,11 @@ ProjectionFileView::OnUpdate (wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint) } } wxImage image (nDet, nView, imageData, true); - m_bitmap = image.ConvertToBitmap(); + if (m_pBitmap) { + delete m_pBitmap; + m_pBitmap = NULL; + } + m_pBitmap = new wxBitmap (image); delete imageData; }