Kate
katetemplatehandler.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _KATE_TEMPLATE_HANDLER_H_
00019 #define _KATE_TEMPLATE_HANDLER_H_
00020
00021 #include "katesmartrange.h"
00022 #include <QtCore/QPointer>
00023 #include <QtCore/QObject>
00024 #include <QtCore/QMap>
00025 #include <QtCore/QHash>
00026 #include <QtCore/QString>
00027 #include <QtCore/QList>
00028
00029 class KateDocument;
00030
00031 namespace KTextEditor {
00032 class SmartRange;
00033 }
00034
00035 class KateTemplateHandler: public QObject {
00036 Q_OBJECT
00037 public:
00038 KateTemplateHandler(KateDocument *doc,const KTextEditor::Cursor& position, const QString &templateString, const QMap<QString,QString> &initialValues);
00039 virtual ~KateTemplateHandler();
00040 inline bool initOk() {return m_initOk;}
00041 virtual bool operator()(int key);
00042 private:
00043 class KateTemplatePlaceHolder {
00044 public:
00045 KateTemplatePlaceHolder(bool isCursor,bool isInitialValue, bool isReplacableSpace) {
00046 this->isCursor=isCursor;
00047 this->isInitialValue=isInitialValue;
00048 this->isReplacableSpace=isReplacableSpace;
00049 }
00050 QList<KTextEditor::SmartRange*> ranges;
00051 bool isCursor;
00052 bool isInitialValue;
00053 bool isReplacableSpace;
00054 };
00055 class KateTemplateHandlerPlaceHolderInfo{
00056 public:
00057 KateTemplateHandlerPlaceHolderInfo():begin(0),len(0),placeholder(""){}
00058 KateTemplateHandlerPlaceHolderInfo(uint begin_,uint len_,const QString& placeholder_):begin(begin_),len(len_),placeholder(placeholder_){}
00059 uint begin;
00060 uint len;
00061 QString placeholder;
00062 };
00063 class KateDocument *const m_doc;
00064
00065
00066 QList<KateTemplatePlaceHolder*> m_tabOrder;
00067
00068
00069 QHash<QString, KateTemplatePlaceHolder*> m_dict;
00070
00071 void generateRangeTable(const KTextEditor::Cursor& insertPosition, const QString& insertString, const QList<KateTemplateHandlerPlaceHolderInfo> &buildList);
00072 int m_currentTabStop;
00073 KTextEditor::SmartRange *m_currentRange;
00074 void locateRange(const KTextEditor::Cursor &cursor, const KTextEditor::Cursor &cursor2 );
00075 bool m_initOk;
00076 bool m_recursion;
00077 KTextEditor::SmartRange* m_templateRange;
00078 private Q_SLOTS:
00079 void slotTextInserted(KTextEditor::Document*, const KTextEditor::Range&);
00080 void slotAboutToRemoveText(const KTextEditor::Range& range);
00081 void slotTextRemoved();
00082 void slotRangeDeleted(KTextEditor::SmartRange*);
00083 };
00084 #endif
00085
00086