diff --git a/src/plugins/bookmarks/bookmark.h b/src/plugins/bookmarks/bookmark.h index dccb9eaf11c..41e116ad17e 100644 --- a/src/plugins/bookmarks/bookmark.h +++ b/src/plugins/bookmarks/bookmark.h @@ -59,6 +59,7 @@ public: void updateLineNumber(int lineNumber); void updateBlock(const QTextBlock &block); void removedFromEditor(); + TextEditor::ITextMark::Priority priority() const { return TextEditor::ITextMark::LowPriority; } QString filePath() const; QString fileName() const; diff --git a/src/plugins/debugger/breakpointmarker.h b/src/plugins/debugger/breakpointmarker.h index 7e20ac1b0d0..ccbf951f72c 100644 --- a/src/plugins/debugger/breakpointmarker.h +++ b/src/plugins/debugger/breakpointmarker.h @@ -52,6 +52,8 @@ public: void updateBlock(const QTextBlock &); void removedFromEditor(); void updateLineNumber(int lineNumber); + TextEditor::ITextMark::Priority priority() const { return TextEditor::ITextMark::NormalPriority; } + private: BreakpointId m_id; friend class BreakHandler; diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp index 18bf047ae32..3c6e210ce13 100644 --- a/src/plugins/debugger/debuggerengine.cpp +++ b/src/plugins/debugger/debuggerengine.cpp @@ -143,6 +143,7 @@ public: void updateLineNumber(int /*lineNumber*/) {} void updateBlock(const QTextBlock & /*block*/) {} void removedFromEditor() {} + TextEditor::ITextMark::Priority priority() const { return TextEditor::ITextMark::HighPriority; } }; diff --git a/src/plugins/debugger/disassembleragent.cpp b/src/plugins/debugger/disassembleragent.cpp index 6047530fac2..fa8f91d2e03 100644 --- a/src/plugins/debugger/disassembleragent.cpp +++ b/src/plugins/debugger/disassembleragent.cpp @@ -78,6 +78,8 @@ public: void updateBlock(const QTextBlock & /*block*/) {} void removedFromEditor() {} void documentClosing() {} + TextEditor::ITextMark::Priority priority() const + { return TextEditor::ITextMark::HighPriority; } }; class BreakpointMarker2 : public TextEditor::ITextMark @@ -90,6 +92,8 @@ public: void updateBlock(const QTextBlock &) {} void removedFromEditor() {} void documentClosing() {} + TextEditor::ITextMark::Priority priority() const + { return TextEditor::ITextMark::NormalPriority; } private: QIcon m_icon; diff --git a/src/plugins/debugger/sourceagent.cpp b/src/plugins/debugger/sourceagent.cpp index 338fe55261b..0ac9aee6610 100644 --- a/src/plugins/debugger/sourceagent.cpp +++ b/src/plugins/debugger/sourceagent.cpp @@ -84,6 +84,8 @@ public: void updateBlock(const QTextBlock & /*block*/) {} void removedFromEditor() {} void documentClosing() {} + TextEditor::ITextMark::Priority priority() const + { return TextEditor::ITextMark::HighPriority; } }; class SourceAgentPrivate diff --git a/src/plugins/texteditor/basetextdocumentlayout.cpp b/src/plugins/texteditor/basetextdocumentlayout.cpp index d0f99b48115..a7540edb363 100644 --- a/src/plugins/texteditor/basetextdocumentlayout.cpp +++ b/src/plugins/texteditor/basetextdocumentlayout.cpp @@ -378,6 +378,17 @@ void TextBlockUserData::setCodeFormatterData(CodeFormatterData *data) m_codeFormatterData = data; } +void TextBlockUserData::addMark(ITextMark *mark) +{ + int i = 0; + for ( ; i < m_marks.size(); ++i) { + if (mark->priority() < m_marks.at(i)->priority()) + break; + } + m_marks.insert(i, mark); +} + + BaseTextDocumentLayout::BaseTextDocumentLayout(QTextDocument *doc) :QPlainTextDocumentLayout(doc) { lastSaveRevision = 0; diff --git a/src/plugins/texteditor/basetextdocumentlayout.h b/src/plugins/texteditor/basetextdocumentlayout.h index 8a2b640836e..493fb7a2389 100644 --- a/src/plugins/texteditor/basetextdocumentlayout.h +++ b/src/plugins/texteditor/basetextdocumentlayout.h @@ -80,7 +80,7 @@ public: ~TextBlockUserData(); inline TextMarks marks() const { return m_marks; } - inline void addMark(ITextMark *mark) { m_marks += mark; } + void addMark(ITextMark *mark); inline bool removeMark(ITextMark *mark) { return m_marks.removeAll(mark); } inline bool hasMark(ITextMark *mark) const { return m_marks.contains(mark); } inline void clearMarks() { m_marks.clear(); } diff --git a/src/plugins/texteditor/basetextmark.cpp b/src/plugins/texteditor/basetextmark.cpp index 91ff0e82b68..2fd63de0d87 100644 --- a/src/plugins/texteditor/basetextmark.cpp +++ b/src/plugins/texteditor/basetextmark.cpp @@ -73,6 +73,11 @@ public: { m_parent->documentClosingFor(this); } + + virtual Priority priority() const + { + return m_parent->priority(); + } private: BaseTextMark *m_parent; }; diff --git a/src/plugins/texteditor/basetextmark.h b/src/plugins/texteditor/basetextmark.h index abc357b5465..8bf7a4c0066 100644 --- a/src/plugins/texteditor/basetextmark.h +++ b/src/plugins/texteditor/basetextmark.h @@ -35,17 +35,13 @@ #define BASETEXTMARK_H #include "texteditor_global.h" -#include +#include "itexteditor.h" QT_BEGIN_NAMESPACE class QIcon; class QTextBlock; QT_END_NAMESPACE -namespace Core { -class IEditor; -} - namespace TextEditor { class ITextMarkable; @@ -83,6 +79,8 @@ public: void moveMark(const QString &filename, int line); + virtual TextEditor::ITextMark::Priority priority() const = 0; + private slots: void init(); void editorOpened(Core::IEditor *editor); diff --git a/src/plugins/texteditor/itexteditor.h b/src/plugins/texteditor/itexteditor.h index 3a52f6008ef..ca2d667577d 100644 --- a/src/plugins/texteditor/itexteditor.h +++ b/src/plugins/texteditor/itexteditor.h @@ -67,6 +67,16 @@ public: virtual void updateBlock(const QTextBlock &block) = 0; virtual void removedFromEditor() = 0; virtual void documentClosing() = 0; + + // determine order on markers on the same line. + enum Priority + { + LowPriority, + NormalPriority, + HighPriority // shown on top. + }; + + virtual Priority priority() const = 0; }; typedef QList TextMarks;