string getActiveSession(const po::variables_map& options, int& nSessCnt, bool& bOpenLast, string& strTempSessTempl, string& strDirSessTempl) { string strRes; vector<string> vstrSess; //string strLast; GlobalSettings st; string strTranslation; st.loadSessions(vstrSess, strRes, bOpenLast, strTempSessTempl, strDirSessTempl, strTranslation); nSessCnt = cSize(vstrSess); if (options.count(s_sessionOpt.m_szLongOpt) > 0) { strRes = options[s_sessionOpt.m_szLongOpt].as<string>(); } return strRes; }
int guiMain(const po::variables_map& options) { { // by default on Windows the selection is hard to see in the main window, because it's some gray; QPalette pal (QApplication::palette()); pal.setColor(QPalette::Highlight, pal.color(QPalette::Active, QPalette::Highlight)); pal.setColor(QPalette::HighlightedText, pal.color(QPalette::Active, QPalette::HighlightedText)); QApplication::setPalette(pal); } getDefaultFont(); // !!! to initialize the static var string strStartSession; string strLastSession; int nSessCnt; bool bOpenLast; string strTempSessTempl; string strDirSessTempl; //bool bIsTempSess (false); string strTempSession (getSepTerminatedDir(convStr(QDir::tempPath())) + TEMP_SESS + SessionEditorDlgImpl::SESS_EXT); string strFolderSess; bool bHideFolderSess (true); if (options.count(s_hiddenFolderSessOpt.m_szLongOpt) > 0) { strFolderSess = options[s_hiddenFolderSessOpt.m_szLongOpt].as<string>(); } else if (options.count(s_loadedFolderSessOpt.m_szLongOpt) > 0) { strFolderSess = options[s_loadedFolderSessOpt.m_szLongOpt].as<string>(); bHideFolderSess = false; } SessEraser sessEraser; strLastSession = getActiveSession(options, nSessCnt, bOpenLast, strTempSessTempl, strDirSessTempl); if (options.count(s_tempSessOpt.m_szLongOpt) > 0) { SessEraser::eraseTempSess(); strStartSession = strTempSession; if (strTempSessTempl.empty()) { strTempSessTempl = strLastSession; } if (!strTempSessTempl.empty()) { try { copyFile2(strTempSessTempl, strStartSession); } catch (...) { // nothing //ttt2 do more } } string strProcDir (options[s_tempSessOpt.m_szLongOpt].as<string>()); strProcDir = getNonSepTerminatedDir(convStr(QDir(fromNativeSeparators(convStr(strProcDir))).absolutePath())); setFolder(strStartSession, strProcDir); bOpenLast = true; } else if (!strFolderSess.empty()) { string strProcDir = getNonSepTerminatedDir(convStr(QDir(fromNativeSeparators(convStr(strFolderSess))).absolutePath())); //ttt2 test on root if (!dirExists(strProcDir)) { showMessage(0, QMessageBox::Critical, 0, 0, MainFormDlgImpl::tr("Error"), MainFormDlgImpl::tr("Folder \"%1\" doesn't exist. The program will exit ...").arg(convStr(strProcDir)), MainFormDlgImpl::tr("O&K")); return 1; } string strDirName (convStr(QFileInfo(convStr(strProcDir)).fileName())); if (strDirName.empty()) // it's a whole disk drive on Windows, e.g. D:\\ ; { strDirName += strProcDir[0]; strDirName += "-MP3Diags"; } strStartSession = getSepTerminatedDir(strProcDir) + strDirName + SessionEditorDlgImpl::SESS_EXT; if (bHideFolderSess) { sessEraser.m_strSessionToHide = strStartSession; } if (!fileExists(strStartSession)) { if (strDirSessTempl.empty()) { strDirSessTempl = strLastSession; } if (!strDirSessTempl.empty()) { try { copyFile2(strDirSessTempl, strStartSession); setFolder(strStartSession, strProcDir); } catch (...) { // nothing //ttt2 do more } } } ofstream out (strStartSession.c_str(), ios_base::app); if (!out) { showMessage(0, QMessageBox::Critical, 0, 0, MainFormDlgImpl::tr("Error"), MainFormDlgImpl::tr("Cannot write to file \"%1\". The program will exit ...").arg(convStr(strStartSession)), MainFormDlgImpl::tr("O&K")); return 1; } bOpenLast = true; } else if (0 == nSessCnt) { // first run; create a new session and run it SessionEditorDlgImpl dlg (0, "", SessionEditorDlgImpl::FIRST_TIME, ""); // ttt0 detect system locale dlg.setWindowIcon(QIcon(":/images/logo.svg")); strStartSession = dlg.run(); if (strStartSession.empty()) { return 0; } if ("*" == strStartSession) { strStartSession.clear(); } else { vector<string> vstrSess; //vstrSess.push_back(strStartSession); GlobalSettings st; st.saveSessions(vstrSess, strStartSession, dlg.shouldOpenLastSession(), "", "", dlg.getTranslation(), GlobalSettings::LOAD_EXTERNAL_CHANGES); } bOpenLast = true; } else { strStartSession = strLastSession; } bool bOpenSelDlg (strStartSession.empty() || !bOpenLast); try { for (;;) { { QFont fnt; string strNewFont (convStr(fnt.family())); int nNewSize (fnt.pointSize()); fixAppFont(fnt, strNewFont, nNewSize); } if (bOpenSelDlg) { SessionsDlgImpl dlg (0); dlg.setWindowIcon(QIcon(":/images/logo.svg")); strStartSession = dlg.run(); if (strStartSession.empty()) { return 0; } } bOpenSelDlg = true; CB_ASSERT (!strStartSession.empty()); bool bDefaultForVisibleSessBtn (true); //if (strStartSession != strTempSession) { vector<string> vstrSess; bool bOpenLast; string s, s1, s2, s3; GlobalSettings st; st.loadSessions(vstrSess, s, bOpenLast, s1, s2, s3); st.saveSessions(vstrSess, strStartSession, bOpenLast, s1, s2, s3, GlobalSettings::LOAD_EXTERNAL_CHANGES); bDefaultForVisibleSessBtn = (cSize(vstrSess) != 1 || !strFolderSess.empty() || vstrSess.end() != find(vstrSess.begin(), vstrSess.end(), strTempSession)); } { //ttt2 overkill - create a "CommonData" just to read the language setting SessionSettings settings (strStartSession); CommonData commonData(settings, 0, 0, 0, 0, 0, 0, 0, 0, 0, false); settings.loadMiscConfigSettings(&commonData, SessionSettings::DONT_INIT_GUI); TranslatorHandler::getGlobalTranslator().setTranslation(commonData.m_strTranslation); // !!! must be done here, before the MainFormDlgImpl constructor } MainFormDlgImpl mainDlg (strStartSession, bDefaultForVisibleSessBtn); mainDlg.setWindowIcon(QIcon(":/images/logo.svg")); if (bDefaultForVisibleSessBtn) { mainDlg.setWindowTitle(QString(getAppName()) + " - " + convStr(SessionEditorDlgImpl::getTitleName(strStartSession))); } else { mainDlg.setWindowTitle(QString(getAppName())); } if (MainFormDlgImpl::OPEN_SESS_DLG != mainDlg.run()) { return 0; } } } catch (const exception& ex) { CB_ASSERT1 (false, ex.what()); } catch (...) // ttt2 for now it doesn't catch many exceptions; it seems that nothing can be done if an exception leaves a slot / event handler, but maybe there are ways around { /*QMessageBox dlg (QMessageBox::Critical, "Error", "Caught generic exception. Exiting ...", QMessageBox::Close, 0, Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint | Qt::WindowStaysOnTopHint); dlg.exec(); qDebug("out - err");*/ CB_ASSERT (false); } /*mainDlg.show(); return app.exec();*/ }