00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
#ifndef kate_view_h
00023
#define kate_view_h
00024
00025
#include "katedocument.h"
00026
#include "kateviewinternal.h"
00027
#include "kateconfig.h"
00028
00029
#include "../interfaces/view.h"
00030
00031
#include <ktexteditor/sessionconfiginterface.h>
00032
#include <ktexteditor/viewstatusmsginterface.h>
00033
#include <ktexteditor/texthintinterface.h>
00034
00035
#include <qguardedptr.h>
00036
00037
class KateDocument;
00038
class KateBookmarks;
00039
class KateSearch;
00040
class KateCmdLine;
00041
class KateCodeCompletion;
00042
class KateViewConfig;
00043
class KateViewSchemaAction;
00044
class KateRenderer;
00045
00046
class KToggleAction;
00047
class KAction;
00048
class KRecentFilesAction;
00049
class KSelectAction;
00050
00051
class QGridLayout;
00052
00053
00054
00055
00056
class KateView :
public Kate::View,
00057
public KTextEditor::SessionConfigInterface,
00058
public KTextEditor::ViewStatusMsgInterface,
00059
public KTextEditor::TextHintInterface
00060 {
00061 Q_OBJECT
00062
00063
friend class KateViewInternal;
00064
friend class KateIconBorder;
00065
friend class KateCodeCompletion;
00066
00067
public:
00068 KateView( KateDocument* doc,
QWidget* parent = 0L,
const char* name = 0 );
00069 ~KateView ();
00070
00071
00072
00073
00074
public:
00075 KTextEditor::Document* document()
const {
return m_doc; }
00076
00077
00078
00079
00080
public slots:
00081
void cut() { m_doc->cut(); }
00082
void copy()
const { m_doc->copy(); }
00083
00084
void paste() { m_viewInternal->doPaste(); }
00085
00086
00087
00088
00089
public:
00090
void installPopup(
QPopupMenu* menu ) { m_rmbMenu = menu; }
00091
QPopupMenu* popup()
const {
return m_rmbMenu; }
00092
00093
00094
00095
00096
public slots:
00097
QPoint cursorCoordinates()
00098 {
return m_viewInternal->cursorCoordinates(); }
00099
void cursorPosition( uint* l, uint* c )
00100 {
if( l ) *l = cursorLine();
if( c ) *c = cursorColumn(); }
00101
void cursorPositionReal( uint* l, uint* c )
00102 {
if( l ) *l = cursorLine();
if( c ) *c = cursorColumnReal(); }
00103
bool setCursorPosition( uint line, uint col )
00104 {
return setCursorPositionInternal( line, col, tabWidth(),
true ); }
00105
bool setCursorPositionReal( uint line, uint col)
00106 {
return setCursorPositionInternal( line, col, 1,
true ); }
00107 uint cursorLine()
00108 {
return m_viewInternal->getCursor().line(); }
00109 uint cursorColumn();
00110 uint cursorColumnReal()
00111 {
return m_viewInternal->getCursor().col(); }
00112
00113 signals:
00114
void cursorPositionChanged();
00115
00116
00117
00118
00119
public slots:
00120
void showArgHint(
QStringList arg1,
const QString& arg2,
const QString& arg3 );
00121
void showCompletionBox(
QValueList<KTextEditor::CompletionEntry> arg1,
int offset = 0,
bool cs =
true );
00122
00123 signals:
00124
void completionAborted();
00125
void completionDone();
00126
void argHintHidden();
00127
void completionDone(KTextEditor::CompletionEntry);
00128
void filterInsertString(KTextEditor::CompletionEntry*,
QString *);
00129
void aboutToShowCompletionBox();
00130
00131
00132
00133
00134
public:
00135
void enableTextHints(
int timeout);
00136
void disableTextHints();
00137
00138 signals:
00139
void needTextHint(
int line,
int col,
QString &text);
00140
00141
00142
00143
00144
public:
00145
void setDynWordWrap(
bool b );
00146
bool dynWordWrap()
const {
return m_hasWrap; }
00147
00148
00149
public:
00150
void editStart ();
00151
void editEnd (
int editTagLineStart,
int editTagLineEnd,
bool tagFrom);
00152
00153
void editSetCursor (
const KateTextCursor &cursor);
00154
00155
00156
00157
public:
00158
bool tagLine (
const KateTextCursor& virtualCursor);
00159
00160
bool tagLines (
int start,
int end,
bool realLines =
false );
00161
bool tagLines (
KateTextCursor start,
KateTextCursor end,
bool realCursors =
false);
00162
00163
void tagAll ();
00164
00165
void clear ();
00166
00167
void repaintText (
bool paintOnlyDirty =
false);
00168
00169
void updateView (
bool changed =
false);
00170
00171
00172
00173
00174
00175
public:
00176
bool isOverwriteMode() const;
00177
void setOverwriteMode(
bool b );
00178
00179
QString currentTextLine()
00180 {
return getDoc()->textLine( cursorLine() ); }
00181
QString currentWord()
00182 {
return m_doc->getWord( m_viewInternal->getCursor() ); }
00183
void insertText(
const QString& text )
00184 { getDoc()->insertText( cursorLine(), cursorColumnReal(), text ); }
00185
bool canDiscard();
00186
int tabWidth() {
return m_doc->config()->tabWidth(); }
00187
void setTabWidth(
int w ) { m_doc->config()->setTabWidth(w); }
00188
void setEncoding(
QString e ) { m_doc->setEncoding(e); }
00189
bool isLastView() {
return m_doc->isLastView(1); }
00190
00191
public slots:
00192
void flush();
00193
saveResult save();
00194
saveResult saveAs();
00195
00196
void indent() { m_doc->indent(
this, cursorLine(), 1 ); }
00197
void unIndent() { m_doc->indent(
this, cursorLine(), -1 ); }
00198
void cleanIndent() { m_doc->indent(
this, cursorLine(), 0 ); }
00199
void comment() { m_doc->comment(
this, cursorLine(), 1 ); }
00200
void uncomment() { m_doc->comment(
this, cursorLine(), -1 ); }
00201
void killLine() { m_doc->removeLine( cursorLine() ); }
00202
00206
void uppercase() { m_doc->transform(
this, m_viewInternal->cursor, KateDocument::Uppercase ); }
00210
void lowercase() { m_doc->transform(
this, m_viewInternal->cursor, KateDocument::Lowercase ); }
00215
void capitalize() { m_doc->transform(
this, m_viewInternal->cursor, KateDocument::Capitalize ); }
00219
void joinLines();
00220
00221
00222
void keyReturn() { m_viewInternal->doReturn(); }
00223
void backspace() { m_viewInternal->doBackspace(); }
00224
void deleteWordLeft() { m_viewInternal->doDeleteWordLeft(); }
00225
void keyDelete() { m_viewInternal->doDelete(); }
00226
void deleteWordRight() { m_viewInternal->doDeleteWordRight(); }
00227
void transpose() { m_viewInternal->doTranspose(); }
00228
void cursorLeft() { m_viewInternal->cursorLeft(); }
00229
void shiftCursorLeft() { m_viewInternal->cursorLeft(
true); }
00230
void cursorRight() { m_viewInternal->cursorRight(); }
00231
void shiftCursorRight() { m_viewInternal->cursorRight(
true); }
00232
void wordLeft() { m_viewInternal->wordLeft(); }
00233
void shiftWordLeft() { m_viewInternal->wordLeft(
true); }
00234
void wordRight() { m_viewInternal->wordRight(); }
00235
void shiftWordRight() { m_viewInternal->wordRight(
true); }
00236
void home() { m_viewInternal->home(); }
00237
void shiftHome() { m_viewInternal->home(
true); }
00238
void end() { m_viewInternal->end(); }
00239
void shiftEnd() { m_viewInternal->end(
true); }
00240
void up() { m_viewInternal->cursorUp(); }
00241
void shiftUp() { m_viewInternal->cursorUp(
true); }
00242
void down() { m_viewInternal->cursorDown(); }
00243
void shiftDown() { m_viewInternal->cursorDown(
true); }
00244
void scrollUp() { m_viewInternal->scrollUp(); }
00245
void scrollDown() { m_viewInternal->scrollDown(); }
00246
void topOfView() { m_viewInternal->topOfView(); }
00247
void shiftTopOfView() { m_viewInternal->topOfView(
true); }
00248
void bottomOfView() { m_viewInternal->bottomOfView(); }
00249
void shiftBottomOfView() { m_viewInternal->bottomOfView(
true); }
00250
void pageUp() { m_viewInternal->pageUp(); }
00251
void shiftPageUp() { m_viewInternal->pageUp(
true); }
00252
void pageDown() { m_viewInternal->pageDown(); }
00253
void shiftPageDown() { m_viewInternal->pageDown(
true); }
00254
void top() { m_viewInternal->top_home(); }
00255
void shiftTop() { m_viewInternal->top_home(
true); }
00256
void bottom() { m_viewInternal->bottom_end(); }
00257
void shiftBottom() { m_viewInternal->bottom_end(
true); }
00258
void toMatchingBracket() { m_viewInternal->cursorToMatchingBracket();}
00259
void shiftToMatchingBracket() { m_viewInternal->cursorToMatchingBracket(
true);}
00260
00261
void gotoLine();
00262
void gotoLineNumber(
int linenumber );
00263
00264
00265
public:
00266
void readSessionConfig(
KConfig *);
00267
void writeSessionConfig(
KConfig *);
00268
00269
public slots:
00270
int getEol();
00271
void setEol(
int eol );
00272
void find();
00273
void replace();
00274
void findAgain(
bool back );
00275
void findAgain() { findAgain(
false ); }
00276
void findPrev() { findAgain(
true ); }
00277
00278
void setFoldingMarkersOn(
bool enable );
00279
void setIconBorder(
bool enable );
00280
void setLineNumbersOn(
bool enable );
00281
void showCmdLine (
bool enable );
00282
void toggleFoldingMarkers();
00283
void toggleIconBorder();
00284
void toggleLineNumbersOn();
00285
void toggleDynWordWrap ();
00286
void toggleCmdLine ();
00287
void setDynWrapIndicators(
int mode);
00288
00289
public:
00290
KateRenderer *renderer ();
00291
00292
bool iconBorder();
00293
bool lineNumbersOn();
00294
int dynWrapIndicators();
00295
bool foldingMarkersOn();
00296
Kate::Document* getDoc() {
return m_doc; }
00297
00298
void setActive(
bool b ) { m_active = b; }
00299
bool isActive() {
return m_active; }
00300
00301
public slots:
00302
void gotoMark( KTextEditor::Mark* mark ) { setCursorPositionInternal ( mark->line, 0, 1 ); }
00303
void selectionChanged ();
00304
00305 signals:
00306
void gotFocus(
Kate::View* );
00307
void lostFocus(
Kate::View* );
00308
void newStatus();
00309
00310
00311
00312
00313
public:
00314
00315 KateDocument* doc()
const {
return m_doc; }
00316
00317
KActionCollection* editActionCollection()
const {
return m_editActions; }
00318
00319
public slots:
00320
void slotNewUndo();
00321
void slotUpdate();
00322
void toggleInsert();
00323
void reloadFile();
00324
void toggleWWMarker();
00325
void toggleWriteLock();
00326
void switchToCmdLine ();
00327
void slotReadWriteChanged ();
00328
00329 signals:
00330
void dropEventPass(
QDropEvent*);
00331
void viewStatusMsg (
const QString &msg);
00332
00333
public:
00334
bool setCursorPositionInternal( uint line, uint col, uint tabwidth = 1,
bool calledExternally =
false );
00335
00336
protected:
00337
void contextMenuEvent(
QContextMenuEvent* );
00338
bool checkOverwrite(
KURL );
00339
00340
public slots:
00341
void slotSelectionTypeChanged();
00342
00343
private slots:
00344
void slotGotFocus();
00345
void slotLostFocus();
00346
void slotDropEventPass(
QDropEvent* ev );
00347
void slotSetEncoding(
const QString& descriptiveName );
00348
void slotStatusMsg();
00349
void slotSaveCanceled(
const QString& error );
00350
void slotExpandToplevel();
00351
void slotCollapseLocal();
00352
void slotExpandLocal();
00353
00354
private:
00355
void setupConnections();
00356
void setupActions();
00357
void setupEditActions();
00358
void setupCodeFolding();
00359
void setupCodeCompletion();
00360
00361
KActionCollection* m_editActions;
00362
KAction* m_editUndo;
00363
KAction* m_editRedo;
00364
KRecentFilesAction* m_fileRecent;
00365
KToggleAction* m_toggleFoldingMarkers;
00366
KToggleAction* m_toggleIconBar;
00367
KToggleAction* m_toggleLineNumbers;
00368
KToggleAction* m_toggleDynWrap;
00369
KSelectAction* m_setDynWrapIndicators;
00370
KToggleAction* m_toggleWWMarker;
00371
KToggleAction* m_toggleCmdLine;
00372
00373
KSelectAction* m_setEndOfLine;
00374
00375
KSelectAction* m_setEncoding;
00376 Kate::ActionMenu* m_setHighlight;
00377 Kate::ActionMenu* m_setFileType;
00378
KToggleAction* m_toggleWriteLock;
00379 KateViewSchemaAction* m_schemaMenu;
00380
00381
KAction *m_cut;
00382
KAction *m_copy;
00383
KAction *m_paste;
00384
KAction *m_selectAll;
00385
KAction *m_deSelect;
00386
00387
KToggleAction *m_toggleBlockSelection;
00388
KToggleAction *m_toggleInsert;
00389
00390 KateDocument* m_doc;
00391 KateViewInternal* m_viewInternal;
00392
KateRenderer* m_renderer;
00393 KateSearch* m_search;
00394 KateBookmarks* m_bookmarks;
00395
QGuardedPtr<QPopupMenu> m_rmbMenu;
00396 KateCodeCompletion* m_codeCompletion;
00397
00398 KateCmdLine *m_cmdLine;
00399
bool m_cmdLineOn;
00400
00401
QGridLayout *m_grid;
00402
00403
bool m_active;
00404
bool m_hasWrap;
00405
00406
private slots:
00407
void slotNeedTextHint(
int line,
int col,
QString &text);
00408
00409
void slotClipboardDataChanged();
00410
00411
void slotHlChanged();
00415
public:
00416
inline KateViewConfig *config () {
return m_config; };
00417
00418
void updateConfig ();
00419
00420
void updateDocumentConfig();
00421
00422
void updateRendererConfig();
00423
00424
private slots:
00425
void updateFoldingConfig ();
00426
void toggleBlockSelectionMode ();
00427
00428
private:
00429 KateViewConfig *m_config;
00430
bool m_startingUp;
00431
bool m_updatingDocumentConfig;
00432 };
00433
00434
#endif