X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=src%2Fctsim.cpp;h=7a8d50551002855df42b55be9821f134358ee976;hb=5e6c61b9ab5a05fff344b1aacf70e5ff61b81060;hp=d0cc8c686c28072b085a780b62a4c5d216163ef0;hpb=dd8faeb9c2a1633c96ca31bce81e338a591fab71;p=ctsim.git diff --git a/src/ctsim.cpp b/src/ctsim.cpp index d0cc8c6..7a8d505 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.41 2001/01/26 00:45:24 kevin Exp $ +** $Id: ctsim.cpp,v 1.53 2001/01/28 04:24: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.41 2001/01/26 00:45:24 kevin Exp $"; +static const char* rcsindent = "$Id: ctsim.cpp,v 1.53 2001/01/28 04:24:03 kevin Exp $"; struct option CTSimApp::ctsimOptions[] = { @@ -133,11 +133,11 @@ CTSimApp::OnInit() m_docManager = new wxDocManager (wxDEFAULT_DOCMAN_FLAGS, true); - new wxDocTemplate (m_docManager, "ImageFile", "*.if", "", "if", "ImageFile", "ImageView", CLASSINFO(ImageFileDocument), CLASSINFO(ImageFileView)); - new wxDocTemplate (m_docManager, "ProjectionFile", "*.pj", "", "pj", "ProjectionFile", "ProjectionView", CLASSINFO(ProjectionFileDocument), CLASSINFO(ProjectionFileView)); - new wxDocTemplate (m_docManager, "PhantomFile", "*.phm", "", "phm", "PhantomFile", "PhantomView", CLASSINFO(PhantomDocument), CLASSINFO(PhantomView)); - new wxDocTemplate (m_docManager, "PlotFile", "*.plt", "", "plt", "PlotFile", "PlotView", CLASSINFO(PlotFileDocument), CLASSINFO(PlotFileView)); - new wxDocTemplate (m_docManager, "TextEdit", "*.txt", "", "txt", "TextFile", "TextView", CLASSINFO(TextEditDocument), CLASSINFO(TextEditView), wxTEMPLATE_INVISIBLE); + m_pDocTemplImage = new wxDocTemplate (m_docManager, "ImageFile", "*.if", "", "if", "ImageFile", "ImageView", CLASSINFO(ImageFileDocument), CLASSINFO(ImageFileView)); + m_pDocTemplProjection = new wxDocTemplate (m_docManager, "ProjectionFile", "*.pj", "", "pj", "ProjectionFile", "ProjectionView", CLASSINFO(ProjectionFileDocument), CLASSINFO(ProjectionFileView)); + 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_GIF wxImage::AddHandler(new wxGIFHandler); // Required for images in the online documentation @@ -148,7 +148,10 @@ CTSimApp::OnInit() #endif // Create the main frame window - m_pFrame = new MainFrame(m_docManager, (wxFrame *) NULL, -1, "CTSim", wxPoint(0, 0), wxSize(500, 400), wxDEFAULT_FRAME_STYLE); + int xDisplay, yDisplay; + ::wxDisplaySize (&xDisplay, &yDisplay); + m_pFrame = new MainFrame(m_docManager, (wxFrame *) NULL, -1, "CTSim", wxPoint(0, 0), + wxSize(nearest(xDisplay * .75), nearest(yDisplay * .755)), wxDEFAULT_FRAME_STYLE); setIconForFrame (m_pFrame); m_pFrame->Centre(wxBOTH); @@ -163,23 +166,31 @@ CTSimApp::OnInit() if (m_pConfig) m_docManager->FileHistoryLoad(*m_pConfig); -#ifdef CTSIM_WINHELP - if (! m_pFrame->getWinHelpController().Initialize("ctsim")) - ::wxMessageBox ("Cannot initialize the help system", "Error"); -#endif - if (! m_pFrame->getHtmlHelpController().Initialize(::wxGetCwd() + "/ctsim")) - ::wxMessageBox ("Cannot initialize the help system", "Error"); - #ifdef CTSIM_MDI - TextEditDocument* pLogDoc = dynamic_cast(m_docManager->CreateDocument("Log.txt", wxDOC_SILENT)); + TextFileDocument* pLogDoc = newTextDoc(); if (pLogDoc) { m_pLog = pLogDoc->getTextCtrl(); + pLogDoc->SetDocumentName("Log.txt"); + pLogDoc->SetFilename("Log.txt"); + pLogDoc->getView()->getFrame()->SetTitle("Log"); + int xSize, ySize; + m_pFrame->GetClientSize(&xSize, &ySize); + int yLogSize = ySize / 3; + pLogDoc->getView()->getFrame()->SetSize (0, ySize - yLogSize, xSize, yLogSize); + pLogDoc->getView()->getFrame()->Show (true); } else #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)); +#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")) + *m_pLog << "Cannot initialize the HTML Help system\n"; + return true; } @@ -207,11 +218,6 @@ CTSimApp::usage(const char* program) int CTSimApp::OnExit() { - if (theApp->getConfig()) - theApp->getDocManager()->FileHistorySave (*theApp->getConfig()); - delete theApp->getDocManager(); - m_docManager = NULL; - #ifdef HAVE_DMALLOC dmalloc_shutdown(); #endif @@ -325,7 +331,8 @@ MainFrame::MainFrame(wxDocManager *manager, wxFrame *frame, wxWindowID id, const SetMenuBar(menu_bar); #ifndef CTSIM_MDI - for (int i = 0; i < MAX_WINDOW_MENUITEMS; i++) { + int i; + for (i = 0; i < MAX_WINDOW_MENUITEMS; i++) { m_apWindowMenuItems[i] = new wxMenuItem (m_pWindowMenu, MAINMENU_WINDOW_BASE+i, wxString("[EMPTY]")); m_pWindowMenu->Append (m_apWindowMenuItems[i]); m_pWindowMenu->Enable (MAINMENU_WINDOW_BASE+i, false); @@ -361,12 +368,22 @@ MainFrame::MainFrame(wxDocManager *manager, wxFrame *frame, wxWindowID id, const MainFrame::~MainFrame() { + if (theApp->getConfig()) + theApp->getDocManager()->FileHistorySave (*theApp->getConfig()); + delete theApp->getDocManager(); + } void MainFrame::OnSize (wxSizeEvent& event) { +#ifdef CTSIM_MDI + int xSize, ySize; + wxMDIParentFrame::GetClientSize(&xSize, &ySize); + wxSize sizeClient (xSize, ySize); +#else wxSize sizeClient = GetClientSize(); +#endif wxSize sizeLog = sizeClient; if (sizeClient.y < 100) { sizeLog.y = 0; @@ -397,7 +414,7 @@ MainFrame::OnCreatePhantom(wxCommandEvent& event) *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); + theApp->getDocManager()->CreateDocument (filename, wxDOC_SILENT); } } @@ -425,7 +442,7 @@ MainFrame::OnCreateFilter (wxCommandEvent& WXUNUSED(event)) << ", inputScale=" << m_dDefaultFilterInputScale << ", outputScale=" << m_dDefaultFilterOutputScale; *theApp->getLog() << os.str().c_str() << "\n"; wxString filename = "untitled.if"; - ImageFileDocument* pFilterDoc = dynamic_cast(theApp->getDocManager()->CreateDocument ("untitled.if", wxDOC_SILENT)); + ImageFileDocument* pFilterDoc = theApp->newImageDoc(); if (! pFilterDoc) { sys_error (ERR_SEVERE, "Unable to create filter image"); return; @@ -438,6 +455,8 @@ MainFrame::OnCreateFilter (wxCommandEvent& WXUNUSED(event)) pFilterDoc->Modify (true); pFilterDoc->UpdateAllViews(); pFilterDoc->GetFirstView()->OnUpdate (NULL, NULL); + pFilterDoc->getView()->getFrame()->SetClientSize(m_iDefaultFilterXSize, m_iDefaultFilterYSize); + pFilterDoc->getView()->getFrame()->Show(true); } } @@ -749,3 +768,104 @@ MainFrame::OnAbout(wxCommandEvent& WXUNUSED(event) ) } } + +ProjectionFileDocument* +CTSimApp::newProjectionDoc() +{ + ProjectionFileDocument* newDoc = dynamic_cast(m_pDocTemplProjection->CreateDocument ("")); + if (newDoc) { + ProjectionFileView* pView = newDoc->getView(); + if (pView) { + wxFrame* pFrame = pView->getFrame(); + if (pFrame) { + pFrame->SetSize (0,0); + pFrame->Show (false); + } + } + newDoc->OnNewDocument(); + } + + return newDoc; +} + +ImageFileDocument* +CTSimApp::newImageDoc() +{ + ImageFileDocument* newDoc = dynamic_cast(m_pDocTemplImage->CreateDocument ("")); + if (newDoc) { + ImageFileView* pView = newDoc->getView(); + if (pView) { + wxFrame* pFrame = pView->getFrame(); + if (pFrame) { + pFrame->SetSize (0,0); + pFrame->Show (false); + } + } + newDoc->OnNewDocument(); + } + + return newDoc; +} + +PlotFileDocument* +CTSimApp::newPlotDoc() +{ + PlotFileDocument* newDoc = dynamic_cast(m_pDocTemplPlot->CreateDocument ("")); + if (newDoc) { + PlotFileView* pView = newDoc->getView(); + if (pView) { + wxFrame* pFrame = pView->getFrame(); + if (pFrame) { + wxSize size; + m_pFrame->GetClientSize (&size.x, &size.y); + pFrame->SetSize (size.x / 2, size.y / 2); + } + } + newDoc->OnNewDocument(); + } + + return newDoc; +} + + +TextFileDocument* +CTSimApp::newTextDoc() +{ + wxString strFilename (getUntitledFilename()); + strFilename += ".txt"; + + TextFileDocument* newDoc = dynamic_cast(m_pDocTemplText->CreateDocument ("")); + if (newDoc) { + TextFileView* pView = newDoc->getView(); + if (pView) { + wxFrame* pFrame = pView->getFrame(); + if (pFrame) { + wxSize size; + m_pFrame->GetClientSize (&size.x, &size.y);; + pFrame->SetSize (size.x / 2, size.y / 2); + pFrame->Show (false); + } + } + newDoc->OnNewDocument(); + } + + return newDoc; +} + + +PhantomFileDocument* +CTSimApp::newPhantomDoc() +{ + PhantomFileDocument* newDoc = dynamic_cast(m_pDocTemplPhantom->CreateDocument ("")); + if (newDoc) { + PhantomFileView* pView = newDoc->getView(); + if (pView) { + wxFrame* pFrame = pView->getFrame(); + if (pFrame) + pFrame->SetSize (0,0); + } + newDoc->OnNewDocument(); + } + + return newDoc; +}