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