1e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved.
2e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Use of this source code is governed by a BSD-style license that can be
3e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// found in the LICENSE file.
4e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
5e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
7e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../../include/pdfwindow/PDFWindow.h"
8e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../../include/pdfwindow/PWL_Wnd.h"
9e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../../include/pdfwindow/PWL_EditCtrl.h"
10e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../../include/pdfwindow/PWL_ScrollBar.h"
11e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../../include/pdfwindow/PWL_Utils.h"
12e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../../include/pdfwindow/PWL_Caret.h"
13e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../../include/pdfwindow/PWL_FontMap.h"
14e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
15e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define IsFloatZero(f)						((f) < 0.0001 && (f) > -0.0001)
16e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define IsFloatBigger(fa,fb)				((fa) > (fb) && !IsFloatZero((fa) - (fb)))
17e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define IsFloatSmaller(fa,fb)				((fa) < (fb) && !IsFloatZero((fa) - (fb)))
18e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define IsFloatEqual(fa,fb)					IsFloatZero((fa)-(fb))
19e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
20e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov/* ---------------------------- CPWL_EditCtrl ------------------------------ */
21e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
22e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPWL_EditCtrl::CPWL_EditCtrl() :
23e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pEdit(NULL),
24e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pEditCaret(NULL),
25e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_bMouseDown(FALSE),
26e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pEditNotify(NULL),
27e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_nCharSet(DEFAULT_CHARSET),
28e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_nCodePage(0)
29e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
30e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pEdit = IFX_Edit::NewEdit();
31e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pEdit != NULL);
32e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
33e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
34e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPWL_EditCtrl::~CPWL_EditCtrl()
35e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
36e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	IFX_Edit::DelEdit(m_pEdit);
37e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
38e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
39e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::OnCreate(PWL_CREATEPARAM & cp)
40e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
41e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	cp.eCursorType = FXCT_VBEAM;
42e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
43e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
44e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::OnCreated()
45e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
46e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	SetFontSize(this->GetCreationParam().fFontSize);
47e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
48e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pEdit->SetFontMap(this->GetFontMap());
49e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pEdit->SetNotify(this);
50e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pEdit->Initialize();
51e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
52e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
53e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPWL_EditCtrl::IsWndHorV()
54e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
55e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Matrix mt = GetWindowMatrix();
56e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Point point1(0,1);
57e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Point point2(1,1);
58e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
59e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	mt.Transform(point1.x, point1.y);
60e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	mt.Transform(point2.x, point2.y);
61e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
62e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return point2.y == point1.y;
63e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
64e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
65e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::SetCursor()
66e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
67e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (IsValid())
68e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
69e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (IFX_SystemHandler* pSH = GetSystemHandler())
70e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
71e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (IsWndHorV())
72e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				pSH->SetCursor(FXCT_VBEAM);
73e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else
74e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				pSH->SetCursor(FXCT_HBEAM);
75e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
76e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
77e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
78e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
79e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::RePosChildWnd()
80e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
81e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pEdit->SetPlateRect(GetClientRect());
82e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
83e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
84e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, FX_INTPTR wParam, FX_INTPTR lParam)
85e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
86e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Wnd::OnNotify(pWnd,msg,wParam,lParam);
87e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
88e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	switch (msg)
89e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
90e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case PNM_SETSCROLLINFO:
91e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			switch (wParam)
92e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
93e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				case SBT_VSCROLL:
94e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					if (CPWL_Wnd * pChild = GetVScrollBar())
95e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					{
96e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						pChild->OnNotify(pWnd,PNM_SETSCROLLINFO,wParam,lParam);
97e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					}
98e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					break;
99e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
100e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			break;
101e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case PNM_SETSCROLLPOS:
102e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			switch (wParam)
103e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
104e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				case SBT_VSCROLL:
105e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					if (CPWL_Wnd * pChild = GetVScrollBar())
106e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					{
107e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						pChild->OnNotify(pWnd,PNM_SETSCROLLPOS,wParam,lParam);
108e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					}
109e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					break;
110e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
111e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			break;
112e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case PNM_SCROLLWINDOW:
113e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
114e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				FX_FLOAT fPos = *(FX_FLOAT*)lParam;
115e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				switch (wParam)
116e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
117e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					case SBT_VSCROLL:
118e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						m_pEdit->SetScrollPos(CPDF_Point(m_pEdit->GetScrollPos().x,fPos));
119e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						break;
120e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
121e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
122e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			break;
123e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case PNM_SETCARETINFO:
124e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
125e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (PWL_CARET_INFO * pCaretInfo = (PWL_CARET_INFO *)wParam)
126e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
127e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					this->SetCaret(pCaretInfo->bVisible,
128e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						pCaretInfo->ptHead,
129e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						pCaretInfo->ptFoot);
130e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
131e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
132e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			break;
133e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
134e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
135e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
136e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::CreateChildWnd(const PWL_CREATEPARAM & cp)
137e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
138e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (!IsReadOnly())
139e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CreateEditCaret(cp);
140e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
141e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
142e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::CreateEditCaret(const PWL_CREATEPARAM & cp)
143e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
144e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (!m_pEditCaret)
145e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
146e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEditCaret = new CPWL_Caret;
147e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEditCaret->SetInvalidRect(GetClientRect());
148e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
149e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		PWL_CREATEPARAM	ecp = cp;
150e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ecp.pParentWnd = this;
151e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ecp.dwFlags = PWS_CHILD | PWS_NOREFRESHCLIP;
152e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ecp.dwBorderWidth = 0;
153e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ecp.nBorderStyle = PBS_SOLID;
154e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ecp.rcRectWnd = CPDF_Rect(0,0,0,0);
155e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
156e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEditCaret->Create(ecp);
157e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
158e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
159e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
160e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::SetFontSize(FX_FLOAT fFontSize)
161e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
162e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pEdit->SetFontSize(fFontSize);
163e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
164e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
165e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_FLOAT CPWL_EditCtrl::GetFontSize() const
166e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
167e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pEdit->GetFontSize();
168e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
169e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
170e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPWL_EditCtrl::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag)
171e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
172e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_bMouseDown) return TRUE;
173e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
174e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL bRet = CPWL_Wnd::OnKeyDown(nChar,nFlag);
175e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
176e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	//FILTER
177e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	switch (nChar)
178e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
179e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	default:
180e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return FALSE;
181e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case FWL_VKEY_Delete:
182e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case FWL_VKEY_Up:
183e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case FWL_VKEY_Down:
184e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case FWL_VKEY_Left:
185e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case FWL_VKEY_Right:
186e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case FWL_VKEY_Home:
187e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case FWL_VKEY_End:
188e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case FWL_VKEY_Insert:
189e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case 'C':
190e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case 'V':
191e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case 'X':
192e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case 'A':
193e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case 'Z':
194e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case 'c':
195e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case 'v':
196e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case 'x':
197e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case 'a':
198e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case 'z':
199e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
200e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
201e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
202e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (nChar == FWL_VKEY_Delete)
203e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
204e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (m_pEdit->IsSelected())
205e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			nChar = FWL_VKEY_Unknown;
206e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
207e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
208e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	switch (nChar)
209e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
210e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case FWL_VKEY_Delete:
211e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			Delete();
212e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return TRUE;
213e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case FWL_VKEY_Insert:
214e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (IsSHIFTpressed(nFlag))
215e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				PasteText();
216e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return TRUE;
217e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case FWL_VKEY_Up:
218e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit->OnVK_UP(IsSHIFTpressed(nFlag),FALSE);
219e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return TRUE;
220e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case FWL_VKEY_Down:
221e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit->OnVK_DOWN(IsSHIFTpressed(nFlag),FALSE);
222e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return TRUE;
223e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case FWL_VKEY_Left:
224e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit->OnVK_LEFT(IsSHIFTpressed(nFlag),FALSE);
225e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return TRUE;
226e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case FWL_VKEY_Right:
227e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit->OnVK_RIGHT(IsSHIFTpressed(nFlag),FALSE);
228e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return TRUE;
229e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case FWL_VKEY_Home:
230e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit->OnVK_HOME(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag));
231e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return TRUE;
232e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case FWL_VKEY_End:
233e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit->OnVK_END(IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag));
234e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return TRUE;
235e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case FWL_VKEY_Unknown:
236e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (!IsSHIFTpressed(nFlag))
237e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				Clear();
238e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else
239e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				CutText();
240e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return TRUE;
241e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		default:
242e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			break;
243e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
244e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
245e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return bRet;
246e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
247e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
248e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPWL_EditCtrl::OnChar(FX_WORD nChar, FX_DWORD nFlag)
249e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
250e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_bMouseDown) return TRUE;
251e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
252e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Wnd::OnChar(nChar,nFlag);
253e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
254e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	//FILTER
255e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	switch (nChar)
256e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
257e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case 0x0A:
258e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case 0x1B:
259e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return FALSE;
260e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		default:
261e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			break;
262e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
263e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
264e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL bCtrl = IsCTRLpressed(nFlag);
265e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL bAlt = IsALTpressed(nFlag);
266e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL bShift = IsSHIFTpressed(nFlag);
267e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
268e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_WORD word = nChar;
269e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
270e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (bCtrl && !bAlt)
271e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
272e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		switch (nChar)
273e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
274e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			case 'C' - 'A' + 1:
275e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				this->CopyText();
276e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				return TRUE;
277e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			case 'V' - 'A' + 1:
278e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				this->PasteText();
279e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				return TRUE;
280e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			case 'X' - 'A' + 1:
281e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				this->CutText();
282e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				return TRUE;
283e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			case 'A' - 'A' + 1:
284e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				this->SelectAll();
285e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				return TRUE;
286e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			case 'Z' - 'A' + 1:
287e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (bShift)
288e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					Redo();
289e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				else
290e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					Undo();
291e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				return TRUE;
292e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			default:
293e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (nChar < 32)
294e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					return FALSE;
295e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
296e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
297e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
298e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (IsReadOnly()) return TRUE;
299e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
300e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pEdit->IsSelected() && word ==  FWL_VKEY_Back)
301e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		word = FWL_VKEY_Unknown;
302e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
303e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	Clear();
304e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
305e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	switch (word)
306e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
307e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case FWL_VKEY_Back:
308e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		Backspace();
309e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
310e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case FWL_VKEY_Return:
311e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		InsertReturn();
312e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
313e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case FWL_VKEY_Unknown:
314e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
315e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	default:
316e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (IsINSERTpressed(nFlag))
317e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			Delete();
318e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		InsertWord(word, this->GetCharSet());
319e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
320e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
321e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
322e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return TRUE;
323e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
324e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
325e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPWL_EditCtrl::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag)
326e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
327e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Wnd::OnLButtonDown(point,nFlag);
328e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
329e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (ClientHitTest(point))
330e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
331e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (m_bMouseDown)
332e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			this->InvalidateRect();
333e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
334e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_bMouseDown = TRUE;
335e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetCapture();
336e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
337e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->OnMouseDown(point,IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag));
338e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
339e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
340e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return TRUE;
341e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
342e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
343e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPWL_EditCtrl::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag)
344e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
345e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Wnd::OnLButtonUp(point,nFlag);
346e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
347e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_bMouseDown)
348e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
349e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		//can receive keybord message
350e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (ClientHitTest(point) && !this->IsFocused())
351e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			SetFocus();
352e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
353e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ReleaseCapture();
354e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_bMouseDown = FALSE;
355e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
356e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
357e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return TRUE;
358e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
359e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
360e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPWL_EditCtrl::OnMouseMove(const CPDF_Point & point, FX_DWORD nFlag)
361e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
362e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Wnd::OnMouseMove(point,nFlag);
363e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
364e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_bMouseDown)
365e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->OnMouseMove(point,FALSE,FALSE);
366e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
367e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return TRUE;
368e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
369e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
370e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDF_Rect CPWL_EditCtrl::GetContentRect() const
371e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
372e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pEdit->GetContentRect();
373e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
374e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
375e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::SetEditCaret(FX_BOOL bVisible)
376e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
377e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Point ptHead(0,0),ptFoot(0,0);
378e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
379e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (bVisible)
380e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
381e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		GetCaretInfo(ptHead,ptFoot);
382e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
383e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
384e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPVT_WordPlace wpTemp = m_pEdit->GetCaretWordPlace();
385e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	this->IOnSetCaret(bVisible,ptHead,ptFoot,wpTemp);
386e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
387e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
388e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::GetCaretInfo(CPDF_Point & ptHead, CPDF_Point & ptFoot) const
389e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
390e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (IFX_Edit_Iterator * pIterator = m_pEdit->GetIterator())
391e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
392e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pIterator->SetAt(m_pEdit->GetCaret());
393e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPVT_Word word;
394e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPVT_Line line;
395e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (pIterator->GetWord(word))
396e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
397e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			ptHead.x = word.ptWord.x + word.fWidth;
398e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			ptHead.y = word.ptWord.y + word.fAscent;
399e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			ptFoot.x = word.ptWord.x + word.fWidth;
400e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			ptFoot.y = word.ptWord.y + word.fDescent;
401e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
402e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else if (pIterator->GetLine(line))
403e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
404e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			ptHead.x = line.ptLine.x;
405e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			ptHead.y = line.ptLine.y + line.fLineAscent;
406e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			ptFoot.x = line.ptLine.x;
407e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			ptFoot.y = line.ptLine.y + line.fLineDescent;
408e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
409e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
410e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
411e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
412e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::GetCaretPos(FX_INT32& x, FX_INT32& y) const
413e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
414e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Point ptHead(0,0), ptFoot(0,0);
415e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
416e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	GetCaretInfo(ptHead,ptFoot);
417e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
418e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	PWLtoWnd(ptHead, x, y);
419e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
420e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
421e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::SetCaret(FX_BOOL bVisible, const CPDF_Point & ptHead, const CPDF_Point & ptFoot)
422e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
423e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pEditCaret)
424e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
425e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (!IsFocused() || m_pEdit->IsSelected())
426e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			bVisible = FALSE;
427e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
428e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEditCaret->SetCaret(bVisible, ptHead, ptFoot);
429e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
430e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
431e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
432e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL	CPWL_EditCtrl::IsModified() const
433e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
434e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pEdit->IsModified();
435e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
436e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
437e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_WideString CPWL_EditCtrl::GetText() const
438e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
439e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pEdit->GetText();
440e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
441e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
442e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::SetSel(FX_INT32 nStartChar,FX_INT32 nEndChar)
443e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
444e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pEdit->SetSel(nStartChar, nEndChar);
445e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
446e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
447e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::GetSel(FX_INT32 & nStartChar, FX_INT32 & nEndChar ) const
448e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
449e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pEdit->GetSel(nStartChar, nEndChar);
450e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
451e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
452e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::Clear()
453e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
454e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (!IsReadOnly())
455e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->Clear();
456e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
457e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
458e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::SelectAll()
459e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
460e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pEdit->SelectAll();
461e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
462e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
463e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::Paint()
464e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
465e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pEdit)
466e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->Paint();
467e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
468e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
469e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::EnableRefresh(FX_BOOL bRefresh)
470e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
471e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pEdit)
472e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->EnableRefresh(bRefresh);
473e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
474e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
475e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_INT32 CPWL_EditCtrl::GetCaret() const
476e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
477e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pEdit)
478e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return m_pEdit->GetCaret();
479e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
480e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return -1;
481e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
482e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
483e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::SetCaret(FX_INT32 nPos)
484e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
485e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pEdit)
486e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SetCaret(nPos);
487e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
488e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
489e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_INT32 CPWL_EditCtrl::GetTotalWords() const
490e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
491e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pEdit)
492e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return m_pEdit->GetTotalWords();
493e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
494e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return 0;
495e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
496e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
497e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::SetScrollPos(const CPDF_Point& point)
498e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
499e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pEdit)
500e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SetScrollPos(point);
501e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
502e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
503e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDF_Point CPWL_EditCtrl::GetScrollPos() const
504e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
505e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pEdit)
506e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return m_pEdit->GetScrollPos();
507e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
508e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return CPDF_Point(0.0f, 0.0f);
509e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
510e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
511e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDF_Font * CPWL_EditCtrl::GetCaretFont() const
512e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
513e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32 nFontIndex = 0;
514e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
515e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (IFX_Edit_Iterator * pIterator = m_pEdit->GetIterator())
516e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
517e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pIterator->SetAt(m_pEdit->GetCaret());
518e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPVT_Word word;
519e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPVT_Section section;
520e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (pIterator->GetWord(word))
521e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
522e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			nFontIndex = word.nFontIndex;
523e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
524e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else if (HasFlag(PES_RICH))
525e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
526e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (pIterator->GetSection(section))
527e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
528e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				nFontIndex = section.WordProps.nFontIndex;
529e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
530e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
531e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
532e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
533e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (IFX_Edit_FontMap * pFontMap = GetFontMap())
534e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return pFontMap->GetPDFFont(nFontIndex);
535e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	else
536e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return NULL;
537e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
538e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
539e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_FLOAT CPWL_EditCtrl::GetCaretFontSize() const
540e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
541e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_FLOAT fFontSize = GetFontSize();
542e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
543e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (IFX_Edit_Iterator * pIterator = m_pEdit->GetIterator())
544e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
545e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pIterator->SetAt(m_pEdit->GetCaret());
546e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPVT_Word word;
547e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPVT_Section section;
548e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (pIterator->GetWord(word))
549e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
550e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			fFontSize = word.fFontSize;
551e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
552e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else if (HasFlag(PES_RICH))
553e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
554e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (pIterator->GetSection(section))
555e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
556e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				fFontSize = section.WordProps.fFontSize;
557e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
558e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
559e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
560e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
561e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return fFontSize;
562e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
563e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
564e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::SetText(FX_LPCWSTR csText)
565e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
566e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pEdit->SetText(csText);
567e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
568e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
569e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::CopyText()
570e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
571e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
572e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
573e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::PasteText()
574e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
575e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
576e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
577e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::CutText()
578e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
579e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
580e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
581e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::ShowVScrollBar(FX_BOOL bShow)
582e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
583e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
584e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
585e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::InsertText(FX_LPCWSTR csText)
586e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
587e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (!IsReadOnly())
588e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->InsertText(csText);
589e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
590e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
591e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::InsertWord(FX_WORD word, FX_INT32 nCharset)
592e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
593e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (!IsReadOnly())
594e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->InsertWord(word, nCharset);
595e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
596e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
597e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::InsertReturn()
598e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
599e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (!IsReadOnly())
600e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->InsertReturn();
601e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
602e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
603e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::Delete()
604e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
605e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (!IsReadOnly())
606e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->Delete();
607e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
608e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
609e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::Backspace()
610e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
611e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (!IsReadOnly())
612e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->Backspace();
613e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
614e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
615e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL	CPWL_EditCtrl::CanUndo() const
616e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
617e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return !IsReadOnly() && m_pEdit->CanUndo();
618e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
619e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
620e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL	CPWL_EditCtrl::CanRedo() const
621e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
622e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return !IsReadOnly() && m_pEdit->CanRedo();
623e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
624e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
625e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::Redo()
626e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
627e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (CanRedo())
628e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->Redo();
629e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
630e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
631e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::Undo()
632e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
633e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (CanUndo())
634e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->Undo();
635e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
636e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
637e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::IOnSetScrollInfoY(FX_FLOAT fPlateMin, FX_FLOAT fPlateMax,
638e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov												FX_FLOAT fContentMin, FX_FLOAT fContentMax,
639e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov												FX_FLOAT fSmallStep, FX_FLOAT fBigStep)
640e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
641e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	PWL_SCROLL_INFO Info;
642e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
643e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	Info.fPlateWidth = fPlateMax - fPlateMin;
644e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	Info.fContentMin = fContentMin;
645e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	Info.fContentMax = fContentMax;
646e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	Info.fSmallStep = fSmallStep;
647e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	Info.fBigStep = fBigStep;
648e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
649e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	this->OnNotify(this,PNM_SETSCROLLINFO,SBT_VSCROLL,(FX_INTPTR)&Info);
650e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
651e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov//	PWL_TRACE("set scroll info:%f\n",fContentMax - fContentMin);
652e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
653e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (IsFloatBigger(Info.fPlateWidth,Info.fContentMax-Info.fContentMin)
654e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		|| IsFloatEqual(Info.fPlateWidth,Info.fContentMax-Info.fContentMin))
655e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
656e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		this->ShowVScrollBar(FALSE);
657e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
658e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	else
659e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
660e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		this->ShowVScrollBar(TRUE);
661e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
662e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
663e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
664e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::IOnSetScrollPosY(FX_FLOAT fy)
665e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
666e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov//	PWL_TRACE("set scroll position:%f\n",fy);
667e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	this->OnNotify(this,PNM_SETSCROLLPOS,SBT_VSCROLL,(FX_INTPTR)&fy);
668e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
669e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
670e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::IOnSetCaret(FX_BOOL bVisible, const CPDF_Point & ptHead, const CPDF_Point & ptFoot, const CPVT_WordPlace& place)
671e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
672e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	PWL_CARET_INFO cInfo;
673e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	cInfo.bVisible = bVisible;
674e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	cInfo.ptHead = ptHead;
675e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	cInfo.ptFoot = ptFoot;
676e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
677e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	this->OnNotify(this,PNM_SETCARETINFO,(FX_INTPTR)&cInfo,(FX_INTPTR)NULL);
678e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
679e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
680e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::IOnCaretChange(const CPVT_SecProps & secProps, const CPVT_WordProps & wordProps)
681e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
682e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
683e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
684e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::IOnContentChange(const CPDF_Rect& rcContent)
685e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
686e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (this->IsValid())
687e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
688e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (m_pEditNotify)
689e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
690e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEditNotify->OnContentChange(rcContent);
691e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
692e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
693e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
694e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
695e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::IOnInvalidateRect(CPDF_Rect * pRect)
696e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
697e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	this->InvalidateRect(pRect);
698e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
699e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
700e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_INT32 CPWL_EditCtrl::GetCharSet() const
701e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
702e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_nCharSet < 0)
703e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return DEFAULT_CHARSET;
704e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	else
705e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return m_nCharSet;
706e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
707e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
708e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPWL_EditCtrl::GetTextRange(const CPDF_Rect& rect, FX_INT32 & nStartChar, FX_INT32 & nEndChar) const
709e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
710e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	nStartChar = m_pEdit->WordPlaceToWordIndex(m_pEdit->SearchWordPlace(CPDF_Point(rect.left, rect.top)));
711e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	nEndChar = m_pEdit->WordPlaceToWordIndex(m_pEdit->SearchWordPlace(CPDF_Point(rect.right, rect.bottom)));
712e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
713e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
714e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_WideString CPWL_EditCtrl::GetText(FX_INT32 & nStartChar, FX_INT32 & nEndChar) const
715e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
716e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPVT_WordPlace wpStart = m_pEdit->WordIndexToWordPlace(nStartChar);
717e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPVT_WordPlace wpEnd = m_pEdit->WordIndexToWordPlace(nEndChar);
718e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pEdit->GetRangeText(CPVT_WordRange(wpStart, wpEnd));
719e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
720e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
721e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid	CPWL_EditCtrl::SetReadyToInput()
722e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
723e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_bMouseDown)
724e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
725e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ReleaseCapture();
726e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_bMouseDown = FALSE;
727e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
728e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
729