1 /** DGui project file.
2
3 Copyright: Trogu Antonio Davide 2011-2013
4
5 License: $(HTTP boost.org/LICENSE_1_0.txt, Boost License 1.0).
6
7 Authors: Trogu Antonio Davide
8 */
9 module dgui.core.controls.textcontrol;
10
11 public import dgui.core.controls.subclassedcontrol;
12
13 abstract class TextControl: SubclassedControl
14 {
15 public Event!(Control, EventArgs) textChanged;
16
17 public void appendText(string s)
18 {
19 if(this.created)
20 {
21 this.sendMessage(EM_REPLACESEL, true, cast(LPARAM)toUTFz!(wchar*)(s));
22 }
23 else
24 {
25 this._text ~= s;
26 }
27 }
28
29 @property public final bool readOnly()
30 {
31 return cast(bool)(this.getStyle() & ES_READONLY);
32 }
33
34 @property public final void readOnly(bool b)
35 {
36 this.setStyle(ES_READONLY, b);
37 }
38
39 public void undo()
40 {
41 this.sendMessage(EM_UNDO, 0, 0);
42 }
43
44 public void cut()
45 {
46 this.sendMessage(WM_CUT, 0, 0);
47 }
48
49 public void copy()
50 {
51 this.sendMessage(WM_COPY, 0, 0);
52 }
53
54 public void paste()
55 {
56 this.sendMessage(WM_PASTE, 0, 0);
57 }
58
59 public void selectAll()
60 {
61 this.sendMessage(EM_SETSEL, 0, -1);
62 }
63
64 public void clear()
65 {
66 this.sendMessage(WM_CLEAR, 0, 0);
67 }
68
69 @property public bool modified()
70 {
71 if(this.created)
72 {
73 return cast(bool)this.sendMessage(EM_GETMODIFY, 0, 0);
74 }
75
76 return false;
77 }
78
79 @property public void modified(bool b)
80 {
81 this.sendMessage(EM_SETMODIFY, b, 0);
82 }
83
84 @property public int textLength()
85 {
86 if(this.created)
87 {
88 return getWindowTextLength(this._handle);
89 }
90
91 return this._text.length;
92 }
93
94 @property public final string selectedText()
95 {
96 CHARRANGE chrg = void; //Inizializzata sotto
97
98 this.sendMessage(EM_EXGETSEL, 0, cast(LPARAM)&chrg);
99 return this.text[chrg.cpMin..chrg.cpMax];
100 }
101
102 @property public final int selectionStart()
103 {
104 CHARRANGE chrg = void; //Inizializzata sotto
105
106 this.sendMessage(EM_EXGETSEL, 0, cast(LPARAM)&chrg);
107 return chrg.cpMin;
108 }
109
110 @property public final int selectionLength()
111 {
112 CHARRANGE chrg = void; //Inizializzata sotto
113
114 this.sendMessage(EM_EXGETSEL, 0, cast(LPARAM)&chrg);
115 return chrg.cpMax - chrg.cpMin;
116 }
117
118 protected override void createControlParams(ref CreateControlParams ccp)
119 {
120 this.setStyle(WS_TABSTOP, true);
121 ccp.defaultBackColor = SystemColors.colorWindow;
122
123 super.createControlParams(ccp);
124 }
125
126 protected override void onReflectedMessage(ref Message m)
127 {
128 if(m.msg == WM_COMMAND && HIWORD(m.wParam) == EN_CHANGE && TextControl.hasBit(this._cBits, ControlBits.canNotify))
129 {
130 this.onTextChanged(EventArgs.empty);
131 }
132
133 super.onReflectedMessage(m);
134 }
135
136 protected override void onHandleCreated(EventArgs e)
137 {
138 this.modified = false; // Force to 'False'
139
140 super.onHandleCreated(e);
141 }
142
143 protected void onTextChanged(EventArgs e)
144 {
145 this.textChanged(this, e);
146 }
147 }