** 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.74 2001/02/11 04:56:38 kevin Exp $
+** $Id: ctsim.cpp,v 1.88 2001/02/22 15:00:20 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
#include "wx/image.h"
#include "wx/filesys.h"
#include "wx/fs_zip.h"
+#ifdef __WXMSW__
#include "wx/msw/helpchm.h"
+#endif
#if !wxUSE_DOC_VIEW_ARCHITECTURE
#error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in setup.h!
#include "ct.h"
#include "ctsim.h"
-#include "ctsim-map.h"
#include "docs.h"
#include "views.h"
#include "dialogs.h"
+#include "tips.h"
+#include "backgroundmgr.h"
#if defined(HAVE_CONFIG_H)
#include "config.h"
#endif
#endif
-static const char* rcsindent = "$Id: ctsim.cpp,v 1.74 2001/02/11 04:56:38 kevin Exp $";
+static const char* rcsindent = "$Id: ctsim.cpp,v 1.88 2001/02/22 15:00:20 kevin Exp $";
struct option CTSimApp::ctsimOptions[] =
{
{"help", 0, 0, O_HELP},
{"version", 0, 0, O_VERSION},
+ {"print", 0, 0, O_PRINT},
{0, 0, 0, 0}
};
IMPLEMENT_APP(CTSimApp)
CTSimApp::CTSimApp()
-: m_docManager(NULL), m_pFrame(NULL), m_pLog(0), m_pLogDoc(0), m_bAdvancedOptions(false)
+: 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;
}
setpriority (PRIO_PROCESS, 0, 15); // set to low scheduling priority
#endif
- m_pConfig = new wxConfig("ctsim", _T(""), ".ctsim", "", wxCONFIG_USE_LOCAL_FILE);
- wxConfigBase::Set(m_pConfig);
+ openConfig();
g_bRunningWXWindows = true;
+ bool bPrintFiles = false;
// process options
while (1) {
int c = getopt_long (argc, argv, "", ctsimOptions, NULL);
case '?':
usage (argv[0]);
exit (0);
+ case O_PRINT:
+ bPrintFiles = true;
+ break;
default:
usage (argv[0]);
exit (1);
#endif
wxLog::SetActiveTarget (new wxLogTextCtrl(m_pLog));
-#ifdef CTSIM_WINHELP
- if (! m_pFrame->getWinHelpController().Initialize("ctsim"))
- *m_pLog << "Cannot initialize the Windows Help system" << "\n";
-#endif
wxString helpDir;
if (! m_pConfig->Read("HelpDir", &helpDir))
helpDir = ::wxGetCwd();
+#ifdef CTSIM_WINHELP
+ if (! m_pFrame->getWinHelpController().Initialize(helpDir + "/ctsim"))
+ *m_pLog << "Cannot initialize the Windows Help system" << "\n";
+#else
if (! m_pFrame->getHtmlHelpController().Initialize(helpDir + "/ctsim") &&
! m_pFrame->getHtmlHelpController().Initialize("/usr/local/man/ctsim"))
*m_pLog << "Cannot initialize the HTML Help system" << "\n";
m_pFrame->getHtmlHelpController().SetTempDir(_T("/tmp"));
m_pFrame->getHtmlHelpController().UseConfig (m_pConfig);
}
+#endif
for (int i = optind + 1; i <= argc; i++) {
wxString filename = argv [i - 1];
- m_docManager->CreateDocument (filename, wxDOC_SILENT);
+ wxDocument* pNewDoc = m_docManager->CreateDocument (filename, wxDOC_SILENT);
+ if (bPrintFiles) {
+ wxView* pNewView = pNewDoc->GetFirstView();
+ wxPrintout *printout = pNewView->OnCreatePrintout();
+ if (printout) {
+ wxPrinter printer;
+ printer.Print(pNewView->GetFrame(), printout, TRUE);
+ delete printout;
+ }
+ wxCommandEvent nullEvent;
+ nullEvent.SetId (wxID_CLOSE);
+ m_docManager->OnFileClose (nullEvent);
+ }
}
-
- return true;
+ if (bPrintFiles) {
+ wxCommandEvent closeEvent;
+ closeEvent.SetInt (MAINMENU_FILE_EXIT);
+ 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();
}
int
CTSimApp::OnExit()
{
- delete m_pConfig;
+ closeConfig();
#ifdef HAVE_DMALLOC
dmalloc_shutdown();
return 0;
}
+void
+CTSimApp::openConfig()
+{
+#ifdef MSVC
+ m_pConfig = new wxConfig("ctsim", "Kevin Rosenberg", "", "", wxCONFIG_USE_LOCAL_FILE);
+#else
+ m_pConfig = new wxConfig("ctsim", "Kevin Rosenberg", ".ctsim", "", wxCONFIG_USE_LOCAL_FILE);
+#endif
+
+ 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
+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;
+}
+
+
wxString
CTSimApp::getUntitledFilename()
{
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_TOPICS, MainFrame::OnHelpTopics)
+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)
+EVT_BUTTON(IDH_DLG_FILTER, MainFrame::OnHelpButton)
+EVT_BUTTON(IDH_DLG_MINMAX, MainFrame::OnHelpButton)
+EVT_BUTTON(IDH_DLG_EXPORT, MainFrame::OnHelpButton)
+EVT_BUTTON(IDH_DLG_PHANTOM, MainFrame::OnHelpButton)
+EVT_BUTTON(IDH_DLG_COMPARISON, MainFrame::OnHelpButton)
+EVT_BUTTON(IDH_DLG_PREFERENCES, MainFrame::OnHelpButton)
+EVT_BUTTON(IDH_DLG_POLAR, MainFrame::OnHelpButton)
+EVT_BUTTON(IDH_DLG_AUTOSCALE, MainFrame::OnHelpButton)
+
EVT_SIZE(MainFrame::OnSize)
#if defined(CTSIM_WINHELP) && (defined(DEBUG) || defined(_DEBUG))
file_menu->Append(wxID_OPEN, "&Open...\tCtrl-O");
file_menu->AppendSeparator();
- file_menu->Append (MAINMENU_FILE_PREFERENCES, "Pr&eferences...");
+ file_menu->Append (MAINMENU_FILE_PREFERENCES, "Prefere&nces...");
file_menu->Append(MAINMENU_FILE_EXIT, "E&xit");
// history of files visited
wxMenu* help_menu = new wxMenu;
help_menu->Append (MAINMENU_HELP_CONTENTS, "&Contents\tF1");
- help_menu->Append (MAINMENU_HELP_TOPICS, "&Topics\tCtrl-T");
+ 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");
#endif
wxAcceleratorEntry accelEntries[15];
accelEntries[0].Set (wxACCEL_CTRL, static_cast<int>('O'), wxID_OPEN);
- accelEntries[1].Set (wxACCEL_CTRL, static_cast<int>('H'), MAINMENU_HELP_TOPICS);
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);
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);
}
}
+
+void
+MainFrame::OnLogEvent (wxCommandEvent& event)
+{
+ *theApp->getLog() << event.GetString();
+}
+
+void
+MainFrame::OnHelpTips (wxCommandEvent& event)
+{
+ theApp->ShowTips();
+}
+
void
-MainFrame::OnHelpTopics (wxCommandEvent& event)
+MainFrame::OnHelpContents (wxCommandEvent& event)
{
showHelp (event.GetId());
}
void
-MainFrame::OnHelpContents (wxCommandEvent& event)
+MainFrame::OnHelpButton (wxCommandEvent& event)
{
showHelp (event.GetId());
}
m_htmlHelp.DisplayContents ();
#endif
break;
-
- case MAINMENU_HELP_TOPICS:
+
+
+ default:
#ifdef CTSIM_WINHELP
- m_winHelp.DisplaySection (introduction);
+ m_winHelp.DisplaySection (commandID);
#else
- m_htmlHelp.DisplayIndex();
+ m_htmlHelp.Display (commandID);
#endif
break;
-
- default:
- *theApp->getLog() << "Unknown help command # " << commandID << "\n";
- break;
}
}
void
MainFrame::OnPreferences (wxCommandEvent& WXUNUSED(event) )
{
- theApp->setAdvancedOptions (! theApp->getAdvancedOptions());
+ DialogPreferences dlg (this, "CTSim Preferences", theApp->getAdvancedOptions(),
+ 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());
+ }
}
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