bool MyApp::OnInit() { // MSW: Perhaps that is faster. wxSystemOptions::SetOption("msw.display.directdraw","1"); // No spell checking in our dialog's input portions on the mac. wxSystemOptions::SetOption("mac.textcontrol-use-spell-checker","0"); // Migrate an eventual old config file to the location XDG wants it to be. #ifndef __WXMSW__ #if wxCHECK_VERSION(3, 1, 1) wxStandardPaths::Get().SetFileLayout(wxStandardPaths::FileLayout_Classic); wxString configFileOld = wxStandardPaths::Get().GetUserConfigDir() + wxT("/") + wxStandardPaths::Get().MakeConfigFileName( wxString(wxT("wxMaxima")), wxStandardPaths::ConfigFileConv_Dot); wxStandardPaths::Get().SetFileLayout(wxStandardPaths::FileLayout_XDG); wxString configFileXDG = wxStandardPaths::Get().GetUserConfigDir() + wxT("/") + wxStandardPaths::Get().MakeConfigFileName( wxString(wxT("wxMaxima")), wxStandardPaths::ConfigFileConv_Ext); if(!wxFileExists(configFileXDG)) { wxFileName xdgDir(configFileXDG); wxString dirName(xdgDir.GetPath()); if(!wxDirExists(dirName)) wxMkDir(dirName,0x700); wxLogNull blocker; if(wxFileExists(configFileOld)) wxCopyFile(configFileOld,configFileXDG); } #endif #endif wxConfig::Set(new wxFileConfig(wxT("wxMaxima"), wxEmptyString, m_configFileName)); atexit(Cleanup); int lang = wxLANGUAGE_UNKNOWN; bool exitAfterEval = false; bool evalOnStartup = false; wxCmdLineParser cmdLineParser(argc, argv); static const wxCmdLineEntryDesc cmdLineDesc[] = { {wxCMD_LINE_SWITCH, "v", "version", "Output the version info", wxCMD_LINE_VAL_NONE , 0}, /* Usually wxCMD_LINE_OPTION_HELP is used with the following option, but that displays a message * using a own window and we want the message on the command line. If a user enters a command * line option, he expects probably a answer just on the command line... */ {wxCMD_LINE_SWITCH, "h", "help", "show this help message", wxCMD_LINE_VAL_NONE, wxCMD_LINE_OPTION_HELP}, {wxCMD_LINE_OPTION, "o", "open", "open a file", wxCMD_LINE_VAL_STRING , 0}, {wxCMD_LINE_SWITCH, "e", "eval", "evaluate the file after opening it.", wxCMD_LINE_VAL_NONE , 0}, {wxCMD_LINE_SWITCH, "b", "batch", "run the file and exit afterwards. Halts on questions and stops on errors.", wxCMD_LINE_VAL_NONE, 0}, { wxCMD_LINE_OPTION, "f", "ini", "allows to specify a file to store the configuration in", wxCMD_LINE_VAL_STRING , 0}, { wxCMD_LINE_OPTION, "m", "maxima", "allows to specify the location of the maxima binary", wxCMD_LINE_VAL_STRING , 0}, {wxCMD_LINE_PARAM, NULL, NULL, "input file", wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL | wxCMD_LINE_PARAM_MULTIPLE}, {wxCMD_LINE_NONE, "", "", "", wxCMD_LINE_VAL_NONE, 0} }; cmdLineParser.SetDesc(cmdLineDesc); cmdLineParser.Parse(); wxString ini, file; // Attention: The config file is changed by wxMaximaFrame::wxMaximaFrame::ReReadConfig if (cmdLineParser.Found(wxT("f"),&ini)) { Configuration::m_maximaLocation_override = ini; } else wxConfig::Set(new wxConfig(wxT("wxMaxima"))); if (cmdLineParser.Found(wxT("m"),&ini)) wxConfig::Get()->Write(wxT("maxima"), ini); wxImage::AddHandler(new wxPNGHandler); wxImage::AddHandler(new wxXPMHandler); wxImage::AddHandler(new wxJPEGHandler); wxFileSystem::AddHandler(new wxZipFSHandler); wxConfigBase *config = wxConfig::Get(); lang = wxLocale::GetSystemLanguage(); config->Read(wxT("language"), &lang); if(wxLocale::IsAvailable(lang)) m_locale.Init(lang); else m_locale.Init(wxLANGUAGE_ENGLISH); m_dirstruct = new Dirstructure; if((lang != wxLANGUAGE_UNKNOWN) && (lang != wxLANGUAGE_DEFAULT) && (lang != wxLocale::GetSystemLanguage())) wxSetEnv(wxT("LANG"), m_locale.GetCanonicalName()); #ifdef __WXMSW__ wxString oldWorkingDir = wxGetCwd(); if (!wxGetEnv(wxT("BUILD_DIR"), NULL)) { wxString dir = wxPathOnly(wxStandardPaths::Get().GetExecutablePath()); if(dir != wxEmptyString) wxSetWorkingDirectory(wxPathOnly(wxStandardPaths::Get().GetExecutablePath())); } wxString fontPrefix = m_dirstruct->FontDir() + wxT("/"); /* Add private jsMath fonts, if they exist */ #if wxCHECK_VERSION(3, 1, 1) if (wxFileExists(fontPrefix + wxT(CMEX10) + wxT(".ttf"))) wxFont::AddPrivateFont(fontPrefix + wxT(CMEX10) + wxT(".ttf")); if (wxFileExists(fontPrefix + wxT(CMSY10) + wxT(".ttf"))) wxFont::AddPrivateFont(fontPrefix + wxT(CMSY10) + wxT(".ttf")); if (wxFileExists(fontPrefix + wxT(CMR10) + wxT(".ttf"))) wxFont::AddPrivateFont(fontPrefix + wxT(CMR10) + wxT(".ttf")); if (wxFileExists(fontPrefix + wxT(CMMI10) + wxT(".ttf"))) wxFont::AddPrivateFont(fontPrefix + wxT(CMMI10) + wxT(".ttf")); if (wxFileExists(fontPrefix + wxT(CMTI10) + wxT(".ttf"))) wxFont::AddPrivateFont(fontPrefix + wxT(CMTI10) + wxT(".ttf")); /* Add private Libertine fonts, if they exist */ if (wxFileExists(fontPrefix + wxT(LIBERTINE1))) wxFont::AddPrivateFont(fontPrefix + wxT(LIBERTINE1)); if (wxFileExists(fontPrefix + wxT(LIBERTINE2))) wxFont::AddPrivateFont(fontPrefix + wxT(LIBERTINE2)); if (wxFileExists(fontPrefix + wxT(LIBERTINE3))) wxFont::AddPrivateFont(fontPrefix + wxT(LIBERTINE3)); if (wxFileExists(fontPrefix + wxT(LIBERTINE4))) wxFont::AddPrivateFont(fontPrefix + wxT(LIBERTINE4)); if (wxFileExists(fontPrefix + wxT(LIBERTINE5))) wxFont::AddPrivateFont(fontPrefix + wxT(LIBERTINE5)); if (wxFileExists(fontPrefix + wxT(LIBERTINE6))) wxFont::AddPrivateFont(fontPrefix + wxT(LIBERTINE6)); if (wxFileExists(fontPrefix + wxT(LIBERTINE7))) wxFont::AddPrivateFont(fontPrefix + wxT(LIBERTINE7)); if (wxFileExists(fontPrefix + wxT(LIBERTINE8))) wxFont::AddPrivateFont(fontPrefix + wxT(LIBERTINE8)); if (wxFileExists(fontPrefix + wxT(LIBERTINE9))) wxFont::AddPrivateFont(fontPrefix + wxT(LIBERTINE9)); #endif wxSetWorkingDirectory(oldWorkingDir); #endif m_locale.AddCatalogLookupPathPrefix(m_dirstruct->LocaleDir()); m_locale.AddCatalogLookupPathPrefix(m_dirstruct->LocaleDir()+wxT("/wxwin")); m_locale.AddCatalogLookupPathPrefix(wxT("/usr/share/locale")); m_locale.AddCatalogLookupPathPrefix(wxT("/usr/local/share/locale")); m_locale.AddCatalog(wxT("wxMaxima")); m_locale.AddCatalog(wxT("wxMaxima-wxstd")); #if defined __WXMAC__ wxString path; wxGetEnv(wxT("PATH"), &path); wxSetEnv(wxT("PATH"), path << wxT(":/usr/local/bin")); wxApp::SetExitOnFrameDelete(false); wxMenuBar *menuBar = new wxMenuBar; wxMenu *fileMenu = new wxMenu; fileMenu->Append(wxMaxima::mac_newId, _("&New\tCtrl+N")); fileMenu->Append(wxMaxima::mac_openId, _("&Open\tCtrl+O")); menuBar->Append(fileMenu, _("File")); wxMenuBar::MacSetCommonMenuBar(menuBar); Connect(wxMaxima::mac_newId, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MyApp::OnFileMenu)); Connect(wxMaxima::mac_openId, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MyApp::OnFileMenu)); Connect(wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MyApp::OnFileMenu)); #endif if (cmdLineParser.Found(wxT("v"))) { std::cout << "wxMaxima "; std::cout << GITVERSION; #if defined(WXMAXIMA_GIT_VERSION) std::cout << " (Git version: " << WXMAXIMA_GIT_VERSION << ")"; #endif std::cout << "\n"; wxExit(); } if (cmdLineParser.Found(wxT("h"))) { std::cout << "A feature-rich graphical user interface for the computer algebra system maxima\n"; std::cout << cmdLineParser.GetUsageString(); wxExit(); } if (cmdLineParser.Found(wxT("b"))) { evalOnStartup = true; exitAfterEval = true; } if (cmdLineParser.Found(wxT("e"))) evalOnStartup = true; if (cmdLineParser.Found(wxT("o"), &file)) { wxFileName FileName = file; FileName.MakeAbsolute(); wxString CanonicalFilename = FileName.GetFullPath(); NewWindow(wxString(CanonicalFilename), evalOnStartup, exitAfterEval); return true; } if(cmdLineParser.GetParamCount() > 0) { for (unsigned int i=0; i < cmdLineParser.GetParamCount(); i++) { wxFileName FileName = cmdLineParser.GetParam(i); FileName.MakeAbsolute(); wxString CanonicalFilename = FileName.GetFullPath(); NewWindow(CanonicalFilename, evalOnStartup, exitAfterEval); } } else NewWindow(); return true; }
void MyApp::MacNewFile() { wxWindow *frame = GetTopWindow(); if (frame == NULL) NewWindow(); }
void MyApp::MacOpenFile(const wxString &file) { NewWindow(file); }
bool MyApp::OnInit() { m_frame = NULL; // atexit(Cleanup_Static); int lang = wxLANGUAGE_UNKNOWN; wxConfigBase *config = wxConfig::Get(); config->Read(wxT("language"), &lang); if (lang == wxLANGUAGE_UNKNOWN) lang = wxLocale::GetSystemLanguage(); { wxLogNull disableErrors; m_locale.Init(lang); } bool batchmode = false; wxCmdLineParser cmdLineParser(argc, argv); static const wxCmdLineEntryDesc cmdLineDesc[] = { { wxCMD_LINE_SWITCH, "v", "version", "Output the version info" }, /* Usually wxCMD_LINE_OPTION_HELP is used with the following option, but that displays a message * using a own window and we want the message on the command line. If a user enters a command * line option, he expects probably a answer just on the command line... */ { wxCMD_LINE_SWITCH, "h", "help", "show this help message", wxCMD_LINE_VAL_NONE}, { wxCMD_LINE_OPTION, "o", "open", "open a file" }, { wxCMD_LINE_SWITCH, "b", "batch","run the file and exit afterwards. Halts on questions and stops on errors." }, #if defined __WXMSW__ { wxCMD_LINE_OPTION, "f", "ini", "open an input file" }, #endif { wxCMD_LINE_PARAM, NULL, NULL, "input file", wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL }, { wxCMD_LINE_NONE } }; cmdLineParser.SetDesc(cmdLineDesc); cmdLineParser.Parse(); wxString ini, file; #if defined __WXMSW__ if (cmdLineParser.Found(wxT("f"),&ini)) wxConfig::Set(new wxFileConfig(ini)); else wxConfig::Set(new wxConfig(wxT("wxMaxima"))); #else wxConfig::Set(new wxConfig(wxT("wxMaxima"))); #endif wxImage::AddHandler(new wxPNGHandler); wxImage::AddHandler(new wxXPMHandler); wxImage::AddHandler(new wxJPEGHandler); wxFileSystem::AddHandler(new wxZipFSHandler); Dirstructure dirstructure; #if defined (__WXMSW__) wxSetEnv(wxT("LANG"), m_locale.GetName()); if (!wxGetEnv(wxT("BUILD_DIR"), NULL)) wxSetWorkingDirectory(wxPathOnly(wxString(argv[0]))); #endif m_locale.AddCatalogLookupPathPrefix(dirstructure.LocaleDir()); m_locale.AddCatalog(wxT("wxMaxima")); m_locale.AddCatalog(wxT("wxMaxima-wxstd")); #if defined __WXMAC__ wxString path; wxGetEnv(wxT("PATH"), &path); wxSetEnv(wxT("PATH"), path << wxT(":/usr/local/bin")); #endif #if defined (__WXMAC__) wxApp::SetExitOnFrameDelete(false); wxMenuBar *menuBar = new wxMenuBar; wxMenu *fileMenu = new wxMenu; fileMenu->Append(wxMaxima::mac_newId, _("&New\tCtrl-N")); fileMenu->Append(wxMaxima::mac_openId, _("&Open\tCtrl-O")); menuBar->Append(fileMenu, _("File")); wxMenuBar::MacSetCommonMenuBar(menuBar); Connect(wxMaxima::mac_newId, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MyApp::OnFileMenu)); Connect(wxMaxima::mac_openId, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MyApp::OnFileMenu)); Connect(wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MyApp::OnFileMenu)); #endif if (cmdLineParser.Found(wxT("v"))) { std::cout<<"wxMaxima "; std::cout << VERSION; std::cout<<"\n"; wxExit(); } if (cmdLineParser.Found(wxT("h"))) { std::cout<<"A feature-rich graphical user interface for the computer algebra system maxima\n"; std::cout<<cmdLineParser.GetUsageString(); wxExit(); } if (cmdLineParser.Found(wxT("b"))) { batchmode = true; } if (cmdLineParser.Found(wxT("o"), &file)) { wxFileName FileName=file; FileName.MakeAbsolute(); wxString CanonicalFilename=FileName.GetFullPath(); NewWindow(wxString(CanonicalFilename),batchmode); return true; } else { if (cmdLineParser.GetParamCount()>0) { wxFileName FileName=cmdLineParser.GetParam(); FileName.MakeAbsolute(); wxString CanonicalFilename=FileName.GetFullPath(); NewWindow(CanonicalFilename,batchmode); } else NewWindow(); } return true; }