Parent: [2f6328] (diff)

Child: [9ff88a] (diff)

Download this file

preview_w.h    165 lines (142 with data), 5.3 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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
/* Copyright (C) 2006 J.F.Dockes
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the
* Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef _PREVIEW_W_H_INCLUDED_
#define _PREVIEW_W_H_INCLUDED_
#include <stdio.h>
#include <qvariant.h>
#include <qwidget.h>
#include <qtextedit.h>
#include <qimage.h>
#include "rcldb.h"
#include "refcntr.h"
#include "plaintorich.h"
#include "rclmain_w.h"
class QTabWidget;
class QLabel;
class QLineEdit;
class QPushButton;
class QCheckBox;
class Preview;
class PlainToRichQtPreview;
class PreviewTextEdit : public QTextEdit {
Q_OBJECT;
public:
PreviewTextEdit(QWidget* parent, const char* name, Preview *pv);
virtual ~PreviewTextEdit();
void moveToAnchor(const QString& name);
enum DspType {PTE_DSPTXT, PTE_DSPFLDS, PTE_DSPIMG};
public slots:
virtual void displayFields();
virtual void displayText();
virtual void displayImage();
virtual void print();
virtual void createPopupMenu(const QPoint& pos);
friend class Preview;
protected:
void mouseDoubleClickEvent(QMouseEvent *);
private:
PlainToRichQtPreview *m_plaintorich;
Preview *m_preview;
bool m_dspflds;
string m_url; // filename for this tab
string m_ipath; // Internal doc path inside file
int m_docnum; // Index of doc in db search results.
// doc out of internfile (previous fields come from the index) with
// main text erased (for space).
Rcl::Doc m_fdoc;
// The input doc out of the index/query list
Rcl::Doc m_dbdoc;
// Saved rich (or plain actually) text: the textedit seems to
// sometimes (but not always) return its text stripped of tags, so
// this is needed (for printing for example)
QString m_richtxt;
Qt::TextFormat m_format;
// Temporary file name (possibly, if displaying image). The
// TempFile itself is kept inside main.cpp (because that's where
// signal cleanup happens), but we use its name to ask for release
// when the tab is closed.
string m_tmpfilename;
QImage m_image;
DspType m_curdsp;
};
class Preview : public QWidget {
Q_OBJECT
public:
Preview(int sid, // Search Id
const HiliteData& hdata) // Search terms etc. for highlighting
: QWidget(0), m_searchId(sid), m_hData(hdata)
{
init();
}
~Preview(){}
virtual void closeEvent(QCloseEvent *e );
virtual bool eventFilter(QObject *target, QEvent *event );
/**
* Arrange for the document to be displayed either by exposing the tab
* if already loaded, or by creating a new tab and loading it.
* @para docnum is used to link back to the result list (to highlight
* paragraph when tab exposed etc.
*/
virtual bool makeDocCurrent(const Rcl::Doc& idoc, int docnum,
bool sametab = false);
void emitWordSelect(QString);
friend class PreviewTextEdit;
public slots:
virtual void searchTextLine_textChanged(const QString& text);
virtual void doSearch(const QString& str, bool next, bool reverse,
bool wo = false);
virtual void nextPressed();
virtual void prevPressed();
virtual void currentChanged(QWidget *tw);
virtual void closeCurrentTab();
virtual void emitSaveDocToFile();
signals:
void previewClosed(Preview *);
void wordSelect(QString);
void showNext(Preview *w, int sid, int docnum);
void showPrev(Preview *w, int sid, int docnum);
void previewExposed(Preview *w, int sid, int docnum);
void printCurrentPreviewRequest();
void saveDocToFile(Rcl::Doc);
private:
// Identifier of search in main window. This is used to check that
// we make sense when requesting the next document when browsing
// successive search results in a tab.
int m_searchId;
bool m_dynSearchActive;
bool m_canBeep;
bool m_loading;
QWidget *m_currentW;
HiliteData m_hData;
bool m_justCreated; // First tab create is different
bool m_haveAnchors; // Search terms are marked in text
int m_lastAnchor; // Number of last anchor. Then rewind to 1
int m_curAnchor;
QTabWidget* pvTab;
QLabel* searchLabel;
QLineEdit* searchTextLine;
QPushButton* nextButton;
QPushButton* prevButton;
QPushButton* clearPB;
QCheckBox* matchCheck;
void init();
virtual void setCurTabProps(const Rcl::Doc& doc, int docnum);
virtual PreviewTextEdit *currentEditor();
virtual PreviewTextEdit *addEditorTab();
virtual bool loadDocInCurrentTab(const Rcl::Doc& idoc, int dnm);
};
#endif /* _PREVIEW_W_H_INCLUDED_ */