r3878: Auto commit for Debian build
[ctsim.git] / src / views.cpp
index 7636f07ede17d1fd0d3f3e3e79cae45c300108c6..2d7874d690f5364f46f81e0a1d832b708c87cc4c 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (c) 1983-2001 Kevin Rosenberg
 **
-**  $Id: views.cpp,v 1.161 2002/06/06 22:50:24 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
@@ -184,7 +184,7 @@ ImageFileCanvas::OnChar (wxKeyEvent& event)
     if (m_pView)
       m_pView->OnUpdate (NULL);
   } else
-    wxScrolledWindow::OnChar (event);
+    event.Skip();
 }
 
 wxSize
@@ -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();
@@ -908,11 +935,9 @@ ImageFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   m_pFileMenu->Append(wxID_PREVIEW, "Print Preview");
   m_pFileMenu->AppendSeparator();
   m_pFileMenu->Append(MAINMENU_IMPORT, "&Import...\tCtrl-M");
-#ifdef CTSIM_MDI
   m_pFileMenu->AppendSeparator();
   m_pFileMenu->Append (MAINMENU_FILE_PREFERENCES, "Prefere&nces...");
   m_pFileMenu->Append(MAINMENU_FILE_EXIT, "E&xit");
-#endif
   GetDocumentManager()->FileHistoryAddFilesToMenu(m_pFileMenu);
   GetDocumentManager()->FileHistoryUseMenu(m_pFileMenu);
   
@@ -1062,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))
@@ -1113,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);
@@ -1154,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);
@@ -1198,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();
@@ -1310,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();
@@ -2175,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();
@@ -2250,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();
@@ -2299,11 +2335,9 @@ PhantomFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   m_pFileMenu->Append(wxID_PREVIEW, "Print Pre&view");
   m_pFileMenu->AppendSeparator();
   m_pFileMenu->Append(MAINMENU_IMPORT, "&Import...\tCtrl-M");
-#ifdef CTSIM_MDI
   m_pFileMenu->AppendSeparator();
   m_pFileMenu->Append (MAINMENU_FILE_PREFERENCES, "Prefere&nces...");
   m_pFileMenu->Append(MAINMENU_FILE_EXIT, "E&xit");
-#endif
   GetDocumentManager()->FileHistoryAddFilesToMenu(m_pFileMenu);
   GetDocumentManager()->FileHistoryUseMenu(m_pFileMenu);
   
@@ -2465,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;
@@ -3020,11 +3054,9 @@ ProjectionFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   m_pFileMenu->Append(wxID_PREVIEW, "Print Pre&view");
   m_pFileMenu->AppendSeparator();
   m_pFileMenu->Append(MAINMENU_IMPORT, "&Import...\tCtrl-M");
-#ifdef CTSIM_MDI
   m_pFileMenu->AppendSeparator();
   m_pFileMenu->Append (MAINMENU_FILE_PREFERENCES, "Prefere&nces...");
   m_pFileMenu->Append(MAINMENU_FILE_EXIT, "E&xit");
-#endif
   GetDocumentManager()->FileHistoryAddFilesToMenu(m_pFileMenu);
   GetDocumentManager()->FileHistoryUseMenu(m_pFileMenu);
   
@@ -3100,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);
 }
 
 
@@ -3156,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;
   }
   
@@ -3371,11 +3407,9 @@ PlotFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   m_pFileMenu->Append(wxID_PREVIEW, "Print Pre&view");
   m_pFileMenu->AppendSeparator();
   m_pFileMenu->Append(MAINMENU_IMPORT, "&Import...\tCtrl-M");
-#ifdef CTSIM_MDI
   m_pFileMenu->AppendSeparator();
   m_pFileMenu->Append (MAINMENU_FILE_PREFERENCES, "Prefere&nces...");
   m_pFileMenu->Append(MAINMENU_FILE_EXIT, "E&xit");
-#endif
   GetDocumentManager()->FileHistoryAddFilesToMenu(m_pFileMenu);
   GetDocumentManager()->FileHistoryUseMenu(m_pFileMenu);
   
@@ -3630,11 +3664,9 @@ TextFileView::CreateChildFrame (wxDocument *doc, wxView *view)
   m_pFileMenu->Append(wxID_PREVIEW, "Print Pre&view");
   m_pFileMenu->AppendSeparator();
   m_pFileMenu->Append(MAINMENU_IMPORT, "&Import...\tCtrl-M");
-#ifdef CTSIM_MDI
   m_pFileMenu->AppendSeparator();
   m_pFileMenu->Append (MAINMENU_FILE_PREFERENCES, "Prefere&nces...");
   m_pFileMenu->Append(MAINMENU_FILE_EXIT, "E&xit");
-#endif
   GetDocumentManager()->FileHistoryAddFilesToMenu(m_pFileMenu);
   GetDocumentManager()->FileHistoryUseMenu(m_pFileMenu);