]> git.saurik.com Git - wxWidgets.git/blob - src/os2/textentry.cpp
Define __VISUALC__ for ICC under Windows again.
[wxWidgets.git] / src / os2 / textentry.cpp
1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: src/os2/textentry.cpp
3 // Purpose: wxTextEntry implementation for wxOS2
4 // Author: Stefan Neis
5 // Created: 2007-11-18
6 // Copyright: (c) 2007 Stefan Neis
7 // Licence: wxWindows licence
8 ///////////////////////////////////////////////////////////////////////////////
9
10 // ============================================================================
11 // declarations
12 // ============================================================================
13
14 // ----------------------------------------------------------------------------
15 // headers
16 // ----------------------------------------------------------------------------
17
18 // for compilers that support precompilation, includes "wx.h".
19 #include "wx/wxprec.h"
20
21 #ifdef __BORLANDC__
22 #pragma hdrstop
23 #endif
24
25 #ifndef WX_PRECOMP
26 #include "wx/arrstr.h"
27 #include "wx/string.h"
28 #endif // WX_PRECOMP
29
30 #if wxUSE_TEXTCTRL || wxUSE_COMBOBOX
31
32 #include "wx/textentry.h"
33 #include "wx/dynlib.h"
34
35 #include "wx/os2/private.h"
36
37 #define GetEditHwnd() ((HWND)(GetEditHWND()))
38
39 // ============================================================================
40 // wxTextEntry implementation
41 // ============================================================================
42
43 // ----------------------------------------------------------------------------
44 // operations on text
45 // ----------------------------------------------------------------------------
46
47 void wxTextEntry::WriteText(const wxString& text)
48 {
49 wxString newText = wxGetWindowText(GetEditHWND());
50 long from, to;
51 GetSelection(&from, &to);
52 if (from > to){
53 long swp = to;
54 to = from;
55 from = swp;
56 }
57 // Compose the new Text by replacing the selection of the old text
58 newText.replace(from, to - from, text);
59 // Set control to the new text
60 ::WinSetWindowText(GetEditHwnd(), text.c_str());
61 }
62
63 wxString wxTextEntry::DoGetValue() const
64 {
65 return wxGetWindowText(GetEditHWND());
66 }
67
68 void wxTextEntry::Remove(long from, long to)
69 {
70 DoSetSelection(from, to, SetSel_NoScroll);
71 WriteText(wxString());
72 }
73
74 // ----------------------------------------------------------------------------
75 // clipboard operations
76 // ----------------------------------------------------------------------------
77
78 void wxTextEntry::Copy()
79 {
80 ::WinSendMsg(GetEditHwnd(), EM_COPY, 0, 0);
81 }
82
83 void wxTextEntry::Cut()
84 {
85 ::WinSendMsg(GetEditHwnd(), EM_CUT, 0, 0);
86 }
87
88 void wxTextEntry::Paste()
89 {
90 ::WinSendMsg(GetEditHwnd(), EM_PASTE, 0, 0);
91 }
92
93 // ----------------------------------------------------------------------------
94 // undo/redo
95 // ----------------------------------------------------------------------------
96
97 void wxTextEntry::Undo()
98 {
99 }
100
101 void wxTextEntry::Redo()
102 {
103 // same as Undo, since Undo undoes the undo
104 Undo();
105 return;
106 }
107
108 bool wxTextEntry::CanUndo() const
109 {
110 return false;
111 }
112
113 bool wxTextEntry::CanRedo() const
114 {
115 // see comment in Redo()
116 return CanUndo();
117 }
118
119 // ----------------------------------------------------------------------------
120 // insertion point and selection
121 // ----------------------------------------------------------------------------
122
123 void wxTextEntry::SetInsertionPoint(long pos)
124 {
125 // be careful to call DoSetSelection() which is overridden in wxTextCtrl
126 // and not just SetSelection() here
127 DoSetSelection(pos, pos);
128 }
129
130 long wxTextEntry::GetInsertionPoint() const
131 {
132 long from;
133 GetSelection(&from, NULL);
134 return from;
135 }
136
137 long wxTextEntry::GetLastPosition() const
138 {
139 WNDPARAMS vParams;
140
141 vParams.fsStatus = WPM_CCHTEXT;
142 if (::WinSendMsg( GetEditHwnd()
143 ,WM_QUERYWINDOWPARAMS
144 ,&vParams
145 ,0
146 ))
147 {
148 return vParams.cchText;
149 }
150 return 0;
151 }
152
153 void wxTextEntry::DoSetSelection(long from, long to, int WXUNUSED(flags))
154 {
155 // if from and to are both -1, it means (in wxWidgets) that all text should
156 // be selected, translate this into Windows convention
157 if ( (from == -1) && (to == -1) )
158 {
159 from = 0;
160 }
161
162 ::WinSendMsg(GetEditHwnd(), EM_SETSEL, MPFROM2SHORT((USHORT)from, (USHORT)to), 0);
163 }
164
165 void wxTextEntry::GetSelection(long *from, long *to) const
166 {
167 long dwPos;
168 dwPos = (long)::WinSendMsg(GetEditHwnd(), EM_QUERYSEL, 0, 0);
169
170 if ( from )
171 *from = SHORT1FROMMP((MPARAM)dwPos);
172 if ( to )
173 *to = SHORT2FROMMP((MPARAM)dwPos);
174 }
175
176 // ----------------------------------------------------------------------------
177 // editable state
178 // ----------------------------------------------------------------------------
179
180 bool wxTextEntry::IsEditable() const
181 {
182 return (bool)LONGFROMMR(::WinSendMsg(GetEditHwnd(), EM_QUERYREADONLY, 0, 0));
183 }
184
185 void wxTextEntry::SetEditable(bool editable)
186 {
187 ::WinSendMsg(GetEditHwnd(), EM_SETREADONLY, MPFROMLONG(!editable), 0);
188 }
189
190 // ----------------------------------------------------------------------------
191 // max length
192 // ----------------------------------------------------------------------------
193
194 void wxTextEntry::SetMaxLength(unsigned long len)
195 {
196 if ( len >= 0x7fff )
197 {
198 // this will set it to a platform-specific maximum (32Kb under OS/2)
199 len = 0x7fff;
200 }
201
202 ::WinSendMsg(GetEditHwnd(), EM_SETTEXTLIMIT, MPFROMSHORT(len), 0);
203 }
204
205 #endif // wxUSE_TEXTCTRL || wxUSE_COMBOBOX