1 // Scintilla source code edit control 2 /** @file EditModel.h 3 ** Defines the editor state that must be visible to EditorView. 4 **/ 5 // Copyright 1998-2014 by Neil Hodgson <[email protected]> 6 // The License.txt file describes the conditions under which this software may be distributed. 7 8 #ifndef EDITMODEL_H 9 #define EDITMODEL_H 10 11 namespace Scintilla { 12 13 /** 14 */ 15 class Caret { 16 public: 17 bool active; 18 bool on; 19 int period; 20 21 Caret() noexcept; 22 }; 23 24 class EditModel { 25 public: 26 bool inOverstrike; 27 int xOffset; ///< Horizontal scrolled amount in pixels 28 bool trackLineWidth; 29 30 SpecialRepresentations reprs; 31 Caret caret; 32 SelectionPosition posDrag; 33 Sci::Position braces[2]; 34 int bracesMatchStyle; 35 int highlightGuideColumn; 36 Selection sel; 37 bool primarySelection; 38 39 enum IMEInteraction { imeWindowed, imeInline } imeInteraction; 40 enum class CharacterSource { directInput, tentativeInput, imeResult }; 41 enum class Bidirectional { bidiDisabled, bidiL2R, bidiR2L } bidirectional; 42 43 int foldFlags; 44 int foldDisplayTextStyle; 45 UniqueString defaultFoldDisplayText; 46 std::unique_ptr<IContractionState> pcs; 47 // Hotspot support 48 Range hotspot; 49 Sci::Position hoverIndicatorPos; 50 51 // Wrapping support 52 int wrapWidth; 53 54 Document *pdoc; 55 56 EditModel(); 57 // Deleted so EditModel objects can not be copied. 58 EditModel(const EditModel &) = delete; 59 EditModel(EditModel &&) = delete; 60 EditModel &operator=(const EditModel &) = delete; 61 EditModel &operator=(EditModel &&) = delete; 62 virtual ~EditModel(); 63 virtual Sci::Line TopLineOfMain() const = 0; 64 virtual Point GetVisibleOriginInMain() const = 0; 65 virtual Sci::Line LinesOnScreen() const = 0; 66 virtual Range GetHotSpotRange() const noexcept = 0; 67 bool BidirectionalEnabled() const noexcept; 68 bool BidirectionalR2L() const noexcept; 69 void SetDefaultFoldDisplayText(const char *text); 70 const char *GetDefaultFoldDisplayText() const noexcept; 71 const char *GetFoldDisplayText(Sci::Line lineDoc) const noexcept; 72 }; 73 74 } 75 76 #endif 77