r191: *** empty log message ***
authorKevin M. Rosenberg <kevin@rosenberg.net>
Thu, 7 Sep 2000 01:28:33 +0000 (01:28 +0000)
committerKevin M. Rosenberg <kevin@rosenberg.net>
Thu, 7 Sep 2000 01:28:33 +0000 (01:28 +0000)
ChangeLog
NEWS
TODO
configure
configure.in
src/ctsim.cpp
src/ctsim.h
src/docs.cpp
src/docs.h
src/views.cpp

index 9cf582ffdd6fe89bb935f6a663736c8a84fd55c0..f40f2a4fadd71483a0e028efbc246b326cb56b15 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2.0.0 - 9/7/00
+   Version 2.0.0 released!
+   ctsim: Added Window menu to Main frame
+   ctsim: Disabled not support reconstruction method
+       
 2.0.0-b12 - 9/4/00
    ctsim: Added animation of reconstruction
    ctsim: Added saving of dialog parameters for Projection & Reconstruction
diff --git a/NEWS b/NEWS
index 8baa49358e7855af1567e3263bf19624d91af104..1938d04f8627d04be6eccc28e811c98107f8b0b3 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,4 @@
-Version 2.0 of CTSim is near completion!
+Version 2.0 of CTSim has been released!
 
 
 New Features of CTSim version 2.0:
diff --git a/TODO b/TODO
index 80db119d079993475cdb7a4d39f6f5e205eef03d..ad5017045ce898f50706ea4fa91e738c0ad3ef56 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,6 +1,4 @@
 Convert pol to C++ object.
 
-Add divergent filtering to frequency/direct filtering
-
 FFT filtering requires FFTW library. Add a basic FFT routine.
 
index 7ff20cbbd0005af70387c7e28a20fb426d4015da..9decb9b2ba05601c49e49342de1cfa6f8a2521fb 100755 (executable)
--- a/configure
+++ b/configure
@@ -715,7 +715,7 @@ fi
 
 PACKAGE=ctsim
 
