X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=src%2Fctsim.cpp;h=95ca5e7c4c8ab2f78952dc8b27c77b1c3cdd945a;hb=cdf102a192b78dd5a7708d449661ff247309be7e;hp=5d6ef6f68b173859046a600082bcc633a3ee64d8;hpb=9646a9addabd213c5a810dad21ea8ca810698420;p=ctsim.git diff --git a/src/ctsim.cpp b/src/ctsim.cpp index 5d6ef6f..95ca5e7 100644 --- a/src/ctsim.cpp +++ b/src/ctsim.cpp @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2000 Kevin Rosenberg ** -** $Id: ctsim.cpp,v 1.59 2001/01/30 01:21:37 kevin Exp $ +** $Id: ctsim.cpp,v 1.71 2001/02/09 21:42:03 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 @@ -70,7 +70,7 @@ #endif #endif -static const char* rcsindent = "$Id: ctsim.cpp,v 1.59 2001/01/30 01:21:37 kevin Exp $"; +static const char* rcsindent = "$Id: ctsim.cpp,v 1.71 2001/02/09 21:42:03 kevin Exp $"; struct option CTSimApp::ctsimOptions[] = { @@ -102,7 +102,7 @@ CTSimApp::OnInit() setpriority (PRIO_PROCESS, 0, 15); // set to low scheduling priority #endif - m_pConfig = new wxConfig("ctsim"); + m_pConfig = new wxConfig("ctsim", _T(""), ".ctsim", "", wxCONFIG_USE_LOCAL_FILE); wxConfigBase::Set(m_pConfig); g_bRunningWXWindows = true; @@ -138,7 +138,10 @@ CTSimApp::OnInit() 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 @@ -158,11 +161,6 @@ CTSimApp::OnInit() 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); @@ -175,7 +173,7 @@ CTSimApp::OnInit() 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 @@ -183,14 +181,23 @@ CTSimApp::OnInit() 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)); - + #ifdef CTSIM_WINHELP if (! m_pFrame->getWinHelpController().Initialize("ctsim")) *m_pLog << "Cannot initialize the Windows Help system" << "\n"; #endif - if (! m_pFrame->getHtmlHelpController().Initialize(::wxGetCwd() + "/ctsim")) + wxString helpDir; + if (! m_pConfig->Read("HelpDir", &helpDir)) + helpDir = ::wxGetCwd(); + if (! m_pFrame->getHtmlHelpController().Initialize(helpDir + "/ctsim") || + ! m_pFrame->getHtmlHelpController().Initialize("/usr/local/man/ctsim")) *m_pLog << "Cannot initialize the HTML Help system" << "\n"; + for (int i = optind + 1; i <= argc; i++) { + wxString filename = argv [i - 1]; + m_docManager->CreateDocument (filename, wxDOC_SILENT); + } + return true; } @@ -218,6 +225,8 @@ CTSimApp::usage(const char* program) int CTSimApp::OnExit() { + delete m_pConfig; + #ifdef HAVE_DMALLOC dmalloc_shutdown(); #endif @@ -293,6 +302,8 @@ MainFrame::MainFrame(wxDocManager *manager, wxFrame *frame, wxWindowID id, const : wxDocParentFrame(manager, frame, id, title, pos, size, type, "MainFrame") #endif { + m_bShuttingDown = false; + //// Make a menubar wxMenu *file_menu = new wxMenu; @@ -313,12 +324,12 @@ MainFrame::MainFrame(wxDocManager *manager, wxFrame *frame, wxWindowID id, const #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; @@ -368,27 +379,37 @@ MainFrame::MainFrame(wxDocManager *manager, wxFrame *frame, wxWindowID id, const 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(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 @@ -437,6 +458,7 @@ MainFrame::OnCreateFilter (wxCommandEvent& WXUNUSED(event)) *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; @@ -776,6 +798,9 @@ CTSimApp::newProjectionDoc() pFrame->Show (false); } } + newDoc->SetDocumentName (m_pDocTemplProjection->GetDocumentName()); + newDoc->SetDocumentTemplate (m_pDocTemplProjection); + newDoc->OnNewDocument(); } return newDoc; @@ -794,6 +819,9 @@ CTSimApp::newImageDoc() pFrame->Show (false); } } + newDoc->SetDocumentName (m_pDocTemplImage->GetDocumentName()); + newDoc->SetDocumentTemplate (m_pDocTemplImage); + newDoc->OnNewDocument(); } return newDoc; @@ -814,6 +842,9 @@ CTSimApp::newPlotDoc() pFrame->Show (false); } } + newDoc->SetDocumentName (m_pDocTemplPlot->GetDocumentName()); + newDoc->SetDocumentTemplate (m_pDocTemplPlot); + newDoc->OnNewDocument(); } return newDoc; @@ -838,6 +869,9 @@ CTSimApp::newTextDoc() pFrame->Show (false); } } + newDoc->SetDocumentName (m_pDocTemplText->GetDocumentName()); + newDoc->SetDocumentTemplate (m_pDocTemplText); + newDoc->OnNewDocument(); } return newDoc; @@ -855,7 +889,32 @@ CTSimApp::newPhantomDoc() if (pFrame) pFrame->SetSize (0,0); } + newDoc->SetDocumentName (m_pDocTemplPhantom->GetDocumentName()); + newDoc->SetDocumentTemplate (m_pDocTemplPhantom); + newDoc->OnNewDocument(); } return newDoc; } + +#if wxUSE_GLCANVAS + +Graph3dFileDocument* +CTSimApp::newGraph3dDoc() +{ + Graph3dFileDocument* newDoc = dynamic_cast(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