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.textbox;
10 
11 import dgui.core.controls.textcontrol;
12 
13 enum CharacterCasing
14 {
15 	normal = 0,
16 	uppercase = ES_UPPERCASE,
17 	lowercase = ES_LOWERCASE,
18 }
19 
20 class TextBox: TextControl
21 {
22 	private CharacterCasing _chChasing  = CharacterCasing.normal;
23 	private uint _maxLength = 0;
24 
25 	@property public final bool multiline()
26 	{
27 		return cast(bool)(this.getStyle() & ES_MULTILINE);
28 	}
29 
30 	@property public final void multiline(bool b)
31 	{
32 		this.setStyle(ES_MULTILINE, b);
33 	}
34 
35 	@property public final uint maxLength()
36 	{
37 		if(!this._maxLength)
38 		{
39 			if(this.getStyle() & ES_MULTILINE)
40 			{
41 				return 0xFFFFFFFF;
42 			}
43 			else
44 			{
45 				return 0xFFFFFFFE;
46 			}
47 		}
48 
49 		return this._maxLength;
50 	}
51 
52 	@property public final void maxLength(uint len)
53 	{
54 		this._maxLength = len;
55 
56 		if(!len)
57 		{
58 			if(this.getStyle() & ES_MULTILINE)
59 			{
60 				len = 0xFFFFFFFF;
61 			}
62 			else
63 			{
64 				len = 0xFFFFFFFE;
65 			}
66 		}
67 
68 		if(this.created)
69 		{
70 			this.sendMessage(EM_SETLIMITTEXT, len, 0);
71 		}
72 	}
73 
74 	@property public final CharacterCasing characterCasing()
75 	{
76 		return this._chChasing;
77 	}
78 
79 	@property public final void characterCasing(CharacterCasing ch)
80 	{
81 		this._chChasing = ch;
82 
83 		if(this.created)
84 		{
85 			this.setStyle(this._chChasing, false); //Remove Old Style
86 			this.setStyle(ch, true); //Add New Style
87 		}
88 	}
89 
90 	@property public final void numbersOnly(bool b)
91 	{
92 		this.setStyle(ES_NUMBER, b);
93 	}
94 
95 	@property public final void passwordText(bool b)
96 	{
97 		this.setStyle(ES_PASSWORD, b);
98 	}
99 
100 	protected override void createControlParams(ref CreateControlParams ccp)
101 	{
102 		this.setExStyle(WS_EX_CLIENTEDGE, true);
103 		this.setStyle(ES_AUTOHSCROLL | this._chChasing, true);
104 		ccp.superclassName = WC_EDIT;
105 		ccp.className = WC_DEDIT;
106 
107 		this.height = 20; //E questo cos'è?
108 		super.createControlParams(ccp);
109 	}
110 
111 	protected override void onHandleCreated(EventArgs e)
112 	{
113 		if(this._maxLength)
114 		{
115 			this.sendMessage(EM_SETLIMITTEXT, this._maxLength, 0);
116 		}
117 
118 		super.onHandleCreated(e);
119 	}
120 }