mirror of
https://bitbucket.org/smil3y/kde-workspace.git
synced 2025-02-24 19:02:51 +00:00
841 lines
23 KiB
C++
841 lines
23 KiB
C++
/* This file is part of the KDE libraries
|
|
Copyright (C) 2002 John Firebaugh <jfirebaugh@kde.org>
|
|
Copyright (C) 2001 Christoph Cullmann <cullmann@kde.org>
|
|
Copyright (C) 2001-2010 Joseph Wenninger <jowenn@kde.org>
|
|
Copyright (C) 1999 Jochen Wilhelmy <digisnap@cs.tu-berlin.de>
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Library General Public
|
|
License version 2 as published by the Free Software Foundation.
|
|
|
|
This library 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
|
|
Library General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Library General Public License
|
|
along with this library; see the file COPYING.LIB. If not, write to
|
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#ifndef KATE_VIEW_H
|
|
#define KATE_VIEW_H
|
|
|
|
#include <ktexteditor/view.h>
|
|
#include <ktexteditor/texthintinterface.h>
|
|
#include <ktexteditor/markinterface.h>
|
|
#include <ktexteditor/codecompletioninterface.h>
|
|
#include <ktexteditor/sessionconfiginterface.h>
|
|
#include <ktexteditor/templateinterface.h>
|
|
#include <ktexteditor/templateinterface2.h>
|
|
#include <ktexteditor/configinterface.h>
|
|
#include <ktexteditor/annotationinterface.h>
|
|
|
|
#include <QtCore/QPointer>
|
|
#include <QtCore/qabstractitemmodel.h>
|
|
#include <QtGui/QMenu>
|
|
|
|
#include <kdebug.h>
|
|
|
|
#include "katetextrange.h"
|
|
#include "katetextfolding.h"
|
|
#include "katerenderer.h"
|
|
|
|
namespace KTextEditor
|
|
{
|
|
class AnnotationModel;
|
|
class Message;
|
|
}
|
|
|
|
class KateDocument;
|
|
class KateBookmarks;
|
|
class KateCommandLineBar;
|
|
class KateViewConfig;
|
|
class KateRenderer;
|
|
class KateSpellCheckDialog;
|
|
class KateCompletionWidget;
|
|
class KateViewInternal;
|
|
class KateSearchBar;
|
|
class KateViewBar;
|
|
class KateGotoBar;
|
|
class KateDictionaryBar;
|
|
class KateSpellingMenu;
|
|
class KateMessageWidget;
|
|
|
|
class KToggleAction;
|
|
class KAction;
|
|
class KSelectAction;
|
|
|
|
#include <QVBoxLayout>
|
|
|
|
//
|
|
// Kate KTextEditor::View class ;)
|
|
//
|
|
class KATEPARTINTERFACES_EXPORT KateView : public KTextEditor::View,
|
|
public KTextEditor::TextHintInterface,
|
|
public KTextEditor::SessionConfigInterface,
|
|
public KTextEditor::TemplateInterface2,
|
|
public KTextEditor::CodeCompletionInterface,
|
|
public KTextEditor::ConfigInterface,
|
|
public KTextEditor::AnnotationViewInterface,
|
|
public KTextEditor::CoordinatesToCursorInterface
|
|
{
|
|
Q_OBJECT
|
|
Q_INTERFACES(KTextEditor::TextHintInterface)
|
|
Q_INTERFACES(KTextEditor::SessionConfigInterface)
|
|
Q_INTERFACES(KTextEditor::TemplateInterface)
|
|
Q_INTERFACES(KTextEditor::TemplateInterface2)
|
|
Q_INTERFACES(KTextEditor::ConfigInterface)
|
|
Q_INTERFACES(KTextEditor::CodeCompletionInterface)
|
|
Q_INTERFACES(KTextEditor::AnnotationViewInterface)
|
|
Q_INTERFACES(KTextEditor::CoordinatesToCursorInterface)
|
|
|
|
friend class KateViewInternal;
|
|
friend class KateIconBorder;
|
|
|
|
public:
|
|
KateView( KateDocument* doc, QWidget* parent );
|
|
~KateView ();
|
|
|
|
KTextEditor::Document *document () const;
|
|
|
|
QString viewMode () const;
|
|
|
|
//
|
|
// KTextEditor::ClipboardInterface
|
|
//
|
|
public Q_SLOTS:
|
|
void paste(const QString *textToPaste = 0);
|
|
void cut();
|
|
void copy() const;
|
|
|
|
private Q_SLOTS:
|
|
/**
|
|
* internal use, apply word wrap
|
|
*/
|
|
void applyWordWrap ();
|
|
|
|
//
|
|
// KTextEditor::PopupMenuInterface
|
|
//
|
|
public:
|
|
void setContextMenu( QMenu* menu );
|
|
QMenu* contextMenu() const;
|
|
QMenu* defaultContextMenu(QMenu* menu = 0L) const;
|
|
|
|
private Q_SLOTS:
|
|
void aboutToShowContextMenu();
|
|
void aboutToHideContextMenu();
|
|
|
|
private:
|
|
QPointer<QMenu> m_contextMenu;
|
|
|
|
//
|
|
// KTextEditor::ViewCursorInterface
|
|
//
|
|
public:
|
|
/**
|
|
* Set the caret's style.
|
|
* The caret can be a box or a line; see the documentation
|
|
* of KateRenderer::caretStyles for other options.
|
|
* @param style the caret style
|
|
* @param repaint whether to update the caret instantly.
|
|
* This also resets the caret's timer.
|
|
*/
|
|
void setCaretStyle( KateRenderer::caretStyles style, bool repaint = false );
|
|
|
|
bool setCursorPosition (KTextEditor::Cursor position);
|
|
|
|
KTextEditor::Cursor cursorPosition () const;
|
|
|
|
KTextEditor::Cursor cursorPositionVirtual () const;
|
|
|
|
QPoint cursorToCoordinate(const KTextEditor::Cursor& cursor) const;
|
|
|
|
KTextEditor::Cursor coordinatesToCursor(const QPoint& coord) const;
|
|
|
|
QPoint cursorPositionCoordinates() const;
|
|
|
|
bool setCursorPositionVisual( const KTextEditor::Cursor& position );
|
|
|
|
/**
|
|
* Return the virtual cursor column, each tab is expanded into the
|
|
* document's tabWidth characters. If word wrap is off, the cursor may be
|
|
* behind the line's length.
|
|
*/
|
|
int virtualCursorColumn() const;
|
|
|
|
virtual bool mouseTrackingEnabled() const;
|
|
virtual bool setMouseTrackingEnabled(bool enable);
|
|
|
|
private:
|
|
void notifyMousePositionChanged(const KTextEditor::Cursor& newPosition);
|
|
|
|
// Internal
|
|
public:
|
|
bool setCursorPositionInternal( const KTextEditor::Cursor& position, uint tabwidth = 1, bool calledExternally = false );
|
|
|
|
//
|
|
// KTextEditor::ConfigInterface
|
|
//
|
|
public:
|
|
QStringList configKeys() const;
|
|
QVariant configValue(const QString &key);
|
|
void setConfigValue(const QString &key, const QVariant &value);
|
|
|
|
Q_SIGNALS:
|
|
void configChanged();
|
|
|
|
public:
|
|
/**
|
|
* Try to fold starting at the given line.
|
|
* This will both try to fold existing folding ranges of this line and to query the highlighting what to fold.
|
|
* @param startLine start line to fold at
|
|
*/
|
|
void foldLine (int startLine);
|
|
|
|
/**
|
|
* Try to unfold all foldings starting at the given line.
|
|
* @param startLine start line to unfold at
|
|
*/
|
|
void unfoldLine (int startLine);
|
|
|
|
//
|
|
// KTextEditor::CodeCompletionInterface2
|
|
//
|
|
public:
|
|
virtual bool isCompletionActive() const;
|
|
virtual void startCompletion(const KTextEditor::Range& word, KTextEditor::CodeCompletionModel* model);
|
|
virtual void abortCompletion();
|
|
virtual void forceCompletion();
|
|
virtual void registerCompletionModel(KTextEditor::CodeCompletionModel* model);
|
|
virtual void unregisterCompletionModel(KTextEditor::CodeCompletionModel* model);
|
|
virtual bool isAutomaticInvocationEnabled() const;
|
|
virtual void setAutomaticInvocationEnabled(bool enabled = true);
|
|
|
|
Q_SIGNALS:
|
|
void completionExecuted(KTextEditor::View* view, const KTextEditor::Cursor& position, KTextEditor::CodeCompletionModel* model, const QModelIndex&);
|
|
void completionAborted(KTextEditor::View* view);
|
|
|
|
public Q_SLOTS:
|
|
void userInvokedCompletion();
|
|
|
|
public:
|
|
KateCompletionWidget* completionWidget() const;
|
|
mutable KateCompletionWidget* m_completionWidget;
|
|
void sendCompletionExecuted(const KTextEditor::Cursor& position, KTextEditor::CodeCompletionModel* model, const QModelIndex& index);
|
|
void sendCompletionAborted();
|
|
|
|
//
|
|
// KTextEditor::TextHintInterface
|
|
//
|
|
public:
|
|
void enableTextHints(int timeout);
|
|
void disableTextHints();
|
|
|
|
Q_SIGNALS:
|
|
void needTextHint(const KTextEditor::Cursor& position, QString &text);
|
|
|
|
public:
|
|
bool dynWordWrap() const { return m_hasWrap; }
|
|
|
|
//
|
|
// KTextEditor::SelectionInterface stuff
|
|
//
|
|
public Q_SLOTS:
|
|
virtual bool setSelection ( const KTextEditor::Range &selection );
|
|
|
|
// unhide method...
|
|
bool setSelection (const KTextEditor::Cursor &c, int i, bool b)
|
|
{ return KTextEditor::View::setSelection (c, i, b); }
|
|
|
|
virtual bool removeSelection () { return clearSelection(); }
|
|
|
|
virtual bool removeSelectionText () { return removeSelectedText(); }
|
|
|
|
virtual bool setBlockSelection (bool on);
|
|
bool toggleBlockSelection ();
|
|
|
|
bool clearSelection ();
|
|
bool clearSelection (bool redraw, bool finishedChangingSelection = true);
|
|
|
|
bool removeSelectedText ();
|
|
|
|
bool selectAll();
|
|
|
|
public:
|
|
virtual bool selection() const;
|
|
virtual QString selectionText() const;
|
|
virtual bool blockSelection() const;
|
|
virtual const KTextEditor::Range &selectionRange() const;
|
|
|
|
static void blockFix(KTextEditor::Range& range);
|
|
|
|
private:
|
|
mutable KTextEditor::Range m_holdSelectionRangeForAPI;
|
|
|
|
//
|
|
// Arbitrary Syntax HL + Action extensions
|
|
//
|
|
public:
|
|
// Action association extension
|
|
void deactivateEditActions();
|
|
void activateEditActions();
|
|
|
|
//
|
|
// internal helper stuff, for katerenderer and so on
|
|
//
|
|
public:
|
|
// should cursor be wrapped ? take config + blockselection state in account
|
|
bool wrapCursor () const;
|
|
|
|
// some internal functions to get selection state of a line/col
|
|
bool cursorSelected(const KTextEditor::Cursor& cursor);
|
|
bool lineSelected (int line);
|
|
bool lineEndSelected (const KTextEditor::Cursor& lineEndPos);
|
|
bool lineHasSelected (int line);
|
|
bool lineIsSelection (int line);
|
|
|
|
void ensureCursorColumnValid();
|
|
|
|
void tagSelection (const KTextEditor::Range &oldSelection);
|
|
|
|
void selectWord( const KTextEditor::Cursor& cursor );
|
|
void selectLine( const KTextEditor::Cursor& cursor );
|
|
|
|
|
|
//BEGIN EDIT STUFF
|
|
public:
|
|
void editStart ();
|
|
void editEnd (int editTagLineStart, int editTagLineEnd, bool tagFrom);
|
|
|
|
void editSetCursor (const KTextEditor::Cursor &cursor);
|
|
//END
|
|
|
|
//BEGIN TAG & CLEAR
|
|
public:
|
|
bool tagLine (const KTextEditor::Cursor& virtualCursor);
|
|
|
|
bool tagRange (const KTextEditor::Range& range, bool realLines = false);
|
|
bool tagLines (int start, int end, bool realLines = false );
|
|
bool tagLines (KTextEditor::Cursor start, KTextEditor::Cursor end, bool realCursors = false);
|
|
bool tagLines (KTextEditor::Range range, bool realRange = false);
|
|
|
|
void tagAll ();
|
|
|
|
void clear ();
|
|
|
|
void repaintText (bool paintOnlyDirty = false);
|
|
|
|
void updateView (bool changed = false);
|
|
//END
|
|
|
|
//
|
|
// KTextEditor::AnnotationView
|
|
//
|
|
public:
|
|
void setAnnotationModel( KTextEditor::AnnotationModel* model );
|
|
KTextEditor::AnnotationModel* annotationModel() const;
|
|
void setAnnotationBorderVisible( bool visible);
|
|
bool isAnnotationBorderVisible() const;
|
|
|
|
Q_SIGNALS:
|
|
void annotationContextMenuAboutToShow( KTextEditor::View* view, QMenu* menu, int line );
|
|
void annotationActivated( KTextEditor::View* view, int line );
|
|
void annotationBorderVisibilityChanged( View* view, bool visible );
|
|
|
|
void navigateLeft();
|
|
void navigateRight();
|
|
void navigateUp();
|
|
void navigateDown();
|
|
void navigateAccept();
|
|
void navigateBack();
|
|
|
|
private:
|
|
KTextEditor::AnnotationModel* m_annotationModel;
|
|
|
|
//
|
|
// KTextEditor::View
|
|
//
|
|
public:
|
|
void emitNavigateLeft() {
|
|
emit navigateLeft();
|
|
}
|
|
void emitNavigateRight() {
|
|
emit navigateRight();
|
|
}
|
|
void emitNavigateUp() {
|
|
emit navigateUp();
|
|
}
|
|
void emitNavigateDown() {
|
|
emit navigateDown();
|
|
}
|
|
void emitNavigateAccept() {
|
|
emit navigateAccept();
|
|
}
|
|
void emitNavigateBack() {
|
|
emit navigateBack();
|
|
}
|
|
/**
|
|
Return values for "save" related commands.
|
|
*/
|
|
bool isOverwriteMode() const;
|
|
EditMode viewEditMode() const;
|
|
QString currentTextLine();
|
|
|
|
/**
|
|
* The current search pattern.
|
|
* This is set by the last search.
|
|
* @return the search pattern or the empty string if not set
|
|
*/
|
|
QString searchPattern() const;
|
|
|
|
/**
|
|
* The current replacement string.
|
|
* This is set by the last search and replace.
|
|
* @return the replacment string or the empty string if not set
|
|
*/
|
|
QString replacementPattern() const;
|
|
|
|
/**
|
|
* Set the current search pattern.
|
|
* @param searchPattern the search pattern
|
|
*/
|
|
void setSearchPattern(const QString &searchPattern);
|
|
|
|
/**
|
|
* Set the current replacement pattern.
|
|
* @param replacementPattern the replacement pattern
|
|
*/
|
|
void setReplacementPattern(const QString &replacementPattern);
|
|
|
|
public Q_SLOTS:
|
|
void indent();
|
|
void unIndent();
|
|
void cleanIndent();
|
|
void align();
|
|
void comment();
|
|
void uncomment();
|
|
void toggleComment();
|
|
void killLine();
|
|
|
|
/**
|
|
Uppercases selected text, or an alphabetic character next to the cursor.
|
|
*/
|
|
void uppercase();
|
|
/**
|
|
Lowercases selected text, or an alphabetic character next to the cursor.
|
|
*/
|
|
void lowercase();
|
|
/**
|
|
Capitalizes the selection (makes each word start with an uppercase) or
|
|
the word under the cursor.
|
|
*/
|
|
void capitalize();
|
|
/**
|
|
Joins lines touched by the selection
|
|
*/
|
|
void joinLines();
|
|
|
|
// Note - the following functions simply forward to KateViewInternal
|
|
void keyReturn();
|
|
void smartNewline();
|
|
void backspace();
|
|
void deleteWordLeft();
|
|
void keyDelete();
|
|
void deleteWordRight();
|
|
void transpose();
|
|
void cursorLeft();
|
|
void shiftCursorLeft();
|
|
void cursorRight();
|
|
void shiftCursorRight();
|
|
void wordLeft();
|
|
void shiftWordLeft();
|
|
void wordRight();
|
|
void shiftWordRight();
|
|
void home();
|
|
void shiftHome();
|
|
void end();
|
|
void shiftEnd();
|
|
void up();
|
|
void shiftUp();
|
|
void down();
|
|
void shiftDown();
|
|
void scrollUp();
|
|
void scrollDown();
|
|
void topOfView();
|
|
void shiftTopOfView();
|
|
void bottomOfView();
|
|
void shiftBottomOfView();
|
|
void pageUp();
|
|
void shiftPageUp();
|
|
void pageDown();
|
|
void shiftPageDown();
|
|
void top();
|
|
void shiftTop();
|
|
void bottom();
|
|
void shiftBottom();
|
|
void toMatchingBracket();
|
|
void shiftToMatchingBracket();
|
|
void toPrevModifiedLine();
|
|
void toNextModifiedLine();
|
|
void insertTab();
|
|
|
|
void gotoLine();
|
|
|
|
// config file / session management functions
|
|
public:
|
|
void readSessionConfig(const KConfigGroup&);
|
|
void writeSessionConfig(KConfigGroup&);
|
|
|
|
public Q_SLOTS:
|
|
void setEol( int eol );
|
|
void setAddBom( bool enabled);
|
|
void find();
|
|
void findSelectedForwards();
|
|
void findSelectedBackwards();
|
|
void replace();
|
|
void findNext();
|
|
void findPrevious();
|
|
|
|
void setFoldingMarkersOn( bool enable ); // Not in KTextEditor::View, but should be
|
|
void setIconBorder( bool enable );
|
|
void setLineNumbersOn( bool enable );
|
|
void setScrollBarMarks( bool enable );
|
|
void setScrollBarMiniMap( bool enable );
|
|
void setScrollBarMiniMapAll( bool enable );
|
|
void setScrollBarMiniMapWidth( int width );
|
|
void toggleFoldingMarkers();
|
|
void toggleIconBorder();
|
|
void toggleLineNumbersOn();
|
|
void toggleScrollBarMarks();
|
|
void toggleScrollBarMiniMap();
|
|
void toggleScrollBarMiniMapAll();
|
|
void toggleDynWordWrap ();
|
|
|
|
void setDynWrapIndicators(int mode);
|
|
|
|
public:
|
|
int getEol() const;
|
|
|
|
public:
|
|
KateRenderer *renderer ();
|
|
|
|
bool iconBorder();
|
|
bool lineNumbersOn();
|
|
bool scrollBarMarks();
|
|
bool scrollBarMiniMap();
|
|
bool scrollBarMiniMapAll();
|
|
int dynWrapIndicators();
|
|
bool foldingMarkersOn();
|
|
|
|
private Q_SLOTS:
|
|
/**
|
|
* used to update actions after selection changed
|
|
*/
|
|
void slotSelectionChanged ();
|
|
|
|
public:
|
|
/**
|
|
* accessor to katedocument pointer
|
|
* @return pointer to document
|
|
*/
|
|
KateDocument* doc() { return m_doc; }
|
|
const KateDocument* doc() const { return m_doc; }
|
|
|
|
public Q_SLOTS:
|
|
void slotUpdateUndo();
|
|
void toggleInsert();
|
|
void reloadFile();
|
|
void toggleWWMarker();
|
|
void toggleWriteLock();
|
|
void switchToCmdLine ();
|
|
void slotReadWriteChanged ();
|
|
void slotClipboardHistoryChanged ();
|
|
|
|
Q_SIGNALS:
|
|
void dropEventPass(QDropEvent*);
|
|
|
|
public:
|
|
/**
|
|
* Folding handler for this view.
|
|
* @return folding handler
|
|
*/
|
|
Kate::TextFolding &textFolding ()
|
|
{
|
|
return m_textFolding;
|
|
}
|
|
|
|
public:
|
|
void slotTextInserted ( KTextEditor::View *view, const KTextEditor::Cursor &position, const QString &text);
|
|
|
|
protected:
|
|
void contextMenuEvent( QContextMenuEvent* );
|
|
|
|
private Q_SLOTS:
|
|
void slotGotFocus();
|
|
void slotLostFocus();
|
|
void slotDropEventPass( QDropEvent* ev );
|
|
void slotSaveCanceled( const QString& error );
|
|
void slotConfigDialog ();
|
|
|
|
public Q_SLOTS: // TODO: turn into good interface, see kte5/foldinginterface.h
|
|
void slotFoldToplevelNodes();
|
|
void slotCollapseLocal();
|
|
void slotCollapseLevel();
|
|
void slotExpandLevel();
|
|
void slotExpandLocal();
|
|
|
|
private:
|
|
void setupConnections();
|
|
void setupActions();
|
|
void setupEditActions();
|
|
void setupCodeFolding();
|
|
|
|
QList<QAction*> m_editActions;
|
|
KAction* m_editUndo;
|
|
KAction* m_editRedo;
|
|
KAction* m_pasteMenu;
|
|
KToggleAction* m_toggleFoldingMarkers;
|
|
KToggleAction* m_toggleIconBar;
|
|
KToggleAction* m_toggleLineNumbers;
|
|
KToggleAction* m_toggleScrollBarMarks;
|
|
KToggleAction* m_toggleScrollBarMiniMap;
|
|
KToggleAction* m_toggleScrollBarMiniMapAll;
|
|
KToggleAction* m_toggleDynWrap;
|
|
KSelectAction* m_setDynWrapIndicators;
|
|
KToggleAction* m_toggleWWMarker;
|
|
KAction* m_switchCmdLine;
|
|
KToggleAction* m_viInputModeAction;
|
|
|
|
KSelectAction* m_setEndOfLine;
|
|
KToggleAction* m_addBom;
|
|
|
|
QAction *m_cut;
|
|
QAction *m_copy;
|
|
QAction *m_paste;
|
|
QAction *m_selectAll;
|
|
QAction *m_deSelect;
|
|
|
|
KToggleAction *m_toggleBlockSelection;
|
|
KToggleAction *m_toggleInsert;
|
|
KToggleAction *m_toggleWriteLock;
|
|
|
|
bool m_hasWrap;
|
|
|
|
KateDocument *const m_doc;
|
|
Kate::TextFolding m_textFolding;
|
|
KateViewConfig *const m_config;
|
|
KateRenderer *const m_renderer;
|
|
KateViewInternal *const m_viewInternal;
|
|
KateSpellCheckDialog *m_spell;
|
|
KateBookmarks *const m_bookmarks;
|
|
|
|
QVBoxLayout *m_vBox;
|
|
|
|
private Q_SLOTS:
|
|
void slotHlChanged();
|
|
|
|
/**
|
|
* Configuration
|
|
*/
|
|
public:
|
|
inline KateViewConfig *config () { return m_config; }
|
|
|
|
void updateConfig ();
|
|
|
|
void updateDocumentConfig();
|
|
|
|
void updateRendererConfig();
|
|
|
|
private Q_SLOTS:
|
|
void updateFoldingConfig ();
|
|
|
|
private:
|
|
bool m_startingUp;
|
|
bool m_updatingDocumentConfig;
|
|
|
|
// stores the current selection
|
|
Kate::TextRange m_selection;
|
|
|
|
// do we select normal or blockwise ?
|
|
bool blockSelect;
|
|
|
|
//
|
|
// TemplateInterface + TemplateInterface2
|
|
//
|
|
public:
|
|
virtual bool insertTemplateTextImplementation ( const KTextEditor::Cursor&, const QString &templateString, const QMap<QString,QString> &initialValues);
|
|
virtual bool insertTemplateTextImplementation ( const KTextEditor::Cursor&, const QString &templateString, const QMap<QString,QString> &initialValues, KTextEditor::TemplateScript* templateScript);
|
|
/**
|
|
* Accessors to the bars...
|
|
*/
|
|
public:
|
|
KateViewBar *topViewBar() const;
|
|
KateViewBar *bottomViewBar() const;
|
|
KateCommandLineBar *cmdLineBar ();
|
|
KateDictionaryBar *dictionaryBar();
|
|
|
|
private:
|
|
KateSearchBar *searchBar (bool initHintAsPower = false);
|
|
bool hasSearchBar () const { return m_searchBar != 0; }
|
|
KateGotoBar *gotoBar ();
|
|
|
|
/**
|
|
* viewbar + its widgets
|
|
* they are created on demand...
|
|
*/
|
|
private:
|
|
// created in constructor of the view
|
|
KateViewBar *m_bottomViewBar;
|
|
KateViewBar *m_topViewBar;
|
|
// created on demand..., only access them through the above accessors....
|
|
KateCommandLineBar *m_cmdLine;
|
|
KateSearchBar *m_searchBar;
|
|
KateGotoBar *m_gotoBar;
|
|
KateDictionaryBar *m_dictionaryBar;
|
|
|
|
public:
|
|
KTextEditor::Range visibleRange();
|
|
|
|
Q_SIGNALS:
|
|
void displayRangeChanged(KateView *view);
|
|
|
|
protected:
|
|
KToggleAction* m_toggleOnTheFlySpellCheck;
|
|
KateSpellingMenu *m_spellingMenu;
|
|
|
|
protected Q_SLOTS:
|
|
void toggleOnTheFlySpellCheck(bool b);
|
|
|
|
public Q_SLOTS:
|
|
void changeDictionary();
|
|
void reflectOnTheFlySpellCheckStatus(bool enabled);
|
|
|
|
public:
|
|
KateSpellingMenu* spellingMenu();
|
|
private:
|
|
bool m_userContextMenuSet;
|
|
|
|
private Q_SLOTS:
|
|
/**
|
|
* save folding state before document reload
|
|
*/
|
|
void saveFoldingState ();
|
|
|
|
/**
|
|
* restore folding state after document reload
|
|
*/
|
|
void applyFoldingState ();
|
|
|
|
private:
|
|
/**
|
|
* saved folding state
|
|
*/
|
|
QVariantList m_savedFoldingState;
|
|
|
|
public:
|
|
/**
|
|
* Attribute of a range changed or range with attribute changed in given line range.
|
|
* @param startLine start line of change
|
|
* @param endLine end line of change
|
|
* @param rangeWithAttribute attribute changed or is active, this will perhaps lead to repaints
|
|
*/
|
|
void notifyAboutRangeChange (int startLine, int endLine, bool rangeWithAttribute);
|
|
|
|
private Q_SLOTS:
|
|
/**
|
|
* Delayed update for view after text ranges changed
|
|
*/
|
|
void slotDelayedUpdateOfView ();
|
|
|
|
Q_SIGNALS:
|
|
/**
|
|
* Delayed update for view after text ranges changed
|
|
*/
|
|
void delayedUpdateOfView ();
|
|
|
|
public:
|
|
/**
|
|
* set of ranges which had the mouse inside last time, used for rendering
|
|
* @return set of ranges which had the mouse inside last time checked
|
|
*/
|
|
const QSet<Kate::TextRange *> *rangesMouseIn () const { return &m_rangesMouseIn; }
|
|
|
|
/**
|
|
* set of ranges which had the caret inside last time, used for rendering
|
|
* @return set of ranges which had the caret inside last time checked
|
|
*/
|
|
const QSet<Kate::TextRange *> *rangesCaretIn () const { return &m_rangesCaretIn; }
|
|
|
|
/**
|
|
* check if ranges changed for mouse in and caret in
|
|
* @param activationType type of activation to check
|
|
*/
|
|
void updateRangesIn (KTextEditor::Attribute::ActivationType activationType);
|
|
|
|
//
|
|
// helpers for delayed view update after ranges changes
|
|
//
|
|
private:
|
|
/**
|
|
* update already inited?
|
|
*/
|
|
bool m_delayedUpdateTriggered;
|
|
|
|
/**
|
|
* minimal line to update
|
|
*/
|
|
int m_lineToUpdateMin;
|
|
|
|
/**
|
|
* maximal line to update
|
|
*/
|
|
int m_lineToUpdateMax;
|
|
|
|
/**
|
|
* set of ranges which had the mouse inside last time
|
|
*/
|
|
QSet<Kate::TextRange *> m_rangesMouseIn;
|
|
|
|
/**
|
|
* set of ranges which had the caret inside last time
|
|
*/
|
|
QSet<Kate::TextRange *> m_rangesCaretIn;
|
|
|
|
//
|
|
// forward impl for KTextEditor::MessageInterface
|
|
//
|
|
public:
|
|
/**
|
|
* Used by Document::postMessage().
|
|
*/
|
|
void postMessage(KTextEditor::Message* message, QList<QSharedPointer<QAction> > actions);
|
|
|
|
private:
|
|
/** Message widget showing KTextEditor::Messages above the View. */
|
|
KateMessageWidget* m_topMessageWidget;
|
|
/** Message widget showing KTextEditor::Messages below the View. */
|
|
KateMessageWidget* m_bottomMessageWidget;
|
|
/** Message widget showing KTextEditor::Messages as view overlay in top right corner. */
|
|
KateMessageWidget* m_floatTopMessageWidget;
|
|
/** Message widget showing KTextEditor::Messages as view overlay in bottom left corner. */
|
|
KateMessageWidget* m_floatBottomMessageWidget;
|
|
/** Layout for floating notifications */
|
|
QVBoxLayout* m_notificationLayout;
|
|
|
|
// for unit test 'tests/messagetest.cpp'
|
|
public:
|
|
KateMessageWidget* messageWidget() { return m_floatTopMessageWidget; }
|
|
};
|
|
|
|
/**
|
|
* metatype register
|
|
*/
|
|
Q_DECLARE_METATYPE(KTextEditor::Cursor)
|
|
Q_DECLARE_METATYPE(KTextEditor::Range)
|
|
|
|
#endif
|
|
|
|
// kate: space-indent on; indent-width 2; replace-tabs on;
|