r582: no message
[ctsim.git] / src / ctsim.cpp
index c6df4ae743dce967d021bf82c80e6355beaebae4..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.83 2001/02/21 00:09:31 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.83 2001/02/21 00:09:31 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,7 +82,8 @@ struct option CTSimApp::ctsimOptions[] =
 IMPLEMENT_APP(CTSimApp)
 
 CTSimApp::CTSimApp()
-:  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,7 +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");
@@ -494,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);
@@ -535,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);
@@ -562,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)
 {
@@ -595,21 +629,6 @@ MainFrame::showHelp (int commandID)
 #endif
                break;
 
-        case IDH_QUICKSTART:
-#ifdef CTSIM_WINHELP
-    m_winHelp.DisplaySection (commandID);
-#else
-    m_htmlHelp.Display (_T("Quick Start"));
-#endif
-    break;
-
-       case IDH_DLG_PROJECTIONS:
-#ifdef CTSIM_WINHELP
-    m_winHelp.DisplaySection (commandID);
-#else
-    m_htmlHelp.DisplaySection (_T("IDH_DLG_PROJECTIONS"));
-#endif
-    break;
 
        default:
 #ifdef CTSIM_WINHELP
@@ -840,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());
   }
 }
 
@@ -852,7 +875,14 @@ 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.ShowModal();