** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: ctsim.cpp,v 1.57 2001/01/29 00:42:26 kevin Exp $
+** $Id: ctsim.cpp,v 1.75 2001/02/11 21:57:08 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 "wx/image.h"
#include "wx/filesys.h"
#include "wx/fs_zip.h"
+#include "wx/msw/helpchm.h"
#if !wxUSE_DOC_VIEW_ARCHITECTURE
#error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in setup.h!
#endif
#endif
-static const char* rcsindent = "$Id: ctsim.cpp,v 1.57 2001/01/29 00:42:26 kevin Exp $";
+static const char* rcsindent = "$Id: ctsim.cpp,v 1.75 2001/02/11 21:57:08 kevin Exp $";
struct option CTSimApp::ctsimOptions[] =
{
IMPLEMENT_APP(CTSimApp)
CTSimApp::CTSimApp()
-: m_docManager(NULL), m_pFrame(NULL), m_pLog(0), m_pLogDoc(0)
+: m_docManager(NULL), m_pFrame(NULL), m_pLog(0), m_pLogDoc(0), m_pConfig(0),
+ m_bAdvancedOptions(false), m_bSetModifyNewDocs(true)
{
theApp = this;
}
setpriority (PRIO_PROCESS, 0, 15); // set to low scheduling priority
#endif
- m_pConfig = new wxConfig("ctsim");
- wxConfigBase::Set(m_pConfig);
+ openConfig();
g_bRunningWXWindows = true;
// process options
m_pDocTemplPhantom = new wxDocTemplate (m_docManager, "PhantomFile", "*.phm", "", "phm", "PhantomFile", "PhantomView", CLASSINFO(PhantomFileDocument), CLASSINFO(PhantomFileView));
m_pDocTemplPlot = new wxDocTemplate (m_docManager, "PlotFile", "*.plt", "", "plt", "PlotFile", "PlotView", CLASSINFO(PlotFileDocument), CLASSINFO(PlotFileView));
m_pDocTemplText = new wxDocTemplate (m_docManager, "TextFile", "*.txt", "", "txt", "TextFile", "TextView", CLASSINFO(TextFileDocument), CLASSINFO(TextFileView), wxTEMPLATE_INVISIBLE);
-
+#if wxUSE_GLCANVAS
+ m_pDocTemplGraph3d = new wxDocTemplate (m_docManager, "Graph3dFile", "*.g3d", "", "g3d", "Graph3dFile", "Graph3dView", CLASSINFO(Graph3dFileDocument), CLASSINFO(Graph3dFileView), wxTEMPLATE_INVISIBLE);
+#endif
+
#if wxUSE_GIF
wxImage::AddHandler(new wxGIFHandler); // Required for images in the online documentation
#endif
m_pFrame->Show(true);
SetTopWindow (m_pFrame);
- for (int i = optind + 1; i <= argc; i++) {
- wxString filename = argv [i - 1];
- m_docManager->CreateDocument (filename, wxDOC_SILENT);
- }
-
if (m_pConfig)
m_docManager->FileHistoryLoad(*m_pConfig);
m_pLogDoc->getView()->getFrame()->SetTitle("Log");
int xSize, ySize;
m_pFrame->GetClientSize(&xSize, &ySize);
- int yLogSize = ySize / 3;
+ int yLogSize = ySize / 4;
m_pLogDoc->getView()->getFrame()->SetSize (0, ySize - yLogSize, xSize, yLogSize);
m_pLogDoc->getView()->getFrame()->Show (true);
} else
m_pLog = new wxTextCtrl (m_pFrame, -1, "Log Window\n", wxPoint(0, 0), wxSize(0,0), wxTE_MULTILINE | wxTE_READONLY);
#endif
wxLog::SetActiveTarget (new wxLogTextCtrl(m_pLog));
-
+
+ wxString helpDir;
+ if (! m_pConfig->Read("HelpDir", &helpDir))
+ helpDir = ::wxGetCwd();
#ifdef CTSIM_WINHELP
- if (! m_pFrame->getWinHelpController().Initialize("ctsim"))
+ if (! m_pFrame->getWinHelpController().Initialize(helpDir + "/ctsim"))
*m_pLog << "Cannot initialize the Windows Help system" << "\n";
-#endif
- if (! m_pFrame->getHtmlHelpController().Initialize(::wxGetCwd() + "/ctsim"))
+#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";
+ else {
+ if (::wxDirExists ("/tmp"))
+ 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);
+ }
return true;
}
int
CTSimApp::OnExit()
{
+ closeConfig();
+
#ifdef HAVE_DMALLOC
dmalloc_shutdown();
#endif
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);
+}
+
+void
+CTSimApp::closeConfig()
+{
+ m_pConfig->Write ("AdvancedOptions", m_bAdvancedOptions);
+ m_pConfig->Write ("SetModifyNewDocs", m_bSetModifyNewDocs);
+ delete m_pConfig;
+}
+
+
wxString
CTSimApp::getUntitledFilename()
{
BEGIN_EVENT_TABLE(MainFrame, wxDocParentFrame)
#endif
+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)
: wxDocParentFrame(manager, frame, id, title, pos, size, type, "MainFrame")
#endif
{
+ m_bShuttingDown = false;
+
//// Make a menubar
wxMenu *file_menu = new wxMenu;
file_menu->Append(wxID_OPEN, "&Open...\tCtrl-O");
file_menu->AppendSeparator();
+ file_menu->Append (MAINMENU_FILE_PREFERENCES, "Pr&eferences...");
file_menu->Append(MAINMENU_FILE_EXIT, "E&xit");
// history of files visited
#endif
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_CONTENTS, "&Contents\tF1");
+ help_menu->Append (MAINMENU_HELP_TOPICS, "&Topics\tCtrl-T");
#if defined(CTSIM_WINHELP) && (defined(DEBUG) || defined(_DEBUG))
- help_menu->Append(MAINMENU_HELP_SECONDARY, "&Secondary Help");
+ help_menu->Append (MAINMENU_HELP_SECONDARY, "&Secondary Help");
#endif
- help_menu->Append(MAINMENU_HELP_ABOUT, "&About");
+ help_menu->Append (MAINMENU_HELP_ABOUT, "&About");
wxMenuBar* menu_bar = new wxMenuBar;
MainFrame::~MainFrame()
{
+ m_bShuttingDown = true; // Currently used so that Log Window will close
+#if 0
+ // delete all non-modified documents
+ wxList& rListDocs = theApp->getDocManager()->GetDocuments();
+ for (wxNode* pNode = rListDocs.GetFirst(); pNode != NULL; pNode = pNode->GetNext()) {
+ wxDocument* pDoc = dynamic_cast<wxDocument*>(pNode->GetData());
+ if (pDoc && ! pDoc->IsModified()) {
+ theApp->getDocManager()->RemoveDocument(pDoc);
+ delete pDoc;
+ }
+ }
+#endif
+ ::wxYield();
if (theApp->getConfig())
theApp->getDocManager()->FileHistorySave (*theApp->getConfig());
- delete theApp->getDocManager();
-
+ ::wxYield();
+ delete theApp->getDocManager();
+
}
void
MainFrame::OnSize (wxSizeEvent& event)
{
#ifdef CTSIM_MDI
- int xSize, ySize;
- wxMDIParentFrame::GetClientSize(&xSize, &ySize);
-
- if (theApp->getLogDoc()) {
+ if (theApp->getLogDoc()) {
+ int xSize, ySize;
GetClientSize(&xSize, &ySize);
- int yLogSize = ySize / 3;
- theApp->getLogDoc()->getView()->getFrame()->SetSize (0, ySize - yLogSize, xSize, yLogSize);
- theApp->getLogDoc()->getView()->getFrame()->Show (true);
- }
- //GetClientWindow()->SetSize (0, 0, sizeClient.x, sizeClient.y);
- //GetClientWindow()->Refresh();
+ int yLogSize = ySize / 4;
+ theApp->getLogDoc()->getView()->getFrame()->SetSize (0, ySize - yLogSize, xSize, yLogSize);
+ theApp->getLogDoc()->getView()->getFrame()->Show (true);
+ }
#endif
#if CTSIM_MDI
*theApp->getLog() << os.str().c_str() << "\n";
wxString filename = "untitled.if";
ImageFileDocument* pFilterDoc = theApp->newImageDoc();
+ pFilterDoc->setBadFileOpen();
if (! pFilterDoc) {
sys_error (ERR_SEVERE, "Unable to create filter image");
return;
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());
- if (theApp->getSetModifyNewDocs())
- pFilterDoc->Modify (true);
+ pFilterDoc->Modify (true);
pFilterDoc->UpdateAllViews();
pFilterDoc->GetFirstView()->OnUpdate (NULL, NULL);
pFilterDoc->getView()->getFrame()->SetClientSize(m_iDefaultFilterXSize, m_iDefaultFilterYSize);
void
MainFrame::showHelp (int commandID)
{
-#ifdef CTSIM_WINHELP
- m_winHelp.LoadFile();
-#else
- m_htmlHelp.LoadFile();
-#endif
-
switch (commandID) {
case MAINMENU_HELP_CONTENTS:
void
MainFrame::OnUpdateUI (wxUpdateUIEvent& rEvent)
{
+#ifndef CTSIM_MDI
int iPos = 0;
wxList& rListDocs = theApp->getDocManager()->GetDocuments();
wxNode* pNode = rListDocs.GetFirst();
static_cast<wxMenuItemBase*>(m_apWindowMenuItems[i])->SetName (wxString("[EMPTY]"));
m_apWindowMenuData[i] = NULL;
}
-
+#endif
}
#ifdef CTSIM_CUSTOM_MRU
{}
+void
+MainFrame::OnPreferences (wxCommandEvent& WXUNUSED(event) )
+{
+ DialogPreferences dlg (this, "CTSim Preferences", theApp->getAdvancedOptions(),
+ theApp->getAskDeleteNewDocs());
+ if (dlg.ShowModal() == wxID_OK) {
+ theApp->setAdvancedOptions (dlg.getAdvancedOptions());
+ theApp->setAskDeleteNewDocs (dlg.getAskDeleteNewDocs());
+ }
+}
+
+
#include "./splash.xpm"
void
MainFrame::OnAbout(wxCommandEvent& WXUNUSED(event) )
pFrame->Show (false);
}
}
- newDoc->OnNewDocument();
+ newDoc->SetDocumentName (m_pDocTemplProjection->GetDocumentName());
+ newDoc->SetDocumentTemplate (m_pDocTemplProjection);
+ newDoc->OnNewDocument();
}
return newDoc;
pFrame->Show (false);
}
}
- newDoc->OnNewDocument();
+ newDoc->SetDocumentName (m_pDocTemplImage->GetDocumentName());
+ newDoc->SetDocumentTemplate (m_pDocTemplImage);
+ newDoc->OnNewDocument();
}
return newDoc;
pFrame->Show (false);
}
}
- newDoc->OnNewDocument();
+ newDoc->SetDocumentName (m_pDocTemplPlot->GetDocumentName());
+ newDoc->SetDocumentTemplate (m_pDocTemplPlot);
+ newDoc->OnNewDocument();
}
return newDoc;
pFrame->Show (false);
}
}
- newDoc->OnNewDocument();
+ newDoc->SetDocumentName (m_pDocTemplText->GetDocumentName());
+ newDoc->SetDocumentTemplate (m_pDocTemplText);
+ newDoc->OnNewDocument();
}
return newDoc;
if (pFrame)
pFrame->SetSize (0,0);
}
- newDoc->OnNewDocument();
+ newDoc->SetDocumentName (m_pDocTemplPhantom->GetDocumentName());
+ newDoc->SetDocumentTemplate (m_pDocTemplPhantom);
+ newDoc->OnNewDocument();
}
return newDoc;
}
+
+#if wxUSE_GLCANVAS
+
+Graph3dFileDocument*
+CTSimApp::newGraph3dDoc()
+{
+ Graph3dFileDocument* newDoc = dynamic_cast<Graph3dFileDocument*>(m_pDocTemplGraph3d->CreateDocument (""));
+ if (newDoc) {
+ Graph3dFileView* pView = newDoc->getView();
+ if (pView) {
+ wxFrame* pFrame = pView->getFrame();
+ if (pFrame)
+ pFrame->SetSize (0,0);
+ }
+ newDoc->SetDocumentName (m_pDocTemplGraph3d->GetDocumentName());
+ newDoc->SetDocumentTemplate (m_pDocTemplGraph3d);
+ newDoc->OnNewDocument();
+ }
+
+ return newDoc;
+}
+#endif