bool retcon::OnInit() { raii_set rs; //wxApp::OnInit(); //don't call this, it just calls the default command line processor SetAppName(appname); InitWxLogger(); rs.add([&]() { DeInitWxLogger(); }); ::wxInitAllImageHandlers(); srand((unsigned int) time(nullptr)); datadir = stdstrwx(wxStandardPaths::Get().GetUserDataDir()); cmdlineproc(argv, argc); if(terms_requested) return false; if(!globallogwindow) new log_window(nullptr, LOGT::GROUP_LOGWINDEF, false); if(!datadir.empty() && datadir.back() == '/') datadir.pop_back(); wxString wxdatadir = wxstrstd(datadir); if(!::wxDirExists(wxdatadir)) { ::wxMkdir(wxdatadir, 0700); } InitCFGDefaults(); SetTermSigHandler(); sm.InitMultiIOHandler(); rs.add([&]() { sm.DeInitMultiIOHandler(); }); bool res = DBC_Init(datadir + "/retcondb.sqlite3"); if(!res) return false; rs.add([&]() { DBC_DeInit(); }); if(terms_requested) return false; pool.reset(new ThreadPool::Pool(gc.threadpoollimit)); InitGlobalFilters(); RestoreWindowLayout(); if(mainframelist.empty()) { mainframe *mf = new mainframe( appversionname, wxPoint(50, 50), wxSize(450, 340)); if(alist.empty() && ad.tpanels.empty()) { //everything is empty, maybe new user //make 3 basic auto tpanels to make things more obvious auto flags = TPF::AUTO_ALLACCS | TPF::DELETEONWINCLOSE; auto tpt = tpanel::MkTPanel("", "", flags | TPF::AUTO_TW, 0); tpt->MkTPanelWin(mf, true); auto tpm = tpanel::MkTPanel("", "", flags | TPF::AUTO_MN, 0); tpm->MkTPanelWin(mf, false); auto tpd = tpanel::MkTPanel("", "", flags | TPF::AUTO_DM, 0); tpd->MkTPanelWin(mf, false); } } if(terms_requested) return false; mainframelist[0]->Show(true); for(auto it=alist.begin(); it!=alist.end(); ++it) { (*it)->Setup(); (*it)->CalcEnabled(); (*it)->Exec(); } if(terms_requested) return false; rs.cancel(); return true; }
int retcon::OnExit() { LogMsg(LOGT::OTHERTRACE, "retcon::OnExit"); sm.DeInitMultiIOHandler(); pool.reset(); DBC_DeInit(); DeInitWxLogger(); std::exit(0); }
int retcon::OnExit() { LogMsg(LOGT::OTHERTRACE, "retcon::OnExit"); sm.DeInitMultiIOHandler(); pool.reset(); DBC_DeInit(); for (const observer_ptr<temp_file_holder> &it : temp_file_set) { LogMsgFormat(LOGT::FILEIOTRACE, "retcon::OnExit, resetting: %s", cstr(it->GetFilename())); it->Reset(); } if (!::wxRmdir(wxstrstd(tmpdir))) { LogMsgFormat(LOGT::FILEIOERR, "retcon::OnExit, could not remove temp dir: %s", cstr(tmpdir)); } DebugFinalChecks(); DeInitWxLogger(); std::exit(0); }