From 23222e752ef7202c3047ad5b671b76078d300548 Mon Sep 17 00:00:00 2001 From: Jean-Francois Dockes Date: Fri, 17 Dec 2010 16:32:41 +0100 Subject: [PATCH] small cleanups in gui modules couplings --- src/qtgui/rclmain_w.cpp | 101 ++++++++-------------------------------- src/qtgui/rclmain_w.h | 12 ++--- src/qtgui/reslist.cpp | 41 ++++++++++++---- src/qtgui/reslist.h | 8 ++-- src/qtgui/ssearch_w.cpp | 28 +++++++++++ src/qtgui/ssearch_w.h | 2 +- 6 files changed, 90 insertions(+), 102 deletions(-) diff --git a/src/qtgui/rclmain_w.cpp b/src/qtgui/rclmain_w.cpp index dfc89c19..63803610 100644 --- a/src/qtgui/rclmain_w.cpp +++ b/src/qtgui/rclmain_w.cpp @@ -108,12 +108,6 @@ void RclMain::init() // Set the focus to the search terms entry: sSearch->queryText->setFocus(); - // Set result list font according to user preferences. - if (prefs.reslistfontfamily.length()) { - QFont nfont(prefs.reslistfontfamily, prefs.reslistfontsize); - resList->setFont(nfont); - } - // Stemming language menu g_stringNoStem = tr("(no stemming)"); g_stringAllStem = tr("(all languages)"); @@ -152,7 +146,6 @@ void RclMain::init() QShortcut *sc = new QShortcut(seq, this); connect(sc, SIGNAL (activated()), this, SLOT (focusToSearch())); - // Toolbar+combobox version of the category selector QComboBox *catgCMB = 0; if (prefs.catgToolBar) { @@ -173,7 +166,6 @@ void RclMain::init() int bgrpid = 0; bgrp->addButton(allRDB, bgrpid++); connect(bgrp, SIGNAL(buttonClicked(int)), this, SLOT(catgFilter(int))); - allRDB->setChecked(true); list cats; rclconfig->getMimeCategories(cats); @@ -195,9 +187,10 @@ void RclMain::init() if (prefs.catgToolBar) catgBGRP->hide(); + // Connections connect(sSearch, SIGNAL(startSearch(RefCntr)), - this, SLOT(startSearch(RefCntr))); + this, SLOT(startSearch(RefCntr))); sSearch->queryText->installEventFilter(this); connect(preferencesMenu, SIGNAL(triggered(QAction*)), @@ -213,22 +206,23 @@ void RclMain::init() connect(nextPageAction, SIGNAL(activated()), resList, SLOT(resPageDownOrNext())); - connect(resList, SIGNAL(docExpand(int)), this, SLOT(docExpand(int))); + connect(resList, SIGNAL(docExpand(Rcl::Doc)), + this, SLOT(docExpand(Rcl::Doc))); connect(resList, SIGNAL(wordSelect(QString)), - this, SLOT(ssearchAddTerm(QString))); + sSearch, SLOT(addTerm(QString))); connect(resList, SIGNAL(nextPageAvailable(bool)), this, SLOT(enableNextPage(bool))); connect(resList, SIGNAL(prevPageAvailable(bool)), this, SLOT(enablePrevPage(bool))); - connect(resList, SIGNAL(docEditClicked(int)), - this, SLOT(startNativeViewer(int))); - connect(resList, SIGNAL(docSaveToFileClicked(int)), - this, SLOT(saveDocToFile(int))); + connect(resList, SIGNAL(docEditClicked(Rcl::Doc)), + this, SLOT(startNativeViewer(Rcl::Doc))); + connect(resList, SIGNAL(docSaveToFileClicked(Rcl::Doc)), + this, SLOT(saveDocToFile(Rcl::Doc))); connect(resList, SIGNAL(editRequested(Rcl::Doc)), this, SLOT(startNativeViewer(Rcl::Doc))); - connect(resList, SIGNAL(docPreviewClicked(int, int)), - this, SLOT(startPreview(int, int))); + connect(resList, SIGNAL(docPreviewClicked(int, Rcl::Doc, int)), + this, SLOT(startPreview(int, Rcl::Doc, int))); connect(resList, SIGNAL(previewRequested(Rcl::Doc)), this, SLOT(startPreview(Rcl::Doc))); @@ -248,8 +242,8 @@ void RclMain::init() this, SLOT(showAdvSearchDialog())); connect(toolsSpellAction, SIGNAL(activated()), this, SLOT(showSpellDialog())); - - connect(indexConfigAction, SIGNAL(activated()), this, SLOT(showIndexConfig())); + connect(indexConfigAction, SIGNAL(activated()), + this, SLOT(showIndexConfig())); connect(queryPrefsAction, SIGNAL(activated()), this, SLOT(showUIPrefs())); connect(extIdxAction, SIGNAL(activated()), this, SLOT(showExtIdxDialog())); if (prefs.catgToolBar && catgCMB) @@ -591,7 +585,7 @@ void RclMain::showSpellDialog() if (spellform == 0) { spellform = new SpellW(0); connect(spellform, SIGNAL(wordSelect(QString)), - this, SLOT(ssearchAddTerm(QString))); + sSearch, SLOT(addTerm(QString))); spellform->show(); } else { // Close and reopen, in hope that makes us visible... @@ -683,15 +677,9 @@ void RclMain::previewClosed(Preview *w) * @param docnum db query index * @param mod keyboards modifiers like ControlButton, ShiftButton */ -void RclMain::startPreview(int docnum, int mod) +void RclMain::startPreview(int docnum, Rcl::Doc doc, int mod) { - Rcl::Doc doc; - if (!resList->getDoc(docnum, doc)) { - QMessageBox::warning(0, "Recoll", tr("Cannot retrieve document info" - " from database")); - return; - } - + LOGDEB(("startPreview(%d, doc, %d)\n", docnum, mod)); if (mod & Qt::ShiftModifier) { // User wants new preview window curPreview = 0; @@ -710,7 +698,7 @@ void RclMain::startPreview(int docnum, int mod) connect(curPreview, SIGNAL(previewClosed(Preview *)), this, SLOT(previewClosed(Preview *))); connect(curPreview, SIGNAL(wordSelect(QString)), - this, SLOT(ssearchAddTerm(QString))); + sSearch, SLOT(addTerm(QString))); connect(curPreview, SIGNAL(showNext(Preview *, int, int)), this, SLOT(previewNextInTab(Preview *, int, int))); connect(curPreview, SIGNAL(showPrev(Preview *, int, int)), @@ -741,7 +729,7 @@ void RclMain::startPreview(Rcl::Doc doc) return; } connect(preview, SIGNAL(wordSelect(QString)), - this, SLOT(ssearchAddTerm(QString))); + sSearch, SLOT(addTerm(QString))); preview->show(); preview->makeDocCurrent(doc, 0); } @@ -851,43 +839,8 @@ void RclMain::on_actionSortByDateDesc_toggled(bool on) onSortDataChanged(); } -// Add term to simple search. Term comes out of double-click in -// reslist or preview. -// It would probably be better to cleanup in preview.ui.h and -// reslist.cpp and do the proper html stuff in the latter case -// (which is different because it format is explicit richtext -// instead of auto as for preview, needed because it's built by -// fragments?). -static const char* punct = " \t()<>\"'[]{}!^*.,:;\n\r"; -void RclMain::ssearchAddTerm(QString term) +void RclMain::saveDocToFile(Rcl::Doc doc) { - LOGDEB(("RclMain::ssearchAddTerm: [%s]\n", (const char *)term.toUtf8())); - string t = (const char *)term.toUtf8(); - string::size_type pos = t.find_last_not_of(punct); - if (pos == string::npos) - return; - t = t.substr(0, pos+1); - pos = t.find_first_not_of(punct); - if (pos != string::npos) - t = t.substr(pos); - if (t.empty()) - return; - term = QString::fromUtf8(t.c_str()); - - QString text = sSearch->queryText->currentText(); - text += QString::fromLatin1(" ") + term; - sSearch->queryText->setEditText(text); -} - -void RclMain::saveDocToFile(int docnum) -{ - Rcl::Doc doc; - if (!resList->getDoc(docnum, doc)) { - QMessageBox::warning(0, "Recoll", - tr("Cannot retrieve document info" - " from database")); - return; - } QString s = QFileDialog::getSaveFileName(this, //parent tr("Save file"), // caption @@ -926,17 +879,6 @@ static bool lookForHtmlBrowser(string &exefile) return false; } -void RclMain::startNativeViewer(int docnum) -{ - Rcl::Doc doc; - if (!resList->getDoc(docnum, doc)) { - QMessageBox::warning(0, "Recoll", tr("Cannot retrieve document info" - " from database")); - return; - } - startNativeViewer(doc); -} - // Convert to file path if url is like file:// static string fileurltolocalpath(string url) { @@ -1171,13 +1113,10 @@ void RclMain::startManual(const string& index) // Search for document 'like' the selected one. We ask rcldb/xapian to find // significant terms, and add them to the simple search entry. -void RclMain::docExpand(int docnum) +void RclMain::docExpand(Rcl::Doc doc) { if (!rcldb) return; - Rcl::Doc doc; - if (!resList->getDoc(docnum, doc)) - return; list terms; terms = resList->expand(doc); if (terms.empty()) diff --git a/src/qtgui/rclmain_w.h b/src/qtgui/rclmain_w.h index b6e2ad24..f2e818cf 100644 --- a/src/qtgui/rclmain_w.h +++ b/src/qtgui/rclmain_w.h @@ -75,13 +75,11 @@ public slots: virtual void setUIPrefs(); virtual void enableNextPage(bool); virtual void enablePrevPage(bool); - virtual void docExpand(int); - virtual void ssearchAddTerm(QString); - virtual void startPreview(int docnum, int); - virtual void startPreview(Rcl::Doc doc); - virtual void startNativeViewer(int docnum); - virtual void startNativeViewer(Rcl::Doc doc); - virtual void saveDocToFile(int docnum); + virtual void docExpand(Rcl::Doc); + virtual void startPreview(int doc, Rcl::Doc doc, int keymods); + virtual void startPreview(Rcl::Doc); + virtual void startNativeViewer(Rcl::Doc); + virtual void saveDocToFile(Rcl::Doc); virtual void previewNextInTab(Preview *, int sid, int docnum); virtual void previewPrevInTab(Preview *, int sid, int docnum); virtual void previewExposed(Preview *, int sid, int docnum); diff --git a/src/qtgui/reslist.cpp b/src/qtgui/reslist.cpp index 9b130344..08f45f64 100644 --- a/src/qtgui/reslist.cpp +++ b/src/qtgui/reslist.cpp @@ -233,6 +233,10 @@ ResList::ResList(QWidget* parent, const char* name) m_listId = 0; m_pager = new QtGuiResListPager(this, prefs.respagesize); m_pager->setHighLighter(&g_hiliter); + if (prefs.reslistfontfamily.length()) { + QFont nfont(prefs.reslistfontfamily, prefs.reslistfontsize); + setFont(nfont); + } } ResList::~ResList() @@ -625,6 +629,7 @@ void ResList::linkWasClicked(const QUrl &url) QString s = url.toString(); const char *ascurl = s.toAscii(); LOGDEB(("ResList::linkWasClicked: [%s]\n", ascurl)); + int i = atoi(ascurl+1) - 1; int what = ascurl[0]; switch (what) { @@ -632,18 +637,28 @@ void ResList::linkWasClicked(const QUrl &url) emit headerClicked(); break; case 'P': - emit docPreviewClicked(i, m_lstClckMod); - break; case 'E': - emit docEditClicked(i); - break; + { + Rcl::Doc doc; + if (!getDoc(i, doc)) { + LOGERR(("ResList::linkWasClicked: can't get doc for %d\n", i)); + return; + } + if (what == 'P') + emit docPreviewClicked(i, doc, m_lstClckMod); + else + emit docEditClicked(doc); + } + break; case 'n': resultPageNext(); break; case 'p': resultPageBack(); break; - default: break;// ?? + default: + LOGERR(("ResList::linkWasClicked: bad link [%s]\n", ascurl)); + break;// ?? } } @@ -677,11 +692,15 @@ void ResList::createPopupMenu(const QPoint& pos) void ResList::menuPreview() { - emit docPreviewClicked(m_popDoc, 0); + Rcl::Doc doc; + if (getDoc(m_popDoc, doc)) + emit docPreviewClicked(m_popDoc, doc, 0); } void ResList::menuSaveToFile() { - emit docSaveToFileClicked(m_popDoc); + Rcl::Doc doc; + if (getDoc(m_popDoc, doc)) + emit docSaveToFileClicked(doc); } void ResList::menuPreviewParent() @@ -720,7 +739,9 @@ void ResList::menuOpenParent() void ResList::menuEdit() { - emit docEditClicked(m_popDoc); + Rcl::Doc doc; + if (getDoc(m_popDoc, doc)) + emit docEditClicked(doc); } void ResList::menuCopyFN() { @@ -755,7 +776,9 @@ void ResList::menuCopyURL() void ResList::menuExpand() { - emit docExpand(m_popDoc); + Rcl::Doc doc; + if (getDoc(m_popDoc, doc)) + emit docExpand(doc); } QString ResList::getDescription() diff --git a/src/qtgui/reslist.h b/src/qtgui/reslist.h index af025513..ec6e4863 100644 --- a/src/qtgui/reslist.h +++ b/src/qtgui/reslist.h @@ -82,13 +82,13 @@ class ResList : public QTextBrowser signals: void nextPageAvailable(bool); void prevPageAvailable(bool); - void docEditClicked(int); - void docPreviewClicked(int, int); - void docSaveToFileClicked(int); + void docEditClicked(Rcl::Doc); + void docPreviewClicked(int, Rcl::Doc, int); + void docSaveToFileClicked(Rcl::Doc); void previewRequested(Rcl::Doc); void editRequested(Rcl::Doc); void headerClicked(); - void docExpand(int); + void docExpand(Rcl::Doc); void wordSelect(QString); void linkClicked(const QString&, int); // See emitLinkClicked() void hasResults(int); diff --git a/src/qtgui/ssearch_w.cpp b/src/qtgui/ssearch_w.cpp index bb77289d..f98dfa06 100644 --- a/src/qtgui/ssearch_w.cpp +++ b/src/qtgui/ssearch_w.cpp @@ -216,6 +216,34 @@ bool SSearch::hasSearchString() return !queryText->lineEdit()->text().isEmpty(); } +// Add term to simple search. Term comes out of double-click in +// reslist or preview. +// It would probably be better to cleanup in preview.ui.h and +// reslist.cpp and do the proper html stuff in the latter case +// (which is different because it format is explicit richtext +// instead of auto as for preview, needed because it's built by +// fragments?). +static const char* punct = " \t()<>\"'[]{}!^*.,:;\n\r"; +void SSearch::addTerm(QString term) +{ + LOGDEB(("SSearch::AddTerm: [%s]\n", (const char *)term.toUtf8())); + string t = (const char *)term.toUtf8(); + string::size_type pos = t.find_last_not_of(punct); + if (pos == string::npos) + return; + t = t.substr(0, pos+1); + pos = t.find_first_not_of(punct); + if (pos != string::npos) + t = t.substr(pos); + if (t.empty()) + return; + term = QString::fromUtf8(t.c_str()); + + QString text = queryText->currentText(); + text += QString::fromLatin1(" ") + term; + queryText->setEditText(text); +} + void SSearch::setAnyTermMode() { searchTypCMB->setCurrentIndex(SST_ANY); diff --git a/src/qtgui/ssearch_w.h b/src/qtgui/ssearch_w.h index 67b2a73e..099bfae5 100644 --- a/src/qtgui/ssearch_w.h +++ b/src/qtgui/ssearch_w.h @@ -46,12 +46,12 @@ public: virtual void completion(); virtual bool eventFilter(QObject *target, QEvent *event); virtual bool hasSearchString(); - public slots: virtual void searchTextChanged(const QString & text); virtual void searchTypeChanged(int); virtual void setSearchString(const QString& text); virtual void startSimpleSearch(); + virtual void addTerm(QString); signals: void startSearch(RefCntr);