-VERSION=2.0.0b12
+VERSION=2.0.0
 
 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
   { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
index f010b6fe6ac01f947ba096229ee1df9a052c6e61..78a67130d2734279b6f8a61dd49c32f6efb69c7f 100644 (file)
@@ -4,7 +4,7 @@ dnl Must reset CDPATH so that bash's cd does not print to stdout
 dnl CDPATH=
 
 AC_INIT(src/ctsim.cpp)
-AM_INIT_AUTOMAKE(ctsim,2.0.0b12)
+AM_INIT_AUTOMAKE(ctsim,2.0.0)
 AM_CONFIG_HEADER(config.h)
 
 dnl Checks for programs.
index a3aefb58a3d11c9ece7728d61cd15fd03e557c0e..cdb4cafb6e945a419749ddcf97a52e7876bb38a6 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: ctsim.cpp,v 1.11 2000/09/02 16:40:36 kevin Exp $
+**  $Id: ctsim.cpp,v 1.12 2000/09/07 01:28: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
@@ -53,7 +53,7 @@
 #include <getopt.h>
 #endif
 
-static const char* rcsindent = "$Id: ctsim.cpp,v 1.11 2000/09/02 16:40:36 kevin Exp $";
+static const char* rcsindent = "$Id: ctsim.cpp,v 1.12 2000/09/07 01:28:33 kevin Exp $";
 
 class CTSimApp* theApp = NULL;
 
@@ -66,7 +66,7 @@ struct option CTSimApp::ctsimOptions[] =
 
 IMPLEMENT_APP(CTSimApp)
 
-CTSimApp::CTSimApp(void)
+CTSimApp::CTSimApp()
   : m_docManager(NULL), m_pFrame(NULL)
 {
     theApp = this;
@@ -81,7 +81,7 @@ CTSimApp::CTSimApp(void)
 #endif
 
 bool
-CTSimApp::OnInit(void)
+CTSimApp::OnInit()
 {
 #ifdef HAVE_SETPRIORITY
   setpriority (PRIO_PROCESS, 0, 15);  // set to low scheduling priority
@@ -109,39 +109,15 @@ CTSimApp::OnInit(void)
 
     m_docManager = new wxDocManager;
     
-    (void) new wxDocTemplate (m_docManager, "ImageFile", "*.if", "", "if", "ImageFile doc", "ImageFile View", CLASSINFO(ImageFileDocument), CLASSINFO(ImageFileView));
+    new wxDocTemplate (m_docManager, "ImageFile", "*.if", "", "if", "ImageFile doc", "ImageFile View", CLASSINFO(ImageFileDocument), CLASSINFO(ImageFileView));
 
-    (void) new wxDocTemplate (m_docManager, "ProjectionFile", "*.pj", "", "pj", "ProjectionFile doc", "ProjectionFile View", CLASSINFO(ProjectionFileDocument), CLASSINFO(ProjectionFileView));
+    new wxDocTemplate (m_docManager, "ProjectionFile", "*.pj", "", "pj", "ProjectionFile doc", "ProjectionFile View", CLASSINFO(ProjectionFileDocument), CLASSINFO(ProjectionFileView));
 
-    (void) new wxDocTemplate (m_docManager, "PhantomFile", "*.phm", "", "phm", "Phantom doc", "Phantom View", CLASSINFO(PhantomDocument), CLASSINFO(PhantomView));
+    new wxDocTemplate (m_docManager, "PhantomFile", "*.phm", "", "phm", "Phantom doc", "Phantom View", CLASSINFO(PhantomDocument), CLASSINFO(PhantomView));
 
     //// Create the main frame window
     m_pFrame = new MainFrame(m_docManager, (wxFrame *) NULL, -1, "CTSim", wxPoint(0, 0), wxSize(500, 400), wxDEFAULT_FRAME_STYLE);
     
-    //// Make a menubar
-    wxMenu *file_menu = new wxMenu;
-    
-    file_menu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...");
-    file_menu->Append(wxID_OPEN, "&Open...");
-    
-    file_menu->AppendSeparator();
-    file_menu->Append(MAINMENU_FILE_EXIT, "E&xit");
-    
-    // A nice touch: a history of files visited. Use this menu.
-    m_docManager->FileHistoryUseMenu(file_menu);
-    
-    wxMenu *help_menu = new wxMenu;
-    help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents");
-    help_menu->AppendSeparator();
-    help_menu->Append(MAINMENU_HELP_ABOUT, "&About");
-    
-    wxMenuBar *menu_bar = new wxMenuBar;
-    
-    menu_bar->Append(file_menu, "&File");
-    menu_bar->Append(help_menu, "&Help");
-    
-    m_pFrame->SetMenuBar(menu_bar);
-    
     SetTopWindow (m_pFrame);
     m_pFrame->Centre(wxBOTH);
 
@@ -166,7 +142,7 @@ CTSimApp::usage(const char* program)
 }
 
 int
-CTSimApp::OnExit(void)
+CTSimApp::OnExit()
 {
     delete m_docManager;
 #ifdef HAVE_DMALLOC
@@ -176,7 +152,7 @@ CTSimApp::OnExit(void)
 }
 
 wxString
-CTSimApp::getUntitledFilename(void)
+CTSimApp::getUntitledFilename()
 {
   static int untitledNumber = 1;
 
@@ -196,22 +172,78 @@ BEGIN_EVENT_TABLE(MainFrame, wxDocParentFrame)
   EVT_MENU(MAINMENU_HELP_CONTENTS, MainFrame::OnHelpContents)
   EVT_MENU(MAINMENU_FILE_CREATE_PHANTOM, MainFrame::OnCreatePhantom)
   EVT_MENU(MAINMENU_FILE_EXIT, MainFrame::OnExit)
+  EVT_MENU(MAINMENU_WINDOW_BASE, MainFrame::OnWindowMenu0)
+  EVT_MENU(MAINMENU_WINDOW_BASE+1, MainFrame::OnWindowMenu1)
+  EVT_MENU(MAINMENU_WINDOW_BASE+2, MainFrame::OnWindowMenu2)
+  EVT_MENU(MAINMENU_WINDOW_BASE+3, MainFrame::OnWindowMenu3)
+  EVT_MENU(MAINMENU_WINDOW_BASE+4, MainFrame::OnWindowMenu4)
+  EVT_MENU(MAINMENU_WINDOW_BASE+5, MainFrame::OnWindowMenu5)
+  EVT_MENU(MAINMENU_WINDOW_BASE+6, MainFrame::OnWindowMenu6)
+  EVT_MENU(MAINMENU_WINDOW_BASE+7, MainFrame::OnWindowMenu7)
+  EVT_MENU(MAINMENU_WINDOW_BASE+8, MainFrame::OnWindowMenu8)
+  EVT_MENU(MAINMENU_WINDOW_BASE+9, MainFrame::OnWindowMenu9)
+  EVT_MENU(MAINMENU_WINDOW_BASE+10, MainFrame::OnWindowMenu10)
+  EVT_MENU(MAINMENU_WINDOW_BASE+11, MainFrame::OnWindowMenu11)
+  EVT_MENU(MAINMENU_WINDOW_BASE+12, MainFrame::OnWindowMenu12)
+  EVT_MENU(MAINMENU_WINDOW_BASE+13, MainFrame::OnWindowMenu13)
+  EVT_MENU(MAINMENU_WINDOW_BASE+14, MainFrame::OnWindowMenu14)
+  EVT_MENU(MAINMENU_WINDOW_BASE+15, MainFrame::OnWindowMenu15)
+  EVT_MENU(MAINMENU_WINDOW_BASE+16, MainFrame::OnWindowMenu16)
+  EVT_MENU(MAINMENU_WINDOW_BASE+17, MainFrame::OnWindowMenu17)
+  EVT_MENU(MAINMENU_WINDOW_BASE+18, MainFrame::OnWindowMenu18)
+  EVT_MENU(MAINMENU_WINDOW_BASE+19, MainFrame::OnWindowMenu19)
+  EVT_UPDATE_UI_RANGE(MAINMENU_WINDOW_BASE, MAINMENU_WINDOW_BASE+20, MainFrame::OnUpdateUI)
 END_EVENT_TABLE()
 
 
+
 MainFrame::MainFrame(wxDocManager *manager, wxFrame *frame, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, const long type)
   : wxDocParentFrame(manager, frame, id, title, pos, size, type), m_pLog(NULL)
 {
-    CreateStatusBar();
     m_pLog = new wxTextCtrl (this, -1, "Log Window\n", wxPoint(0, 250), wxSize(100,50), wxTE_MULTILINE | wxTE_READONLY);
     wxLog::SetActiveTarget(new wxLogTextCtrl(m_pLog));
+    CreateStatusBar();
     SetStatusText ("Welcome to CTSim");
+
+    //// Make a menubar
+    wxMenu *file_menu = new wxMenu;
+    
+    file_menu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom...");
+    file_menu->Append(wxID_OPEN, "&Open...");
+    
+    file_menu->AppendSeparator();
+    file_menu->Append(MAINMENU_FILE_EXIT, "E&xit");
+    
+    //  history of files visited
+    m_docManager->FileHistoryUseMenu(file_menu);
+    
+    m_pWindowMenu = new wxMenu;
+    m_pWindowMenu->UpdateUI (this);
+
+    wxMenu* help_menu = new wxMenu;
+    help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents");
+    help_menu->AppendSeparator();
+    help_menu->Append(MAINMENU_HELP_ABOUT, "&About");
+    
+    wxMenuBar* menu_bar = new wxMenuBar;
+    
+    menu_bar->Append(file_menu, "&File");
+    menu_bar->Append(m_pWindowMenu, "&Window");
+    menu_bar->Append(help_menu, "&Help");
+    
+    SetMenuBar(menu_bar);
+
+    for (int i = 0; i < MAX_WINDOW_MENUITEMS; i++) {
+      m_apWindowMenuItems[i] = new wxMenuItem (m_pWindowMenu, MAINMENU_WINDOW_BASE+i, wxString("<Empty>"));
+      m_pWindowMenu->Append (m_apWindowMenuItems[i]);
+      m_pWindowMenu->Enable (MAINMENU_WINDOW_BASE+i, false);
+    }
 }
 
 void 
 MainFrame::OnAbout(wxCommandEvent& WXUNUSED(event) )
 {
-    wxMessageBox("CTSim\nAuthor: Kevin Rosenberg <kevin@rosenberg.net>\nUsage: ctsim [files-to-open..] [--help]", "About CTSim", wxOK | wxICON_INFORMATION, this);
+    wxMessageBox("CTSim\nThe Open Source Computed Tomography Simulator\nAuthor: Kevin Rosenberg <kevin@rosenberg.net>\nUsage: ctsim [files-to-open..] [--help]", "About CTSim", wxOK | wxICON_INFORMATION, this);
 }
 
 void 
@@ -240,3 +272,101 @@ MainFrame::OnExit (wxCommandEvent& WXUNUSED(event) )
     Close(true);
 }
 
+void
+MainFrame::OnUpdateUI (wxUpdateUIEvent& rEvent)
+{
+  int iPos = 0;
+  wxList& rListDocs = m_docManager->GetDocuments();
+  wxNode* pNode = rListDocs.GetFirst();
+  while (iPos < MAX_WINDOW_MENUITEMS && pNode != NULL) {
+    wxDocument* pDoc = static_cast<wxDocument*>(pNode->GetData());
+    wxString strFilename = pDoc->GetFilename();
+    m_apWindowMenuItems[iPos]->SetName (strFilename);
+    m_apWindowMenuData[iPos] = pDoc;
+    m_pWindowMenu->Enable (MAINMENU_WINDOW_BASE+iPos, true);
+    iPos++;
+    pNode = pNode->GetNext();
+  }
+  for (int i = iPos; i < MAX_WINDOW_MENUITEMS; i++) {
+    m_pWindowMenu->Enable (MAINMENU_WINDOW_BASE+i, false);
+    m_apWindowMenuItems[i]->SetName (wxString("<Empty>"));
+    m_apWindowMenuData[i] = NULL;
+  }
+    
+}
+
+void 
+MainFrame::DoWindowMenu (int iMenuPosition, wxCommandEvent& event)
+{
+  if (wxDocument* pDoc = m_apWindowMenuData [iMenuPosition]) {
+    wxString strFilename = pDoc->GetFilename();
+    const wxView* pView = pDoc->GetFirstView();
+    if (pView) {
+      wxFrame* pFrame = pView->GetFrame();
+      pFrame->SetFocus();
+      pFrame->Raise();
+    }
+  }
+}
+
+void MainFrame::OnWindowMenu0 (wxCommandEvent& event)
+{ DoWindowMenu (0, event); }
+
+void MainFrame::OnWindowMenu1 (wxCommandEvent& event)
+{ DoWindowMenu (1, event); }
+
+void MainFrame::OnWindowMenu2 (wxCommandEvent& event)
+{ DoWindowMenu (2, event); }
+
+void MainFrame::OnWindowMenu3 (wxCommandEvent& event)
+{ DoWindowMenu (3, event); }
+
+void MainFrame::OnWindowMenu4 (wxCommandEvent& event)
+{ DoWindowMenu (4, event); }
+
+void MainFrame::OnWindowMenu5 (wxCommandEvent& event)
+{ DoWindowMenu (5, event); }
+
+void MainFrame::OnWindowMenu6 (wxCommandEvent& event)
+{ DoWindowMenu (6, event); }
+
+void MainFrame::OnWindowMenu7 (wxCommandEvent& event)
+{ DoWindowMenu (7, event); }
+
+void MainFrame::OnWindowMenu8 (wxCommandEvent& event)
+{ DoWindowMenu (8, event); }
+
+void MainFrame::OnWindowMenu9 (wxCommandEvent& event)
+{ DoWindowMenu (9, event); }
+
+void MainFrame::OnWindowMenu10 (wxCommandEvent& event)
+{ DoWindowMenu (10, event); }
+
+void MainFrame::OnWindowMenu11 (wxCommandEvent& event)
+{ DoWindowMenu (11, event); }
+
+void MainFrame::OnWindowMenu12 (wxCommandEvent& event)
+{ DoWindowMenu (12, event); }
+
+void MainFrame::OnWindowMenu13 (wxCommandEvent& event)
+{ DoWindowMenu (13, event); }
+
+void MainFrame::OnWindowMenu14 (wxCommandEvent& event)
+{ DoWindowMenu (14, event); }
+
+void MainFrame::OnWindowMenu15 (wxCommandEvent& event)
+{ DoWindowMenu (15, event); }
+
+void MainFrame::OnWindowMenu16 (wxCommandEvent& event)
+{ DoWindowMenu (16, event); }
+
+void MainFrame::OnWindowMenu17 (wxCommandEvent& event)
+{ DoWindowMenu (17, event); }
+
+void MainFrame::OnWindowMenu18 (wxCommandEvent& event)
+{ DoWindowMenu (18, event); }
+
+void MainFrame::OnWindowMenu19 (wxCommandEvent& event)
+{ DoWindowMenu (19, event); }
+
+
index 6185d8639ed1a09ea960c1d2ba9a21a42aa68f39..8367f21a9056b263c311f1c13a50e664241d71a8 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: ctsim.h,v 1.5 2000/08/25 15:59:13 kevin Exp $
+**  $Id: ctsim.h,v 1.6 2000/09/07 01:28: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
 #include <dmalloc.h>
 #endif
 
-// Define a new frame
+class wxMenu;
+class wxDocument;
+
+// Define a new frame for main window
 class MainFrame: public wxDocParentFrame
 {
     DECLARE_CLASS(MainFrame)
 private:
     wxTextCtrl* m_pLog;
+    wxMenu* m_pWindowMenu;
+
+    static const int MAX_WINDOW_MENUITEMS = 20;
+    wxMenuItem* m_apWindowMenuItems[MAX_WINDOW_MENUITEMS];
+    wxDocument* m_apWindowMenuData[MAX_WINDOW_MENUITEMS];
 
 public:
     MainFrame(wxDocManager *manager, wxFrame *frame, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, const long type);
@@ -51,27 +59,53 @@ public:
     void OnCreatePhantom (wxCommandEvent& event);
     void OnExit (wxCommandEvent& event);
 
+    void OnUpdateUI (wxUpdateUIEvent& event);
+
     wxTextCtrl* getLog() 
        { return m_pLog; }
 
+    void OnWindowMenu0 (wxCommandEvent& event);
+    void OnWindowMenu1 (wxCommandEvent& event);
+    void OnWindowMenu2 (wxCommandEvent& event);
+    void OnWindowMenu3 (wxCommandEvent& event);
+    void OnWindowMenu4 (wxCommandEvent& event);
+    void OnWindowMenu5 (wxCommandEvent& event);
+    void OnWindowMenu6 (wxCommandEvent& event);
+    void OnWindowMenu7 (wxCommandEvent& event);
+    void OnWindowMenu8 (wxCommandEvent& event);
+    void OnWindowMenu9 (wxCommandEvent& event);
+    void OnWindowMenu10 (wxCommandEvent& event);
+    void OnWindowMenu11 (wxCommandEvent& event);
+    void OnWindowMenu12 (wxCommandEvent& event);
+    void OnWindowMenu13 (wxCommandEvent& event);
+    void OnWindowMenu14 (wxCommandEvent& event);
+    void OnWindowMenu15 (wxCommandEvent& event);
+    void OnWindowMenu16 (wxCommandEvent& event);
+    void OnWindowMenu17 (wxCommandEvent& event);
+    void OnWindowMenu18 (wxCommandEvent& event);
+    void OnWindowMenu19 (wxCommandEvent& event);
+
+    void DoWindowMenu (int iMenuPosition, wxCommandEvent& event);
+
     DECLARE_EVENT_TABLE()
 };
 
+
 class wxDocManager;
 class CTSimApp: public wxApp
 {
 public:
-    CTSimApp(void);
-    bool OnInit(void);
-    int OnExit(void);
-    MainFrame* getMainFrame(void) const
+    CTSimApp();
+    bool OnInit();
+    int OnExit();
+    MainFrame* getMainFrame() const
       { return m_pFrame; }
-    wxTextCtrl* getLog(void)
+    wxTextCtrl* getLog()
       { return m_pFrame->getLog(); }
     wxDocManager* getDocManager() 
        { return m_docManager; }
 
-    wxString getUntitledFilename(void);
+    wxString getUntitledFilename();
 
 private:
     wxDocManager* m_docManager;
@@ -102,6 +136,7 @@ enum {
     IFMENU_VIEW_SCALE_MINMAX,
     PHMMENU_PROCESS_RASTERIZE,
     PHMMENU_PROCESS_PROJECTIONS,
+    MAINMENU_WINDOW_BASE,
 };
 
 #endif
index c39b72b4c22db7e7c35ff090b543dc970222bc69..6722ef5946b874408639e4ad7cedae90fe47750c 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: docs.cpp,v 1.2 2000/07/15 08:36:13 kevin Exp $
+**  $Id: docs.cpp,v 1.3 2000/09/07 01:28: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
@@ -95,6 +95,12 @@ void ImageFileDocument::Modify(bool mod)
     wxDocument::Modify(mod);
 }
 
+bool ImageFileDocument::OnCloseDocument ()
+{
+  bool bReturn = wxDocument::OnCloseDocument();
+  return bReturn;
+}
+
 // ProjectionFileDocument
 
 IMPLEMENT_DYNAMIC_CLASS(ProjectionFileDocument, wxDocument)
@@ -139,6 +145,12 @@ void ProjectionFileDocument::Modify(bool mod)
 }
 
 
+bool ProjectionFileDocument::OnCloseDocument ()
+{
+  bool bReturn = wxDocument::OnCloseDocument();
+  return bReturn;
+}
+
 // PhantomDocument
 
 IMPLEMENT_DYNAMIC_CLASS(PhantomDocument, wxDocument)
@@ -148,6 +160,7 @@ bool PhantomDocument::OnOpenDocument(const wxString& filename)
   wxString myFilename = filename;
   if (wxFile::Exists (myFilename)) {
     m_phantom.createFromFile (myFilename);
+    *theApp->getLog() << "Read phantom file " << filename << "\n";
   } else {
     myFilename.Replace (".phm", "");
     m_phantom.createFromPhantom (myFilename);
@@ -164,6 +177,12 @@ bool PhantomDocument::OnOpenDocument(const wxString& filename)
   return true;
 }
 
+bool PhantomDocument::OnCloseDocument ()
+{
+  bool bReturn = wxDocument::OnCloseDocument();
+  return bReturn;
+}
+
 bool PhantomDocument::IsModified(void) const
 {
   return wxDocument::IsModified();
index d9997c89ceaac1c039cda12ddad73f6e5d13c037..e19f962069952530da16bf8679e8688903d916b9 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: docs.h,v 1.4 2000/07/22 15:45:33 kevin Exp $
+**  $Id: docs.h,v 1.5 2000/09/07 01:28: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
@@ -49,6 +49,7 @@ public:
     virtual bool OnSaveDocument (const wxString& filename);
     virtual bool OnOpenDocument (const wxString& filename);
     virtual bool IsModified (void) const;
+    virtual bool OnCloseDocument ();
     virtual void Modify (bool mod);
     
     ImageFileDocument (void) {}
@@ -72,6 +73,7 @@ public:
     virtual bool OnSaveDocument (const wxString& filename);
     virtual bool OnOpenDocument (const wxString& filename);
     virtual bool IsModified (void) const;
+    virtual bool OnCloseDocument ();
     virtual void Modify (bool mod);
     
     ProjectionFileDocument (void) {}
@@ -115,6 +117,7 @@ public:
        { return m_phantom; }
 
     virtual bool OnOpenDocument (const wxString& filename);
+    virtual bool OnCloseDocument ();
     virtual bool IsModified (void) const;
     virtual void Modify (bool mod);
 };
index c17d50c5b41dc715b2dcedd9fd9fde44662dedc2..2edb737e0e0c74af7c010acf7a521b75dddb0884 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: views.cpp,v 1.21 2000/09/04 09:06:46 kevin Exp $
+**  $Id: views.cpp,v 1.22 2000/09/07 01:28: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
@@ -467,16 +467,18 @@ PhantomView::OnProjections (wxCommandEvent& event)
       rProj.setRemark (os.str());
       *theApp->getLog() << os.str().c_str();
 
+      m_frame->Lower();
       ::wxYield();
-      pProjectionDoc->Modify(true);
-      pProjectionDoc->UpdateAllViews(this);
-      ::wxYield();
-      if (wxView* pView = pProjectionDoc->GetFirstView())
+      if (wxView* pView = pProjectionDoc->GetFirstView()) {
        if (wxFrame* pFrame = pView->GetFrame()) {
          pFrame->SetFocus();
          pFrame->Raise();
        }
-      m_frame->Lower();
+       theApp->getDocManager()->ActivateView (pView, true, false);
+      }
+      ::wxYield();
+      pProjectionDoc->Modify(true);
+      pProjectionDoc->UpdateAllViews(this);
     }
   }
 }
