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 "katekeyinterceptorfunctor.h"
00023 #include <QtCore/QPointer>
00024 #include <QtCore/QObject>
00025 #include <QtCore/QMap>
00026 #include <QtCore/QHash>
00027 #include <QtCore/QString>
00028 #include <QtCore/QList>
00029
00030 class KateDocument;
00031
00032 namespace KTextEditor {
00033 class SmartRange;
00034 }
00035
00036 class KateTemplateHandler: public QObject, public KateKeyInterceptorFunctor {
00037 Q_OBJECT
00038 public:
00039 KateTemplateHandler(KateDocument *doc,const KTextEditor::Cursor& position, const QString &templateString, const QMap<QString,QString> &initialValues);
00040 virtual ~KateTemplateHandler();
00041 inline bool initOk() {return m_initOk;}
00042 virtual bool operator()(int key);
00043 private:
00044 class KateTemplatePlaceHolder {
00045 public:
00046 KateTemplatePlaceHolder(bool isCursor,bool isInitialValue, bool isReplacableSpace) {
00047 this->isCursor=isCursor;
00048 this->isInitialValue=isInitialValue;
00049 this->isReplacableSpace=isReplacableSpace;
00050 }
00051 QList<KTextEditor::SmartRange*> ranges;
00052 bool isCursor;
00053 bool isInitialValue;
00054 bool isReplacableSpace;
00055 };
00056 class KateTemplateHandlerPlaceHolderInfo{
00057 public:
00058 KateTemplateHandlerPlaceHolderInfo():begin(0),len(0),placeholder(""){}
00059 KateTemplateHandlerPlaceHolderInfo(uint begin_,uint len_,const QString& placeholder_):begin(begin_),len(len_),placeholder(placeholder_){}
00060 uint begin;
00061 uint len;
00062 QString placeholder;
00063 };
00064 class KateDocument *m_doc;
00065
00066
00067 QList<KateTemplatePlaceHolder*> m_tabOrder;
00068
00069
00070 QHash<QString, KateTemplatePlaceHolder*> m_dict;
00071
00072 void generateRangeTable(const KTextEditor::Cursor& insertPosition, const QString& insertString, const QList<KateTemplateHandlerPlaceHolderInfo> &buildList);
00073 int m_currentTabStop;
00074 KTextEditor::SmartRange *m_currentRange;
00075 void locateRange(const KTextEditor::Cursor &cursor );
00076 bool m_initOk;
00077 bool m_recursion;
00078 KTextEditor::SmartRange* m_templateRange;
00079 private Q_SLOTS:
00080 void slotTextInserted(KTextEditor::Document*, const KTextEditor::Range&);
00081 void slotDocumentDestroyed();
00082 void slotAboutToRemoveText(const KTextEditor::Range& range);
00083 void slotTextRemoved();
00084 void slotRangeDeleted(KTextEditor::SmartRange*);
00085 };
00086 #endif