1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved.
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file.
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PDFWindow.h"
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PWL_Wnd.h"
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PWL_EditCtrl.h"
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PWL_Edit.h"
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PWL_ScrollBar.h"
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PWL_Utils.h"
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PWL_Caret.h"
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/pdfwindow/PWL_FontMap.h"
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ---------------------------- CPWL_Edit ------------------------------ */
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_Edit::CPWL_Edit() : m_pFillerNotify(NULL),
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pSpellCheck(NULL),
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_bFocus(FALSE)
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pFormFiller = NULL;
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_Edit::~CPWL_Edit()
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_bFocus == FALSE);
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString CPWL_Edit::GetClassName() const
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return PWL_CLASSNAME_EDIT;
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::OnDestroy()
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::SetText(FX_LPCWSTR csText)
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString swText = csText;
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (HasFlag(PES_RICH))
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CFX_ByteString sValue = CFX_ByteString::FromUnicode(swText);
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (CXML_Element * pXML = CXML_Element::Parse((FX_LPCSTR)sValue,sValue.GetLength()))
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			FX_INT32 nCount = pXML->CountChildren();
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			FX_BOOL bFirst = TRUE;
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			swText.Empty();
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			for (FX_INT32 i=0; i<nCount; i++)
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (CXML_Element * pSubElement = pXML->GetElement(i))
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					CFX_ByteString tag=pSubElement->GetTagName();
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		   			if (tag.EqualNoCase("p"))
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					{
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						int nChild = pSubElement->CountChildren();
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						CFX_WideString swSection;
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						for(FX_INT32 j=0; j<nChild; j++)
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						{
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							swSection += pSubElement->GetContent(j);
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						}
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						if (bFirst)bFirst = FALSE;
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						else
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							swText += FWL_VKEY_Return;
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						swText += swSection;
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					}
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			delete pXML;
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->SetText(swText);
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::RePosChildWnd()
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CPWL_ScrollBar * pVSB = this->GetVScrollBar())
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		//if (pVSB->IsVisible())
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CPDF_Rect rcWindow = m_rcOldWindow;
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CPDF_Rect rcVScroll = CPDF_Rect(rcWindow.right,
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								rcWindow.bottom,
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								rcWindow.right + PWL_SCROLLBAR_WIDTH,
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								rcWindow.top);
94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pVSB->Move(rcVScroll, TRUE, FALSE);
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pEditCaret && !HasFlag(PES_TEXTOVERFLOW))
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEditCaret->SetClipRect(CPWL_Utils::InflateRect(GetClientRect(),1.0f)); //+1 for caret beside border
100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPWL_EditCtrl::RePosChildWnd();
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
104ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_Rect CPWL_Edit::GetClientRect() const
105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Rect rcClient = CPWL_Utils::DeflateRect(GetWindowRect(),(FX_FLOAT)(GetBorderWidth()+GetInnerBorderWidth()));
107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CPWL_ScrollBar * pVSB = this->GetVScrollBar())
109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (pVSB->IsVisible())
111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			rcClient.right -= PWL_SCROLLBAR_WIDTH;
113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return rcClient;
117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::SetAlignFormatH(PWL_EDIT_ALIGNFORMAT_H nFormat, FX_BOOL bPaint/* = TRUE*/)
120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->SetAlignmentH((FX_INT32)nFormat, bPaint);
122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::SetAlignFormatV(PWL_EDIT_ALIGNFORMAT_V nFormat, FX_BOOL bPaint/* = TRUE*/)
125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->SetAlignmentV((FX_INT32)nFormat, bPaint);
127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
129ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL	CPWL_Edit::CanSelectAll() const
130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return  GetSelectWordRange() != m_pEdit->GetWholeWordRange();
132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
134ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL	CPWL_Edit::CanClear() const
135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return !IsReadOnly() && m_pEdit->IsSelected();
137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
139ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL	CPWL_Edit::CanCopy() const
140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return 	!HasFlag(PES_PASSWORD) && !HasFlag(PES_NOREAD) && m_pEdit->IsSelected();
142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
144ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL	CPWL_Edit::CanCut() const
145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return 	CanCopy() && !IsReadOnly();
147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
149ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL	CPWL_Edit::CanPaste() const
150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (IsReadOnly()) return FALSE;
152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString swClipboard;
154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (IFX_SystemHandler* pSH = GetSystemHandler())
155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		swClipboard = pSH->GetClipboardText(GetAttachedHWnd());
156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return !swClipboard.IsEmpty();
158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::CopyText()
161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!CanCopy()) return;
163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString str = m_pEdit->GetSelText();
165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (IFX_SystemHandler* pSH = GetSystemHandler())
167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pSH->SetClipboardText(GetAttachedHWnd(), str);
168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::PasteText()
171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!CanPaste()) return;
173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString swClipboard;
175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (IFX_SystemHandler* pSH = GetSystemHandler())
176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		swClipboard = pSH->GetClipboardText(GetAttachedHWnd());
177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pFillerNotify)
179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_BOOL bRC = TRUE;
181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_BOOL bExit = FALSE;
182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CFX_WideString strChangeEx;
183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		int nSelStart = 0;
184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		int nSelEnd = 0;
185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		GetSel(nSelStart, nSelEnd);
186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pFillerNotify->OnBeforeKeyStroke(TRUE, GetAttachedData(), 0 , swClipboard, strChangeEx, nSelStart, nSelEnd, TRUE, bRC, bExit, 0);
187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (!bRC) return;
188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (bExit) return;
189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (swClipboard.GetLength() > 0)
192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		Clear();
194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		InsertText(swClipboard);
195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pFillerNotify)
198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_BOOL bExit = FALSE;
200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pFillerNotify->OnAfterKeyStroke(TRUE, GetAttachedData(), bExit,0);
201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (bExit) return;
202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::CutText()
206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!CanCut()) return;
208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString str = m_pEdit->GetSelText();
210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (IFX_SystemHandler* pSH = GetSystemHandler())
212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pSH->SetClipboardText(GetAttachedHWnd(), str);
213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->Clear();
215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::OnCreated()
218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPWL_EditCtrl::OnCreated();
220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CPWL_ScrollBar * pScroll = GetVScrollBar())
222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pScroll->RemoveFlag(PWS_AUTOTRANSPARENT);
224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pScroll->SetTransparency(255);
225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	SetParamByFlag();
228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_rcOldWindow = GetWindowRect();
230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->SetOprNotify(this);
232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->EnableOprNotify(TRUE);
233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::SetParamByFlag()
236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (HasFlag(PES_RIGHT))
238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEdit->SetAlignmentH(2, FALSE);
240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (HasFlag(PES_MIDDLE))
242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEdit->SetAlignmentH(1, FALSE);
244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEdit->SetAlignmentH(0, FALSE);
248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (HasFlag(PES_BOTTOM))
251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEdit->SetAlignmentV(2, FALSE);
253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (HasFlag(PES_CENTER))
255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEdit->SetAlignmentV(1, FALSE);
257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEdit->SetAlignmentV(0, FALSE);
261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (HasFlag(PES_PASSWORD))
264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEdit->SetPasswordChar('*', FALSE);
266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->SetMultiLine(HasFlag(PES_MULTILINE), FALSE);
269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->SetAutoReturn(HasFlag(PES_AUTORETURN), FALSE);
270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->SetAutoFontSize(HasFlag(PWS_AUTOFONTSIZE), FALSE);
271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->SetAutoScroll(HasFlag(PES_AUTOSCROLL), FALSE);
272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->EnableUndo(HasFlag(PES_UNDO));
273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (HasFlag(PES_TEXTOVERFLOW))
275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		SetClipRect(CPDF_Rect(0.0f,0.0f,0.0f,0.0f));
277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEdit->SetTextOverflow(TRUE, FALSE);
278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (m_pEditCaret)
282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_pEditCaret->SetClipRect(CPWL_Utils::InflateRect(GetClientRect(),1.0f)); //+1 for caret beside border
284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (HasFlag(PES_SPELLCHECK))
288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pSpellCheck = GetCreationParam().pSpellCheck;
290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream)
294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPWL_Wnd::GetThisAppearanceStream(sAppStream);
296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Rect rcClient = GetClientRect();
298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ByteTextBuf sLine;
299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32 nCharArray = m_pEdit->GetCharArray();
301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (nCharArray > 0)
303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		switch (GetBorderStyle())
305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case PBS_SOLID:
307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				sLine << "q\n" << GetBorderWidth() << " w\n"
309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					<< CPWL_Utils::GetColorAppStream(GetBorderColor(),FALSE) << " 2 J 0 j\n";
310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				for (FX_INT32 i=1;i<nCharArray;i++)
312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					sLine << rcClient.left + ((rcClient.right - rcClient.left)/nCharArray)*i << " "
314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						<< rcClient.bottom << " m\n"
315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						<< rcClient.left + ((rcClient.right - rcClient.left)/nCharArray)*i << " "
316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						<< rcClient.top << " l S\n";
317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				sLine << "Q\n";
320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case PBS_DASH:
323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				sLine << "q\n" << GetBorderWidth() << " w\n"
325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					<< CPWL_Utils::GetColorAppStream(GetBorderColor(),FALSE) << " 2 J 0 j\n"
326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					<< "[" << GetBorderDash().nDash << " "
327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					<< GetBorderDash().nGap << "] "
328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					<< GetBorderDash().nPhase << " d\n";
329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				for (FX_INT32 i=1;i<nCharArray;i++)
331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					sLine << rcClient.left + ((rcClient.right - rcClient.left)/nCharArray)*i << " "
333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						<< rcClient.bottom << " m\n"
334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						<< rcClient.left + ((rcClient.right - rcClient.left)/nCharArray)*i << " "
335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						<< rcClient.top << " l S\n";
336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				sLine << "Q\n";
339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	sAppStream << sLine;
345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ByteTextBuf sText;
347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Point ptOffset = CPDF_Point(0.0f,0.0f);
349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordRange wrWhole = m_pEdit->GetWholeWordRange();
351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordRange wrSelect = GetSelectWordRange();
352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordRange wrVisible = (HasFlag(PES_TEXTOVERFLOW) ? wrWhole : m_pEdit->GetVisibleWordRange());
353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordRange wrSelBefore(wrWhole.BeginPos,wrSelect.BeginPos);
354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordRange wrSelAfter(wrSelect.EndPos,wrWhole.EndPos);
355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordRange wrTemp = CPWL_Utils::OverlapWordRange(GetSelectWordRange(),wrVisible);
357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ByteString sEditSel = CPWL_Utils::GetEditSelAppStream(m_pEdit, ptOffset,
358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			&wrTemp);
359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (sEditSel.GetLength() > 0)
361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		sText << CPWL_Utils::GetColorAppStream(PWL_DEFAULT_SELBACKCOLOR) << sEditSel ;
362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	wrTemp = CPWL_Utils::OverlapWordRange(wrVisible,wrSelBefore);
364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ByteString sEditBefore = CPWL_Utils::GetEditAppStream(m_pEdit, ptOffset,
365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			&wrTemp, !HasFlag(PES_CHARARRAY), m_pEdit->GetPasswordChar());
366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (sEditBefore.GetLength() > 0)
368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		sText << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor()) << sEditBefore << "ET\n";
369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	wrTemp = CPWL_Utils::OverlapWordRange(wrVisible,wrSelect);
371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ByteString sEditMid = CPWL_Utils::GetEditAppStream(m_pEdit, ptOffset,
372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			&wrTemp, !HasFlag(PES_CHARARRAY), m_pEdit->GetPasswordChar());
373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (sEditMid.GetLength() > 0)
375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		sText << "BT\n" << CPWL_Utils::GetColorAppStream(CPWL_Color(COLORTYPE_GRAY,1)) << sEditMid << "ET\n";
376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	wrTemp = CPWL_Utils::OverlapWordRange(wrVisible,wrSelAfter);
378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ByteString sEditAfter = CPWL_Utils::GetEditAppStream(m_pEdit, ptOffset,
379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			&wrTemp, !HasFlag(PES_CHARARRAY), m_pEdit->GetPasswordChar());
380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (sEditAfter.GetLength() > 0)
382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		sText << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor()) << sEditAfter<< "ET\n";
383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (HasFlag(PES_SPELLCHECK))
385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CFX_ByteString sSpellCheck = CPWL_Utils::GetSpellCheckAppStream(m_pEdit, m_pSpellCheck, ptOffset, &wrVisible);
387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (sSpellCheck.GetLength() > 0)
388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			sText << CPWL_Utils::GetColorAppStream(CPWL_Color(COLORTYPE_RGB,1,0,0),FALSE) << sSpellCheck;
389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (sText.GetLength() > 0)
392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDF_Rect rcClient = this->GetClientRect();
394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		sAppStream << "q\n/Tx BMC\n";
395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (!HasFlag(PES_TEXTOVERFLOW))
397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			sAppStream << rcClient.left << " " << rcClient.bottom << " "
398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				<< rcClient.right - rcClient.left << " " << rcClient.top - rcClient.bottom << " re W n\n";
399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		sAppStream << sText;
401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		sAppStream << "EMC\nQ\n";
403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device)
407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPWL_Wnd::DrawThisAppearance(pDevice,pUser2Device);
409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Rect rcClient = GetClientRect();
411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ByteTextBuf sLine;
412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32 nCharArray = m_pEdit->GetCharArray();
414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (nCharArray > 0)
416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		switch (GetBorderStyle())
418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case PBS_SOLID:
420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				CFX_GraphStateData gsd;
422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				gsd.m_LineWidth = (FX_FLOAT)GetBorderWidth();
423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				CFX_PathData path;
425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				path.SetPointCount((nCharArray-1)*2);
426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				for (FX_INT32 i=0; i<nCharArray-1; i++)
428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					path.SetPoint(i*2, rcClient.left + ((rcClient.right - rcClient.left)/nCharArray)*(i+1),
430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						rcClient.bottom, FXPT_MOVETO);
431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					path.SetPoint(i*2+1, rcClient.left + ((rcClient.right - rcClient.left)/nCharArray)*(i+1),
432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						rcClient.top, FXPT_LINETO);
433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (path.GetPointCount() > 0)
435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					pDevice->DrawPath(&path, pUser2Device, &gsd,0,
436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						CPWL_Utils::PWLColorToFXColor(GetBorderColor(),255), FXFILL_ALTERNATE);
437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case PBS_DASH:
440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				CFX_GraphStateData gsd;
442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				gsd.m_LineWidth = (FX_FLOAT)GetBorderWidth();
443ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
444ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				gsd.SetDashCount(2);
445ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				gsd.m_DashArray[0] = (FX_FLOAT)GetBorderDash().nDash;
446ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				gsd.m_DashArray[1] = (FX_FLOAT)GetBorderDash().nGap;
447ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				gsd.m_DashPhase = (FX_FLOAT)GetBorderDash().nPhase;
448ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				CFX_PathData path;
450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				path.SetPointCount((nCharArray-1)*2);
451ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				for (FX_INT32 i=0; i<nCharArray-1; i++)
453ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					path.SetPoint(i*2, rcClient.left + ((rcClient.right - rcClient.left)/nCharArray)*(i+1),
455ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						rcClient.bottom, FXPT_MOVETO);
456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					path.SetPoint(i*2+1, rcClient.left + ((rcClient.right - rcClient.left)/nCharArray)*(i+1),
457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						rcClient.top, FXPT_LINETO);
458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
459ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (path.GetPointCount() > 0)
460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					pDevice->DrawPath(&path, pUser2Device, &gsd,0,
461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						CPWL_Utils::PWLColorToFXColor(GetBorderColor(),255), FXFILL_ALTERNATE);
462ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
463ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
464ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
465ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
466ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
467ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Rect rcClip;
468ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordRange wrRange = m_pEdit->GetVisibleWordRange();
469ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordRange* pRange = NULL;
470ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
471ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!HasFlag(PES_TEXTOVERFLOW))
472ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
473ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		rcClip = GetClientRect();
474ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pRange = &wrRange;
475ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
476ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovIFX_SystemHandler* pSysHandler = GetSystemHandler();
477ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	IFX_Edit::DrawEdit(pDevice,pUser2Device,m_pEdit,
478ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPWL_Utils::PWLColorToFXColor(GetTextColor(),this->GetTransparency()),
479ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor(),this->GetTransparency()),
480ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		rcClip,CPDF_Point(0.0f,0.0f),pRange, pSysHandler, m_pFormFiller);
481ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
482ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (HasFlag(PES_SPELLCHECK))
483ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
484ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPWL_Utils::DrawEditSpellCheck(pDevice,pUser2Device,m_pEdit,rcClip,
485ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CPDF_Point(0.0f,0.0f),pRange, this->GetCreationParam().pSpellCheck);
486ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
487ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
488ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
489ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPWL_Edit::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag)
490ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
491ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPWL_Wnd::OnLButtonDown(point,nFlag);
492ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
493ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (HasFlag(PES_TEXTOVERFLOW) || ClientHitTest(point))
494ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
495ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (m_bMouseDown)
496ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			this->InvalidateRect();
497ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
498ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_bMouseDown = TRUE;
499ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		SetCapture();
500ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
501ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEdit->OnMouseDown(point,IsSHIFTpressed(nFlag),IsCTRLpressed(nFlag));
502ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
503ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
504ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
505ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
506ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
507ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL	CPWL_Edit::OnLButtonDblClk(const CPDF_Point & point, FX_DWORD nFlag)
508ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
509ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPWL_Wnd::OnLButtonDblClk(point, nFlag);
510ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
511ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (HasFlag(PES_TEXTOVERFLOW) || ClientHitTest(point))
512ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
513ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEdit->SelectAll();
514ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
515ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
516ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
517ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
518ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
519ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define WM_PWLEDIT_UNDO					0x01
520ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define WM_PWLEDIT_REDO					0x02
521ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define WM_PWLEDIT_CUT					0x03
522ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define WM_PWLEDIT_COPY					0x04
523ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define WM_PWLEDIT_PASTE				0x05
524ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define WM_PWLEDIT_DELETE				0x06
525ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define WM_PWLEDIT_SELECTALL			0x07
526ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define WM_PWLEDIT_SUGGEST				0x08
527ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
528ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPWL_Edit::OnRButtonUp(const CPDF_Point & point, FX_DWORD nFlag)
529ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
530ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_bMouseDown) return FALSE;
531ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
532ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPWL_Wnd::OnRButtonUp(point, nFlag);
533ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
534ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!HasFlag(PES_TEXTOVERFLOW) && !ClientHitTest(point)) return TRUE;
535ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
536ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	IFX_SystemHandler* pSH = GetSystemHandler();
537ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pSH) return FALSE;
538ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
539ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	this->SetFocus();
540ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
541ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordRange wrLatin = GetLatinWordsRange(point);
542ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString swLatin = m_pEdit->GetRangeText(wrLatin);
543ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
544ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_HMENU hPopup = pSH->CreatePopupMenu();
545ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!hPopup) return FALSE;
546ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
547ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ByteStringArray sSuggestWords;
548ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Point ptPopup = point;
549ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
550ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!IsReadOnly())
551ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
552ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (HasFlag(PES_SPELLCHECK) && !swLatin.IsEmpty())
553ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
554ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (m_pSpellCheck)
555ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
556ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				CFX_ByteString sLatin = CFX_ByteString::FromUnicode(swLatin);
557ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
558ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (!m_pSpellCheck->CheckWord(sLatin))
559ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
560ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					m_pSpellCheck->SuggestWords(sLatin,sSuggestWords);
561ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
562ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					FX_INT32 nSuggest = sSuggestWords.GetSize();
563ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
564ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					for (FX_INT32 nWord=0; nWord<nSuggest; nWord++)
565ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					{
566ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						pSH->AppendMenuItem(hPopup, WM_PWLEDIT_SUGGEST+nWord, sSuggestWords[nWord].UTF8Decode());
567ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					}
568ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
569ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					if (nSuggest > 0)
570ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						pSH->AppendMenuItem(hPopup, 0, L"");
571ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
572ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					ptPopup = GetWordRightBottomPoint(wrLatin.EndPos);
573ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
574ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
575ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
576ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
577ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
578ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	IPWL_Provider* pProvider = this->GetProvider();
579ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
580ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (HasFlag(PES_UNDO))
581ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
582ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pSH->AppendMenuItem(hPopup, WM_PWLEDIT_UNDO,
583ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pProvider ? pProvider->LoadPopupMenuString(0) : L"&Undo");
584ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pSH->AppendMenuItem(hPopup, WM_PWLEDIT_REDO,
585ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pProvider ? pProvider->LoadPopupMenuString(1) : L"&Redo");
586ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pSH->AppendMenuItem(hPopup, 0, L"");
587ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
588ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (!m_pEdit->CanUndo())
589ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pSH->EnableMenuItem(hPopup, WM_PWLEDIT_UNDO, FALSE);
590ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (!m_pEdit->CanRedo())
591ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pSH->EnableMenuItem(hPopup, WM_PWLEDIT_REDO, FALSE);
592ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
593ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
594ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pSH->AppendMenuItem(hPopup, WM_PWLEDIT_CUT,
595ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pProvider ? pProvider->LoadPopupMenuString(2) : L"Cu&t");
596ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pSH->AppendMenuItem(hPopup, WM_PWLEDIT_COPY,
597ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pProvider ? pProvider->LoadPopupMenuString(3) : L"&Copy");
598ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pSH->AppendMenuItem(hPopup, WM_PWLEDIT_PASTE,
599ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pProvider ? pProvider->LoadPopupMenuString(4) : L"&Paste");
600ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pSH->AppendMenuItem(hPopup, WM_PWLEDIT_DELETE,
601ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pProvider ? pProvider->LoadPopupMenuString(5) : L"&Delete");
602ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
603ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString swText = pSH->GetClipboardText(this->GetAttachedHWnd());
604ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (swText.IsEmpty())
605ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pSH->EnableMenuItem(hPopup, WM_PWLEDIT_PASTE, FALSE);
606ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
607ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!m_pEdit->IsSelected())
608ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
609ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pSH->EnableMenuItem(hPopup, WM_PWLEDIT_CUT, FALSE);
610ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pSH->EnableMenuItem(hPopup, WM_PWLEDIT_COPY, FALSE);
611ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pSH->EnableMenuItem(hPopup, WM_PWLEDIT_DELETE, FALSE);
612ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
613ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
614ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (IsReadOnly())
615ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
616ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pSH->EnableMenuItem(hPopup, WM_PWLEDIT_CUT, FALSE);
617ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pSH->EnableMenuItem(hPopup, WM_PWLEDIT_DELETE, FALSE);
618ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pSH->EnableMenuItem(hPopup, WM_PWLEDIT_PASTE, FALSE);
619ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
620ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
621ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (HasFlag(PES_PASSWORD))
622ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
623ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pSH->EnableMenuItem(hPopup, WM_PWLEDIT_CUT, FALSE);
624ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pSH->EnableMenuItem(hPopup, WM_PWLEDIT_COPY, FALSE);
625ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
626ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
627ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (HasFlag(PES_NOREAD))
628ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
629ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pSH->EnableMenuItem(hPopup, WM_PWLEDIT_CUT, FALSE);
630ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pSH->EnableMenuItem(hPopup, WM_PWLEDIT_COPY, FALSE);
631ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
632ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
633ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pSH->AppendMenuItem(hPopup, 0, L"");
634ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pSH->AppendMenuItem(hPopup, WM_PWLEDIT_SELECTALL,
635ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pProvider ? pProvider->LoadPopupMenuString(6) : L"&Select All");
636ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
637ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pEdit->GetTotalWords() == 0)
638ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
639ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pSH->EnableMenuItem(hPopup, WM_PWLEDIT_SELECTALL, FALSE);
640ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
641ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
642ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32 x, y;
643ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	PWLtoWnd(ptPopup, x, y);
644ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pSH->ClientToScreen(GetAttachedHWnd(), x, y);
645ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pSH->SetCursor(FXCT_ARROW);
646ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32 nCmd = pSH->TrackPopupMenu(hPopup,
647ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					 x,
648ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					 y,
649ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					 GetAttachedHWnd());
650ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
651ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
652ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	switch (nCmd)
653ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
654ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case WM_PWLEDIT_UNDO:
655ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		Undo();
656ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
657ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case WM_PWLEDIT_REDO:
658ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		Redo();
659ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
660ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case WM_PWLEDIT_CUT:
661ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		this->CutText();
662ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
663ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case WM_PWLEDIT_COPY:
664ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		this->CopyText();
665ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
666ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case WM_PWLEDIT_PASTE:
667ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		this->PasteText();
668ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
669ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case WM_PWLEDIT_DELETE:
670ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		this->Clear();
671ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
672ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case WM_PWLEDIT_SELECTALL:
673ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		this->SelectAll();
674ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
675ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case WM_PWLEDIT_SUGGEST + 0:
676ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos),m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos));
677ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ReplaceSel(sSuggestWords[0].UTF8Decode());
678ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
679ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case WM_PWLEDIT_SUGGEST + 1:
680ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos),m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos));
681ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ReplaceSel(sSuggestWords[1].UTF8Decode());
682ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
683ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case WM_PWLEDIT_SUGGEST + 2:
684ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos),m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos));
685ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ReplaceSel(sSuggestWords[2].UTF8Decode());
686ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
687ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case WM_PWLEDIT_SUGGEST + 3:
688ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos),m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos));
689ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ReplaceSel(sSuggestWords[3].UTF8Decode());
690ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
691ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case WM_PWLEDIT_SUGGEST + 4:
692ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		SetSel(m_pEdit->WordPlaceToWordIndex(wrLatin.BeginPos),m_pEdit->WordPlaceToWordIndex(wrLatin.EndPos));
693ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ReplaceSel(sSuggestWords[4].UTF8Decode());
694ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
695ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	default:
696ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
697ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
698ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
699ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pSH->DestroyMenu(hPopup);
700ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
701ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
702ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
703ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
704ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::OnSetFocus()
705ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
706ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	SetEditCaret(TRUE);
707ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
708ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!IsReadOnly())
709ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
710ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (IPWL_FocusHandler* pFocusHandler = GetFocusHandler())
711ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pFocusHandler->OnSetFocus(this);
712ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
713ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
714ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_bFocus = TRUE;
715ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
716ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
717ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::OnKillFocus()
718ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
719ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ShowVScrollBar(FALSE);
720ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
721ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->SelectNone();
722ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	SetCaret(FALSE, CPDF_Point(0.0f,0.0f), CPDF_Point(0.0f,0.0f));
723ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
724ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	SetCharSet(0);
725ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
726ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!IsReadOnly())
727ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
728ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (IPWL_FocusHandler* pFocusHandler = GetFocusHandler())
729ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pFocusHandler->OnKillFocus(this);
730ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
731ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
732ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_bFocus = FALSE;
733ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
734ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
735ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::SetHorzScale(FX_INT32 nHorzScale, FX_BOOL bPaint/* = TRUE*/)
736ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
737ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->SetHorzScale(nHorzScale, bPaint);
738ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
739ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
740ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::SetCharSpace(FX_FLOAT fCharSpace, FX_BOOL bPaint/* = TRUE*/)
741ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
742ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->SetCharSpace(fCharSpace, bPaint);
743ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
744ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
745ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::SetLineLeading(FX_FLOAT fLineLeading, FX_BOOL bPaint/* = TRUE*/)
746ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
747ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->SetLineLeading(fLineLeading, bPaint);
748ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
749ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
750ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString CPWL_Edit::GetSelectAppearanceStream(const CPDF_Point & ptOffset) const
751ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
752ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordRange wr = GetSelectWordRange();
753ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return CPWL_Utils::GetEditSelAppStream(m_pEdit,ptOffset,&wr);
754ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
755ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
756ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPVT_WordRange CPWL_Edit::GetSelectWordRange() const
757ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
758ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pEdit->IsSelected())
759ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
760ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_INT32 nStart = -1;
761ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_INT32 nEnd = -1;
762ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
763ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEdit->GetSel(nStart, nEnd);
764ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
765ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPVT_WordPlace wpStart = m_pEdit->WordIndexToWordPlace(nStart);
766ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPVT_WordPlace wpEnd = m_pEdit->WordIndexToWordPlace(nEnd);
767ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
768ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return CPVT_WordRange(wpStart,wpEnd);
769ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
770ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
771ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return CPVT_WordRange();
772ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
773ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
774ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString CPWL_Edit::GetTextAppearanceStream(const CPDF_Point & ptOffset) const
775ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
776ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ByteTextBuf sRet;
777ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ByteString sEdit = CPWL_Utils::GetEditAppStream(m_pEdit,ptOffset);
778ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
779ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (sEdit.GetLength() > 0)
780ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
781ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		sRet << "BT\n" << CPWL_Utils::GetColorAppStream(GetTextColor()) << sEdit << "ET\n";
782ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
783ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
784ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return sRet.GetByteString();
785ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
786ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
787ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString CPWL_Edit::GetCaretAppearanceStream(const CPDF_Point & ptOffset) const
788ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
789ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pEditCaret)
790ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return m_pEditCaret->GetCaretAppearanceStream(ptOffset);
791ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
792ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return CFX_ByteString();
793ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
794ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
795ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_Point CPWL_Edit::GetWordRightBottomPoint(const CPVT_WordPlace& wpWord)
796ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
797ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Point pt(0.0f, 0.0f);
798ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
799ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (IFX_Edit_Iterator * pIterator = m_pEdit->GetIterator())
800ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
801ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPVT_WordPlace wpOld = pIterator->GetAt();
802ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pIterator->SetAt(wpWord);
803ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPVT_Word word;
804ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (pIterator->GetWord(word))
805ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
806ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pt = CPDF_Point(word.ptWord.x + word.fWidth, word.ptWord.y + word.fDescent);
807ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
808ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
809ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pIterator->SetAt(wpOld);
810ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
811ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
812ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return pt;
813ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
814ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
815ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL	CPWL_Edit::IsTextFull() const
816ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
817ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return m_pEdit->IsTextFull();
818ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
819ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
820ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_FLOAT CPWL_Edit::GetCharArrayAutoFontSize(CPDF_Font* pFont, const CPDF_Rect& rcPlate, FX_INT32 nCharArray)
821ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
822ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (pFont && !pFont->IsStandardFont())
823ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
824ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_RECT rcBBox;
825ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pFont->GetFontBBox(rcBBox);
826ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
827ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDF_Rect rcCell = rcPlate;
828ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_FLOAT xdiv = rcCell.Width() / nCharArray * 1000.0f / rcBBox.Width();
829ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_FLOAT ydiv = - rcCell.Height() * 1000.0f / rcBBox.Height();
830ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
831ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return xdiv < ydiv ? xdiv : ydiv;
832ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
833ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
834ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return 0.0f;
835ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
836ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
837ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::SetCharArray(FX_INT32 nCharArray)
838ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
839ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (HasFlag(PES_CHARARRAY) && nCharArray > 0)
840ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
841ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEdit->SetCharArray(nCharArray);
842ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEdit->SetTextOverflow(TRUE);
843ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
844ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (HasFlag(PWS_AUTOFONTSIZE))
845ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
846ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (IFX_Edit_FontMap* pFontMap = this->GetFontMap())
847ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
848ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				FX_FLOAT fFontSize = GetCharArrayAutoFontSize(pFontMap->GetPDFFont(0), GetClientRect(), nCharArray);
849ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (fFontSize > 0.0f)
850ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
851ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					m_pEdit->SetAutoFontSize(FALSE);
852ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					m_pEdit->SetFontSize(fFontSize);
853ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
854ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
855ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
856ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
857ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
858ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
859ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::SetLimitChar(FX_INT32 nLimitChar)
860ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
861ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->SetLimitChar(nLimitChar);
862ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
863ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
864ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::ReplaceSel(FX_LPCWSTR csText)
865ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
866ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->Clear();
867ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEdit->InsertText(csText);
868ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
869ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
870ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_Rect CPWL_Edit::GetFocusRect() const
871ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
872ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return CPDF_Rect();
873ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
874ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
875ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::ShowVScrollBar(FX_BOOL bShow)
876ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
877ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CPWL_ScrollBar * pScroll = GetVScrollBar())
878ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
879ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (bShow)
880ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
881ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (!pScroll->IsVisible())
882ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
883ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				pScroll->SetVisible(TRUE);
884ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				CPDF_Rect rcWindow = GetWindowRect();
885ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				m_rcOldWindow = rcWindow;
886ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				rcWindow.right += PWL_SCROLLBAR_WIDTH;
887ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				Move(rcWindow, TRUE, TRUE);
888ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
889ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
890ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
891ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
892ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (pScroll->IsVisible())
893ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
894ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				pScroll->SetVisible(FALSE);
895ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				Move(m_rcOldWindow, TRUE, TRUE);
896ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
897ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
898ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
899ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
900ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
901ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL	CPWL_Edit::IsVScrollBarVisible() const
902ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
903ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CPWL_ScrollBar * pScroll = GetVScrollBar())
904ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
905ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return pScroll->IsVisible();
906ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
907ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
908ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
909ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
910ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
911ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::EnableSpellCheck(FX_BOOL bEnabled)
912ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
913ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (bEnabled)
914ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		AddFlag(PES_SPELLCHECK);
915ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
916ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		RemoveFlag(PES_SPELLCHECK);
917ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
918ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
919ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPWL_Edit::OnKeyDown(FX_WORD nChar, FX_DWORD nFlag)
920ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
921ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_bMouseDown) return TRUE;
922ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
923ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (nChar == FWL_VKEY_Delete)
924ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
925ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (m_pFillerNotify)
926ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
927ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			FX_BOOL bRC = TRUE;
928ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			FX_BOOL bExit = FALSE;
929ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CFX_WideString strChange;
930ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CFX_WideString strChangeEx;
931ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
932ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			int nSelStart = 0;
933ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			int nSelEnd = 0;
934ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			GetSel(nSelStart, nSelEnd);
935ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
936ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (nSelStart == nSelEnd)
937ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				nSelEnd = nSelStart + 1;
938ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_pFillerNotify->OnBeforeKeyStroke(TRUE, GetAttachedData(), FWL_VKEY_Delete, strChange, strChangeEx, nSelStart, nSelEnd, TRUE, bRC, bExit, nFlag);
939ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (!bRC) return FALSE;
940ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (bExit) return FALSE;
941ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
942ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
943ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
944ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL bRet = CPWL_EditCtrl::OnKeyDown(nChar,  nFlag);
945ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
946ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (nChar == FWL_VKEY_Delete)
947ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
948ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (m_pFillerNotify)
949ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
950ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			FX_BOOL bExit = FALSE;
951ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_pFillerNotify->OnAfterKeyStroke(TRUE, GetAttachedData(), bExit,nFlag);
952ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (bExit) return FALSE;
953ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
954ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
955ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
956ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//In case of implementation swallow the OnKeyDown event.
957ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(IsProceedtoOnChar(nChar, nFlag))
958ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			return TRUE;
959ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
960ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return bRet;
961ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
962ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
963ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/**
964ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*In case of implementation swallow the OnKeyDown event.
965ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*If the event is swallowed, implementation may do other unexpected things, which is not the control means to do.
966ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/
967ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPWL_Edit::IsProceedtoOnChar(FX_WORD nKeyCode, FX_DWORD nFlag)
968ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
969ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
970ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL bCtrl = IsCTRLpressed(nFlag);
971ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL bAlt = IsALTpressed(nFlag);
972ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(bCtrl && !bAlt)
973ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
974ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//hot keys for edit control.
975ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		switch(nKeyCode)
976ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
977ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case 'C':
978ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case 'V':
979ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case 'X':
980ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case 'A':
981ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		case 'Z':
982ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			return TRUE;
983ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		default:
984ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
985ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
986ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
987ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//control characters.
988ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	switch(nKeyCode)
989ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
990ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case FWL_VKEY_Escape:
991ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case FWL_VKEY_Back:
992ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case FWL_VKEY_Return:
993ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case FWL_VKEY_Space:
994ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
995ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	default:
996ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
997ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
998ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
999ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1000ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1001ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1002ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPWL_Edit::OnChar(FX_WORD nChar, FX_DWORD nFlag)
1003ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1004ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_bMouseDown) return TRUE;
1005ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1006ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL bRC = TRUE;
1007ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL bExit = FALSE;
1008ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1009ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL bCtrl = IsCTRLpressed(nFlag);
1010ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!bCtrl)
1011ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1012ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (m_pFillerNotify)
1013ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1014ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CFX_WideString swChange;
1015ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			FX_INT32 nKeyCode;
1016ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1017ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			int nSelStart = 0;
1018ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			int nSelEnd = 0;
1019ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			GetSel(nSelStart, nSelEnd);
1020ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1021ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			switch (nChar)
1022ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
1023ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			case FWL_VKEY_Back:
1024ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				nKeyCode = nChar;
1025ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (nSelStart == nSelEnd)
1026ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					nSelStart = nSelEnd - 1;
1027ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				break;
1028ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			case FWL_VKEY_Return:
1029ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				nKeyCode = nChar;
1030ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				break;
1031ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			default:
1032ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				nKeyCode = 0;
1033ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				swChange += nChar;
1034ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				break;
1035ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
1036ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1037ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CFX_WideString strChangeEx;
1038ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_pFillerNotify->OnBeforeKeyStroke(TRUE, GetAttachedData(), nKeyCode, swChange, strChangeEx, nSelStart, nSelEnd, TRUE, bRC, bExit, nFlag);
1039ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1040ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1041ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1042ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!bRC) return TRUE;
1043ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (bExit) return FALSE;
1044ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1045ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (IFX_Edit_FontMap * pFontMap = GetFontMap())
1046ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1047ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_INT32 nOldCharSet = GetCharSet();
1048ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_INT32 nNewCharSet = pFontMap->CharSetFromUnicode(nChar, DEFAULT_CHARSET);
1049ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if(nOldCharSet != nNewCharSet)
1050ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1051ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			SetCharSet(nNewCharSet);
1052ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1053ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1054ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL bRet = CPWL_EditCtrl::OnChar(nChar,nFlag);
1055ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1056ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!bCtrl)
1057ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1058ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (m_pFillerNotify)
1059ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1060ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_pFillerNotify->OnAfterKeyStroke(TRUE, GetAttachedData(), bExit,nFlag);
1061ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (bExit) return FALSE;
1062ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1063ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1064ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1065ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return bRet;
1066ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1067ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1068ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL	CPWL_Edit::OnMouseWheel(short zDelta, const CPDF_Point & point, FX_DWORD nFlag)
1069ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1070ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (HasFlag(PES_MULTILINE))
1071ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1072ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDF_Point ptScroll = GetScrollPos();
1073ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1074ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (zDelta > 0)
1075ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1076ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			ptScroll.y += this->GetFontSize();
1077ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1078ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
1079ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1080ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			ptScroll.y -= this->GetFontSize();
1081ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1082ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		this->SetScrollPos(ptScroll);
1083ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1084ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
1085ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1086ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1087ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
1088ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1089ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1090ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::OnInsertReturn(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace)
1091ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1092ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (HasFlag(PES_SPELLCHECK))
1093ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1094ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),GetLatinWordsRange(place)));
1095ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1096ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1097ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pEditNotify)
1098ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1099ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEditNotify->OnInsertReturn(place, oldplace);
1100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::OnBackSpace(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace)
1104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (HasFlag(PES_SPELLCHECK))
1106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),GetLatinWordsRange(place)));
1108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pEditNotify)
1111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEditNotify->OnBackSpace(place, oldplace);
1113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::OnDelete(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace)
1117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (HasFlag(PES_SPELLCHECK))
1119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),GetLatinWordsRange(place)));
1121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pEditNotify)
1124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEditNotify->OnDelete(place, oldplace);
1126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::OnClear(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace)
1130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (HasFlag(PES_SPELLCHECK))
1132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),GetLatinWordsRange(place)));
1134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pEditNotify)
1137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEditNotify->OnClear(place, oldplace);
1139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::OnInsertWord(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace)
1143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (HasFlag(PES_SPELLCHECK))
1145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),GetLatinWordsRange(place)));
1147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pEditNotify)
1150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEditNotify->OnInsertWord(place, oldplace);
1152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::OnSetText(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace)
1156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::OnInsertText(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace)
1160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (HasFlag(PES_SPELLCHECK))
1162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEdit->RefreshWordRange(CombineWordRange(GetLatinWordsRange(oldplace),GetLatinWordsRange(place)));
1164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pEditNotify)
1167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEditNotify->OnInsertText(place, oldplace);
1169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::OnAddUndo(IFX_Edit_UndoItem* pUndoItem)
1173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pEditNotify)
1175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pEditNotify->OnAddUndo(this);
1177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1180ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPVT_WordRange CPWL_Edit::CombineWordRange(const CPVT_WordRange& wr1, const CPVT_WordRange& wr2)
1181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordRange wrRet;
1183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (wr1.BeginPos.WordCmp(wr2.BeginPos) < 0)
1185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		wrRet.BeginPos = wr1.BeginPos;
1187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
1189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		wrRet.BeginPos = wr2.BeginPos;
1191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (wr1.EndPos.WordCmp(wr2.EndPos) < 0)
1194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		wrRet.EndPos = wr2.EndPos;
1196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
1198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		wrRet.EndPos = wr1.EndPos;
1200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return wrRet;
1203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1205ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPVT_WordRange CPWL_Edit::GetLatinWordsRange(const CPDF_Point& point) const
1206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return GetSameWordsRange(m_pEdit->SearchWordPlace(point), TRUE, FALSE);
1208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1210ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPVT_WordRange CPWL_Edit::GetLatinWordsRange(const CPVT_WordPlace & place) const
1211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return GetSameWordsRange(place, TRUE, FALSE);
1213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1215ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPVT_WordRange CPWL_Edit::GetArabicWordsRange(const CPVT_WordPlace & place) const
1216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return GetSameWordsRange(place, FALSE, TRUE);
1218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PWL_ISARABICWORD(word) ((word >= 0x0600 && word <= 0x06FF) || (word >= 0xFB50 && word <= 0xFEFC))
1221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1222ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPVT_WordRange CPWL_Edit::GetSameWordsRange(const CPVT_WordPlace & place, FX_BOOL bLatin, FX_BOOL bArabic) const
1223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordRange range;
1225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (IFX_Edit_Iterator* pIterator = m_pEdit->GetIterator())
1227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPVT_Word wordinfo;
1229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPVT_WordPlace wpStart(place),wpEnd(place);
1230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pIterator->SetAt(place);
1231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (bLatin)
1233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			while (pIterator->NextWord())
1235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
1236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (pIterator->GetWord(wordinfo) && FX_EDIT_ISLATINWORD(wordinfo.Word))
1237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
1238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					wpEnd = pIterator->GetAt();
1239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					continue;
1240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
1241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				else
1242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					break;
1243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			};
1244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else if (bArabic)
1246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			while (pIterator->NextWord())
1248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
1249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (pIterator->GetWord(wordinfo) && PWL_ISARABICWORD(wordinfo.Word))
1250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
1251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					wpEnd = pIterator->GetAt();
1252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					continue;
1253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
1254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				else
1255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					break;
1256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			};
1257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pIterator->SetAt(place);
1260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (bLatin)
1262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			do
1264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
1265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (pIterator->GetWord(wordinfo) && FX_EDIT_ISLATINWORD(wordinfo.Word))
1266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
1267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					continue;
1268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
1269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				else
1270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
1271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					wpStart = pIterator->GetAt();
1272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					break;
1273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
1274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
1275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			while (pIterator->PrevWord());
1276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else if (bArabic)
1278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			do
1280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
1281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (pIterator->GetWord(wordinfo) && PWL_ISARABICWORD(wordinfo.Word))
1282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
1283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					continue;
1284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
1285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				else
1286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
1287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					wpStart = pIterator->GetAt();
1288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					break;
1289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
1290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
1291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			while (pIterator->PrevWord());
1292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		range.Set(wpStart,wpEnd);
1295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return range;
1298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::AjustArabicWords(const CPVT_WordRange& wr)
1301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::GeneratePageObjects(CPDF_PageObjects* pPageObjects,
1305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov										const CPDF_Point& ptOffset, CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray)
1306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	IFX_Edit::GeneratePageObjects(pPageObjects, m_pEdit, ptOffset, NULL, CPWL_Utils::PWLColorToFXColor(GetTextColor(),GetTransparency()), ObjArray);
1308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPWL_Edit::GeneratePageObjects(CPDF_PageObjects* pPageObjects,
1311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov									const CPDF_Point& ptOffset)
1312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ArrayTemplate<CPDF_TextObject*> ObjArray;
1314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	IFX_Edit::GeneratePageObjects(pPageObjects, m_pEdit, ptOffset, NULL, CPWL_Utils::PWLColorToFXColor(GetTextColor(),GetTransparency()), ObjArray);
1315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1317