1
/***************************************************************************
4
copyright : (C) 2009 + by Csaba Karai
5
e-mail : krusader@users.sourceforge.net
6
web site : http://krusader.sourceforge.net
7
---------------------------------------------------------------------------
9
***************************************************************************
13
db dD d8888b. db db .d8888. .d8b. d8888b. d88888b d8888b.
14
88 ,8P' 88 `8D 88 88 88' YP d8' `8b 88 `8D 88' 88 `8D
15
88,8P 88oobY' 88 88 `8bo. 88ooo88 88 88 88ooooo 88oobY'
16
88`8b 88`8b 88 88 `Y8b. 88~~~88 88 88 88~~~~~ 88`8b
17
88 `88. 88 `88. 88b d88 db 8D 88 88 88 .8D 88. 88 `88.
18
YP YD 88 YD ~Y8888P' `8888Y' YP YP Y8888D' Y88888P 88 YD
22
***************************************************************************
24
* This program is free software; you can redistribute it and/or modify *
25
* it under the terms of the GNU General Public License as published by *
26
* the Free Software Foundation; either version 2 of the License, or *
27
* (at your option) any later version. *
29
***************************************************************************/
34
#include <QtCore/QList>
35
#include <QtCore/QTimer>
36
#include <QtGui/QColor>
37
#include <QtGui/QWidget>
40
#include <KParts/BrowserExtension>
41
#include <KParts/Part>
44
#include "../VFS/krquery.h"
46
#define SLIDER_MAX 10000
47
#define MAX_CHAR_LENGTH 4
56
class ListerEncodingMenu;
58
class ListerTextArea : public KTextEdit
63
ListerTextArea(Lister *lister, QWidget *parent);
65
void calculateText(bool forcedUpdate = false);
66
void redrawTextArea(bool forcedUpdate = false);
68
qint64 textToFilePosition(int x, int y, bool &isfirst);
69
void fileToTextPosition(qint64 p, bool isfirst, int &x, int &y);
78
void setHexMode(bool hexMode);
80
void copySelectedToClipboard();
82
void getCursorPosition(int &x, int &y);
83
qint64 getCursorPosition(bool &isfirst);
84
qint64 getCursorAnchor() {
85
return _cursorAnchorPos;
87
void setCursorPosition(qint64 p, bool isfirst);
88
void ensureVisibleCursor();
90
_cursorAnchorPos = -1;
93
void setAnchorAndCursor(qint64 anchor, qint64 cursor);
97
virtual void resizeEvent(QResizeEvent * event);
98
virtual void keyPressEvent(QKeyEvent * e);
99
virtual void mousePressEvent(QMouseEvent * e);
100
virtual void mouseDoubleClickEvent(QMouseEvent * e);
101
virtual void mouseMoveEvent(QMouseEvent * e);
102
virtual void wheelEvent(QWheelEvent * event);
104
QStringList readLines(qint64 filePos, qint64 &endPos, int lines, QList<qint64> * locs = 0);
105
QString readSection(qint64 p1, qint64 p2);
106
void setUpScrollBar();
107
void setCursorPosition(int x, int y, int anchorX = -1, int anchorY = -1);
108
void handleAnchorChange(int oldAnchor);
109
void getScreenPosition(int position, int &x, int &y);
112
void slotActionTriggered(int action);
113
void slotCursorPositionChanged();
118
qint64 _screenStartPos;
119
qint64 _screenEndPos;
120
qint64 _averagePageSize;
122
qint64 _lastPageStartPos;
132
QStringList _rowContent;
133
QList<qint64> _rowStarts;
136
bool _cursorAtFirstColumn;
138
qint64 _cursorAnchorPos;
143
bool _inCursorUpdate;
147
class ListerBrowserExtension : public KParts::BrowserExtension
152
ListerBrowserExtension(Lister * lister);
163
class Lister : public KParts::ReadOnlyPart
168
Lister(QWidget *parent);
171
QScrollBar *scrollBar() {
174
ListerTextArea *textArea() {
178
inline qint64 fileSize() {
181
char * cacheRef(qint64 filePos, int &size);
183
void enableSearch(bool);
184
void enableActions(bool);
186
QString characterSet() {
187
return _characterSet;
189
void setCharacterSet(QString set);
190
void setHexMode(bool);
192
QStringList readHexLines(qint64 &filePos, qint64 endPos, int columns, int lines);
193
int hexBytesPerLine(int columns);
194
int hexPositionDigits();
195
int hexIndexToPosition(int columns, int index);
196
int hexPositionToIndex(int columns, int position);
200
void searchAction() {
205
void jumpToPosition();
209
void toggleHexMode();
213
void slotSearchMore();
215
void searchSucceeded();
218
void searchTextChanged();
220
void slotFileDataReceived(KIO::Job *, const QByteArray &);
221
void slotFileFinished(KJob *);
223
void slotDataSend(KIO::Job *, QByteArray &);
224
void slotSendFinished(KJob *);
227
virtual bool openUrl(const KUrl &url);
228
virtual bool closeUrl() {
231
virtual bool openFile() {
234
virtual void guiActivateEvent(KParts::GUIActivateEvent * event);
235
void setColor(bool match, bool restore);
236
void hideProgressBar();
237
void updateProgressBar();
238
void resetSearchPosition();
240
qint64 getFileSize();
241
void search(bool forward, bool restart = false);
242
QStringList readLines(qint64 &filePos, qint64 endPos, int columns, int lines);
245
ListerTextArea *_textArea;
246
QScrollBar *_scrollBar;
247
QLabel *_listerLabel;
248
KLineEdit *_searchLineEdit;
249
QProgressBar *_searchProgressBar;
250
QToolButton *_searchStopButton;
251
QPushButton *_searchNextButton;
252
QPushButton *_searchPrevButton;
253
bool _searchInProgress;
254
bool _searchHexadecimal;
255
QPushButton *_searchOptions;
256
QLabel *_statusLabel;
258
QAction *_fromCursorAction;
259
QAction *_caseSensitiveAction;
260
QAction *_matchWholeWordsOnlyAction;
261
QAction *_regExpAction;
264
KAction *_actionSaveSelected;
265
KAction *_actionSaveAs;
266
KAction *_actionPrint;
267
KAction *_actionSearch;
268
KAction *_actionSearchNext;
269
KAction *_actionSearchPrev;
270
KAction *_actionJumpToPosition;
271
KAction *_actionHexMode;
272
ListerEncodingMenu *_actionEncoding;
283
KRQuery _searchQuery;
284
QByteArray _searchHexQuery;
285
qint64 _searchPosition;
286
bool _searchIsForward;
287
qint64 _searchLastFailedPosition;
288
int _searchProgressCounter;
290
QColor _originalBackground;
291
QColor _originalForeground;
293
QString _characterSet;
295
KTemporaryFile *_tempFile;
298
bool _restartFromBeginning;
300
qint64 _savePosition;
304
#endif // __LISTER_H__