-CTSimApp::OnInit(void)
-{
- m_docManager = new wxDocManager;
-
- (void) new wxDocTemplate (m_docManager, "ImageFile", "*.if", "", "if", "ImageFile doc", "ImageFile View", CLASSINFO(ImageFileDocument), CLASSINFO(ImageFileView));
-
- (void) new wxDocTemplate (m_docManager, "ProjectionFile", "*.pj", "", "pj", "ProjectionFile doc", "ProjectionFile View", CLASSINFO(ProjectionFileDocument), CLASSINFO(ProjectionFileView));
-
- //// Create the main frame window
- m_pFrame = new MainFrame(m_docManager, (wxFrame *) NULL, -1, "CTSim", wxPoint(0, 0), wxSize(500, 400), wxDEFAULT_FRAME_STYLE);
-
- //// Make a menubar
- wxMenu *file_menu = new wxMenu;
-
- // file_menu->Append(wxID_NEW, "&New...");
- file_menu->Append(wxID_OPEN, "&Open...");
-
- file_menu->AppendSeparator();
- file_menu->Append(MAINMENU_FILE_EXIT, "E&xit");
-
- // A nice touch: a history of files visited. Use this menu.
- m_docManager->FileHistoryUseMenu(file_menu);
-
- wxMenu *help_menu = new wxMenu;
- help_menu->Append(MAINMENU_HELP_ABOUT, "&About");
-
- wxMenuBar *menu_bar = new wxMenuBar;
-
- menu_bar->Append(file_menu, "&File");
- menu_bar->Append(help_menu, "&Help");
-
- m_pFrame->SetMenuBar(menu_bar);
-
- m_pFrame->Centre(wxBOTH);
- m_pFrame->Show(true);
-
- SetTopWindow (m_pFrame);
- return true;
+CTSimApp::OnInit()
+{
+#ifdef HAVE_SETPRIORITY
+ setpriority (PRIO_PROCESS, 0, 15); // set to low scheduling priority
+#endif
+
+ openConfig();
+
+ g_bRunningWXWindows = true;
+ bool bPrintFiles = false;
+ // process options
+ while (1) {
+ int c = getopt_long (argc, argv, "", ctsimOptions, NULL);
+ if (c == -1)
+ break;
+
+ switch (c) {
+ case O_VERSION:
+ std::cout << rcsindent << std::endl;
+#ifdef CTSIMVERSION
+ std::cout << "Version: CTSIMVERSION" << std::endl;
+#elif defined(VERSION)
+ std::cout << "Version: VERSION" << std::endl;
+#endif
+ exit(0);
+ case O_HELP:
+ case '?':
+ usage (argv[0]);
+ exit (0);
+ case O_PRINT:
+ bPrintFiles = true;
+ break;
+ default:
+ usage (argv[0]);
+ exit (1);
+ }
+ }
+
+ m_docManager = new wxDocManager (wxDEFAULT_DOCMAN_FLAGS, true);
+
+ 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_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
+
+#if wxUSE_STREAMS && wxUSE_ZIPSTREAM && wxUSE_ZLIB
+ wxFileSystem::AddHandler(new wxZipFSHandler); // Required for advanced HTML help
+#endif
+
+ // Create the main frame window
+ int xDisplay, yDisplay;
+ ::wxDisplaySize (&xDisplay, &yDisplay);
+ m_pFrame = new MainFrame(m_docManager, (wxFrame *) NULL, -1, "CTSim", wxPoint(0, 0),
+ wxSize(nearest<int>(xDisplay * .75), nearest<int>(yDisplay * .755)), wxDEFAULT_FRAME_STYLE);
+
+ setIconForFrame (m_pFrame);
+ m_pFrame->Centre(wxBOTH);
+ m_pFrame->Show(true);
+ SetTopWindow (m_pFrame);
+
+ if (m_pConfig)
+ m_docManager->FileHistoryLoad(*m_pConfig);
+
+#ifdef CTSIM_MDI
+ m_pLogDoc = newTextDoc();
+ if (m_pLogDoc) {
+ m_pLog = m_pLogDoc->getTextCtrl();
+ m_pLogDoc->SetDocumentName("Log.txt");
+ m_pLogDoc->SetFilename("Log.txt");
+ m_pLogDoc->getView()->getFrame()->SetTitle("Log");
+ int xSize, ySize;
+ m_pFrame->GetClientSize(&xSize, &ySize);
+ int yLogSize = ySize / 4;
+ m_pLogDoc->getView()->getFrame()->SetSize (0, ySize - yLogSize, xSize, yLogSize);
+ m_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));
+
+ 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";
+ 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];
+ 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);
+ }
+ }
+ if (bPrintFiles) {
+ wxCommandEvent closeEvent;
+ closeEvent.SetInt (MAINMENU_FILE_EXIT);
+ m_pFrame->AddPendingEvent(closeEvent);
+ }
+
+
+ return true;
+}
+
+
+#include "./ctsim.xpm"
+void
+CTSimApp::setIconForFrame(wxFrame* pFrame)
+{
+ wxIcon iconApp (ctsim16_xpm);
+
+ if (iconApp.Ok())
+ pFrame->SetIcon (iconApp);
+}
+
+void
+CTSimApp::usage(const char* program)
+{
+ std::cout << "usage: " << fileBasename(program) << " [files-to-open...] [OPTIONS]\n";
+ std::cout << "Computed Tomography Simulator (Graphical Shell)\n";
+ std::cout << "\n";
+ std::cout << " --version Display version\n";
+ std::cout << " --help Display this help message\n";