@@ -731,7 +733,28 @@ ProjectionFileView::OnReconstruct (wxCommandEvent& event)
       imageFile.setArraySize (m_iDefaultNX, m_iDefaultNY);
       Timer timerRecon;
 
+      if (m_iDefaultFilterMethod != ProcessSignal::FILTER_METHOD_CONVOLUTION && m_iDefaultFilterGeneration == ProcessSignal::FILTER_GENERATION_DIRECT && rProj.geometry() != Scanner::GEOMETRY_PARALLEL) {
+       wxMessageBox ("Sorry!\nCurrently, frequency-based filtering with direct filter generation is not support for geometries other than parallel.\nAborting command.", "Not Supported", wxOK | wxICON_WARNING, m_frame);
+       return;
+      }
+#if 0
+      SGPDriver* pSGPDriver = NULL;
+      SGP* pSGP = NULL;
+      wxMemoryDC* pDCPlot = NULL;
+      wxBitmap bitmap;
+      if (m_iDefaultTrace >= Trace::TRACE_PLOT) {
+       bitmap.Create (500, 500);
+       pDCPlot = new wxMemoryDC;
+       pDCPlot->SelectObject (bitmap);
+       pSGPDriver = new SGPDriver (dynamic_cast<wxDC*>pDCPlot, 500, 500);
+       pSGP = new SGP (*pSGPDriver);
+      }
+      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, pSGP);
+      delete pSGP;
+#else
       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);
+#endif
+
       if (m_iDefaultTrace > Trace::TRACE_CONSOLE) {
        ReconstructDialog* pDlgReconstruct = new ReconstructDialog (*pReconstruct, rProj, imageFile, m_iDefaultTrace, m_frame);
        for (int iView = 0; iView < rProj.nView(); iView++) {