/** * Main application file */ #include "src/wx_common.h" #include "src/widgets/widget.h" #include #include #include #include "src/widgets/MainFrame.h" // All the ugly globals wxConfigBase *Glob_config = nullptr; LangConfig *Glob_lang_config = nullptr; ThemeConfig *Glob_theme_config = nullptr; MainFrame *Glob_main_frame = nullptr; TyroMenu *Glob_menu_bar = nullptr; wxStatusBar *Glob_status_bar = nullptr; StringConstMap Glob_lexer_map; /** * Class with main method */ class TyroApp : public wxApp { public: /** * Start the event loop and create the main window * * @return bool */ bool OnInit() final { TyroApp::SetSystemOptions(); this->SetAppName(APP_NAME); this->SetVendorName(APP_VENDOR); // Initialize globals TyroApp::InitLexerMap(); Glob_config = wxConfigBase::Get(); Glob_lang_config = new LangConfig(); Glob_theme_config = new ThemeConfig(); Glob_menu_bar = new TyroMenu(); Glob_main_frame = new MainFrame(nullptr, APP_NAME, CalculateWindowSize()); // Setup Main Window Glob_main_frame->Layout(); Glob_main_frame->CenterOnScreen(); Glob_main_frame->Show(true); // Open passed files if (this->param_count > 0) { Glob_main_frame->OpenFiles(files); } SetTopWindow(Glob_main_frame); return true; } /** * Exit handler * * @return int */ int OnExit() override { wxLogDebug("Closing App..."); // Deallocate config object wxLogDebug("Deleting wxConfigBase"); delete wxConfigBase::Set((wxConfigBase *) nullptr); return close(true); } /** * Set up Command Line options * * @param wxCmdLineParser& parser * @return void */ void OnInitCmdLine(wxCmdLineParser &parser) override { parser.SetDesc(Glob_cmdLineDesc); // Set - as parameter delimeter, so raw file paths can be used parser.SetSwitchChars("-"); } /** * Handler for command line options * * @param wxCmdLineParser& parser * @return bool */ bool OnCmdLineParsed(wxCmdLineParser &parser) override { // Get un-named parameters this->param_count = parser.GetParamCount(); wxLogDebug("%i Parameters", this->param_count); for (auto i = 0; i < this->param_count; i++) { this->files.Add(parser.GetParam(i)); } return true; } private: // app loading variables wxArrayString files; size_t param_count = 0; /** * Set up mapping for lexers */ void const static InitLexerMap() { Glob_lexer_map[""] = wxSTC_LEX_NULL; Glob_lexer_map["batch"] = wxSTC_LEX_BATCH; Glob_lexer_map["caml"] = wxSTC_LEX_CAML; Glob_lexer_map["cmake"] = wxSTC_LEX_CMAKE; Glob_lexer_map["cpp"] = wxSTC_LEX_CPP; Glob_lexer_map["css"] = wxSTC_LEX_CSS; Glob_lexer_map["fortran"] = wxSTC_LEX_FORTRAN; Glob_lexer_map["haskell"] = wxSTC_LEX_HASKELL; Glob_lexer_map["java"] = wxSTC_LEX_CPP; Glob_lexer_map["js"] = wxSTC_LEX_CPP; Glob_lexer_map["lisp"] = wxSTC_LEX_LISP; Glob_lexer_map["lua"] = wxSTC_LEX_LUA; Glob_lexer_map["makefile"] = wxSTC_LEX_MAKEFILE; Glob_lexer_map["markdown"] = wxSTC_LEX_MARKDOWN; Glob_lexer_map["php"] = wxSTC_LEX_HTML; Glob_lexer_map["perl"] = wxSTC_LEX_PERL; Glob_lexer_map["properties"] = wxSTC_LEX_PROPERTIES; Glob_lexer_map["python"] = wxSTC_LEX_PYTHON; Glob_lexer_map["ruby"] = wxSTC_LEX_RUBY; #ifdef wxSTC_LEX_RUST Glob_lexer_map["rust"] = wxSTC_LEX_RUST; #endif #ifndef wxSTC_LEX_RUST Glob_lexer_map["rust"] = wxSTC_LEX_CPP; #endif Glob_lexer_map["scheme"] = wxSTC_LEX_LISP; Glob_lexer_map["shell"] = wxSTC_LEX_BASH; Glob_lexer_map["sql"] = wxSTC_LEX_SQL; Glob_lexer_map["xml"] = wxSTC_LEX_XML; Glob_lexer_map["yaml"] = wxSTC_LEX_YAML; } /** * Toolkit-specific settings */ void static SetSystemOptions() { #ifdef __WXMAC__ wxSystemOptions::SetOption("osx.openfiledialog.always-show-types", 1); #endif #ifdef __WXMSW__ wxSystemOptions::SetOption("msw.remap", 0); wxSystemOptions::SetOption("msw.display.directdraw", 1); #endif } }; // Set up the main method and event loop wxIMPLEMENT_APP(TyroApp);