1 // Scintilla source code edit control
2 /** @file ContractionState.h
3  ** Manages visibility of lines for folding and wrapping.
4  **/
5 // Copyright 1998-2007 by Neil Hodgson <neilh@scintilla.org>
6 // The License.txt file describes the conditions under which this software may be distributed.
7 
8 #ifndef CONTRACTIONSTATE_H
9 #define CONTRACTIONSTATE_H
10 
11 #ifdef SCI_NAMESPACE
12 namespace Scintilla {
13 #endif
14 
15 template<class T>
16 class SparseVector;
17 
18 /**
19  */
20 class ContractionState {
21 	// These contain 1 element for every document line.
22 	std::unique_ptr<RunStyles> visible;
23 	std::unique_ptr<RunStyles> expanded;
24 	std::unique_ptr<RunStyles> heights;
25 	std::unique_ptr<SparseVector<UniqueString>> foldDisplayTexts;
26 	std::unique_ptr<Partitioning> displayLines;
27 	Sci::Line linesInDocument;
28 
29 	void EnsureData();
30 
OneToOne()31 	bool OneToOne() const {
32 		// True when each document line is exactly one display line so need for
33 		// complex data structures.
34 		return visible == nullptr;
35 	}
36 
37 public:
38 	ContractionState();
39 	// Deleted so ContractionState objects can not be copied.
40 	ContractionState(const ContractionState &) = delete;
41 	void operator=(const ContractionState &) = delete;
42 	virtual ~ContractionState();
43 
44 	void Clear();
45 
46 	Sci::Line LinesInDoc() const;
47 	Sci::Line LinesDisplayed() const;
48 	Sci::Line DisplayFromDoc(Sci::Line lineDoc) const;
49 	Sci::Line DisplayLastFromDoc(Sci::Line lineDoc) const;
50 	Sci::Line DocFromDisplay(Sci::Line lineDisplay) const;
51 
52 	void InsertLine(Sci::Line lineDoc);
53 	void InsertLines(Sci::Line lineDoc, Sci::Line lineCount);
54 	void DeleteLine(Sci::Line lineDoc);
55 	void DeleteLines(Sci::Line lineDoc, Sci::Line lineCount);
56 
57 	bool GetVisible(Sci::Line lineDoc) const;
58 	bool SetVisible(Sci::Line lineDocStart, Sci::Line lineDocEnd, bool isVisible);
59 	bool HiddenLines() const;
60 
61 	const char *GetFoldDisplayText(Sci::Line lineDoc) const;
62 	bool SetFoldDisplayText(Sci::Line lineDoc, const char *text);
63 
64 	bool GetExpanded(Sci::Line lineDoc) const;
65 	bool SetExpanded(Sci::Line lineDoc, bool isExpanded);
66 	bool GetFoldDisplayTextShown(Sci::Line lineDoc) const;
67 	Sci::Line ContractedNext(Sci::Line lineDocStart) const;
68 
69 	int GetHeight(Sci::Line lineDoc) const;
70 	bool SetHeight(Sci::Line lineDoc, int height);
71 
72 	void ShowAll();
73 	void Check() const;
74 };
75 
76 #ifdef SCI_NAMESPACE
77 }
78 #endif
79 
80 #endif
81