r582: no message
[ctsim.git] / src / ctsim.cpp
index 5f63c7398c0e9048fc4aff9ae450529dc3fbbc33..0d459ad784a6d8c0458043bce3c6b2aac274f543 100644 (file)
@@ -7,9 +7,9 @@
 **   Date Started:  July 2000
 **
 **  This is part of the CTSim program
-**  Copyright (C) 1983-2000 Kevin Rosenberg
+**  Copyright (c) 1983-2001 Kevin Rosenberg
 **
-**  $Id: ctsim.cpp,v 1.81 2001/02/20 00:07:56 kevin Exp $
+**  $Id: ctsim.cpp,v 1.89 2001/02/25 10:52:55 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
 #define strdup _strdup
 #endif
 
-// For compilers that support precompilation, includes "wx/wx.h".
 #include "wx/wxprec.h"
 
-#ifdef __BORLANDC__
-#pragma hdrstop
-#endif
-
 #ifndef WX_PRECOMP
 #include "wx/wx.h"
 #endif
@@ -57,6 +52,8 @@
 #include "docs.h"
 #include "views.h"
 #include "dialogs.h"
+#include "tips.h"
+#include "backgroundmgr.h"
 
 #if defined(HAVE_CONFIG_H)
 #include "config.h"
@@ -72,7 +69,7 @@
 #endif
 #endif
 
-static const char* rcsindent = "$Id: ctsim.cpp,v 1.81 2001/02/20 00:07:56 kevin Exp $";
+static const char* rcsindent = "$Id: ctsim.cpp,v 1.89 2001/02/25 10:52:55 kevin Exp $";
 
 struct option CTSimApp::ctsimOptions[] = 
 {
@@ -85,8 +82,9 @@ struct option CTSimApp::ctsimOptions[] =
 IMPLEMENT_APP(CTSimApp)
 
 CTSimApp::CTSimApp()
-: m_docManager(NULL), m_pFrame(NULL), m_pLog(0), m_pLogDoc(0), m_pConfig(0),
-  m_bAdvancedOptions(false), m_bSetModifyNewDocs(true)
+:  m_bAdvancedOptions(false), m_bSetModifyNewDocs(true), m_bVerboseLogging(false), m_bShowStartupTips(true),
+   m_iCurrentTip(0), m_bUseBackgroundTasks(false),
+  m_docManager(NULL), m_pFrame(NULL), m_pLog(0), m_pLogDoc(0), m_pConfig(0)
 {
        theApp = this;
 }
@@ -228,10 +226,21 @@ CTSimApp::OnInit()
     m_pFrame->AddPendingEvent(closeEvent);
   }
 
+  if (getStartupTips())
+    ShowTips();
 
+  m_pBackgroundMgr = new BackgroundManager;
   return true;
 }
 
+void
+CTSimApp::ShowTips()
+{
+    CTSimTipProvider tipProvider (m_iCurrentTip);
+    setStartupTips (::wxShowTip (m_pFrame, &tipProvider, getStartupTips()));
+    m_iCurrentTip = tipProvider.GetCurrentTip();
+}
+
 
 #include "./ctsim.xpm"
 void
@@ -276,6 +285,10 @@ CTSimApp::openConfig()
        wxConfigBase::Set(m_pConfig);
   m_pConfig->Read ("AdvancedOptions", &m_bAdvancedOptions);
   m_pConfig->Read ("SetModifyNewDocs", &m_bSetModifyNewDocs);
+  m_pConfig->Read ("VerboseLogging", &m_bVerboseLogging);
+  m_pConfig->Read ("StartupTips", &m_bShowStartupTips);
+  m_pConfig->Read ("CurrentTip", &m_iCurrentTip);
+  m_pConfig->Read ("UseBackgroundTasks", &m_bUseBackgroundTasks);
 }
 
 void
