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 <neilh@scintilla.org>
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