You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdelibs/kate/part/katedocument.h

1074 lines
30 KiB

/* This file is part of the KDE libraries
Copyright (C) 2001-2004 Christoph Cullmann <cullmann@kde.org>
Copyright (C) 2001 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_DOCUMENT_H_
#define _KATE_DOCUMENT_H_
#include "katesupercursor.h"
#include "katetextline.h"
#include "kateundo.h"
#include "katebuffer.h"
#include "katecodefoldinghelpers.h"
#include "../interfaces/document.h"
#include <ktexteditor/configinterfaceextension.h>
#include <ktexteditor/encodinginterface.h>
#include <ktexteditor/sessionconfiginterface.h>
#include <ktexteditor/editinterfaceext.h>
#include <ktexteditor/templateinterface.h>
#include <dcopobject.h>
#include <kmimetype.h>
#include <klocale.h>
#include <qintdict.h>
#include <qmap.h>
#include <qdatetime.h>
namespace KTextEditor { class Plugin; }
namespace KIO { class TransferJob; }
class KateUndoGroup;
class KateCmd;
class KateAttribute;
class KateAutoIndent;
class KateCodeFoldingTree;
class KateBuffer;
class KateView;
class KateViewInternal;
class KateArbitraryHighlight;
class KateSuperRange;
class KateLineInfo;
class KateBrowserExtension;
class KateDocumentConfig;
class KateHighlighting;
class KatePartPluginItem;
class KatePartPluginInfo;
class KTempFile;
class QTimer;
class KateKeyInterceptorFunctor;
//
// Kate KTextEditor::Document class (and even KTextEditor::Editor ;)
//
class KateDocument : public Kate::Document,
public Kate::DocumentExt,
public KTextEditor::ConfigInterfaceExtension,
public KTextEditor::EncodingInterface,
public KTextEditor::SessionConfigInterface,
public KTextEditor::EditInterfaceExt,
public KTextEditor::TemplateInterface,
public DCOPObject
{
K_DCOP
Q_OBJECT
friend class KateViewInternal;
friend class KateRenderer;
public:
KateDocument (bool bSingleViewMode=false, bool bBrowserView=false, bool bReadOnly=false,
QWidget *parentWidget = 0, const char *widgetName = 0, QObject * = 0, const char * = 0);
~KateDocument ();
bool closeURL();
//
// Plugins section
//
public:
void unloadAllPlugins ();
void enableAllPluginsGUI (KateView *view);
void disableAllPluginsGUI (KateView *view);
void loadPlugin (uint pluginIndex);
void unloadPlugin (uint pluginIndex);
void enablePluginGUI (KTextEditor::Plugin *plugin, KateView *view);
void enablePluginGUI (KTextEditor::Plugin *plugin);
void disablePluginGUI (KTextEditor::Plugin *plugin, KateView *view);
void disablePluginGUI (KTextEditor::Plugin *plugin);
private:
QMemArray<KTextEditor::Plugin *> m_plugins;
public:
bool readOnly () const { return m_bReadOnly; }
bool browserView () const { return m_bBrowserView; }
bool singleViewMode () const { return m_bSingleViewMode; }
KateBrowserExtension *browserExtension () { return m_extension; }
private:
// only to make part work, don't change it !
bool m_bSingleViewMode;
bool m_bBrowserView;
bool m_bReadOnly;
KateBrowserExtension *m_extension;
//
// KTextEditor::Document stuff
//
public:
KTextEditor::View *createView( QWidget *parent, const char *name );
QPtrList<KTextEditor::View> views () const;
inline KateView *activeView () const { return m_activeView; }
private:
QPtrList<KateView> m_views;
QPtrList<KTextEditor::View> m_textEditViews;
KateView *m_activeView;
/**
* set the active view.
*
* If @p view is allready the active view, nothing is done.
*
* If the document is modified on disk, ask the user what to do.
*
* @since Kate 2.4
*/
void setActiveView( KateView *view );
//
// KTextEditor::ConfigInterfaceExtension stuff
//
public slots:
uint configPages () const;
KTextEditor::ConfigPage *configPage (uint number = 0, QWidget *parent = 0, const char *name=0 );
QString configPageName (uint number = 0) const;
QString configPageFullName (uint number = 0) const;
QPixmap configPagePixmap (uint number = 0, int size = KIcon::SizeSmall) const;
//
// KTextEditor::EditInterface stuff
//
public slots:
QString text() const;
QString text ( uint startLine, uint startCol, uint endLine, uint endCol ) const;
QString text ( uint startLine, uint startCol, uint endLine, uint endCol, bool blockwise ) const;
QString textLine ( uint line ) const;
bool setText(const QString &);
bool clear ();
bool insertText ( uint line, uint col, const QString &s );
bool insertText ( uint line, uint col, const QString &s, bool blockwise );
bool removeText ( uint startLine, uint startCol, uint endLine, uint endCol );
bool removeText ( uint startLine, uint startCol, uint endLine, uint endCol, bool blockwise );
bool insertLine ( uint line, const QString &s );
bool removeLine ( uint line );
uint numLines() const;
uint numVisLines() const;
uint length () const;
int lineLength ( uint line ) const;
signals:
void textChanged ();
void charactersInteractivelyInserted(int ,int ,const QString&);
void charactersSemiInteractivelyInserted(int ,int ,const QString&);
void backspacePressed();
public:
//BEGIN editStart/editEnd (start, end, undo, cursor update, view update)
/**
* Enclose editor actions with @p editStart() and @p editEnd() to group
* them.
* @param withUndo if true, add undo history
*/
void editStart (bool withUndo = true);
/** Same as editStart() with undo */
void editBegin () { editStart(); }
/**
* End a editor operation.
* @see editStart()
*/
void editEnd ();
private:
bool m_isInUndo; ///< set to true in undo/redo
//END editStart/editEnd
//BEGIN LINE BASED INSERT/REMOVE STUFF (editStart() and editEnd() included)
public:
/**
* Add a string in the given line/column
* @param line line number
* @param col column
* @param s string to be inserted
* @return true on success
*/
bool editInsertText ( uint line, uint col, const QString &s );
/**
* Remove a string in the given line/column
* @param line line number
* @param col column
* @param len length of text to be removed
* @return true on success
*/
bool editRemoveText ( uint line, uint col, uint len );
/**
* Mark @p line as @p autowrapped. This is necessary if static word warp is
* enabled, because we have to know whether to insert a new line or add the
* wrapped words to the followin line.
* @param line line number
* @param autowrapped autowrapped?
* @return true on success
*/
bool editMarkLineAutoWrapped ( uint line, bool autowrapped );
/**
* Wrap @p line. If @p newLine is true, ignore the textline's flag
* KateTextLine::flagAutoWrapped and force a new line. Whether a new line
* was needed/added you can grab with @p newLineAdded.
* @param line line number
* @param col column
* @param newLine if true, force a new line
* @param newLineAdded return value is true, if new line was added (may be 0)
* @return true on success
*/
bool editWrapLine ( uint line, uint col, bool newLine = true, bool *newLineAdded = 0 );
/**
* Unwrap @p line. If @p removeLine is true, we force to join the lines. If
* @p removeLine is true, @p length is ignored (eg not needed).
* @param line line number
* @param removeLine if true, force to remove the next line
* @param length length of the line
* @return true on success
*/
bool editUnWrapLine ( uint line, bool removeLine = true, uint length = 0 );
/**
* Insert a string at the given line.
* @param line line number
* @param s string to insert
* @return true on success
*/
bool editInsertLine ( uint line, const QString &s );
/**
* Remove a line
* @param line line number
* @return true on success
*/
bool editRemoveLine ( uint line );
/**
* Remove a line
* @param startLine line to begin wrapping
* @param endLine line to stop wrapping
* @return true on success
*/
bool wrapText (uint startLine, uint endLine);
//END LINE BASED INSERT/REMOVE STUFF
signals:
/**
* Emitted each time text is inserted into a pre-existing line, including appends.
* Does not include newly inserted lines at the moment. ### needed?
*/
void editTextInserted ( uint line, uint col, uint len);
/**
* Emitted each time text is removed from a line, including truncates and space removal.
*/
void editTextRemoved ( uint line, uint col, uint len);
/**
* Emmitted when text from @p line was wrapped at position pos onto line @p nextLine.
*/
void editLineWrapped ( uint line, uint col, uint len );
/**
* Emitted each time text from @p nextLine was upwrapped onto @p line.
*/
void editLineUnWrapped ( uint line, uint col );
/**
* Emitted whenever a line is inserted before @p line, becoming itself line @ line.
*/
void editLineInserted ( uint line );
/**
* Emitted when a line is deleted.
*/
void editLineRemoved ( uint line );
private:
void undoStart();
void undoEnd();
void undoSafePoint();
private slots:
void undoCancel();
private:
void editAddUndo (KateUndoGroup::UndoType type, uint line, uint col, uint len, const QString &text);
uint editSessionNumber;
bool editIsRunning;
bool editWithUndo;
bool m_undoComplexMerge;
KateUndoGroup* m_editCurrentUndo;
//
// KTextEditor::UndoInterface stuff
//
public slots:
void undo ();
void redo ();
void clearUndo ();
void clearRedo ();
uint undoCount () const;
uint redoCount () const;
uint undoSteps () const;
void setUndoSteps ( uint steps );
private:
friend class KateTemplateHandler;
private:
QPtrList<KateSuperCursor> m_superCursors;
//
// some internals for undo/redo
//
QPtrList<KateUndoGroup> undoItems;
QPtrList<KateUndoGroup> redoItems;
bool m_undoDontMerge; //create a setter later on and remove the friend declaration
bool m_undoIgnoreCancel;
QTimer* m_undoMergeTimer;
// these two variables are for resetting the document to
// non-modified if all changes have been undone...
KateUndoGroup* lastUndoGroupWhenSaved;
KateUndoGroup* lastRedoGroupWhenSaved;
bool docWasSavedWhenUndoWasEmpty;
bool docWasSavedWhenRedoWasEmpty;
// this sets
void updateModified();
signals:
void undoChanged ();
void textInserted(int line,int column);
//
// KTextEditor::CursorInterface stuff
//
public slots:
KTextEditor::Cursor *createCursor ();
QPtrList<KTextEditor::Cursor> cursors () const;
private:
QPtrList<KTextEditor::Cursor> myCursors;
//
// KTextEditor::SearchInterface stuff
//
public slots:
bool searchText (unsigned int startLine, unsigned int startCol,
const QString &text, unsigned int *foundAtLine, unsigned int *foundAtCol,
unsigned int *matchLen, bool casesensitive = true, bool backwards = false);
bool searchText (unsigned int startLine, unsigned int startCol,
const QRegExp &regexp, unsigned int *foundAtLine, unsigned int *foundAtCol,
unsigned int *matchLen, bool backwards = false);
//
// KTextEditor::HighlightingInterface stuff
//
public slots:
uint hlMode ();
bool setHlMode (uint mode);
uint hlModeCount ();
QString hlModeName (uint mode);
QString hlModeSectionName (uint mode);
public:
void bufferHlChanged ();
private:
void setDontChangeHlOnSave();
signals:
void hlChanged ();
//
// Kate::ArbitraryHighlightingInterface stuff
//
public:
KateArbitraryHighlight* arbitraryHL() const { return m_arbitraryHL; };
private slots:
void tagArbitraryLines(KateView* view, KateSuperRange* range);
//
// KTextEditor::ConfigInterface stuff
//
public slots:
void readConfig ();
void writeConfig ();
void readConfig (KConfig *);
void writeConfig (KConfig *);
void readSessionConfig (KConfig *);
void writeSessionConfig (KConfig *);
void configDialog ();
//
// KTextEditor::MarkInterface and MarkInterfaceExtension
//
public slots:
uint mark( uint line );
void setMark( uint line, uint markType );
void clearMark( uint line );
void addMark( uint line, uint markType );
void removeMark( uint line, uint markType );
QPtrList<KTextEditor::Mark> marks();
void clearMarks();
void setPixmap( MarkInterface::MarkTypes, const QPixmap& );
void setDescription( MarkInterface::MarkTypes, const QString& );
QString markDescription( MarkInterface::MarkTypes );
QPixmap *markPixmap( MarkInterface::MarkTypes );
QColor markColor( MarkInterface::MarkTypes );
void setMarksUserChangable( uint markMask );
uint editableMarks();
signals:
void marksChanged();
void markChanged( KTextEditor::Mark, KTextEditor::MarkInterfaceExtension::MarkChangeAction );
private:
QIntDict<KTextEditor::Mark> m_marks;
QIntDict<QPixmap> m_markPixmaps;
QIntDict<QString> m_markDescriptions;
uint m_editableMarks;
//
// KTextEditor::PrintInterface
//
public slots:
bool printDialog ();
bool print ();
//
// KTextEditor::DocumentInfoInterface ( ### unfinished )
//
public:
/**
* @return the name of the mimetype for the document.
*
* This method is using KMimeType::findByURL, and if the pointer
* is then still the default MimeType for a nonlocal or unsaved file,
* uses mimeTypeForContent().
*
* @since Kate 2.3
*/
QString mimeType();
/**
* @return the calculated size in bytes that the document would have when saved to
* disk.
*
* @since Kate 2.3
* @todo implement this (it returns 0 right now)
*/
long fileSize();
/**
* @return the calculated size the document would have when saved to disk
* as a human readable string.
*
* @since Kate 2.3
* @todo implement this (it returns "UNKNOWN")
*/
QString niceFileSize();
/**
* @return a pointer to the KMimeType for this document, found by analyzing the
* actual content.
*
* Note that this method is *not* part of the DocumentInfoInterface.
*
* @since Kate 2.3
*/
KMimeType::Ptr mimeTypeForContent();
//
// KTextEditor::VariableInterface
//
public:
QString variable( const QString &name ) const;
signals:
void variableChanged( const QString &, const QString & );
private:
QMap<QString, QString> m_storedVariables;
//
// KParts::ReadWrite stuff
//
public:
bool openURL( const KURL &url );
/* Anders:
I reimplemented this, since i need to check if backup succeeded
if requested */
bool save();
/* Anders: Reimplemented to do kate specific stuff */
bool saveAs( const KURL &url );
bool openFile (KIO::Job * job);
bool openFile ();
bool saveFile ();
void setReadWrite ( bool readwrite = true );
void setModified( bool m );
private slots:
void slotDataKate ( KIO::Job* kio_job, const QByteArray &data );
void slotFinishedKate ( KIO::Job * job );
private:
void abortLoadKate();
void activateDirWatch ();
void deactivateDirWatch ();
QString m_dirWatchFile;
//
// Kate::Document stuff, this is all deprecated!!!!!!!!!!
//
public:
Kate::ConfigPage *colorConfigPage (QWidget *) { return 0; }
Kate::ConfigPage *fontConfigPage (QWidget *) { return 0; }
Kate::ConfigPage *indentConfigPage (QWidget *) { return 0; }
Kate::ConfigPage *selectConfigPage (QWidget *) { return 0; }
Kate::ConfigPage *editConfigPage (QWidget *) { return 0; }
Kate::ConfigPage *keysConfigPage (QWidget *) { return 0; }
Kate::ConfigPage *hlConfigPage (QWidget *) { return 0; }
Kate::ConfigPage *viewDefaultsConfigPage (QWidget *) { return 0; }
Kate::ConfigPage *saveConfigPage( QWidget * ) { return 0; }
Kate::ActionMenu *hlActionMenu (const QString& /* text */, QObject* /* parent */ = 0, const char* /* name */ = 0) { return 0; }
Kate::ActionMenu *exportActionMenu (const QString& /* text */, QObject* /* parent */ = 0, const char* /* name */ = 0) { return 0; }
public:
/**
* Type chars in a view
*/
bool typeChars ( KateView *type, const QString &chars );
/**
* gets the last line number (numLines() -1)
*/
inline uint lastLine() const { return numLines()-1; }
uint configFlags ();
void setConfigFlags (uint flags);
// Repaint all of all of the views
void repaintViews(bool paintOnlyDirty = true);
inline KateHighlighting *highlight () { return m_buffer->highlight(); }
inline KateHighlighting *highlight () const { return m_buffer->highlight(); }
public slots: //please keep prototypes and implementations in same order
void tagLines(int start, int end);
void tagLines(KateTextCursor start, KateTextCursor end);
//export feature, obsolute
public slots:
void exportAs(const QString&) { };
signals:
void modifiedChanged ();
void preHighlightChanged(uint);
private slots:
void internalHlChanged();
public:
void addView(KTextEditor::View *);
void removeView(KTextEditor::View *);
void addSuperCursor(class KateSuperCursor *, bool privateC);
void removeSuperCursor(class KateSuperCursor *, bool privateC);
bool ownedView(KateView *);
bool isLastView(int numViews);
uint currentColumn( const KateTextCursor& );
void newLine( KateTextCursor&, KateViewInternal * ); // Changes input
void backspace( KateView *view, const KateTextCursor& );
void del( KateView *view, const KateTextCursor& );
void transpose( const KateTextCursor& );
void paste ( KateView* view );
public:
void insertIndentChars ( KateView *view );
void indent ( KateView *view, uint line, int change );
void comment ( KateView *view, uint line, uint column, int change );
void align ( KateView *view, uint line );
enum TextTransform { Uppercase, Lowercase, Capitalize };
/**
Handling uppercase, lowercase and capitalize for the view.
If there is a selection, that is transformed, otherwise for uppercase or
lowercase the character right of the cursor is transformed, for capitalize
the word under the cursor is transformed.
*/
void transform ( KateView *view, const KateTextCursor &, TextTransform );
/**
Unwrap a range of lines.
*/
void joinLines( uint first, uint last );
private:
void optimizeLeadingSpace( uint line, int flags, int change );
void replaceWithOptimizedSpace( uint line, uint upto_column, uint space, int flags );
bool removeStringFromBegining(int line, QString &str);
bool removeStringFromEnd(int line, QString &str);
/**
Find the position (line and col) of the next char
that is not a space. If found line and col point to the found character.
Otherwise they have both the value -1.
@param line Line of the character which is examined first.
@param col Column of the character which is examined first.
@return True if the specified or a following character is not a space
Otherwise false.
*/
bool nextNonSpaceCharPos(int &line, int &col);
/**
Find the position (line and col) of the previous char
that is not a space. If found line and col point to the found character.
Otherwise they have both the value -1.
@return True if the specified or a preceding character is not a space.
Otherwise false.
*/
bool previousNonSpaceCharPos(int &line, int &col);
/**
* Sets a comment marker as defined by the language providing the attribute
* @p attrib on the line @p line
*/
void addStartLineCommentToSingleLine(int line, int attrib=0);
/**
* Removes a comment marker as defined by the language providing the attribute
* @p attrib on the line @p line
*/
bool removeStartLineCommentFromSingleLine(int line, int attrib=0);
/**
* @see addStartLineCommentToSingleLine.
*/
void addStartStopCommentToSingleLine(int line, int attrib=0);
/**
*@see removeStartLineCommentFromSingleLine.
*/
bool removeStartStopCommentFromSingleLine(int line, int attrib=0);
/**
*@see removeStartLineCommentFromSingleLine.
*/
bool removeStartStopCommentFromRegion(const KateTextCursor &start, const KateTextCursor &end, int attrib=0);
/**
* Add a comment marker as defined by the language providing the attribute
* @p attrib to each line in the selection.
*/
void addStartStopCommentToSelection( KateView *view, int attrib=0 );
/**
* @see addStartStopCommentToSelection.
*/
void addStartLineCommentToSelection( KateView *view, int attrib=0 );
/**
* Removes comment markers relevant to the language providing
* the attribuge @p attrib from each line in the selection.
*
* @return whether the operation succeded.
*/
bool removeStartStopCommentFromSelection( KateView *view, int attrib=0 );
/**
* @see removeStartStopCommentFromSelection.
*/
bool removeStartLineCommentFromSelection( KateView *view, int attrib=0 );
public:
QString getWord( const KateTextCursor& cursor );
public:
void tagAll();
void newBracketMark( const KateTextCursor& start, KateBracketRange& bm, int maxLines = -1 );
bool findMatchingBracket( KateTextCursor& start, KateTextCursor& end, int maxLines = -1 );
private:
void guiActivateEvent( KParts::GUIActivateEvent *ev );
public:
QString docName () {return m_docName;};
void setDocName (QString docName);
void lineInfo (KateLineInfo *info, unsigned int line);
KateCodeFoldingTree *foldingTree ();
public:
/**
* @return wheather the document is modified on disc since last saved.
*
* @since 3.3
*/
bool isModifiedOnDisc() { return m_modOnHd; };
/** @deprecated */
void isModOnHD( bool =false ) {};
void setModifiedOnDisk( int reason );
public slots:
/**
* Ask the user what to do, if the file has been modified on disc.
* Reimplemented from Kate::Document.
*
* @since 3.3
*/
void slotModifiedOnDisk( Kate::View *v=0 );
/**
* Reloads the current document from disc if possible
*/
void reloadFile();
private:
int m_isasking; // don't reenter slotModifiedOnDisk when this is true
// -1: ignore once, 0: false, 1: true
public slots:
void setEncoding (const QString &e);
QString encoding() const;
public slots:
void setWordWrap (bool on);
bool wordWrap ();
void setWordWrapAt (uint col);
uint wordWrapAt ();
public slots:
void setPageUpDownMovesCursor(bool on);
bool pageUpDownMovesCursor();
signals:
void modStateChanged (Kate::Document *doc);
void nameChanged (Kate::Document *doc);
public slots:
// clear buffer/filename - update the views
void flush ();
signals:
/**
* The file has been saved (perhaps the name has changed). The main window
* can use this to change its caption
*/
void fileNameChanged ();
public slots:
void applyWordWrap ();
// code folding
public:
inline uint getRealLine(unsigned int virtualLine)
{
return m_buffer->lineNumber (virtualLine);
}
inline uint getVirtualLine(unsigned int realLine)
{
return m_buffer->lineVisibleNumber (realLine);
}
inline uint visibleLines ()
{
return m_buffer->countVisible ();
}
inline KateTextLine::Ptr kateTextLine(uint i)
{
return m_buffer->line (i);
}
inline KateTextLine::Ptr plainKateTextLine(uint i)
{
return m_buffer->plainLine (i);
}
signals:
void codeFoldingUpdated();
void aboutToRemoveText(const KateTextRange&);
void textRemoved();
private slots:
void slotModOnHdDirty (const QString &path);
void slotModOnHdCreated (const QString &path);
void slotModOnHdDeleted (const QString &path);
private:
/**
* create a MD5 digest of the file, if it is a local file,
* and fill it into the string @p result.
* This is using KMD5::hexDigest().
*
* @return wheather the operation was attempted and succeded.
*
* @since 3.3
*/
bool createDigest ( QCString &result );
/**
* create a string for the modonhd warnings, giving the reason.
*
* @since 3.3
*/
QString reasonedMOHString() const;
/**
* Removes all trailing whitespace form @p line, if
* the cfRemoveTrailingDyn confg flag is set,
* and the active view cursor is not on line and behind
* the last nonspace character.
*
* @since 3.3
*/
void removeTrailingSpace( uint line );
public:
void updateFileType (int newType, bool user = false);
int fileType () const { return m_fileType; };
//
// REALLY internal data ;)
//
private:
// text buffer
KateBuffer *m_buffer;
KateArbitraryHighlight* m_arbitraryHL;
KateAutoIndent *m_indenter;
bool hlSetByUser;
bool m_modOnHd;
unsigned char m_modOnHdReason;
QCString m_digest; // MD5 digest, updated on load/save
QString m_docName;
int m_docNameNumber;
// file type !!!
int m_fileType;
bool m_fileTypeSetByUser;
/**
* document is still reloading a file
*/
bool m_reloading;
bool m_loading; ///< true in openFile() untill the data is read.
bool m_encodingSticky; ///< true when requests to set encoding should be ignored.
public slots:
void slotQueryClose_save(bool *handled, bool* abortClosing);
public:
void makeAttribs (bool needInvalidate = true);
static bool checkOverwrite( KURL u );
static void setDefaultEncoding (const QString &encoding);
void setEncodingSticky( bool e ) { m_encodingSticky = e; }
/**
* Configuration
*/
public:
inline KateDocumentConfig *config () { return m_config; };
void updateConfig ();
private:
KateDocumentConfig *m_config;
/**
* Variable Reader
* TODO add register functionality/ktexteditor interface
*/
private:
/**
* read dir config file
*/
void readDirConfig ();
/**
Reads all the variables in the document.
Called when opening/saving a document
*/
void readVariables(bool onlyViewAndRenderer = false);
/**
Reads and applies the variables in a single line
TODO registered variables gets saved in a [map]
*/
void readVariableLine( QString t, bool onlyViewAndRenderer = false );
/**
Sets a view variable in all the views.
*/
void setViewVariable( QString var, QString val );
/**
@return weather a string value could be converted
to a bool value as supported.
The value is put in *result.
*/
static bool checkBoolValue( QString value, bool *result );
/**
@return weather a string value could be converted
to a integer value.
The value is put in *result.
*/
static bool checkIntValue( QString value, int *result );
/**
Feeds value into @p col using QColor::setNamedColor() and returns
wheather the color is valid
*/
static bool checkColorValue( QString value, QColor &col );
/**
* helper regex to capture the document variables
*/
static QRegExp kvLine;
static QRegExp kvLineWildcard;
static QRegExp kvLineMime;
static QRegExp kvVar;
KIO::TransferJob *m_job;
KTempFile *m_tempFile;
// TemplateInterface
public:
bool setTabInterceptor(KateKeyInterceptorFunctor *interceptor); /* perhaps make it moregeneral like an eventfilter*/
bool removeTabInterceptor(KateKeyInterceptorFunctor *interceptor);
bool invokeTabInterceptor(KKey);
protected:
virtual bool insertTemplateTextImplementation ( uint line, uint column, const QString &templateString, const QMap<QString,QString> &initialValues, QWidget *parentWindow=0 );
KateKeyInterceptorFunctor *m_tabInterceptor;
protected slots:
void testTemplateCode();
void dumpRegionTree();
//BEGIN DEPRECATED
//
// KTextEditor::SelectionInterface stuff
// DEPRECATED, this will be removed for KDE 4.x !!!!!!!!!!!!!!!!!!!!
//
public slots:
bool setSelection ( uint startLine, uint startCol, uint endLine, uint endCol );
bool clearSelection ();
bool hasSelection () const;
QString selection () const;
bool removeSelectedText ();
bool selectAll();
//
// KTextEditor::SelectionInterfaceExt
//
int selStartLine();
int selStartCol();
int selEndLine();
int selEndCol();
// hack, only there to still support the deprecated stuff, will be removed for KDE 4.x
#undef signals
#define signals public
signals:
#undef signals
#define signals protected
void selectionChanged ();
//
// KTextEditor::BlockSelectionInterface stuff
// DEPRECATED, this will be removed for KDE 4.x !!!!!!!!!!!!!!!!!!!!
//
public slots:
bool blockSelectionMode ();
bool setBlockSelectionMode (bool on);
bool toggleBlockSelectionMode ();
private:
//END DEPRECATED
k_dcop:
uint documentNumber () const;
};
#endif
// kate: space-indent on; indent-width 2; replace-tabs on;