1 /** @file Decoration.h
2  ** Visual elements added over text.
3  **/
4 // Copyright 1998-2007 by Neil Hodgson <neilh@scintilla.org>
5 // The License.txt file describes the conditions under which this software may be distributed.
6 
7 #ifndef DECORATION_H
8 #define DECORATION_H
9 
10 namespace Scintilla {
11 
12 class IDecoration {
13 public:
~IDecoration()14 	virtual ~IDecoration() {}
15 	virtual bool Empty() const noexcept = 0;
16 	virtual int Indicator() const noexcept = 0;
17 	virtual Sci::Position Length() const noexcept = 0;
18 	virtual int ValueAt(Sci::Position position) const noexcept = 0;
19 	virtual Sci::Position StartRun(Sci::Position position) const noexcept = 0;
20 	virtual Sci::Position EndRun(Sci::Position position) const noexcept = 0;
21 	virtual void SetValueAt(Sci::Position position, int value) = 0;
22 	virtual void InsertSpace(Sci::Position position, Sci::Position insertLength) = 0;
23 	virtual Sci::Position Runs() const noexcept = 0;
24 };
25 
26 class IDecorationList {
27 public:
~IDecorationList()28 	virtual ~IDecorationList() {}
29 
30 	virtual const std::vector<const IDecoration*> &View() const noexcept = 0;
31 
32 	virtual void SetCurrentIndicator(int indicator) = 0;
33 	virtual int GetCurrentIndicator() const noexcept = 0;
34 
35 	virtual void SetCurrentValue(int value) = 0;
36 	virtual int GetCurrentValue() const noexcept = 0;
37 
38 	// Returns with changed=true if some values may have changed
39 	virtual FillResult<Sci::Position> FillRange(Sci::Position position, int value, Sci::Position fillLength) = 0;
40 	virtual void InsertSpace(Sci::Position position, Sci::Position insertLength) = 0;
41 	virtual void DeleteRange(Sci::Position position, Sci::Position deleteLength) = 0;
42 	virtual void DeleteLexerDecorations() = 0;
43 
44 	virtual int AllOnFor(Sci::Position position) const noexcept = 0;
45 	virtual int ValueAt(int indicator, Sci::Position position) noexcept = 0;
46 	virtual Sci::Position Start(int indicator, Sci::Position position) noexcept = 0;
47 	virtual Sci::Position End(int indicator, Sci::Position position) noexcept = 0;
48 
49 	virtual bool ClickNotified() const noexcept = 0;
50 	virtual void SetClickNotified(bool notified) noexcept = 0;
51 };
52 
53 std::unique_ptr<IDecoration> DecorationCreate(bool largeDocument, int indicator);
54 
55 std::unique_ptr<IDecorationList> DecorationListCreate(bool largeDocument);
56 
57 }
58 
59 #endif
60