X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=src%2Fctsim.cpp;h=9b7957966c5fbc06b5668510edf909e944be53c1;hp=d58e7daecc5e274ddb736c92f20f16ffca023383;hb=a2ac3119d9f9572f113b1f32d7be996dd49037ae;hpb=8592d9469811305fbc4a895d78a6422502451eef diff --git a/src/ctsim.cpp b/src/ctsim.cpp index d58e7da..9b79579 100644 --- a/src/ctsim.cpp +++ b/src/ctsim.cpp @@ -36,6 +36,7 @@ #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 @@ -67,23 +68,15 @@ #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; } @@ -96,10 +89,57 @@ m_docManager(NULL), m_pFrame(NULL), m_pConfig(0), m_pLog(0), m_pLogDoc(0) #include #endif + +void CTSimApp::OnInitCmdLine(wxCmdLineParser& parser) +{ + static const wxCmdLineEntryDesc cmdLineDesc[] = { + { wxCMD_LINE_SWITCH, _T("l"), _T("verbose"), _T("verbose logging") }, + { wxCMD_LINE_SWITCH, _T("v"), _T("version"), _T("print version") }, + { wxCMD_LINE_SWITCH, _T("p"), _T("print"), _T("print images from command line"), + wxCMD_LINE_VAL_NONE, + wxCMD_LINE_PARAM_OPTIONAL }, + { wxCMD_LINE_SWITCH, _T("h"), _T("help"), _T("print this help message"), + wxCMD_LINE_VAL_NONE, + wxCMD_LINE_PARAM_OPTIONAL | wxCMD_LINE_OPTION_HELP }, + { wxCMD_LINE_PARAM, NULL, NULL, _T("input file"), + wxCMD_LINE_VAL_STRING, + wxCMD_LINE_PARAM_OPTIONAL | wxCMD_LINE_PARAM_MULTIPLE }, + { wxCMD_LINE_NONE } + }; + + 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 @@ -108,50 +148,6 @@ CTSimApp::OnInit() 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)); @@ -238,7 +234,7 @@ CTSimApp::OnInit() 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) { @@ -251,7 +247,7 @@ CTSimApp::OnInit() m_docManager->OnFileClose (nullEvent); } } - if (bPrintFiles) { + if (m_bPrintCmdLineImages) { wxCommandEvent closeEvent; closeEvent.SetInt (MAINMENU_FILE_EXIT); m_pFrame->AddPendingEvent(closeEvent);