r515: no message
[ctsim.git] / src / ctsim.cpp
index 87aec7e458349597b9163cf9bfde661f10f280f9..95ca5e7c4c8ab2f78952dc8b27c77b1c3cdd945a 100644 (file)
@@ -9,7 +9,7 @@
 **  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.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.57 2001/01/29 00:42:26 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<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
@@ -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;
@@ -445,8 +467,7 @@ 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());
-               if (theApp->getSetModifyNewDocs())
-                       pFilterDoc->Modify (true);
+    pFilterDoc->Modify (true);
                pFilterDoc->UpdateAllViews();
                pFilterDoc->GetFirstView()->OnUpdate (NULL, NULL);
                pFilterDoc->getView()->getFrame()->SetClientSize(m_iDefaultFilterXSize, m_iDefaultFilterYSize);
@@ -534,6 +555,7 @@ MainFrame::OnExit (wxCommandEvent& WXUNUSED(event) )
 void
 MainFrame::OnUpdateUI (wxUpdateUIEvent& rEvent)
 {
+#ifndef CTSIM_MDI
        int iPos = 0;
        wxList& rListDocs = theApp->getDocManager()->GetDocuments();
        wxNode* pNode = rListDocs.GetFirst();
@@ -555,7 +577,7 @@ MainFrame::OnUpdateUI (wxUpdateUIEvent& rEvent)
                static_cast<wxMenuItemBase*>(m_apWindowMenuItems[i])->SetName (wxString("[EMPTY]"));
                m_apWindowMenuData[i] = NULL;
        }
-       
+#endif 
 }
 
 #ifdef CTSIM_CUSTOM_MRU
@@ -776,7 +798,9 @@ CTSimApp::newProjectionDoc()
                                pFrame->Show (false);
                        }
                }
-               newDoc->OnNewDocument();
+    newDoc->SetDocumentName (m_pDocTemplProjection->GetDocumentName());
+    newDoc->SetDocumentTemplate (m_pDocTemplProjection);
+    newDoc->OnNewDocument();
        }
        
        return newDoc;
@@ -795,7 +819,9 @@ CTSimApp::newImageDoc()
                                pFrame->Show (false);
                        }
                }
-               newDoc->OnNewDocument();
+    newDoc->SetDocumentName (m_pDocTemplImage->GetDocumentName());
+    newDoc->SetDocumentTemplate (m_pDocTemplImage);
+    newDoc->OnNewDocument();
        }
        
        return newDoc;
@@ -816,7 +842,9 @@ CTSimApp::newPlotDoc()
                                pFrame->Show (false);
                        }
                }
-               newDoc->OnNewDocument();
+    newDoc->SetDocumentName (m_pDocTemplPlot->GetDocumentName());
+    newDoc->SetDocumentTemplate (m_pDocTemplPlot);
+    newDoc->OnNewDocument();
        }
        
        return newDoc;
@@ -841,7 +869,9 @@ CTSimApp::newTextDoc()
                                pFrame->Show (false);
                        }
                }
-               newDoc->OnNewDocument();
+    newDoc->SetDocumentName (m_pDocTemplText->GetDocumentName());
+    newDoc->SetDocumentTemplate (m_pDocTemplText);
+    newDoc->OnNewDocument();
        }
        
        return newDoc;
@@ -859,8 +889,32 @@ CTSimApp::newPhantomDoc()
                        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