Kate
katerenderrange.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
00019
00020 #ifndef KATERENDERRANGE_H
00021 #define KATERENDERRANGE_H
00022
00023 #include <ktexteditor/cursor.h>
00024 #include <ktexteditor/attribute.h>
00025
00026 #include <QtCore/QStack>
00027 #include <QtCore/QList>
00028 #include <QtCore/QPair>
00029
00030 class KateSmartRange;
00031 class KateView;
00032 class RenderRangeList;
00033
00034 class KateRenderRange
00035 {
00036 public:
00037 virtual ~KateRenderRange() {}
00038 virtual KTextEditor::Cursor nextBoundary() const = 0;
00039 virtual bool advanceTo(const KTextEditor::Cursor& pos) = 0;
00040 virtual KTextEditor::Attribute::Ptr currentAttribute() const = 0;
00041 virtual bool isReady() const;
00042 };
00043
00044 class SmartRenderRange : public KateRenderRange
00045 {
00046 public:
00047 SmartRenderRange(KateSmartRange* range, bool useDynamic, KateView* view, RenderRangeList* list);
00048
00049 virtual KTextEditor::Cursor nextBoundary() const;
00050 virtual bool advanceTo(const KTextEditor::Cursor& pos);
00051 virtual KTextEditor::Attribute::Ptr currentAttribute() const;
00052 virtual bool isReady() const;
00053
00054 private:
00055 SmartRenderRange(KTextEditor::SmartRange* range, const SmartRenderRange& cloneFrom);
00056 void addTo(KTextEditor::SmartRange* range, bool intermediate = false) const;
00057
00058 mutable KTextEditor::SmartRange* m_currentRange, *m_endAtRange;
00059 mutable KTextEditor::Cursor m_currentPos;
00060 mutable QStack<KTextEditor::Attribute::Ptr> m_attribs;
00061 const KateView* m_view;
00062 const bool m_useDynamic;
00063 RenderRangeList* m_list;
00064 QSet<KTextEditor::SmartRange*> m_ignoreChildRanges;
00065 };
00066
00067 typedef QPair<KTextEditor::Range*,KTextEditor::Attribute::Ptr> pairRA;
00068
00069 class NormalRenderRange : public KateRenderRange
00070 {
00071 public:
00072 NormalRenderRange();
00073 virtual ~NormalRenderRange();
00074
00075 void addRange(KTextEditor::Range* range, KTextEditor::Attribute::Ptr attribute);
00076
00077 virtual KTextEditor::Cursor nextBoundary() const;
00078 virtual bool advanceTo(const KTextEditor::Cursor& pos);
00079 virtual KTextEditor::Attribute::Ptr currentAttribute() const;
00080
00081 private:
00082 mutable QList<pairRA> m_ranges;
00083 mutable KTextEditor::Cursor m_currentPos;
00084 mutable int m_currentRange;
00085 };
00086
00087 class RenderRangeList : public QList<KateRenderRange*>
00088 {
00089 public:
00090 ~RenderRangeList();
00091 void appendRanges(const QList<KTextEditor::SmartRange*>& startingRanges, bool useDynamic, KateView* view);
00092 KTextEditor::Cursor nextBoundary() const;
00093 void advanceTo(const KTextEditor::Cursor& pos);
00094 bool hasAttribute() const;
00095 KTextEditor::Attribute::Ptr generateAttribute() const;
00096
00097 private:
00098 KTextEditor::Cursor m_currentPos;
00099 };
00100
00101 #endif