@@ -283,6 +296,11 @@ CTSimApp::closeConfig()
 {
   m_pConfig->Write ("AdvancedOptions", m_bAdvancedOptions);
   m_pConfig->Write ("SetModifyNewDocs", m_bSetModifyNewDocs);
+  m_pConfig->Write ("VerboseLogging", m_bVerboseLogging);
+  m_pConfig->Write ("StartupTips", m_bShowStartupTips);
+  m_pConfig->Write ("CurrentTip", m_iCurrentTip);
+  m_pConfig->Write ("UseBackgroundTasks", m_bUseBackgroundTasks);
+
        delete m_pConfig;
 }
 
@@ -314,7 +332,9 @@ BEGIN_EVENT_TABLE(MainFrame, wxDocParentFrame)
 EVT_MENU(MAINMENU_FILE_PREFERENCES, MainFrame::OnPreferences)
 EVT_MENU(MAINMENU_HELP_ABOUT, MainFrame::OnAbout)
 EVT_MENU(MAINMENU_HELP_CONTENTS, MainFrame::OnHelpContents)
+EVT_MENU(MAINMENU_HELP_TIPS, MainFrame::OnHelpTips)
 EVT_MENU(IDH_QUICKSTART, MainFrame::OnHelpButton)
+EVT_MENU(MAINMENU_LOG_EVENT, MainFrame::OnLogEvent)
 EVT_BUTTON(IDH_DLG_RASTERIZE, MainFrame::OnHelpButton)
 EVT_BUTTON(IDH_DLG_PROJECTIONS, MainFrame::OnHelpButton)
 EVT_BUTTON(IDH_DLG_RECONSTRUCTION, MainFrame::OnHelpButton)
