implement right click menu in result list
This commit is contained in:
parent
a1d0bbf0ff
commit
3939377085
@ -1,5 +1,5 @@
|
||||
#ifndef lint
|
||||
static char rcsid[] = "@(#$Id: rclreslist.cpp,v 1.3 2006-03-21 13:46:37 dockes Exp $ (C) 2005 J.F.Dockes";
|
||||
static char rcsid[] = "@(#$Id: rclreslist.cpp,v 1.4 2006-03-21 15:11:30 dockes Exp $ (C) 2005 J.F.Dockes";
|
||||
#endif
|
||||
|
||||
#include <time.h>
|
||||
@ -12,6 +12,7 @@ static char rcsid[] = "@(#$Id: rclreslist.cpp,v 1.3 2006-03-21 13:46:37 dockes E
|
||||
#include <qtimer.h>
|
||||
#include <qmessagebox.h>
|
||||
#include <qimage.h>
|
||||
#include <qclipboard.h>
|
||||
|
||||
#include "debuglog.h"
|
||||
#include "recoll.h"
|
||||
@ -71,6 +72,21 @@ void RclResList::setDocSource(DocSequence *docsource)
|
||||
showResultPage();
|
||||
}
|
||||
|
||||
// Get document number from paragraph number
|
||||
int RclResList::docnumfromparnum(int par)
|
||||
{
|
||||
if (m_winfirst == -1)
|
||||
return -1;
|
||||
std::map<int,int>::iterator it = m_pageParaToReldocnums.find(par);
|
||||
int dn;
|
||||
if (it != m_pageParaToReldocnums.end()) {
|
||||
dn = m_winfirst + it->second;
|
||||
} else {
|
||||
dn = -1;
|
||||
}
|
||||
return dn;
|
||||
}
|
||||
|
||||
bool RclResList::getDoc(int docnum, Rcl::Doc &doc)
|
||||
{
|
||||
if (docnum >= 0 && docnum >= int(m_winfirst) &&
|
||||
@ -155,6 +171,7 @@ void RclResList::showResultPage()
|
||||
Rcl::Doc doc;
|
||||
|
||||
int resCnt = m_docsource->getResCnt();
|
||||
m_pageParaToReldocnums.clear();
|
||||
|
||||
LOGDEB(("showResultPage: rescnt %d, winfirst %d\n", resCnt,
|
||||
m_winfirst));
|
||||
@ -180,6 +197,7 @@ void RclResList::showResultPage()
|
||||
int last = MIN(resCnt-m_winfirst, prefs.respagesize);
|
||||
|
||||
m_curDocs.clear();
|
||||
|
||||
// Insert results if any in result list window. We have to send
|
||||
// the text to the widgets, because we need the paragraph number
|
||||
// each time we add a result paragraph (its diffult and
|
||||
@ -310,6 +328,7 @@ void RclResList::showResultPage()
|
||||
append(str);
|
||||
setCursorPosition(0,0);
|
||||
|
||||
m_pageParaToReldocnums[paragraphs()-1] = i;
|
||||
m_curDocs.push_back(doc);
|
||||
}
|
||||
|
||||
@ -387,3 +406,33 @@ void RclResList::linkWasClicked(const QString &s)
|
||||
default: break;// ??
|
||||
}
|
||||
}
|
||||
|
||||
QPopupMenu *RclResList::createPopupMenu(const QPoint& pos)
|
||||
{
|
||||
int para = paragraphAt(pos);
|
||||
clicked(para, 0);
|
||||
m_docnum = docnumfromparnum(para);
|
||||
QPopupMenu *popup = new QPopupMenu(this, "qt_edit_menu");
|
||||
popup->insertItem(tr("&Preview"), this, SLOT(menuPreview()));
|
||||
popup->insertItem(tr("&Edit"), this, SLOT(menuEdit()));
|
||||
popup->insertItem(tr("&Copy File Name"), this, SLOT(menuCopyFN()));
|
||||
return popup;
|
||||
}
|
||||
|
||||
void RclResList::menuPreview()
|
||||
{
|
||||
emit docClicked(m_docnum);
|
||||
}
|
||||
void RclResList::menuEdit()
|
||||
{
|
||||
emit docDoubleClicked(m_docnum);
|
||||
}
|
||||
void RclResList::menuCopyFN()
|
||||
{
|
||||
Rcl::Doc doc;
|
||||
if (getDoc(m_docnum, doc)) {
|
||||
// Our urls currently always begin with "file://"
|
||||
QApplication::clipboard()->setText(doc.url.c_str()+7,
|
||||
QClipboard::Selection);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,8 +1,9 @@
|
||||
#ifndef _RCLRESLIST_H_INCLUDED_
|
||||
#define _RCLRESLIST_H_INCLUDED_
|
||||
/* @(#$Id: rclreslist.h,v 1.2 2006-03-21 13:46:37 dockes Exp $ (C) 2005 J.F.Dockes */
|
||||
/* @(#$Id: rclreslist.h,v 1.3 2006-03-21 15:11:30 dockes Exp $ (C) 2005 J.F.Dockes */
|
||||
|
||||
#include <qtextbrowser.h>
|
||||
#include <qpopupmenu.h>
|
||||
|
||||
#include "rcldb.h"
|
||||
#include "docseq.h"
|
||||
@ -18,6 +19,7 @@ class RclResList : public QTextBrowser
|
||||
virtual void resetSearch() {m_winfirst = -1;}
|
||||
virtual bool getDoc( int, Rcl::Doc & );
|
||||
virtual void setDocSource(DocSequence *);
|
||||
virtual QPopupMenu *createPopupMenu(const QPoint& pos);
|
||||
|
||||
public slots:
|
||||
virtual void clicked(int, int);
|
||||
@ -25,6 +27,9 @@ class RclResList : public QTextBrowser
|
||||
virtual void resPageDownOrNext();
|
||||
virtual void resultPageBack();
|
||||
virtual void showResultPage();
|
||||
virtual void menuPreview();
|
||||
virtual void menuEdit();
|
||||
virtual void menuCopyFN();
|
||||
|
||||
signals:
|
||||
void nextPageAvailable(bool);
|
||||
@ -41,10 +46,13 @@ class RclResList : public QTextBrowser
|
||||
virtual void linkWasClicked(const QString &);
|
||||
|
||||
private:
|
||||
std::map<int,int> m_pageParaToReldocnums;
|
||||
virtual int docnumfromparnum(int);
|
||||
|
||||
DocSequence *m_docsource;
|
||||
std::vector<Rcl::Doc> m_curDocs;
|
||||
int m_winfirst;
|
||||
|
||||
int m_docnum; // Docnum matching the
|
||||
void emitLinkClicked(const QString &s) {
|
||||
emit linkClicked(s);
|
||||
};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user