diff --git a/src/qtgui/guiutils.cpp b/src/qtgui/guiutils.cpp index ef6f7480..86d12abf 100644 --- a/src/qtgui/guiutils.cpp +++ b/src/qtgui/guiutils.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2005 Jean-Francois Dockes +/* Copyright (C) 2005-2019 Jean-Francois Dockes * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or @@ -53,13 +53,13 @@ PrefsPack prefs; // Using the same macro to read/write a setting. insurance against typing // mistakes #define PARS(X) (X) -#define SETTING_RW(var, nm, tp, def) \ - if (writing) { \ - settings.setValue(nm , var); \ - } else { \ - var = settings.value(nm, def).to##tp \ - (); \ - } +#define SETTING_RW(var, nm, tp, def) \ + if (writing) { \ + settings.setValue(nm , var); \ + } else { \ + var = settings.value(nm, def).to##tp \ + (); \ + } /** * Saving and restoring user preferences. These are stored in a global @@ -87,7 +87,7 @@ void rwSettings(bool writing) SETTING_RW(prefs.ssearchTypSav, "/Recoll/prefs/ssearchTypSav", Bool, 0); SETTING_RW(prefs.ssearchTyp, "/Recoll/prefs/simpleSearchTyp", Int, 3); SETTING_RW(prefs.startWithAdvSearchOpen, - "/Recoll/prefs/startWithAdvSearchOpen", Bool, false); + "/Recoll/prefs/startWithAdvSearchOpen", Bool, false); SETTING_RW(prefs.previewHtml, "/Recoll/prefs/previewHtml", Bool, true); SETTING_RW(prefs.previewActiveLinks, "/Recoll/prefs/previewActiveLinks", Bool, false); @@ -99,17 +99,17 @@ void rwSettings(bool writing) if (prefs.advSearchClauses.size() > maxclauselistsize) { prefs.advSearchClauses.resize(maxclauselistsize); } - for (auto clause : prefs.advSearchClauses) { - char buf[20]; - sprintf(buf, "%d ", clause); - advSearchClauses += QString::fromUtf8(buf); - } + for (auto clause : prefs.advSearchClauses) { + char buf[20]; + sprintf(buf, "%d ", clause); + advSearchClauses += QString::fromUtf8(buf); + } } QString ascdflt; SETTING_RW(advSearchClauses,"/Recoll/prefs/adv/clauseList", String, ascdflt); if (!writing) { - vector clauses; - stringToStrings(qs2utf8s(advSearchClauses), clauses); + vector clauses; + stringToStrings(qs2utf8s(advSearchClauses), clauses); // There was a long-lurking bug where the clause list was // growing to absurd sizes. The prefs.advSearchClauses clear() // call was missing (ok with the now false initial assumption @@ -122,29 +122,29 @@ void rwSettings(bool writing) } prefs.advSearchClauses.clear(); prefs.advSearchClauses.reserve(clauses.size()); - for (auto clause : clauses) { - prefs.advSearchClauses.push_back(atoi(clause.c_str())); - } + for (auto clause : clauses) { + prefs.advSearchClauses.push_back(atoi(clause.c_str())); + } } SETTING_RW(prefs.ssearchNoComplete, - "/Recoll/prefs/ssearch/noComplete", Bool, false); + "/Recoll/prefs/ssearch/noComplete", Bool, false); SETTING_RW(prefs.ssearchStartOnComplete, - "/Recoll/prefs/ssearch/startOnComplete", Bool, true); + "/Recoll/prefs/ssearch/startOnComplete", Bool, true); SETTING_RW(prefs.filterCtlStyle, "/Recoll/prefs/filterCtlStyle", Int, 0); SETTING_RW(prefs.ssearchAutoPhrase, - "/Recoll/prefs/ssearchAutoPhrase", Bool, true); + "/Recoll/prefs/ssearchAutoPhrase", Bool, true); SETTING_RW(prefs.ssearchAutoPhraseThreshPC, - "/Recoll/prefs/ssearchAutoPhraseThreshPC", Double, 2.0); + "/Recoll/prefs/ssearchAutoPhraseThreshPC", Double, 2.0); SETTING_RW(prefs.respagesize, "/Recoll/prefs/reslist/pagelen", Int, 8); SETTING_RW(prefs.collapseDuplicates, - "/Recoll/prefs/reslist/collapseDuplicates", Bool, false); + "/Recoll/prefs/reslist/collapseDuplicates", Bool, false); SETTING_RW(prefs.showResultsAsTable, - "/Recoll/prefs/showResultsAsTable", Bool, false); + "/Recoll/prefs/showResultsAsTable", Bool, false); SETTING_RW(prefs.maxhltextmbs, "/Recoll/prefs/preview/maxhltextmbs", Int, 3); SETTING_RW(prefs.previewPlainPre, - "/Recoll/prefs/preview/plainPre", Int, PrefsPack::PP_PREWRAP); + "/Recoll/prefs/preview/plainPre", Int, PrefsPack::PP_PREWRAP); // History: used to be able to only set a bare color name. Can now // set any CSS style. Hack on ':' presence to keep compat with old @@ -152,7 +152,7 @@ void rwSettings(bool writing) SETTING_RW(prefs.qtermstyle, "/Recoll/prefs/qtermcolor", String, "color: blue"); if (!writing && prefs.qtermstyle == "") - prefs.qtermstyle = "color: blue"; + prefs.qtermstyle = "color: blue"; { // histo compatibility hack int colon = prefs.qtermstyle.indexOf(":"); int semi = prefs.qtermstyle.indexOf(";"); @@ -165,140 +165,141 @@ void rwSettings(bool writing) } SETTING_RW(prefs.reslistdateformat, "/Recoll/prefs/reslist/dateformat", - String," %Y-%m-%d %H:%M:%S %z"); + String," %Y-%m-%d %H:%M:%S %z"); if (!writing && prefs.reslistdateformat == "") - prefs.reslistdateformat = " %Y-%m-%d %H:%M:%S %z"; + prefs.reslistdateformat = " %Y-%m-%d %H:%M:%S %z"; prefs.creslistdateformat = (const char*)prefs.reslistdateformat.toUtf8(); SETTING_RW(prefs.reslistfontfamily, "/Recoll/prefs/reslist/fontFamily", - String, ""); + String, ""); SETTING_RW(prefs.reslistfontsize, "/Recoll/prefs/reslist/fontSize", Int, - 10); + 10); QString rlfDflt = QString::fromUtf8(prefs.dfltResListFormat); if (writing) { - if (prefs.reslistformat.compare(rlfDflt)) { - settings.setValue("/Recoll/prefs/reslist/format", - prefs.reslistformat); - } else { - settings.remove("/Recoll/prefs/reslist/format"); - } + if (prefs.reslistformat.compare(rlfDflt)) { + settings.setValue("/Recoll/prefs/reslist/format", + prefs.reslistformat); + } else { + settings.remove("/Recoll/prefs/reslist/format"); + } } else { - prefs.reslistformat = - settings.value("/Recoll/prefs/reslist/format", rlfDflt).toString(); - prefs.creslistformat = qs2utf8s(prefs.reslistformat); + prefs.reslistformat = + settings.value("/Recoll/prefs/reslist/format", rlfDflt).toString(); + prefs.creslistformat = qs2utf8s(prefs.reslistformat); } SETTING_RW(prefs.reslistheadertext, "/Recoll/prefs/reslist/headertext", - String, ""); + String, ""); SETTING_RW(prefs.qssFile, "/Recoll/prefs/stylesheet", String, ""); SETTING_RW(prefs.snipCssFile, "/Recoll/prefs/snippets/cssfile", String, ""); SETTING_RW(prefs.queryStemLang, "/Recoll/prefs/query/stemLang", String, - "english"); + "english"); SETTING_RW(prefs.useDesktopOpen, "/Recoll/prefs/useDesktopOpen", - Bool, true); + Bool, true); SETTING_RW(prefs.keepSort, - "/Recoll/prefs/keepSort", Bool, false); + "/Recoll/prefs/keepSort", Bool, false); SETTING_RW(prefs.sortField, "/Recoll/prefs/sortField", String, ""); SETTING_RW(prefs.sortActive, - "/Recoll/prefs/sortActive", Bool, false); + "/Recoll/prefs/sortActive", Bool, false); SETTING_RW(prefs.sortDesc, - "/Recoll/prefs/query/sortDesc", Bool, 0); + "/Recoll/prefs/query/sortDesc", Bool, 0); if (!writing) { - // Handle transition from older prefs which did not store sortColumn - // (Active always meant sort by date). - if (prefs.sortActive && prefs.sortField.isNull()) - prefs.sortField = "mtime"; + // Handle transition from older prefs which did not store sortColumn + // (Active always meant sort by date). + if (prefs.sortActive && prefs.sortField.isNull()) + prefs.sortField = "mtime"; } SETTING_RW(prefs.queryBuildAbstract, - "/Recoll/prefs/query/buildAbstract", Bool, true); + "/Recoll/prefs/query/buildAbstract", Bool, true); SETTING_RW(prefs.queryReplaceAbstract, - "/Recoll/prefs/query/replaceAbstract", Bool, false); + "/Recoll/prefs/query/replaceAbstract", Bool, false); SETTING_RW(prefs.syntAbsLen, "/Recoll/prefs/query/syntAbsLen", - Int, 250); + Int, 250); SETTING_RW(prefs.syntAbsCtx, "/Recoll/prefs/query/syntAbsCtx", - Int, 4); + Int, 4); // Abstract snippet separator SETTING_RW(prefs.abssep, "/Recoll/prefs/reslist/abssep", String,"…"); if (!writing && prefs.abssep == "") - prefs.abssep = "…"; + prefs.abssep = "…"; SETTING_RW(prefs.snipwMaxLength, "/Recoll/prefs/snipwin/maxlen", Int, 1000); SETTING_RW(prefs.snipwSortByPage,"/Recoll/prefs/snipwin/bypage", Bool, false); SETTING_RW(prefs.autoSuffs, "/Recoll/prefs/query/autoSuffs", String, ""); SETTING_RW(prefs.autoSuffsEnable, - "/Recoll/prefs/query/autoSuffsEnable", Bool, false); + "/Recoll/prefs/query/autoSuffsEnable", Bool, false); SETTING_RW(prefs.synFileEnable, - "/Recoll/prefs/query/synFileEnable", Bool, false); + "/Recoll/prefs/query/synFileEnable", Bool, false); SETTING_RW(prefs.synFile, "/Recoll/prefs/query/synfile", String, ""); SETTING_RW(prefs.termMatchType, "/Recoll/prefs/query/termMatchType", - Int, 0); + Int, 0); // This is not really the current program version, just a value to // be used in case we have incompatible changes one day SETTING_RW(prefs.rclVersion, "/Recoll/prefs/rclVersion", Int, 1009); // Ssearch combobox history list if (writing) { - settings.setValue("/Recoll/prefs/query/ssearchHistory", - prefs.ssearchHistory); + settings.setValue("/Recoll/prefs/query/ssearchHistory", + prefs.ssearchHistory); } else { - prefs.ssearchHistory = - settings.value("/Recoll/prefs/query/ssearchHistory").toStringList(); + prefs.ssearchHistory = + settings.value("/Recoll/prefs/query/ssearchHistory").toStringList(); } // Ignored file types (advanced search) if (writing) { - settings.setValue("/Recoll/prefs/query/asearchIgnFilTyps", - prefs.asearchIgnFilTyps); + settings.setValue("/Recoll/prefs/query/asearchIgnFilTyps", + prefs.asearchIgnFilTyps); } else { - prefs.asearchIgnFilTyps = - settings.value("/Recoll/prefs/query/asearchIgnFilTyps").toStringList(); + prefs.asearchIgnFilTyps = + settings.value("/Recoll/prefs/query/asearchIgnFilTyps").toStringList(); } // Field list for the restable if (writing) { - settings.setValue("/Recoll/prefs/query/restableFields", - prefs.restableFields); + settings.setValue("/Recoll/prefs/query/restableFields", + prefs.restableFields); } else { - prefs.restableFields = - settings.value("/Recoll/prefs/query/restableFields").toStringList(); - if (prefs.restableFields.empty()) { - prefs.restableFields.push_back("date"); - prefs.restableFields.push_back("title"); - prefs.restableFields.push_back("filename"); - prefs.restableFields.push_back("author"); - prefs.restableFields.push_back("url"); - } + prefs.restableFields = + settings.value("/Recoll/prefs/query/restableFields").toStringList(); + if (prefs.restableFields.empty()) { + prefs.restableFields.push_back("date"); + prefs.restableFields.push_back("title"); + prefs.restableFields.push_back("filename"); + prefs.restableFields.push_back("author"); + prefs.restableFields.push_back("url"); + } } // restable col widths QString rtcw; if (writing) { - for (vector::iterator it = prefs.restableColWidths.begin(); - it != prefs.restableColWidths.end(); it++) { - char buf[20]; - sprintf(buf, "%d ", *it); - rtcw += QString::fromUtf8(buf); - } + for (vector::iterator it = prefs.restableColWidths.begin(); + it != prefs.restableColWidths.end(); it++) { + char buf[20]; + sprintf(buf, "%d ", *it); + rtcw += QString::fromUtf8(buf); + } } SETTING_RW(rtcw, "/Recoll/prefs/query/restableWidths", String, - "83 253 132 172 130 "); + "83 253 132 172 130 "); if (!writing) { - vector widths; - stringToStrings((const char *)rtcw.toUtf8(), widths); - for (vector::iterator it = widths.begin(); - it != widths.end(); it++) { - prefs.restableColWidths.push_back(atoi(it->c_str())); - } + prefs.restableColWidths.clear(); + vector widths; + stringToStrings((const char *)rtcw.toUtf8(), widths); + for (vector::iterator it = widths.begin(); + it != widths.end(); it++) { + prefs.restableColWidths.push_back(atoi(it->c_str())); + } } SETTING_RW(prefs.fileTypesByCats, "/Recoll/prefs/query/asearchFilTypByCat", - Bool, false); + Bool, false); SETTING_RW(prefs.showTrayIcon, "/Recoll/prefs/showTrayIcon", Bool, false); SETTING_RW(prefs.closeToTray, "/Recoll/prefs/closeToTray", Bool, false); SETTING_RW(prefs.showTempFileWarning, "Recoll/prefs/showTempFileWarning", @@ -317,64 +318,64 @@ void rwSettings(bool writing) // This are stored inside the dynamic configuration file (aka: history), // as they are likely to depend on RECOLL_CONFDIR. if (writing) { - g_dynconf->eraseAll(allEdbsSk); - for (const auto& dbdir : prefs.allExtraDbs) { - g_dynconf->enterString(allEdbsSk, dbdir); - } + g_dynconf->eraseAll(allEdbsSk); + for (const auto& dbdir : prefs.allExtraDbs) { + g_dynconf->enterString(allEdbsSk, dbdir); + } - g_dynconf->eraseAll(actEdbsSk); - for (const auto& dbdir : prefs.activeExtraDbs) { - g_dynconf->enterString(actEdbsSk, dbdir); + g_dynconf->eraseAll(actEdbsSk); + for (const auto& dbdir : prefs.activeExtraDbs) { + g_dynconf->enterString(actEdbsSk, dbdir); - } + } } else { - prefs.allExtraDbs = g_dynconf->getStringEntries(allEdbsSk); - const char *cp; - if ((cp = getenv("RECOLL_EXTRA_DBS")) != 0) { - vector dbl; - stringToTokens(cp, dbl, ":"); - for (vector::iterator dit = dbl.begin(); dit != dbl.end(); - dit++) { - string dbdir = path_canon(*dit); - path_catslash(dbdir); - if (std::find(prefs.allExtraDbs.begin(), + prefs.allExtraDbs = g_dynconf->getStringEntries(allEdbsSk); + const char *cp; + if ((cp = getenv("RECOLL_EXTRA_DBS")) != 0) { + vector dbl; + stringToTokens(cp, dbl, ":"); + for (vector::iterator dit = dbl.begin(); dit != dbl.end(); + dit++) { + string dbdir = path_canon(*dit); + path_catslash(dbdir); + if (std::find(prefs.allExtraDbs.begin(), prefs.allExtraDbs.end(), dbdir) != - prefs.allExtraDbs.end()) - continue; - bool stripped; - if (!Rcl::Db::testDbDir(dbdir, &stripped)) { - LOGERR("Not a xapian index: [" << dbdir << "]\n"); - continue; - } - if (stripped != o_index_stripchars) { - LOGERR("Incompatible character stripping: [" << dbdir << + prefs.allExtraDbs.end()) + continue; + bool stripped; + if (!Rcl::Db::testDbDir(dbdir, &stripped)) { + LOGERR("Not a xapian index: [" << dbdir << "]\n"); + continue; + } + if (stripped != o_index_stripchars) { + LOGERR("Incompatible character stripping: [" << dbdir << "]\n"); - continue; - } - prefs.allExtraDbs.push_back(dbdir); - } - } + continue; + } + prefs.allExtraDbs.push_back(dbdir); + } + } // Get the remembered "active external indexes": prefs.activeExtraDbs = g_dynconf->getStringEntries(actEdbsSk); - // Clean up the list: remove directories which are not - // actually there: useful for removable volumes. - for (auto it = prefs.activeExtraDbs.begin(); + // Clean up the list: remove directories which are not + // actually there: useful for removable volumes. + for (auto it = prefs.activeExtraDbs.begin(); it != prefs.activeExtraDbs.end();) { - bool stripped; - if (!Rcl::Db::testDbDir(*it, &stripped) || - stripped != o_index_stripchars) { - LOGINFO("Not a Xapian index or char stripping differs: [" << + bool stripped; + if (!Rcl::Db::testDbDir(*it, &stripped) || + stripped != o_index_stripchars) { + LOGINFO("Not a Xapian index or char stripping differs: [" << *it << "]\n"); - it = prefs.activeExtraDbs.erase(it); - } else { - it++; - } - } + it = prefs.activeExtraDbs.erase(it); + } else { + it++; + } + } - // Get active db directives from the environment. This can only add to - // the remembered and cleaned up list + // Get active db directives from the environment. This can only add to + // the remembered and cleaned up list const char *cp4Act; if ((cp4Act = getenv("RECOLL_ACTIVE_EXTRA_DBS")) != 0) { vector dbl; @@ -387,9 +388,9 @@ void rwSettings(bool writing) prefs.activeExtraDbs.end(), dbdir) != prefs.activeExtraDbs.end()) continue; - bool strpd; + bool strpd; if (!Rcl::Db::testDbDir(dbdir, &strpd) || - strpd != o_index_stripchars) { + strpd != o_index_stripchars) { LOGERR("Not a Xapian dir or diff. char stripping: [" << (dbdir) << "]\n" ); continue; } @@ -400,33 +401,33 @@ void rwSettings(bool writing) #if 0 { - list::const_iterator it; - fprintf(stderr, "All extra Dbs:\n"); - for (it = prefs.allExtraDbs.begin(); - it != prefs.allExtraDbs.end(); it++) { - fprintf(stderr, " [%s]\n", it->c_str()); - } - fprintf(stderr, "Active extra Dbs:\n"); - for (it = prefs.activeExtraDbs.begin(); - it != prefs.activeExtraDbs.end(); it++) { - fprintf(stderr, " [%s]\n", it->c_str()); - } + list::const_iterator it; + fprintf(stderr, "All extra Dbs:\n"); + for (it = prefs.allExtraDbs.begin(); + it != prefs.allExtraDbs.end(); it++) { + fprintf(stderr, " [%s]\n", it->c_str()); + } + fprintf(stderr, "Active extra Dbs:\n"); + for (it = prefs.activeExtraDbs.begin(); + it != prefs.activeExtraDbs.end(); it++) { + fprintf(stderr, " [%s]\n", it->c_str()); + } } #endif const string asbdSk = "asearchSbd"; if (writing) { - while (prefs.asearchSubdirHist.size() > 20) - prefs.asearchSubdirHist.pop_back(); - g_dynconf->eraseAll(asbdSk); - for (const auto& qdbd : prefs.asearchSubdirHist) { - g_dynconf->enterString(asbdSk, qs2utf8s(qdbd)); - } + while (prefs.asearchSubdirHist.size() > 20) + prefs.asearchSubdirHist.pop_back(); + g_dynconf->eraseAll(asbdSk); + for (const auto& qdbd : prefs.asearchSubdirHist) { + g_dynconf->enterString(asbdSk, qs2utf8s(qdbd)); + } } else { - vector tl = g_dynconf->getStringEntries(asbdSk); - for (const auto& dbd: tl) { - prefs.asearchSubdirHist.push_back(u8s2qs(dbd.c_str())); + vector tl = g_dynconf->getStringEntries(asbdSk); + for (const auto& dbd: tl) { + prefs.asearchSubdirHist.push_back(u8s2qs(dbd.c_str())); } } if (!writing) @@ -437,10 +438,10 @@ string PrefsPack::stemlang() { string stemLang(qs2utf8s(prefs.queryStemLang)); if (stemLang == "ALL") { - if (theconfig) - theconfig->getConfParam("indexstemminglanguages", stemLang); - else - stemLang = ""; + if (theconfig) + theconfig->getConfParam("indexstemminglanguages", stemLang); + else + stemLang = ""; } return stemLang; }