From ceef5aebd09b2c2acaff905b62d33db2deafed06 Mon Sep 17 00:00:00 2001 From: Jean-Francois Dockes Date: Sat, 27 Apr 2013 16:08:22 +0200 Subject: [PATCH] use restable instead of reslist for "show subdocs" --- src/qtgui/rclmain_w.cpp | 20 +++++------ src/qtgui/recoll.pro.in | 2 ++ src/qtgui/reslist.cpp | 47 +++++++++++++------------ src/qtgui/reslist.h | 14 ++------ src/qtgui/respopup.cpp | 4 +-- src/qtgui/respopup.h | 2 +- src/qtgui/restable.cpp | 78 +++++++++++++++++++++++++++-------------- src/qtgui/restable.h | 9 +++-- 8 files changed, 102 insertions(+), 74 deletions(-) diff --git a/src/qtgui/rclmain_w.cpp b/src/qtgui/rclmain_w.cpp index d540eee9..7dbec06d 100644 --- a/src/qtgui/rclmain_w.cpp +++ b/src/qtgui/rclmain_w.cpp @@ -279,6 +279,8 @@ void RclMain::init() reslist, SLOT(showQueryDetails())); connect(periodictimer, SIGNAL(timeout()), this, SLOT(periodic100())); + + restable->setRclMain(this, true); connect(this, SIGNAL(docSourceChanged(RefCntr)), restable, SLOT(setDocSource(RefCntr))); connect(this, SIGNAL(searchReset()), @@ -290,8 +292,7 @@ void RclMain::init() connect(restable->getModel(), SIGNAL(sortDataChanged(DocSeqSortSpec)), this, SLOT(onSortDataChanged(DocSeqSortSpec))); - connect(restable, SIGNAL(docEditClicked(Rcl::Doc)), - this, SLOT(startNativeViewer(Rcl::Doc))); + connect(restable, SIGNAL(docPreviewClicked(int, Rcl::Doc, int)), this, SLOT(startPreview(int, Rcl::Doc, int))); connect(restable, SIGNAL(docExpand(Rcl::Doc)), @@ -305,7 +306,7 @@ void RclMain::init() connect(restable, SIGNAL(docSaveToFileClicked(Rcl::Doc)), this, SLOT(saveDocToFile(Rcl::Doc))); - reslist->setRclMain(this); + reslist->setRclMain(this, true); connect(this, SIGNAL(docSourceChanged(RefCntr)), reslist, SLOT(setDocSource(RefCntr))); connect(firstPageAction, SIGNAL(activated()), @@ -321,8 +322,6 @@ void RclMain::init() connect(reslist, SIGNAL(hasResults(int)), this, SLOT(resultCount(int))); - connect(reslist, SIGNAL(docExpand(Rcl::Doc)), - this, SLOT(docExpand(Rcl::Doc))); connect(reslist, SIGNAL(wordSelect(QString)), sSearch, SLOT(addTerm(QString))); connect(reslist, SIGNAL(wordReplace(const QString&, const QString&)), @@ -331,8 +330,9 @@ void RclMain::init() this, SLOT(enableNextPage(bool))); connect(reslist, SIGNAL(prevPageAvailable(bool)), this, SLOT(enablePrevPage(bool))); - connect(reslist, SIGNAL(docEditClicked(Rcl::Doc)), - this, SLOT(startNativeViewer(Rcl::Doc))); + + connect(reslist, SIGNAL(docExpand(Rcl::Doc)), + this, SLOT(docExpand(Rcl::Doc))); connect(reslist, SIGNAL(showSnippets(Rcl::Doc)), this, SLOT(showSnippets(Rcl::Doc))); connect(reslist, SIGNAL(showSubDocs(Rcl::Doc)), @@ -1579,9 +1579,9 @@ void RclMain::showSubDocs(Rcl::Doc doc) RefCntr source(new DocSource(theconfig, RefCntr(src))); - ResList *res = new ResList(); - res->setRclMain(this); - res->setIsMainList(0); + ResTable *res = new ResTable(); +// ResList *res = new ResList(); + res->setRclMain(this, false); res->setDocSource(source); res->readDocSource(); res->show(); diff --git a/src/qtgui/recoll.pro.in b/src/qtgui/recoll.pro.in index 9ed4573d..f12edb88 100644 --- a/src/qtgui/recoll.pro.in +++ b/src/qtgui/recoll.pro.in @@ -43,6 +43,7 @@ SOURCES += \ crontool.cpp \ guiutils.cpp \ main.cpp \ + multisave.cpp \ preview_w.cpp \ ptrans_w.cpp \ rclhelp.cpp \ @@ -67,6 +68,7 @@ FORMS = \ firstidx.ui \ idxsched.ui \ listdialog.ui \ + multisave.ui \ ptrans.ui \ rclmain.ui \ restable.ui \ diff --git a/src/qtgui/reslist.cpp b/src/qtgui/reslist.cpp index 3ba01100..a043d83e 100644 --- a/src/qtgui/reslist.cpp +++ b/src/qtgui/reslist.cpp @@ -277,7 +277,7 @@ static PlainToRichQtReslist g_hiliter; ResList::ResList(QWidget* parent, const char* name) : RESLIST_PARENTCLASS(parent), m_curPvDoc(-1), m_lstClckMod(0), - m_listId(0), m_rclmain(0), m_ismainlist(true), m_coninit(false) + m_listId(0), m_rclmain(0), m_ismainres(true) { if (!name) setObjectName("resList"); @@ -344,6 +344,24 @@ ResList::~ResList() }; } +void ResList::setRclMain(RclMain *m, bool ismain) +{ + m_rclmain = m; + m_ismainres = ismain; + if (!m_ismainres) { + connect(new QShortcut(closeKeySeq, this), SIGNAL (activated()), + this, SLOT (close())); + connect(new QShortcut(quitKeySeq, this), SIGNAL (activated()), + m_rclmain, SLOT (fileExit())); + connect(this, SIGNAL(previewRequested(Rcl::Doc)), + m_rclmain, SLOT(startPreview(Rcl::Doc))); + connect(this, SIGNAL(docSaveToFileClicked(Rcl::Doc)), + m_rclmain, SLOT(saveDocToFile(Rcl::Doc))); + connect(this, SIGNAL(editRequested(Rcl::Doc)), + m_rclmain, SLOT(startNativeViewer(Rcl::Doc))); + } +} + void ResList::setFont() { #ifdef RESLIST_TEXTBROWSER @@ -379,21 +397,6 @@ void ResList::setDocSource(RefCntr nsource) { LOGDEB(("ResList::setDocSource()\n")); m_source = RefCntr(new DocSource(theconfig, nsource)); - if (!m_ismainlist && !m_coninit) { - m_coninit = true; - connect(new QShortcut(closeKeySeq, this), SIGNAL (activated()), - this, SLOT (close())); - connect(new QShortcut(quitKeySeq, this), SIGNAL (activated()), - m_rclmain, SLOT (fileExit())); - connect(this, SIGNAL(previewRequested(Rcl::Doc)), - m_rclmain, SLOT(startPreview(Rcl::Doc))); - connect(this, SIGNAL(docEditClicked(Rcl::Doc)), - m_rclmain, SLOT(startNativeViewer(Rcl::Doc))); - connect(this, SIGNAL(docSaveToFileClicked(Rcl::Doc)), - m_rclmain, SLOT(saveDocToFile(Rcl::Doc))); - connect(this, SIGNAL(editRequested(Rcl::Doc)), - m_rclmain, SLOT(startNativeViewer(Rcl::Doc))); - } } // A query was executed, or the filtering/sorting parameters changed, @@ -912,13 +915,13 @@ void ResList::linkWasClicked(const QUrl &url) return; } if (what == 'P') { - if (m_ismainlist) { + if (m_ismainres) { emit docPreviewClicked(i, doc, m_lstClckMod); } else { emit previewRequested(doc); } } else { - emit docEditClicked(doc); + emit editRequested(doc); } } break; @@ -979,8 +982,8 @@ void ResList::createPopupMenu(const QPoint& pos) if (!getDoc(m_popDoc, doc)) return; int options = 0; - if (m_ismainlist) - options |= ResultPopup::showExpand; + if (m_ismainres) + options |= ResultPopup::isMain; QMenu *popup = ResultPopup::create(this, options, m_source, doc); popup->popup(mapToGlobal(pos)); } @@ -989,7 +992,7 @@ void ResList::menuPreview() { Rcl::Doc doc; if (getDoc(m_popDoc, doc)) { - if (m_ismainlist) { + if (m_ismainres) { emit docPreviewClicked(m_popDoc, doc, 0); } else { emit previewRequested(doc); @@ -1042,7 +1045,7 @@ void ResList::menuEdit() { Rcl::Doc doc; if (getDoc(m_popDoc, doc)) - emit docEditClicked(doc); + emit editRequested(doc); } void ResList::menuCopyFN() diff --git a/src/qtgui/reslist.h b/src/qtgui/reslist.h index 62008827..5440ca93 100644 --- a/src/qtgui/reslist.h +++ b/src/qtgui/reslist.h @@ -67,14 +67,8 @@ class ResList : public RESLIST_PARENTCLASS int listId() const {return m_listId;} int pageFirstDocNum(); void setFont(); - void setRclMain(RclMain *m) - { - m_rclmain = m; - } - void setIsMainList(bool onoff) - { - m_ismainlist = onoff; - } + void setRclMain(RclMain *m, bool ismain); + public slots: virtual void setDocSource(RefCntr nsource); virtual void resetList(); // Erase current list @@ -104,7 +98,6 @@ class ResList : public RESLIST_PARENTCLASS signals: void nextPageAvailable(bool); void prevPageAvailable(bool); - void docEditClicked(Rcl::Doc); void docPreviewClicked(int, Rcl::Doc, int); void docSaveToFileClicked(Rcl::Doc); void previewRequested(Rcl::Doc); @@ -145,8 +138,7 @@ class ResList : public RESLIST_PARENTCLASS QString m_text; #endif RclMain *m_rclmain; - bool m_ismainlist; - bool m_coninit; + bool m_ismainres; virtual void displayPage(); // Display current page static int newListId(); diff --git a/src/qtgui/respopup.cpp b/src/qtgui/respopup.cpp index 73d0de1a..5dbd9750 100644 --- a/src/qtgui/respopup.cpp +++ b/src/qtgui/respopup.cpp @@ -53,11 +53,11 @@ QMenu *create(QWidget *me, int opts, RefCntr source, Rcl::Doc& doc) if (opts & showExpand) popup->addAction(me->tr("Find &similar documents"), me, SLOT(menuExpand())); - if (doc.haspages && source->snippetsCapable()) + if (doc.haspages && source.isNotNull() && source->snippetsCapable()) popup->addAction(me->tr("Open &Snippets window"), me, SLOT(menuOpenSnippets())); - if (rcldb && rcldb->hasSubDocs(doc)) + if ((opts & showSubs) && rcldb && rcldb->hasSubDocs(doc)) popup->addAction(me->tr("Show subdocuments / attachments"), me, SLOT(menuShowSubDocs())); return popup; diff --git a/src/qtgui/respopup.h b/src/qtgui/respopup.h index 25b1da52..03c3433e 100644 --- a/src/qtgui/respopup.h +++ b/src/qtgui/respopup.h @@ -18,7 +18,7 @@ #define _RESPOPUP_H_INCLUDED_ namespace ResultPopup { - enum Options {showExpand = 0x1}; + enum Options {showExpand = 0x1, showSubs = 0x2, isMain = 0x3}; extern QMenu *create(QWidget *me, int opts, RefCntr source, Rcl::Doc& doc); diff --git a/src/qtgui/restable.cpp b/src/qtgui/restable.cpp index 4a8938e7..73fbefe0 100644 --- a/src/qtgui/restable.cpp +++ b/src/qtgui/restable.cpp @@ -46,6 +46,10 @@ #include "plaintorich.h" #include "indexer.h" #include "respopup.h" +#include "rclmain_w.h" + +static const QKeySequence quitKeySeq("Ctrl+q"); +static const QKeySequence closeKeySeq("Ctrl+w"); // Compensate for the default and somewhat bizarre vertical placement // of text in cells @@ -133,14 +137,14 @@ ResTableDetailArea::ResTableDetailArea(ResTable* parent) void ResTableDetailArea::createPopupMenu(const QPoint& pos) { - if (!m_table || m_table->m_detaildocnum < 0) { - LOGDEB(("ResTableDetailArea::createPopupMenu: no table/detaildoc\n")); - return; + if (m_table && m_table->m_model && m_table->m_detaildocnum >= 0) { + QMenu *popup = + ResultPopup::create(m_table, m_table->m_ismainres ? + ResultPopup::showExpand : 0, + m_table->m_model->getDocSource(), + m_table->m_detaildoc); + popup->popup(mapToGlobal(pos)); } - QMenu *popup = ResultPopup::create(m_table, ResultPopup::showExpand, - m_table->m_model->getDocSource(), - m_table->m_detaildoc); - popup->popup(mapToGlobal(pos)); } ////////////////////////////////////////////////////////////////////////////// @@ -478,7 +482,7 @@ void ResTable::init() tableView->setModel(m_model); tableView->setMouseTracking(true); tableView->setSelectionBehavior(QAbstractItemView::SelectRows); - tableView->setSelectionMode(QAbstractItemView::SingleSelection); + tableView->setSelectionMode(QAbstractItemView::ContiguousSelection); tableView->setItemDelegate(new ResTableDelegate(this)); tableView->setContextMenuPolicy(Qt::CustomContextMenu); connect(tableView, SIGNAL(customContextMenuRequested(const QPoint&)), @@ -512,7 +516,8 @@ void ResTable::init() QShortcut *sc = new QShortcut(seq, this); connect(sc, SIGNAL (activated()), tableView->selectionModel(), SLOT (clear())); - connect(tableView->selectionModel(), SIGNAL(currentChanged(const QModelIndex&, const QModelIndex &)), + connect(tableView->selectionModel(), + SIGNAL(currentChanged(const QModelIndex&, const QModelIndex &)), this, SLOT(onTableView_currentChanged(const QModelIndex&))); m_pager = new ResTablePager(this); @@ -539,6 +544,24 @@ void ResTable::init() splitter->setOrientation(Qt::Vertical); } +void ResTable::setRclMain(RclMain *m, bool ismain) +{ + m_rclmain = m; + m_ismainres = ismain; + if (!m_ismainres) { + connect(new QShortcut(closeKeySeq, this), SIGNAL (activated()), + this, SLOT (close())); + connect(new QShortcut(quitKeySeq, this), SIGNAL (activated()), + m_rclmain, SLOT (fileExit())); + connect(this, SIGNAL(previewRequested(Rcl::Doc)), + m_rclmain, SLOT(startPreview(Rcl::Doc))); + connect(this, SIGNAL(docSaveToFileClicked(Rcl::Doc)), + m_rclmain, SLOT(saveDocToFile(Rcl::Doc))); + connect(this, SIGNAL(editRequested(Rcl::Doc)), + m_rclmain, SLOT(startNativeViewer(Rcl::Doc))); + } +} + int ResTable::getDetailDocNumOrTopRow() { if (m_detaildocnum >= 0) @@ -560,6 +583,8 @@ void ResTable::makeRowVisible(int row) // This is called by rclmain_w prior to exiting void ResTable::saveColState() { + if (!m_ismainres) + return; QSettings settings; settings.setValue("resTableSplitterSizes", splitter->saveState()); @@ -718,7 +743,7 @@ void ResTable::linkWasClicked(const QUrl &url) if (what == 'P') emit docPreviewClicked(i, m_detaildoc, 0); else - emit docEditClicked(m_detaildoc); + emit editRequested(m_detaildoc); } break; default: @@ -730,19 +755,23 @@ void ResTable::linkWasClicked(const QUrl &url) void ResTable::createPopupMenu(const QPoint& pos) { LOGDEB(("ResTable::createPopupMenu: m_detaildocnum %d\n", m_detaildocnum)); - if (m_detaildocnum < 0) - return; - QMenu *popup = ResultPopup::create(this, ResultPopup::showExpand, - m_model->getDocSource(), - m_detaildoc); - popup->popup(mapToGlobal(pos)); + if (m_detaildocnum >= 0 && m_model) { + QMenu *popup = + ResultPopup::create(this, m_ismainres? ResultPopup::isMain : 0, + m_model->getDocSource(), m_detaildoc); + popup->popup(mapToGlobal(pos)); + } } void ResTable::menuPreview() { - if (m_detaildocnum < 0) - return; - emit docPreviewClicked(m_detaildocnum, m_detaildoc, 0); + if (m_detaildocnum >= 0) { + if (m_ismainres) { + emit docPreviewClicked(m_detaildocnum, m_detaildoc, 0); + } else { + emit previewRequested(m_detaildoc); + } + } } void ResTable::menuSaveToFile() @@ -775,7 +804,7 @@ void ResTable::menuOpenParent() void ResTable::menuEdit() { if (m_detaildocnum >= 0) - emit docEditClicked(m_detaildoc); + emit editRequested(m_detaildoc); } void ResTable::menuCopyFN() @@ -850,10 +879,7 @@ void ResTable::addColumn() if (!m_model) return; QAction *action = (QAction *)sender(); - LOGDEB(("addColumn: text %s, data %s\n", - (const char *)action->text().toUtf8(), - (const char *)action->data().toString().toUtf8() - )); - string field((const char *)action->data().toString().toUtf8()); - m_model->addColumn(m_popcolumn, field); + LOGDEB(("addColumn: text %s, data %s\n", qs2utf8s(action->text()).c_str(), + qs2utf8s(action->data().toString()).c_str())); + m_model->addColumn(m_popcolumn, qs2utf8s(action->data().toString())); } diff --git a/src/qtgui/restable.h b/src/qtgui/restable.h index 631760df..7aa11b0f 100644 --- a/src/qtgui/restable.h +++ b/src/qtgui/restable.h @@ -100,6 +100,7 @@ private: class ResTablePager; class QUrl; +class RclMain; class ResTable : public QWidget, public Ui::ResTable { @@ -108,7 +109,8 @@ class ResTable : public QWidget, public Ui::ResTable public: ResTable(QWidget* parent = 0) : QWidget(parent), - m_model(0), m_pager(0), m_detail(0), m_detaildocnum(-1) + m_model(0), m_pager(0), m_detail(0), m_detaildocnum(-1), + m_rclmain(0), m_ismainres(true) { setupUi(this); init(); @@ -119,6 +121,8 @@ public: virtual ResTableDetailArea* getDetailArea() {return m_detail;} virtual int getDetailDocNumOrTopRow(); + void setRclMain(RclMain *m, bool ismain); + public slots: virtual void onTableView_currentChanged(const QModelIndex&); virtual void on_tableView_entered(const QModelIndex& index); @@ -147,7 +151,6 @@ public slots: signals: void docPreviewClicked(int, Rcl::Doc, int); - void docEditClicked(Rcl::Doc); void docSaveToFileClicked(Rcl::Doc); void previewRequested(Rcl::Doc); void editRequested(Rcl::Doc); @@ -165,6 +168,8 @@ private: int m_detaildocnum; Rcl::Doc m_detaildoc; int m_popcolumn; + RclMain *m_rclmain; + bool m_ismainres; };