implement right click menu in result list
This commit is contained in:
parent
a1d0bbf0ff
commit
3939377085
@ -1,5 +1,5 @@
|
|||||||
#ifndef lint
|
#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
|
#endif
|
||||||
|
|
||||||
#include <time.h>
|
#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 <qtimer.h>
|
||||||
#include <qmessagebox.h>
|
#include <qmessagebox.h>
|
||||||
#include <qimage.h>
|
#include <qimage.h>
|
||||||
|
#include <qclipboard.h>
|
||||||
|
|
||||||
#include "debuglog.h"
|
#include "debuglog.h"
|
||||||
#include "recoll.h"
|
#include "recoll.h"
|
||||||
@ -71,6 +72,21 @@ void RclResList::setDocSource(DocSequence *docsource)
|
|||||||
showResultPage();
|
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)
|
bool RclResList::getDoc(int docnum, Rcl::Doc &doc)
|
||||||
{
|
{
|
||||||
if (docnum >= 0 && docnum >= int(m_winfirst) &&
|
if (docnum >= 0 && docnum >= int(m_winfirst) &&
|
||||||
@ -155,6 +171,7 @@ void RclResList::showResultPage()
|
|||||||
Rcl::Doc doc;
|
Rcl::Doc doc;
|
||||||
|
|
||||||
int resCnt = m_docsource->getResCnt();
|
int resCnt = m_docsource->getResCnt();
|
||||||
|
m_pageParaToReldocnums.clear();
|
||||||
|
|
||||||
LOGDEB(("showResultPage: rescnt %d, winfirst %d\n", resCnt,
|
LOGDEB(("showResultPage: rescnt %d, winfirst %d\n", resCnt,
|
||||||
m_winfirst));
|
m_winfirst));
|
||||||
@ -180,6 +197,7 @@ void RclResList::showResultPage()
|
|||||||
int last = MIN(resCnt-m_winfirst, prefs.respagesize);
|
int last = MIN(resCnt-m_winfirst, prefs.respagesize);
|
||||||
|
|
||||||
m_curDocs.clear();
|
m_curDocs.clear();
|
||||||
|
|
||||||
// Insert results if any in result list window. We have to send
|
// Insert results if any in result list window. We have to send
|
||||||
// the text to the widgets, because we need the paragraph number
|
// the text to the widgets, because we need the paragraph number
|
||||||
// each time we add a result paragraph (its diffult and
|
// each time we add a result paragraph (its diffult and
|
||||||
@ -310,6 +328,7 @@ void RclResList::showResultPage()
|
|||||||
append(str);
|
append(str);
|
||||||
setCursorPosition(0,0);
|
setCursorPosition(0,0);
|
||||||
|
|
||||||
|
m_pageParaToReldocnums[paragraphs()-1] = i;
|
||||||
m_curDocs.push_back(doc);
|
m_curDocs.push_back(doc);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -387,3 +406,33 @@ void RclResList::linkWasClicked(const QString &s)
|
|||||||
default: break;// ??
|
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_
|
#ifndef _RCLRESLIST_H_INCLUDED_
|
||||||
#define _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 <qtextbrowser.h>
|
||||||
|
#include <qpopupmenu.h>
|
||||||
|
|
||||||
#include "rcldb.h"
|
#include "rcldb.h"
|
||||||
#include "docseq.h"
|
#include "docseq.h"
|
||||||
@ -18,6 +19,7 @@ class RclResList : public QTextBrowser
|
|||||||
virtual void resetSearch() {m_winfirst = -1;}
|
virtual void resetSearch() {m_winfirst = -1;}
|
||||||
virtual bool getDoc( int, Rcl::Doc & );
|
virtual bool getDoc( int, Rcl::Doc & );
|
||||||
virtual void setDocSource(DocSequence *);
|
virtual void setDocSource(DocSequence *);
|
||||||
|
virtual QPopupMenu *createPopupMenu(const QPoint& pos);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
virtual void clicked(int, int);
|
virtual void clicked(int, int);
|
||||||
@ -25,6 +27,9 @@ class RclResList : public QTextBrowser
|
|||||||
virtual void resPageDownOrNext();
|
virtual void resPageDownOrNext();
|
||||||
virtual void resultPageBack();
|
virtual void resultPageBack();
|
||||||
virtual void showResultPage();
|
virtual void showResultPage();
|
||||||
|
virtual void menuPreview();
|
||||||
|
virtual void menuEdit();
|
||||||
|
virtual void menuCopyFN();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void nextPageAvailable(bool);
|
void nextPageAvailable(bool);
|
||||||
@ -41,10 +46,13 @@ class RclResList : public QTextBrowser
|
|||||||
virtual void linkWasClicked(const QString &);
|
virtual void linkWasClicked(const QString &);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
std::map<int,int> m_pageParaToReldocnums;
|
||||||
|
virtual int docnumfromparnum(int);
|
||||||
|
|
||||||
DocSequence *m_docsource;
|
DocSequence *m_docsource;
|
||||||
std::vector<Rcl::Doc> m_curDocs;
|
std::vector<Rcl::Doc> m_curDocs;
|
||||||
int m_winfirst;
|
int m_winfirst;
|
||||||
|
int m_docnum; // Docnum matching the
|
||||||
void emitLinkClicked(const QString &s) {
|
void emitLinkClicked(const QString &s) {
|
||||||
emit linkClicked(s);
|
emit linkClicked(s);
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user