Parent: [23222e] (diff)

Child: [7d06dc] (diff)

Download this file

reslist.h    132 lines (112 with data), 4.5 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#ifndef _RESLIST_H_INCLUDED_
#define _RESLIST_H_INCLUDED_
/* @(#$Id: reslist.h,v 1.17 2008-12-16 14:20:10 dockes Exp $ (C) 2005 J.F.Dockes */
#include <list>
#ifndef NO_NAMESPACES
using std::list;
#endif
#include <qtextbrowser.h>
#include <QTextCursor>
#include "docseq.h"
#include "sortseq.h"
#include "filtseq.h"
#include "refcntr.h"
#include "rcldoc.h"
#include "reslistpager.h"
class ResList;
class QtGuiResListPager;
class QMenu;
/**
* Display a list of document records. The data can be out of the history
* manager or from an index query, both abstracted as a DocSequence.
* Sorting and filtering are applied by stacking Sort/Filter DocSequences.
* This is nice because history and index result are handled the same, but
* not nice because we can't use the sort/filter capabilities in the index
* engine, and do it instead on the index output, which duplicates code and
* may be sometimes slower.
*/
class ResList : public QTextBrowser
{
Q_OBJECT;
friend class QtGuiResListPager;
public:
ResList(QWidget* parent = 0, const char* name = 0);
virtual ~ResList();
// Return document for given docnum. We act as an intermediary to
// the docseq here. This has also the side-effect of making the
// entry current (visible and highlighted), and only work if the
// num is inside the current page or its immediate neighbours.
bool getDoc(int docnum, Rcl::Doc &);
QString getDescription(); // Printable actual query performed on db
int getResCnt(); // Return total result list size
void setDocSource(RefCntr<DocSequence> nsource);
bool displayingHistory();
bool getTerms(vector<string>& terms,
vector<vector<string> >& groups, vector<int>& gslks);
list<string> expand(Rcl::Doc& doc);
int listId() const {return m_listId;}
public slots:
virtual void resetList(); // Erase current list
virtual void resPageUpOrBack(); // Page up pressed
virtual void resPageDownOrNext(); // Page down pressed
virtual void resultPageBack(); // Previous page of results
virtual void resultPageFirst(); // First page of results
virtual void resultPageNext(); // Next (or first) page of results
virtual void displayPage(); // Display current page
virtual void menuPreview();
virtual void menuSaveToFile();
virtual void menuEdit();
virtual void menuCopyFN();
virtual void menuCopyURL();
virtual void menuExpand();
virtual void menuPreviewParent();
virtual void menuOpenParent();
virtual void previewExposed(int);
virtual void append(const QString &text);
virtual void readDocSource();
virtual void setSortParams(DocSeqSortSpec spec);
virtual void setFilterParams(const DocSeqFiltSpec &spec);
virtual void highlighted(const QString& link);
virtual void createPopupMenu(const QPoint& pos);
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);
void editRequested(Rcl::Doc);
void headerClicked();
void docExpand(Rcl::Doc);
void wordSelect(QString);
void linkClicked(const QString&, int); // See emitLinkClicked()
void hasResults(int);
protected:
void keyPressEvent(QKeyEvent *e);
void mouseReleaseEvent(QMouseEvent *e);
void mouseDoubleClickEvent(QMouseEvent*);
protected slots:
virtual void languageChange();
virtual void linkWasClicked(const QUrl &);
virtual void showQueryDetails();
private:
QtGuiResListPager *m_pager;
RefCntr<DocSequence> m_source;
std::vector<Rcl::Doc> m_curDocs; // Docs for current page
// Translate from textedit paragraph number to relative
// docnum. Built while we insert text into the qtextedit
std::map<int,int> m_pageParaToReldocnums;
int m_popDoc; // Docnum for the popup menu.
int m_curPvDoc;// Docnum for current preview
int m_lstClckMod; // Last click modifier.
list<int> m_selDocs;
int m_listId; // query Id for matching with preview windows
virtual int docnumfromparnum(int);
virtual pair<int,int> parnumfromdocnum(int);
// Don't know why this is necessary but it is
void emitLinkClicked(const QString &s) {
emit linkClicked(s, m_lstClckMod);
};
static int newListId();
};
#endif /* _RESLIST_H_INCLUDED_ */