summaryrefslogtreecommitdiffstats
path: root/quanta/src/document.h
diff options
context:
space:
mode:
Diffstat (limited to 'quanta/src/document.h')
-rw-r--r--quanta/src/document.h352
1 files changed, 352 insertions, 0 deletions
diff --git a/quanta/src/document.h b/quanta/src/document.h
new file mode 100644
index 00000000..7b6ef151
--- /dev/null
+++ b/quanta/src/document.h
@@ -0,0 +1,352 @@
+/***************************************************************************
+ document.h - description
+ -------------------
+ begin : Tue Jun 6 2000
+ copyright : (C) 2000 by Dmitry Poplavsky & Alexander Yakovlev & Eric Laffoon <pdima@users.sourceforge.net,yshurik@penguinpowered.com,sequitur@easystreet.com>
+ (C) 2001-2004 Andras Mantia <amantia@kde.org>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef DOCUMENT_H
+#define DOCUMENT_H
+
+//qt includes
+#include <qdatetime.h>
+#include <qdict.h>
+#include <qmap.h>
+#include <qwidget.h>
+
+#include <kurl.h>
+#include <ktexteditor/markinterfaceextension.h>
+
+//own includes
+#include "qtag.h"
+
+/**
+ *@author Dmitry Poplavsky & Alexander Yakovlev & Eric Laffoon & Andras Mantia
+ */
+
+class QDomDocument;
+class QEvent;
+class QFocusEvent;
+class QTextCodec;
+class QStringList;
+class KConfig;
+class KTempFile;
+class KURL;
+class Tag;
+class Node;
+class Project;
+class undoRedo;
+struct AreaStruct;
+struct DTDStruct;
+
+namespace KTextEditor
+{
+ class CodeCompletionInterface;
+ class CompletionEntry;
+ class ConfigInterface;
+ class Document;
+ class EditInterface;
+ class EditInterfaceExt;
+ class EncodingInterface;
+ class MarkInterface;
+ class SelectionInterface;
+ class SelectionInterfaceExt;
+ class View;
+ class ViewCursorInterface;
+ class Mark;
+}
+
+class Document : public QWidget{
+ Q_OBJECT
+
+public:
+ Document(KTextEditor::Document *doc,
+ QWidget *parent = 0, const char *name = 0, WFlags f=0);
+ ~Document();
+
+ KURL url();
+
+ bool isUntitled();
+ void setUntitledUrl(const QString &url);
+ /** Returns tag name at specified position */
+ QString getTagNameAt(int line, int col );
+
+ void selectText(int x1, int y1, int x2, int y2 );
+ void replaceSelected(const QString &s);
+
+ /** insert tag in document */
+ void insertTag(const QString &s1, const QString &s2 = QString::null);
+ /** Change the current tag's attributes with those from dict */
+ void changeTag(Tag *tag, QDict<QString> *dict );
+ /**Change the attr value of the called attrName to attrValue*/
+ void changeTagAttribute(Tag *tag, const QString& attrName, const QString&attrValue);
+ /**Change the namespace in a tag. Add if it's not present, or remove if the
+ namespace argument is empty*/
+ void changeTagNamespace(Tag *tag, const QString& nameSpace);
+ /** Insert the content of the url into the document. */
+ void insertFile(const KURL& url);
+ /** Inserts text at the current cursor position */
+ void insertText(const QString &text, bool adjustCursor = true, bool reparse = true);
+ /** Recursively insert the mandatory childs of tag. Returns true if a child was
+ inserted.*/
+ bool insertChildTags(QTag *tag, QTag* lastTag = 0L);
+
+ QPoint getGlobalCursorPos();
+ QString find(const QRegExp& rx, int sLine, int sCol, int& fbLine, int&fbCol, int &feLine, int&feCol);
+ QString findRev(const QRegExp& rx, int sLine, int sCol, int& fbLine, int&fbCol, int &feLine, int&feCol);
+ /** Get the view of the document */
+ KTextEditor::View* view();
+ /** Get the KTextEditor::Document of the document */
+ KTextEditor::Document* doc();
+ /** Sets the modifiedFlag value. */
+ void setModified(bool flag);
+ /** Returns true if the document was modified. */
+ bool isModified();
+
+ /** Creates a temporary file where the editor content is saved.
+ */
+ void createTempFile();
+ /** Closes and removes the temporary file. */
+ void closeTempFile();
+ /** Returns the name of the temporary file, QString::null if no temporary file exists. */
+ QString tempFileName();
+
+ /** Returns the DTD identifier for the document */
+ QString getDTDIdentifier();
+ /** Sets the DTD identifier */
+ void setDTDIdentifier(const QString &id);
+ /** Get a pointer to the current active DTD. If fallback is true, this always gives back a valid and known DTD pointer: the active, the document specified and in last case the application default document type. */
+ const DTDStruct* currentDTD(bool fallback = true);
+ /** Get a pointer to the default DTD (document, or app). */
+ const DTDStruct* defaultDTD() const;
+ /** Find the DTD name for a part of the document. */
+ QString findDTDName(Tag **tag);
+ /** Retrives the text from the specified rectangle. The KTextEditor::EditInterface::text seems to not
+work correctly. */
+ QString text(int bLine, int bCol, int eLine, int eCol) const;
+ /** Same as the above, but using AreaStruct as an argument */
+ QString text(const AreaStruct &area) const;
+ /** Code completion was requested by the user. */
+ void codeCompletionRequested();
+ /** Bring up the code completion tooltip. */
+ void codeCompletionHintRequested();
+ /** Returns the dirty status. */
+ bool dirty() const {return m_dirty;};
+ void setDirtyStatus(bool status) {m_dirty = status;};
+ /** Ask for user confirmation if the file was changed outside. */
+ void checkDirtyStatus();
+ /** Save the document and reset the dirty status. */
+ void save();
+ /** Save the document under a new name and calculate the new md5sum. */
+ bool saveAs(const KURL& url);
+ /** Enable or disable the visibility of groups for a DTEP.*/
+ void enableGroupsForDTEP(const QString& dtepName, bool enable = true);
+ /** Clears the selected DTEP list */
+ void resetGroupsForDTEPList();
+ /** Find the word until the first word boundary backwards */
+ QString findWordRev(const QString& textToSearch, const DTDStruct *dtd = 0L);
+ /** Returns the changed status since the last query. Resets changed.*/
+ bool hasChanged();
+ /** Sets the changed status.*/
+ void setChanged(bool newStatus);
+ /** Paste the contents of clipboard into the document */
+ void paste();
+
+ /** disable/enable the parser*/
+ void activateParser(bool activation) {reparseEnabled = activation;}
+ bool parserActivated() {return reparseEnabled;}
+
+ /** returns all the areas that are between tag and it's closing pair */
+ QStringList tagAreas(const QString &tag, bool includeCoordinates, bool skipFoundContent);
+
+ /** disable/enable the repaint of the Kate view */
+ void activateRepaintView(bool activation);
+ bool RepaintViewActivated() {return repaintEnabled;}
+
+ void setErrorMark(int line);
+ void clearErrorMarks();
+ void convertCase();
+
+ /** returns the word under the cursor */
+ QString currentWord();
+ /** Opens the url. The url must be valid and the file pointed to it must exists. */
+ void open(const KURL &url, const QString &encoding);
+ /**
+ * Opens a file in the editor part.
+ * @param url
+ */
+ bool openURL(const KURL& url);
+ /** Reads the DTD info from the file, tries to find the correct DTD and builds the tag/attribute list from the DTD file. */
+ void processDTD(const QString& documentType = QString::null);
+
+ /** Resets the list of DTEPs found in the document */
+ void resetDTEPs();
+ /** Adds a DTEP to the list of DTEPs present in the document */
+ void addDTEP(const QString &dtepName);
+ /** Returns the list of DTEPs that should appear in the structure tree. By default
+ this is the list of DTEPs present in the document, but the user can turn on/
+ off them with the help of RMB->Show Groups For in the structure tree */
+ QStringList groupsForDTEPs();
+
+ bool busy;
+
+ KTextEditor::ViewCursorInterface *viewCursorIf;
+ KTextEditor::SelectionInterface *selectionIf;
+ KTextEditor::SelectionInterfaceExt *selectionIfExt;
+ KTextEditor::EditInterface *editIf;
+ KTextEditor::EncodingInterface *encodingIf;
+ KTextEditor::EditInterfaceExt *editIfExt;
+ KTextEditor::CodeCompletionInterface *codeCompletionIf;
+ KTextEditor::ConfigInterface* configIf;
+ KTextEditor::MarkInterface* markIf;
+
+ /** Hold the list of user tags (real or not, like functions) that are in the document*/
+ QTagList userTagList;
+ /** The undo/redo stack */
+ undoRedo *docUndoRedo;
+
+ bool isBackedUp();
+ /** Creates an automatic backup copy for the crash recovering mechanism */
+ void createBackup(KConfig* config);
+ /** No descriptions */
+ QString backupPathEntryValue();
+ /** No descriptions */
+ void setBackupPathEntryValue(const QString& ev);
+ /** Removes automatic backup copies */
+ void removeBackup(KConfig *config);
+ /** create a string using document path string */
+ static QString hashFilePath(const QString& p);
+ QString annotationText(uint line);
+ void setAnnotationText(uint line, const QString& text);
+ QMap<uint, QPair<QString, QString> > annotations() {return m_annotations;}
+ void addAnnotation(uint line, const QPair<QString, QString>& annotation);
+ void clearAnnotations();
+
+public slots:
+
+ /** Called after a completion is inserted */
+ void slotCompletionDone( KTextEditor::CompletionEntry completion );
+ /** Called when a user selects a completion, we then can modify it */
+ void slotFilterCompletion(KTextEditor::CompletionEntry*,QString *);
+ /** Called whenever a user inputs text */
+ void slotCharactersInserted(int ,int ,const QString&);
+ /** Called when the code completion is aborted.*/
+ void slotCompletionAborted();
+ /** Called whenever the text in the document is changed. */
+ void slotTextChanged();
+ /** Handle the text changed events. Usually called from slotTextChanged,
+ but it's possible to force the handling by calling manually and setting
+ forced to true. */
+ void slotDelayedTextChanged(bool forced = false);
+ void slotDelayedScriptAutoCompletion();
+ void slotDelayedShowCodeCompletion();
+
+signals:
+ /** Emitted when the internal text editor got the focus */
+ void editorGotFocus();
+ void openingFailed(const KURL &url);
+ void openingCompleted(const KURL &url);
+
+ void breakpointMarked(Document*, int);
+ void breakpointUnmarked(Document*, int);
+ void showAnnotation(uint, const QString&, const QPair<QString, QString>&);
+
+private slots:
+ void slotReplaceChar();
+ void slotOpeningCompleted();
+ void slotOpeningFailed(const QString &errorMessage);
+ /** Called when a file on the disk has changed. */
+ void slotFileDirty(const QString& fileName);
+
+ void slotMarkChanged(KTextEditor::Mark mark, KTextEditor::MarkInterfaceExtension::MarkChangeAction action);
+private:
+ /**
+ * Finds the beginning of a tag in the document, starting from a position.
+ * @param position start to look from this position backwards
+ * @return the position of the starting character or an empty QPoint if not found
+ */
+ QPoint findTagBeginning(const QPoint& position);
+ QPoint findTagEnd(const QPoint& position);
+
+
+
+ QMap<uint, QPair<QString, QString> > m_annotations;
+ QString untitledUrl;
+ int m_replaceLine;
+ int m_replaceCol;
+ QString m_replaceStr;
+
+ KTextEditor::Document *m_doc;
+ KTextEditor::View *m_view;
+
+ KTempFile *tempFile;
+ QString m_tempFileName;
+ QDateTime m_modifTime;
+ /* path of the backup copy file of the document */
+ QString m_backupPathValue;
+ QString dtdName;
+ QString m_encoding;
+ QTextCodec *m_codec;
+/*The DTD valid in the place where the completion was invoked.*/
+ const DTDStruct *completionDTD;
+
+ bool changed;
+ bool completionInProgress;
+ bool completionRequested; ///< true if the code completion was explicitely requested by the user
+ bool argHintVisible;
+ bool hintRequested;
+ bool reparseEnabled;
+ bool repaintEnabled;
+ bool delayedTextChangedEnabled;
+ /** True if the document is dirty (has been modified outside). */
+ bool m_dirty;
+ QString m_md5sum;
+ Project *m_project;
+ /** Parse the document according to this DTD. */
+ QStringList m_groupsForDTEPs; ///< The list of the DTEPs for which the groups should appear in the structure tree
+ QStringList m_DTEPList; ///< The list of all DTEPs found in the document
+ //stores the data after an autocompletion. Used when bringing up the
+ //autocompletion box delayed with the singleshot timer (workaround for
+ //a bug: the box is not showing up if it is called from slotCompletionDone)
+ int m_lastLine, m_lastCol;
+ QValueList<KTextEditor::CompletionEntry>* m_lastCompletionList;
+
+ /** Get list of possibile variable name completions */
+ QValueList<KTextEditor::CompletionEntry>* getGroupCompletions(Node *node, const StructTreeGroup& groupName, int line, int col);
+ /** Get list of possibile tag name completions */
+ QValueList<KTextEditor::CompletionEntry>* getTagCompletions(int line, int col);
+ /** Get list of possibile tag attribute completions */
+ QValueList<KTextEditor::CompletionEntry>* getAttributeCompletions(const QString& tagName,const QString& startsWith=QString::null);
+ /** Get list of possibile tag attribute value completions */
+ QValueList<KTextEditor::CompletionEntry>* getAttributeValueCompletions(const QString& tagName, const QString& attribute, const QString& startsWith=QString::null);
+ /** Get list of possibile completions in normal text input (nt creating a tag) */
+ QValueList<KTextEditor::CompletionEntry>* getCharacterCompletions(const QString& starstWith=QString::null);
+ /** Invoke code completion dialog for XML like tags according to the position (line, col), using DTD dtd. */
+ bool xmlCodeCompletion(int line, int col);
+ /** Returns list of values for attribute. If deleteResult is true after the call,
+ the caller must delete the returned list. */
+ QStringList* tagAttributeValues(const QString& dtdName, const QString& tag, const QString& attribute, bool &deleteResult);
+ /** Brings up list of code completions */
+ void showCodeCompletions( QValueList<KTextEditor::CompletionEntry> *completions );
+ /** Called whenever a user inputs text in an XML type document. */
+ bool xmlAutoCompletion(int , int , const QString & );
+ /** Called whenever a user inputs text in a script type document. */
+ bool scriptAutoCompletion(int line, int col, const QString &insertedString);
+ /** Returns true if the number of " (excluding \") inside text is even. */
+ bool evenQuotes(const QString &text);
+ void handleCodeCompletion();
+ bool isDerivatedFrom(const QString& className, const QString &baseClass);
+};
+
+#endif
+