** Date Started: July 2000
**
** This is part of the CTSim program
-** Copyright (c) 1983-2001 Kevin Rosenberg
-**
-** $Id$
+** Copyright (c) 1983-2009 Kevin Rosenberg
**
** 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/cmdline.h"
#ifdef __WXMSW__
#include "wx/msw/helpchm.h"
#endif
#endif
#endif
-static const char* rcsindent = "$Id$";
-
-struct option CTSimApp::ctsimOptions[] =
-{
- {"help", 0, 0, O_HELP},
- {"version", 0, 0, O_VERSION},
- {"print", 0, 0, O_PRINT},
- {0, 0, 0, 0}
-};
IMPLEMENT_APP(CTSimApp)
CTSimApp::CTSimApp()
: m_bAdvancedOptions(false), m_bSetModifyNewDocs(true),
m_bVerboseLogging(false), m_bShowStartupTips(true),
-m_iCurrentTip(0), m_bUseBackgroundTasks(false),
-m_docManager(NULL), m_pFrame(NULL), m_pConfig(0), m_pLog(0), m_pLogDoc(0)
+ m_iCurrentTip(0), m_bUseBackgroundTasks(false),
+ m_docManager(NULL), m_pFrame(NULL), m_pConfig(0), m_pLog(0), m_pLogDoc(0),
+ m_bPrintCmdLineImages(false), m_bCmdLineVerboseFlag(false)
{
theApp = this;
}
#include <sys/resource.h>
#endif
+
+void CTSimApp::OnInitCmdLine(wxCmdLineParser& parser)
+{
+ static const wxCmdLineEntryDesc cmdLineDesc[] = {
+ { wxCMD_LINE_SWITCH, wxT_2("l"), wxT_2("verbose"), wxT_2("verbose logging") },
+ { wxCMD_LINE_SWITCH, wxT_2("v"), wxT_2("version"), wxT_2("print version") },
+ { wxCMD_LINE_SWITCH, wxT_2("p"), wxT_2("print"), wxT_2("print images from command line"),
+ wxCMD_LINE_VAL_NONE,
+ wxCMD_LINE_PARAM_OPTIONAL },
+ { wxCMD_LINE_SWITCH, wxT_2("h"), wxT_2("help"), wxT_2("print this help message"),
+ wxCMD_LINE_VAL_NONE,
+ wxCMD_LINE_PARAM_OPTIONAL | wxCMD_LINE_OPTION_HELP },
+ { wxCMD_LINE_PARAM, NULL, NULL, wxT_2("input file"),
+ wxCMD_LINE_VAL_STRING,
+ wxCMD_LINE_PARAM_OPTIONAL | wxCMD_LINE_PARAM_MULTIPLE },
+ wxCMD_LINE_DESC_END
+ };
+
+ parser.SetDesc(cmdLineDesc);
+}
+
+bool CTSimApp::OnCmdLineParsed(wxCmdLineParser& parser)
+{
+ if (wxApp::OnCmdLineParsed(parser) == false)
+ return false;
+
+ if (parser.Found(_T("version"))) {
+#ifdef VERSION
+ std::cout << "Version: " << VERSION << std::endl;
+#elif defined(CTSIMVERSION)
+ std::cout << "Version: " << CTSIMVERSION << std::endl;
+#else
+ std::cout << "Version: " << "Unknown" << std::endl;
+#endif
+ return false;
+ }
+ if (parser.Found(_T("print"))) {
+ m_bPrintCmdLineImages = true;
+ }
+ if (parser.Found(_T("verbose"))) {
+ m_bCmdLineVerboseFlag = true;
+ }
+
+ return true;
+}
+
bool
CTSimApp::OnInit()
{
- wxApp::OnInit();
+ if (! wxApp::OnInit())
+ return false;
#ifdef HAVE_SETPRIORITY
setpriority (PRIO_PROCESS, 0, 15); // set to low scheduling priority
openConfig();
g_bRunningWXWindows = true;
- bool bPrintFiles = false;
- // process options
- while (1) {
-#ifdef __WXMAC__
- int c = -1;
-#else
- char** cargv = new char* [argc];
- for (int i = 0; i < argc; i++) {
- const char* p = wxConvUTF8.cWX2MB(argv[i]);
- cargv[i] = new char [strlen(p)+1];
- strcpy(cargv[i], p);
- }
- int c = getopt_long (argc, cargv, "", ctsimOptions, NULL);
- for (int i = 0; i < argc; i++) {
- delete cargv[i];
- }
- delete cargv;
-
-#endif
- if (c == -1)
- break;
-
- switch (c) {
- case O_VERSION:
- std::cout << rcsindent << std::endl;
-#ifdef VERSION
- std::cout << "Version: " << VERSION << std::endl;
-#elif defined(CTSIMVERSION)
- std::cout << "Version: " << CTSIMVERSION << std::endl;
-#endif
- exit(0);
- case O_HELP:
- case '?':
- usage (wxConvCurrent->cWX2MB(argv[0]));
- exit (0);
- case O_PRINT:
- bPrintFiles = true;
- break;
- default:
- usage (wxConvCurrent->cWX2MB(argv[0]));
- exit (1);
- }
- }
-
m_docManager = new wxDocManager (wxDEFAULT_DOCMAN_FLAGS, true);
m_pDocTemplImage = new wxDocTemplate (m_docManager, _T("ImageFile"), _T("*.if"), _T(""), _T("if"), _T("ImageFile"), _T("ImageView"), CLASSINFO(ImageFileDocument), CLASSINFO(ImageFileView));
int xDisplay, yDisplay;
::wxDisplaySize (&xDisplay, &yDisplay);
- m_pFrame = new MainFrame(m_docManager, (wxFrame *) NULL, -1, _T("CTSim"), wxPoint(0, 0),
#ifdef CTSIM_MDI
- wxSize(nearest<int>(xDisplay * .75), nearest<int>(yDisplay * .75)),
+ wxSize frameSize(nearest<int>(xDisplay * .75), nearest<int>(yDisplay * .75));
#else
- wxSize(nearest<int>(xDisplay * .6), nearest<int>(yDisplay * .4)),
+ wxSize frameSize(nearest<int>(xDisplay * .6), nearest<int>(yDisplay * .4));
#endif
- wxDEFAULT_FRAME_STYLE);
+
+ m_pFrame = new MainFrame(m_docManager, (wxFrame *) NULL, -1, _T("CTSim"), wxPoint(0, 0), frameSize, wxDEFAULT_FRAME_STYLE);
setIconForFrame (m_pFrame);
m_pFrame->Centre(wxBOTH);
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");
+ m_pLogDoc->SetDocumentName(_T("Log.txt"));
+ m_pLogDoc->SetFilename(_T("Log.txt"));
+ m_pLogDoc->getView()->getFrame()->SetTitle(_T("Log"));
int xSize, ySize;
m_pFrame->GetClientSize(&xSize, &ySize);
int yLogSize = ySize / 4;
m_pLogDoc->getView()->getFrame()->Show (true);
} else
#else
- m_pLog = new wxTextCtrl (m_pFrame, -1, _T("Log Window\n"), wxPoint(0, 0), wxSize(0,0), wxTE_MULTILINE | wxTE_READONLY);
+ m_pLog = new wxTextCtrl (m_pFrame, -1, _T("Log Window\n"), wxPoint(0, 0), frameSize, wxTE_MULTILINE | wxTE_READONLY);
#endif
wxLog::SetActiveTarget (new wxLogTextCtrl(m_pLog));
for (int i = optind + 1; i <= argc; i++) {
wxString filename = argv [i - 1];
wxDocument* pNewDoc = m_docManager->CreateDocument (filename, wxDOC_SILENT);
- if (bPrintFiles) {
+ if (m_bPrintCmdLineImages) {
wxView* pNewView = pNewDoc->GetFirstView();
wxPrintout *printout = pNewView->OnCreatePrintout();
if (printout) {
m_docManager->OnFileClose (nullEvent);
}
}
- if (bPrintFiles) {
+
+ if (m_bPrintCmdLineImages) {
wxCommandEvent closeEvent;
closeEvent.SetInt (MAINMENU_FILE_EXIT);
- m_pFrame->AddPendingEvent(closeEvent);
+ m_pFrame->GetEventHandler()->ProcessEvent(closeEvent);
}
if (getStartupTips())
}
-wxString
-CTSimApp::getUntitledFilename()
-{
- static int untitledNumber = 1;
-
- wxString filename (_T("Untitled"));
- filename << untitledNumber++;
-
- return (filename);
-}
-
-
// Top-level window for CTSim
#if CTSIM_MDI
EVT_MENU(MAINMENU_FILE_CREATE_PHANTOM, MainFrame::OnCreatePhantom)
EVT_MENU(MAINMENU_FILE_CREATE_FILTER, MainFrame::OnCreateFilter)
EVT_MENU(MAINMENU_FILE_EXIT, MainFrame::OnExit)
+
EVT_MENU_RANGE(wxID_FILE1, wxID_FILE9, MainFrame::OnMRUFile)
+
EVT_MENU(MAINMENU_WINDOW_BASE, MainFrame::OnWindowMenu0)
EVT_MENU(MAINMENU_WINDOW_BASE+1, MainFrame::OnWindowMenu1)
EVT_MENU(MAINMENU_WINDOW_BASE+2, MainFrame::OnWindowMenu2)
#if CTSIM_MDI
MainFrame::MainFrame(wxDocManager *manager, wxFrame *frame, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, const long type)
-: wxDocMDIParentFrame(manager, NULL, id, title, pos, size, type, "MainFrame")
+: wxDocMDIParentFrame(manager, NULL, id, title, pos, size, type, _T("MainFrame"))
#else
MainFrame::MainFrame(wxDocManager *manager, wxFrame *frame, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, const long type)
: wxDocParentFrame(manager, frame, id, title, pos, size, type, _T("MainFrame"))
m_dDefaultFilterBandwidth
<< _T(", inputScale=") << m_dDefaultFilterInputScale << _T(", outputScale=") << m_dDefaultFilterOutputScale;
*theApp->getLog() << os << _T("\n");
- wxString filename = _T("untitled.if");
ImageFileDocument* pFilterDoc = theApp->newImageDoc();
pFilterDoc->setBadFileOpen();
if (! pFilterDoc) {
strFilename += _T("\tCtrl-");
strFilename += static_cast<char>('0' + iPos);
}
- static_cast<wxMenuItemBase*>(m_apWindowMenuItems[iPos])->SetName (strFilename);
+ static_cast<wxMenuItemBase*>(m_apWindowMenuItems[iPos])->SetItemLabel (strFilename);
m_apWindowMenuData[iPos] = pDoc;
m_pWindowMenu->Enable (MAINMENU_WINDOW_BASE+iPos, true);
iPos++;
}
for (int i = iPos; i < MAX_WINDOW_MENUITEMS; i++) {
m_pWindowMenu->Enable (MAINMENU_WINDOW_BASE+i, false);
- static_cast<wxMenuItemBase*>(m_apWindowMenuItems[i])->SetName (_T("[EMPTY]"));
+ static_cast<wxMenuItemBase*>(m_apWindowMenuItems[i])->SetItemLabel (_T("[EMPTY]"));
m_apWindowMenuData[i] = NULL;
}
#endif
};
BitmapDialog::BitmapDialog (wxBitmap* pBitmap, char const* pszTitle)
- : wxDialog(theApp->getMainFrame(), -1, wxString(pszTitle,*wxConvCurrent), wxDefaultPosition, wxDefaultSize, wxDIALOG_MODAL | wxDEFAULT_DIALOG_STYLE)
+ : wxDialog(theApp->getMainFrame(), -1, wxString(pszTitle,*wxConvCurrent))
{
wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
return;
}
-#if WXWIN_COMPATIBILITY_2_4
- wxString strFilename = wxFileSelector (wxString(wxConvUTF8.cMB2WX("Import Filename")), wxString(wxConvUTF8.cMB2WX("")),
- wxString(wxConvUTF8.cMB2WX("")), strExt, strWildcard, wxHIDE_READONLY | wxOPEN);
-#else
wxString strFilename = wxFileSelector (wxString(wxConvUTF8.cMB2WX("Import Filename")), wxString(wxConvUTF8.cMB2WX("")),
- wxString(wxConvUTF8.cMB2WX("")), strExt, strWildcard, wxOPEN);
-#endif
+ wxString(wxConvUTF8.cMB2WX("")), strExt, strWildcard, wxFD_OPEN);
if (! strFilename.IsEmpty()) {
if (m_iDefaultImportFormat == ImageFile::IMPORT_FORMAT_PPM || m_iDefaultImportFormat == ImageFile::IMPORT_FORMAT_PNG) {
// Create new documents
-ProjectionFileDocument*
-CTSimApp::newProjectionDoc()
-{
- ProjectionFileDocument* newDoc = dynamic_cast<ProjectionFileDocument*>(m_pDocTemplProjection->CreateDocument (_T("")));
+wxDocument*
+CTSimApp::newDocumentHelper (wxDocTemplate* tmpl) {
+ wxDocument* newDoc = tmpl->CreateDocument (_T(""));
if (newDoc) {
- newDoc->SetDocumentName (m_pDocTemplProjection->GetDocumentName());
- newDoc->SetDocumentTemplate (m_pDocTemplProjection);
+ newDoc->SetDocumentTemplate (tmpl);
newDoc->OnNewDocument();
+ wxString fname = newDoc->GetFilename();
+ fname += _T(".");
+ fname += tmpl->GetDefaultExtension();
+ newDoc->SetDocumentName(fname);
+ newDoc->SetTitle(fname);
+ newDoc->SetFilename(fname, true);
}
return newDoc;
}
+ProjectionFileDocument*
+CTSimApp::newProjectionDoc()
+{
+ ProjectionFileDocument* newDoc = dynamic_cast<ProjectionFileDocument*>
+ (newDocumentHelper(m_pDocTemplProjection));
+ if (newDoc)
+ newDoc->getView()->getFrame()->SetTitle(newDoc->GetDocumentName());
+ return newDoc;
+}
+
ImageFileDocument*
CTSimApp::newImageDoc()
{
- ImageFileDocument* newDoc = dynamic_cast<ImageFileDocument*>(m_pDocTemplImage->CreateDocument (_T("")));
- if (newDoc) {
- newDoc->SetDocumentName (m_pDocTemplImage->GetDocumentName());
- newDoc->SetDocumentTemplate (m_pDocTemplImage);
- newDoc->OnNewDocument();
- }
+ ImageFileDocument* newDoc = dynamic_cast<ImageFileDocument*>
+ (newDocumentHelper(m_pDocTemplImage));
+ if (newDoc)
+ newDoc->getView()->getFrame()->SetTitle(newDoc->GetDocumentName());
return newDoc;
}
PlotFileDocument*
CTSimApp::newPlotDoc()
{
- PlotFileDocument* newDoc = dynamic_cast<PlotFileDocument*>(m_pDocTemplPlot->CreateDocument (_T("")));
- if (newDoc) {
- newDoc->SetDocumentName (m_pDocTemplPlot->GetDocumentName());
- newDoc->SetDocumentTemplate (m_pDocTemplPlot);
- newDoc->OnNewDocument();
- }
+ PlotFileDocument* newDoc = dynamic_cast<PlotFileDocument*>
+ (newDocumentHelper(m_pDocTemplPlot));
+ if (newDoc)
+ newDoc->getView()->getFrame()->SetTitle(newDoc->GetDocumentName());
return newDoc;
}
TextFileDocument*
CTSimApp::newTextDoc()
{
- wxString strFilename (getUntitledFilename());
- strFilename += wxString(".txt", *wxConvCurrent);
-
- TextFileDocument* newDoc = dynamic_cast<TextFileDocument*>(m_pDocTemplText->CreateDocument (_T("")));
- if (newDoc) {
- newDoc->SetDocumentName (m_pDocTemplText->GetDocumentName());
- newDoc->SetDocumentTemplate (m_pDocTemplText);
- newDoc->OnNewDocument();
- }
+ TextFileDocument* newDoc = dynamic_cast<TextFileDocument*>
+ (newDocumentHelper(m_pDocTemplText));
+ if (newDoc)
+ newDoc->getView()->getFrame()->SetTitle(newDoc->GetDocumentName());
return newDoc;
}
PhantomFileDocument*
CTSimApp::newPhantomDoc()
{
- PhantomFileDocument* newDoc = dynamic_cast<PhantomFileDocument*>(m_pDocTemplPhantom->CreateDocument (_T("")));
- if (newDoc) {
- newDoc->SetDocumentName (m_pDocTemplPhantom->GetDocumentName());
- newDoc->SetDocumentTemplate (m_pDocTemplPhantom);
- newDoc->OnNewDocument();
- }
+ PhantomFileDocument* newDoc = dynamic_cast<PhantomFileDocument*>
+ (newDocumentHelper(m_pDocTemplPhantom));
+ if (newDoc)
+ newDoc->getView()->getFrame()->SetTitle(newDoc->GetDocumentName());
return newDoc;
}
Graph3dFileDocument*
CTSimApp::newGraph3dDoc()
{
- Graph3dFileDocument* newDoc = dynamic_cast<Graph3dFileDocument*>(m_pDocTemplGraph3d->CreateDocument (_T("")));
- if (newDoc) {
- newDoc->SetDocumentName (m_pDocTemplGraph3d->GetDocumentName());
- newDoc->SetDocumentTemplate (m_pDocTemplGraph3d);
- newDoc->OnNewDocument();
- }
+ Graph3dFileDocument* newDoc = dynamic_cast<Graph3dFileDocument*>
+ (newDocumentHelper(m_pDocTemplGraph3d));
+ if (newDoc)
+ newDoc->getView()->getFrame()->SetTitle(newDoc->GetDocumentName());
return newDoc;
}
+
#endif