1///////////////////////////////////////////////////////////////////////////// 2// Name: wx/msw/wince/textctrlce.h 3// Purpose: wxTextCtrl implementation for smart phones driven by WinCE 4// Author: Wlodzimierz ABX Skiba 5// Modified by: 6// Created: 30.08.2004 7// RCS-ID: $Id: textctrlce.h 41739 2006-10-08 17:46:12Z VZ $ 8// Copyright: (c) Wlodzimierz Skiba 9// License: wxWindows licence 10///////////////////////////////////////////////////////////////////////////// 11 12#ifndef _WX_TEXTCTRLCE_H_ 13#define _WX_TEXTCTRLCE_H_ 14 15#include "wx/dynarray.h" 16 17class WXDLLEXPORT wxTextCtrl; 18WX_DEFINE_EXPORTED_ARRAY_PTR(wxTextCtrl *, wxArrayTextSpins); 19 20class WXDLLEXPORT wxTextCtrl : public wxTextCtrlBase 21{ 22public: 23 // creation 24 // -------- 25 26 wxTextCtrl() { Init(); } 27 wxTextCtrl(wxWindow *parent, wxWindowID id, 28 const wxString& value = wxEmptyString, 29 const wxPoint& pos = wxDefaultPosition, 30 const wxSize& size = wxDefaultSize, 31 long style = 0, 32 const wxValidator& validator = wxDefaultValidator, 33 const wxString& name = wxTextCtrlNameStr) 34 { 35 Init(); 36 37 Create(parent, id, value, pos, size, style, validator, name); 38 } 39 virtual ~wxTextCtrl(); 40 41 bool Create(wxWindow *parent, wxWindowID id, 42 const wxString& value = wxEmptyString, 43 const wxPoint& pos = wxDefaultPosition, 44 const wxSize& size = wxDefaultSize, 45 long style = 0, 46 const wxValidator& validator = wxDefaultValidator, 47 const wxString& name = wxTextCtrlNameStr); 48 49 // implement base class pure virtuals 50 // ---------------------------------- 51 52 virtual wxString GetValue() const; 53 virtual void SetValue(const wxString& value) { DoSetValue(value, SetValue_SendEvent); } 54 55 virtual void ChangeValue(const wxString &value) { DoSetValue(value); } 56 57 virtual wxString GetRange(long from, long to) const; 58 59 virtual int GetLineLength(long lineNo) const; 60 virtual wxString GetLineText(long lineNo) const; 61 virtual int GetNumberOfLines() const; 62 63 virtual bool IsModified() const; 64 virtual bool IsEditable() const; 65 66 virtual void GetSelection(long* from, long* to) const; 67 68 // operations 69 // ---------- 70 71 // editing 72 virtual void Clear(); 73 virtual void Replace(long from, long to, const wxString& value); 74 virtual void Remove(long from, long to); 75 76 // load the controls contents from the file 77 virtual bool LoadFile(const wxString& file); 78 79 // clears the dirty flag 80 virtual void MarkDirty(); 81 virtual void DiscardEdits(); 82 83 virtual void SetMaxLength(unsigned long len); 84 85 // writing text inserts it at the current position, appending always 86 // inserts it at the end 87 virtual void WriteText(const wxString& text); 88 virtual void AppendText(const wxString& text); 89 90 // translate between the position (which is just an index in the text ctrl 91 // considering all its contents as a single strings) and (x, y) coordinates 92 // which represent column and line. 93 virtual long XYToPosition(long x, long y) const; 94 virtual bool PositionToXY(long pos, long *x, long *y) const; 95 96 virtual void ShowPosition(long pos); 97 virtual wxTextCtrlHitTestResult HitTest(const wxPoint& pt, long *pos) const; 98 virtual wxTextCtrlHitTestResult HitTest(const wxPoint& pt, 99 wxTextCoord *col, 100 wxTextCoord *row) const 101 { 102 return wxTextCtrlBase::HitTest(pt, col, row); 103 } 104 105 // Clipboard operations 106 virtual void Copy(); 107 virtual void Cut(); 108 virtual void Paste(); 109 110 virtual bool CanCopy() const; 111 virtual bool CanCut() const; 112 virtual bool CanPaste() const; 113 114 // Undo/redo 115 virtual void Undo(); 116 virtual void Redo(); 117 118 virtual bool CanUndo() const; 119 virtual bool CanRedo() const; 120 121 // Insertion point 122 virtual void SetInsertionPoint(long pos); 123 virtual void SetInsertionPointEnd(); 124 virtual long GetInsertionPoint() const; 125 virtual wxTextPos GetLastPosition() const; 126 127 virtual void SetSelection(long from, long to); 128 virtual void SetEditable(bool editable); 129 130 // Caret handling (Windows only) 131 132 bool ShowNativeCaret(bool show = true); 133 bool HideNativeCaret() { return ShowNativeCaret(false); } 134 135 // Implementation from now on 136 // -------------------------- 137 138 virtual void Command(wxCommandEvent& event); 139 virtual bool MSWCommand(WXUINT param, WXWORD id); 140 141 virtual void AdoptAttributesFromHWND(); 142 143 virtual bool AcceptsFocus() const; 144 145 // callbacks 146 void OnDropFiles(wxDropFilesEvent& event); 147 void OnChar(wxKeyEvent& event); // Process 'enter' if required 148 149 void OnCut(wxCommandEvent& event); 150 void OnCopy(wxCommandEvent& event); 151 void OnPaste(wxCommandEvent& event); 152 void OnUndo(wxCommandEvent& event); 153 void OnRedo(wxCommandEvent& event); 154 void OnDelete(wxCommandEvent& event); 155 void OnSelectAll(wxCommandEvent& event); 156 157 void OnUpdateCut(wxUpdateUIEvent& event); 158 void OnUpdateCopy(wxUpdateUIEvent& event); 159 void OnUpdatePaste(wxUpdateUIEvent& event); 160 void OnUpdateUndo(wxUpdateUIEvent& event); 161 void OnUpdateRedo(wxUpdateUIEvent& event); 162 void OnUpdateDelete(wxUpdateUIEvent& event); 163 void OnUpdateSelectAll(wxUpdateUIEvent& event); 164 165 // Show a context menu for Rich Edit controls (the standard 166 // EDIT control has one already) 167 void OnRightClick(wxMouseEvent& event); 168 169 // be sure the caret remains invisible if the user 170 // called HideNativeCaret() before 171 void OnSetFocus(wxFocusEvent& event); 172 173 // get the subclassed window proc of the buddy 174 WXFARPROC GetBuddyWndProc() const { return m_wndProcBuddy; } 175 176 // intercept WM_GETDLGCODE 177 virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam); 178 179protected: 180 // common part of all ctors 181 void Init(); 182 183 // call this to increase the size limit (will do nothing if the current 184 // limit is big enough) 185 // 186 // returns true if we increased the limit to allow entering more text, 187 // false if we hit the limit set by SetMaxLength() and so didn't change it 188 bool AdjustSpaceLimit(); 189 190 void DoSetValue(const wxString &value, int flags = 0); 191 192 // replace the contents of the selection or of the entire control with the 193 // given text 194 void DoWriteText(const wxString& text, int flags = SetValue_SelectionOnly); 195 196 // set the selection possibly without scrolling the caret into view 197 void DoSetSelection(long from, long to, bool scrollCaret = true); 198 199 // return true if there is a non empty selection in the control 200 bool HasSelection() const; 201 202 // get the length of the line containing the character at the given 203 // position 204 long GetLengthOfLineContainingPos(long pos) const; 205 206 // send TEXT_UPDATED event, return true if it was handled, false otherwise 207 bool SendUpdateEvent(); 208 209 // override some base class virtuals 210 virtual void DoMoveWindow(int x, int y, int width, int height); 211 virtual wxSize DoGetBestSize() const; 212 213 virtual WXDWORD MSWGetStyle(long style, WXDWORD *exstyle) const; 214 215 // if true, SendUpdateEvent() will eat the next event (see comments in the 216 // code as to why this is needed) 217 bool m_suppressNextUpdate; 218 219 // all existing wxTextCtrl - this allows to find the one corresponding to 220 // the given buddy window in GetSpinTextCtrl() 221 static wxArrayTextSpins ms_allTextSpins; 222 223protected: 224 225 // the data for the "buddy" list 226 WXHWND m_hwndBuddy; 227 WXFARPROC m_wndProcBuddy; 228 229private: 230 DECLARE_EVENT_TABLE() 231 DECLARE_DYNAMIC_CLASS_NO_COPY(wxTextCtrl) 232 233 bool m_isNativeCaretShown; 234}; 235 236#endif // _WX_TEXTCTRLCE_H_ 237