00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
#ifndef _KATE_VIEW_INTERNAL_
00025
#define _KATE_VIEW_INTERNAL_
00026
00027
#include "katecursor.h"
00028
#include "katesupercursor.h"
00029
#include "katelinerange.h"
00030
#include "katetextline.h"
00031
#include "katedocument.h"
00032
00033
#include <qscrollbar.h>
00034
#include <qpoint.h>
00035
#include <qtimer.h>
00036
#include <qintdict.h>
00037
00038
class KateView;
00039
class KateIconBorder;
00040
00041
class QHBoxLayout;
00042
class QVBoxLayout;
00043
00044
enum Bias
00045 {
00046 left = -1,
00047 none = 0,
00048 right = 1
00049 };
00050
00058 class KateScrollBar :
public QScrollBar
00059 {
00060 Q_OBJECT
00061
00062
public:
00063
KateScrollBar(Orientation orientation,
class KateViewInternal *parent,
const char* name = 0L);
00064
00065
inline bool showMarks() {
return m_showMarks; };
00066
inline void setShowMarks(
bool b) { m_showMarks = b; update(); };
00067
00068 signals:
00069
void sliderMMBMoved(
int value);
00070
00071
protected:
00072
virtual void mousePressEvent(
QMouseEvent* e);
00073
virtual void mouseReleaseEvent(
QMouseEvent* e);
00074
virtual void mouseMoveEvent (
QMouseEvent* e);
00075
virtual void paintEvent(
QPaintEvent *);
00076
virtual void resizeEvent(
QResizeEvent *);
00077
virtual void styleChange(
QStyle &oldStyle);
00078
virtual void valueChange();
00079
virtual void rangeChange();
00080
00081
protected slots:
00082
void sliderMaybeMoved(
int value);
00083
void marksChanged();
00084
00085
private:
00086
void redrawMarks();
00087
void recomputeMarksPositions(
bool forceFullUpdate =
false);
00088
void watchScrollBarSize();
00089
00090
bool m_middleMouseDown;
00091
00092 KateView *m_view;
00093 KateDocument *m_doc;
00094
class KateViewInternal *m_viewInternal;
00095
00096
int m_topMargin;
00097
int m_bottomMargin;
00098 uint m_savVisibleLines;
00099
00100
QIntDict<QColor> m_lines;
00101
00102
bool m_showMarks;
00103 };
00104
00105
class KateViewInternal :
public QWidget
00106 {
00107 Q_OBJECT
00108
00109
friend class KateView;
00110
friend class KateIconBorder;
00111
friend class KateScrollBar;
00112
friend class CalculatingCursor;
00113
friend class BoundedCursor;
00114
friend class WrappingCursor;
00115
00116
public:
00117 KateViewInternal ( KateView *view, KateDocument *doc );
00118 ~KateViewInternal ();
00119
00120
00121
public:
00122
void editStart ();
00123
void editEnd (
int editTagLineStart,
int editTagLineEnd,
bool tagFrom);
00124
00125
void editSetCursor (
const KateTextCursor &cursor);
00126
00127
private:
00128 uint editSessionNumber;
00129
bool editIsRunning;
00130
KateTextCursor editOldCursor;
00131
00132
00133
00134
public:
00135
bool tagLine (
const KateTextCursor& virtualCursor);
00136
00137
bool tagLines (
int start,
int end,
bool realLines =
false);
00138
bool tagLines (
KateTextCursor start,
KateTextCursor end,
bool realCursors =
false);
00139
00140
void tagAll ();
00141
00142
void clear ();
00143
00144
00145
private:
00146
void updateView (
bool changed =
false,
int viewLinesScrolled = 0);
00147
void makeVisible (
const KateTextCursor& c, uint endCol,
bool force =
false,
bool center =
false,
bool calledExternally =
false);
00148
00149
public:
00150
inline const KateTextCursor& startPos()
const {
return m_startPos; }
00151
inline uint startLine ()
const {
return m_startPos.line(); }
00152
inline uint startX ()
const {
return m_startX; }
00153
00154
KateTextCursor endPos () const;
00155 uint endLine () const;
00156
00157 KateLineRange yToKateLineRange(uint y) const;
00158
00159
void prepareForDynWrapChange();
00160
void dynWrapChanged();
00161
00162 public slots:
00163
void slotIncFontSizes();
00164
void slotDecFontSizes();
00165
00166 private slots:
00167
void scrollLines(
int line);
00168
void scrollViewLines(
int offset);
00169
void scrollNextPage();
00170
void scrollPrevPage();
00171
void scrollPrevLine();
00172
void scrollNextLine();
00173
void scrollColumns (
int x);
00174
void docSelectionChanged ();
00175
00176 public:
00177
void doReturn();
00178
void doDelete();
00179
void doBackspace();
00180
void doPaste();
00181
void doTranspose();
00182
void doDeleteWordLeft();
00183
void doDeleteWordRight();
00184
00185
void cursorLeft(
bool sel=false);
00186
void cursorRight(
bool sel=false);
00187
void wordLeft(
bool sel=false);
00188
void wordRight(
bool sel=false);
00189
void home(
bool sel=false);
00190
void end(
bool sel=false);
00191
void cursorUp(
bool sel=false);
00192
void cursorDown(
bool sel=false);
00193
void cursorToMatchingBracket(
bool sel=false);
00194
void scrollUp();
00195
void scrollDown();
00196
void topOfView(
bool sel=false);
00197
void bottomOfView(
bool sel=false);
00198
void pageUp(
bool sel=false);
00199
void pageDown(
bool sel=false);
00200
void top(
bool sel=false);
00201
void bottom(
bool sel=false);
00202
void top_home(
bool sel=false);
00203
void bottom_end(
bool sel=false);
00204
00205 inline const
KateTextCursor& getCursor() {
return cursor; }
00206
QPoint cursorCoordinates();
00207
00208
void paintText (
int x,
int y,
int width,
int height,
bool paintOnlyDirty =
false);
00209
00210
00211
protected:
00212
void paintEvent(
QPaintEvent *e);
00213
bool eventFilter(
QObject *obj,
QEvent *e );
00214
void keyPressEvent(
QKeyEvent* );
00215
void keyReleaseEvent(
QKeyEvent* );
00216
void resizeEvent(
QResizeEvent* );
00217
void mousePressEvent(
QMouseEvent* );
00218
void mouseDoubleClickEvent(
QMouseEvent* );
00219
void mouseReleaseEvent(
QMouseEvent* );
00220
void mouseMoveEvent(
QMouseEvent* );
00221
void dragEnterEvent(
QDragEnterEvent* );
00222
void dragMoveEvent(
QDragMoveEvent* );
00223
void dropEvent(
QDropEvent* );
00224
void showEvent (
QShowEvent *);
00225
void wheelEvent(
QWheelEvent* e);
00226
void focusInEvent (
QFocusEvent *);
00227
void focusOutEvent (
QFocusEvent *);
00228
00229
void contextMenuEvent (
QContextMenuEvent * e );
00230
00231
void imStartEvent(
QIMEvent *e );
00232
void imComposeEvent(
QIMEvent *e );
00233
void imEndEvent(
QIMEvent *e );
00234
00235
private slots:
00236
void tripleClickTimeout();
00237
00238 signals:
00239
00240
void dropEventPass(
QDropEvent*);
00241
00242
private slots:
00243
void slotRegionVisibilityChangedAt(
unsigned int);
00244
void slotRegionBeginEndAddedRemoved(
unsigned int);
00245
void slotCodeFoldingChanged();
00246
00247
private:
00248
void moveChar( Bias bias,
bool sel );
00249
void moveWord( Bias bias,
bool sel );
00250
void moveEdge( Bias bias,
bool sel );
00251
KateTextCursor maxStartPos(
bool changed =
false);
00252
void scrollPos(
KateTextCursor& c,
bool force =
false,
bool calledExternally =
false);
00253
void scrollLines(
int lines,
bool sel );
00254
00255 uint linesDisplayed() const;
00256
00257
int lineToY(uint viewLine) const;
00258
00259
void updateSelection( const
KateTextCursor&,
bool keepSel );
00260
void updateCursor( const KateTextCursor& newCursor,
bool force = false,
bool center = false,
bool calledExternally = false );
00261
void updateBracketMarks();
00262
00263
void paintCursor();
00264
00265
void updateMicroFocusHint();
00266
00267
void placeCursor( const
QPoint& p,
bool keepSelection = false,
bool updateSelection = true );
00268
bool isTargetSelected( const
QPoint& p );
00269
00270
void doDrag();
00271
00272 KateView *m_view;
00273 KateDocument* m_doc;
00274 class KateIconBorder *leftBorder;
00275
00276
int mouseX;
00277
int mouseY;
00278
int scrollX;
00279
int scrollY;
00280
00281
Qt::CursorShape m_mouseCursor;
00282
00283
KateSuperCursor cursor;
00284 KateTextCursor displayCursor;
00285
int cXPos;
00286
00287
bool possibleTripleClick;
00288
00289
00290 KateTextRange bm;
00291
00292 enum DragState { diNone, diPending, diDragging };
00293
00294
struct _dragInfo {
00295 DragState state;
00296
QPoint start;
00297
QTextDrag* dragObject;
00298 } dragInfo;
00299
00300 uint iconBorderHeight;
00301
00302
00303
00304
00305
KateScrollBar *m_lineScroll;
00306
QWidget* m_dummy;
00307
QVBoxLayout* m_lineLayout;
00308
QHBoxLayout* m_colLayout;
00309
00310
00311
KateSuperCursor m_startPos;
00312
00313
00314
00315
bool m_madeVisible;
00316
bool m_shiftKeyPressed;
00317
00318
00319
void setAutoCenterLines(
int viewLines,
bool updateView =
true);
00320
int m_autoCenterLines;
00321
int m_minLinesVisible;
00322
00323
00324
00325
00326
QScrollBar *m_columnScroll;
00327
bool m_columnScrollDisplayed;
00328
int m_startX;
00329
int m_oldStartX;
00330
00331
00332
bool m_selChangedByUser;
00333
KateTextCursor selectAnchor;
00334
00335
enum SelectionMode { Default=0, Word, Line };
00336 uint m_selectionMode;
00337
00338
00339
00340
KateTextCursor selStartCached;
00341
KateTextCursor selEndCached;
00342
00343
00344
00345
00346
QMemArray<KateLineRange> lineRanges;
00347
00348
00349
bool scrollbarVisible(uint startLine);
00350
int maxLen(uint startLine);
00351
00352
00353
int lineMaxCursorX(
const KateLineRange& range);
00354
int lineMaxCol(
const KateLineRange& range);
00355
00356
00357
00358 KateLineRange range(
int realLine,
const KateLineRange* previous = 0L);
00359
00360 KateLineRange currentRange();
00361 KateLineRange previousRange();
00362 KateLineRange nextRange();
00363
00364
00365 KateLineRange range(
const KateTextCursor& realCursor);
00366
00367
00368 KateLineRange range(uint realLine,
int viewLine);
00369
00370
00371 uint viewLine(
const KateTextCursor& realCursor);
00372
00373
00374
00375
int displayViewLine(
const KateTextCursor& virtualCursor,
bool limitToVisible =
false);
00376
00377
00378 uint lastViewLine(uint realLine);
00379
00380
00381 uint viewLineCount(uint realLine);
00382
00383
00384
00385
00386
KateTextCursor viewLineOffset(
const KateTextCursor& virtualCursor,
int offset,
bool keepX =
false);
00387
00388
00389
bool m_preserveMaxX;
00390
int m_currentMaxX;
00391
00392
bool m_usePlainLines;
00393
00394
inline KateTextLine::Ptr textLine(
int realLine )
00395 {
00396
if (m_usePlainLines)
00397
return m_doc->plainKateTextLine(realLine);
00398
else
00399
return m_doc->kateTextLine(realLine);
00400 }
00401
00402
bool m_updatingView;
00403
int m_wrapChangeViewLine;
00404
KateTextCursor m_cachedMaxStartPos;
00405
00406
private slots:
00407
void doDragScroll();
00408
void startDragScroll();
00409
void stopDragScroll();
00410
00411
private:
00412
00413
QTimer m_dragScrollTimer;
00414
QTimer m_scrollTimer;
00415
QTimer m_cursorTimer;
00416
QTimer m_textHintTimer;
00417
00418
static const int scrollTime = 30;
00419
static const int scrollMargin = 16;
00420
00421
00422
bool m_suppressColumnScrollBar;
00423
00424
private slots:
00425
void scrollTimeout ();
00426
void cursorTimeout ();
00427
void textHintTimeout ();
00428
00429
00430
public:
00431
void enableTextHints(
int timeout);
00432
void disableTextHints();
00433
00434
private:
00435
bool m_textHintEnabled;
00436
int m_textHintTimeout;
00437
int m_textHintMouseX;
00438
int m_textHintMouseY;
00439
00440
int m_imPreeditStartLine;
00441
int m_imPreeditStart;
00442
int m_imPreeditLength;
00443
int m_imPreeditSelStart;
00444 };
00445
00446
#endif
00447
00448