@@ -393,6 +413,7 @@ MainFrame::MainFrame(wxDocManager *manager, wxFrame *frame, wxWindowID id, const
        
        wxMenu* help_menu = new wxMenu;
        help_menu->Append (MAINMENU_HELP_CONTENTS, "&Contents\tF1");
+  help_menu->Append (MAINMENU_HELP_TIPS, "&Tips");
   help_menu->Append (IDH_QUICKSTART, "&Quick Start");
 #if defined(CTSIM_WINHELP) && (defined(DEBUG) || defined(_DEBUG))
        help_menu->Append (MAINMENU_HELP_SECONDARY, "&Secondary Help");
@@ -432,13 +453,13 @@ MainFrame::MainFrame(wxDocManager *manager, wxFrame *frame, wxWindowID id, const
        accelEntries[0].Set (wxACCEL_CTRL, static_cast<int>('O'), wxID_OPEN);
        accelEntries[2].Set (wxACCEL_CTRL, static_cast<int>('P'), MAINMENU_FILE_CREATE_PHANTOM);
        accelEntries[3].Set (wxACCEL_CTRL, static_cast<int>('F'), MAINMENU_FILE_CREATE_FILTER);
-#ifndef CTSIM_MDI
        accelEntries[4].Set (wxACCEL_NORMAL, WXK_F1, MAINMENU_HELP_CONTENTS);
+#ifndef CTSIM_MDI
        for (i = 0; i < 10; i++)
                accelEntries[i+4].Set (wxACCEL_CTRL, static_cast<int>('0'+i), MAINMENU_WINDOW_BASE+i);
        wxAcceleratorTable accelTable (15, accelEntries);
 #else
-       wxAcceleratorTable accelTable (4, accelEntries);
+       wxAcceleratorTable accelTable (5, accelEntries);
 #endif
        
        SetAcceleratorTable (accelTable);
@@ -493,7 +514,8 @@ MainFrame::OnCreatePhantom(wxCommandEvent& event)
        int dialogReturn = dialogPhantom.ShowModal();
        if (dialogReturn == wxID_OK) {
                wxString selection (dialogPhantom.getPhantom());
-               *theApp->getLog() << "Selected phantom " << selection.c_str() << "\n";
+    if (theApp->getVerboseLogging())
+               *theApp->getLog() << "Selected phantom " << selection.c_str() << "\n";
                wxString filename = selection + ".phm";
                m_iDefaultPhantomID = Phantom::convertNameToPhantomID (selection.c_str());
                theApp->getDocManager()->CreateDocument (filename, wxDOC_SILENT);
@@ -534,7 +556,8 @@ MainFrame::OnCreateFilter (wxCommandEvent& WXUNUSED(event))
                rIF.setArraySize (m_iDefaultFilterXSize, m_iDefaultFilterYSize);
                rIF.filterResponse (strDomain.c_str(), m_dDefaultFilterBandwidth, strFilter.c_str(), m_dDefaultFilterParam, m_dDefaultFilterInputScale, m_dDefaultFilterOutputScale);
                rIF.labelAdd (os.str().c_str());
-    pFilterDoc->Modify (true);
+    if (theApp->getAskDeleteNewDocs())
+      pFilterDoc->Modify (true);
                pFilterDoc->UpdateAllViews();
                pFilterDoc->GetFirstView()->OnUpdate (NULL, NULL);
                pFilterDoc->getView()->getFrame()->SetClientSize(m_iDefaultFilterXSize, m_iDefaultFilterYSize);
@@ -561,6 +584,18 @@ CTSimApp::getCompatibleImages (const ImageFileDocument* pIFDoc, std::vector<Imag
 }
 
 
+void
+MainFrame::OnLogEvent (wxCommandEvent& event)
+{
+  *theApp->getLog() << event.GetString();
+}
+
+void
+MainFrame::OnHelpTips (wxCommandEvent& event)
+{
+  theApp->ShowTips();
+}
+
 void 
 MainFrame::OnHelpContents (wxCommandEvent& event)
 {
@@ -593,12 +628,13 @@ MainFrame::showHelp (int commandID)
                m_htmlHelp.DisplayContents ();
 #endif
                break;
-               
+
+
        default:
 #ifdef CTSIM_WINHELP
     m_winHelp.DisplaySection (commandID);
 #else
-    m_htmlHelp.DisplaySection (commandID);
+    m_htmlHelp.Display (commandID);
 #endif
                break;
        }
@@ -823,10 +859,14 @@ void
 MainFrame::OnPreferences (wxCommandEvent& WXUNUSED(event) )
 {
   DialogPreferences dlg (this, "CTSim Preferences", theApp->getAdvancedOptions(), 
-    theApp->getAskDeleteNewDocs());
+    theApp->getAskDeleteNewDocs(), theApp->getVerboseLogging(), theApp->getStartupTips(), 
+    theApp->getUseBackgroundTasks());
   if (dlg.ShowModal() == wxID_OK) {
     theApp->setAdvancedOptions (dlg.getAdvancedOptions());
     theApp->setAskDeleteNewDocs (dlg.getAskDeleteNewDocs());
+    theApp->setVerboseLogging (dlg.getVerboseLogging());
+    theApp->setStartupTips (dlg.getStartupTips());
+    theApp->setUseBackgroundTasks (dlg.getUseBackgroundTasks());
   }
 }
 
@@ -835,10 +875,17 @@ MainFrame::OnPreferences (wxCommandEvent& WXUNUSED(event) )
 void 
 MainFrame::OnAbout(wxCommandEvent& WXUNUSED(event) )
 {
-       wxBitmap bmp (splash);
+  long lFreeMem = ::wxGetFreeMemory() / (1024L * 1024L);
+  wxString strOSDesc = ::wxGetOsDescription();
+  *theApp->getLog() << "Operation System: " << strOSDesc;
+  if (lFreeMem > 0)
+    *theApp->getLog() << ",  Free Memory: " << lFreeMem << " MB";
+  *theApp->getLog() << "\n";
+
+  wxBitmap bmp (splash);
        if (bmp.Ok()) {
                BitmapDialog dlg (&bmp, "About CTSim");
-               dlg.Show(true);
+               dlg.ShowModal();
        } else {
                wxString msg = "CTSim\nThe Open Source Computed Tomography Simulator\n";
 #ifdef CTSIMVERSION