1e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved.
2e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Use of this source code is governed by a BSD-style license that can be
3e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// found in the LICENSE file.
4e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
5e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
7e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../../include/fxedit/fxet_stub.h"
8e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../../include/fxedit/fxet_edit.h"
9e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
10e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define FX_EDIT_UNDO_MAXITEM				10000
11e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
12e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov/* ---------------------------- CFX_Edit_Iterator ---------------------------- */
13e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
14e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_Edit_Iterator::CFX_Edit_Iterator(CFX_Edit * pEdit,IPDF_VariableText_Iterator * pVTIterator) :
15e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pEdit(pEdit),
16e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pVTIterator(pVTIterator)
17e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
18e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
19e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
20e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_Edit_Iterator::~CFX_Edit_Iterator()
21e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
22e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
23e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
24e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL	CFX_Edit_Iterator::NextWord()
25e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
26e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pVTIterator != NULL);
27e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
28e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pVTIterator->NextWord();
29e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
30e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
31e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit_Iterator::NextLine()
32e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
33e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pVTIterator != NULL);
34e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
35e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pVTIterator->NextLine();
36e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
37e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
38e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit_Iterator::NextSection()
39e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
40e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pVTIterator != NULL);
41e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
42e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pVTIterator->NextSection();
43e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
44e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
45e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL	CFX_Edit_Iterator::PrevWord()
46e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
47e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pVTIterator != NULL);
48e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
49e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pVTIterator->PrevWord();
50e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
51e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
52e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL	CFX_Edit_Iterator::PrevLine()
53e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
54e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pVTIterator != NULL);
55e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
56e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pVTIterator->PrevLine();
57e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
58e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
59e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL	CFX_Edit_Iterator::PrevSection()
60e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
61e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pVTIterator != NULL);
62e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
63e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pVTIterator->PrevSection();
64e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
65e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
66e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit_Iterator::GetWord(CPVT_Word & word) const
67e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
68e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pEdit != NULL);
69e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pVTIterator != NULL);
70e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
71e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVTIterator->GetWord(word))
72e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
73e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		word.ptWord = m_pEdit->VTToEdit(word.ptWord);
74e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return TRUE;
75e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
76e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
77e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return FALSE;
78e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
79e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
80e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit_Iterator::GetLine(CPVT_Line & line) const
81e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
82e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pEdit != NULL);
83e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pVTIterator != NULL);
84e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
85e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVTIterator->GetLine(line))
86e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
87e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		line.ptLine = m_pEdit->VTToEdit(line.ptLine);
88e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return TRUE;
89e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
90e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
91e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return FALSE;
92e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
93e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
94e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit_Iterator::GetSection(CPVT_Section & section) const
95e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
96e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pEdit != NULL);
97e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pVTIterator != NULL);
98e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
99e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVTIterator->GetSection(section))
100e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
101e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		section.rcSection = m_pEdit->VTToEdit(section.rcSection);
102e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return TRUE;
103e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
104e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
105e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return FALSE;
106e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
107e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
108e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit_Iterator::SetAt(FX_INT32 nWordIndex)
109e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
110e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pVTIterator != NULL);
111e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
112e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pVTIterator->SetAt(nWordIndex);
113e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
114e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
115e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit_Iterator::SetAt(const CPVT_WordPlace & place)
116e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
117e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pVTIterator != NULL);
118e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
119e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pVTIterator->SetAt(place);
120e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
121e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
122e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovconst CPVT_WordPlace & CFX_Edit_Iterator::GetAt() const
123e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
124e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pVTIterator != NULL);
125e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
126e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pVTIterator->GetAt();
127e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
128e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
129e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovIFX_Edit* CFX_Edit_Iterator::GetEdit() const
130e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
131e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pEdit;
132e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
133e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
134e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov/* --------------------------- CFX_Edit_Provider ------------------------------- */
135e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
136e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_Edit_Provider::CFX_Edit_Provider(IFX_Edit_FontMap * pFontMap) : m_pFontMap(pFontMap)
137e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
138e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pFontMap != NULL);
139e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
140e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
141e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_Edit_Provider::~CFX_Edit_Provider()
142e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
143e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
144e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
145e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovIFX_Edit_FontMap* CFX_Edit_Provider::GetFontMap()
146e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
147e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pFontMap;
148e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
149e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
150e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_INT32 CFX_Edit_Provider::GetCharWidth(FX_INT32 nFontIndex, FX_WORD word, FX_INT32 nWordStyle)
151e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
152e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (CPDF_Font* pPDFFont = m_pFontMap->GetPDFFont(nFontIndex))
153e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
154e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		FX_DWORD charcode = word;
155e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
156e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (pPDFFont->IsUnicodeCompatible())
157e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			charcode = pPDFFont->CharCodeFromUnicode(word);
158e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else
159e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			charcode = m_pFontMap->CharCodeFromUnicode(nFontIndex, word);
160e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
161e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (charcode != -1)
162e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return pPDFFont->GetCharWidthF(charcode);
163e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
164e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
165e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return 0;
166e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
167e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
168e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_INT32 CFX_Edit_Provider::GetTypeAscent(FX_INT32 nFontIndex)
169e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
170e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (CPDF_Font* pPDFFont = m_pFontMap->GetPDFFont(nFontIndex))
171e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return pPDFFont->GetTypeAscent();
172e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
173e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return 0;
174e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
175e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
176e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_INT32 CFX_Edit_Provider::GetTypeDescent(FX_INT32 nFontIndex)
177e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
178e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (CPDF_Font* pPDFFont = m_pFontMap->GetPDFFont(nFontIndex))
179e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return pPDFFont->GetTypeDescent();
180e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
181e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return 0;
182e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
183e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
184e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_INT32 CFX_Edit_Provider::GetWordFontIndex(FX_WORD word, FX_INT32 charset, FX_INT32 nFontIndex)
185e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
186e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pFontMap->GetWordFontIndex(word,charset,nFontIndex);
187e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
188e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
189e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_INT32 CFX_Edit_Provider::GetDefaultFontIndex()
190e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
191e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return 0;
192e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
193e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
194e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL	CFX_Edit_Provider::IsLatinWord(FX_WORD word)
195e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
196e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return FX_EDIT_ISLATINWORD(word);
197e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
198e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
199e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov/* --------------------------------- CFX_Edit_Refresh --------------------------------- */
200e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
201e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_Edit_Refresh::CFX_Edit_Refresh()
202e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
203e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
204e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
205e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_Edit_Refresh::~CFX_Edit_Refresh()
206e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
207e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
208e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
209e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit_Refresh::BeginRefresh()
210e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
211e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_RefreshRects.Empty();
212e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_OldLineRects = m_NewLineRects;
213e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
214e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
215e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit_Refresh::Push(const CPVT_WordRange & linerange,const CPDF_Rect & rect)
216e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
217e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_NewLineRects.Add(linerange,rect);
218e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
219e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
220e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit_Refresh::NoAnalyse()
221e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
222e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
223e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		for (FX_INT32 i = 0, sz = m_OldLineRects.GetSize(); i < sz; i++)
224e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (CFX_Edit_LineRect * pOldRect = m_OldLineRects.GetAt(i))
225e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_RefreshRects.Add(pOldRect->m_rcLine);
226e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
227e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
228e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
229e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		for (FX_INT32 i = 0, sz = m_NewLineRects.GetSize(); i < sz; i++)
230e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (CFX_Edit_LineRect * pNewRect = m_NewLineRects.GetAt(i))
231e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_RefreshRects.Add(pNewRect->m_rcLine);
232e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
233e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
234e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
235e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit_Refresh::Analyse(FX_INT32 nAlignment)
236e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
237e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL bLineTopChanged = FALSE;
238e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect rcResult;
239e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_FLOAT fWidthDiff;
240e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
241e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32 szMax = FX_EDIT_MAX(m_OldLineRects.GetSize(),m_NewLineRects.GetSize());
242e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32 i = 0;
243e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
244e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	while (i < szMax)
245e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
246e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CFX_Edit_LineRect * pOldRect = m_OldLineRects.GetAt(i);
247e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CFX_Edit_LineRect * pNewRect = m_NewLineRects.GetAt(i);
248e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
249e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (pOldRect)
250e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
251e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (pNewRect)
252e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
253e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (bLineTopChanged)
254e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
255e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					rcResult = pOldRect->m_rcLine;
256e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					rcResult.Union(pNewRect->m_rcLine);
257e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					m_RefreshRects.Add(rcResult);
258e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
259e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				else
260e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
261e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					if (*pNewRect != *pOldRect)
262e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					{
263e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						if (!pNewRect->IsSameTop(*pOldRect) || !pNewRect->IsSameHeight(*pOldRect))
264e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
265e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							bLineTopChanged = TRUE;
266e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							continue;
267e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
268e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
269e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						if (nAlignment == 0)
270e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
271e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							if (pNewRect->m_wrLine.BeginPos != pOldRect->m_wrLine.BeginPos)
272e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
273e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								rcResult = pOldRect->m_rcLine;
274e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								rcResult.Union(pNewRect->m_rcLine);
275e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								m_RefreshRects.Add(rcResult);
276e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
277e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							else
278e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
279e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								if (!pNewRect->IsSameLeft(*pOldRect))
280e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								{
281e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									rcResult = pOldRect->m_rcLine;
282e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									rcResult.Union(pNewRect->m_rcLine);
283e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								}
284e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								else
285e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								{
286e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									fWidthDiff = pNewRect->m_rcLine.Width() - pOldRect->m_rcLine.Width();
287e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									rcResult = pNewRect->m_rcLine;
288e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									if (fWidthDiff > 0.0f)
289e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov										rcResult.left = rcResult.right - fWidthDiff;
290e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									else
291e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									{
292e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov										rcResult.left = rcResult.right;
293e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov										rcResult.right += (-fWidthDiff);
294e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									}
295e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								}
296e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								m_RefreshRects.Add(rcResult);
297e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
298e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
299e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						else
300e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
301e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							rcResult = pOldRect->m_rcLine;
302e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							rcResult.Union(pNewRect->m_rcLine);
303e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							m_RefreshRects.Add(rcResult);
304e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
305e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					}
306e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					else
307e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					{
308e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						//don't need to do anything
309e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					}
310e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
311e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
312e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else
313e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
314e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_RefreshRects.Add(pOldRect->m_rcLine);
315e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
316e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
317e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else
318e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
319e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (pNewRect)
320e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
321e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_RefreshRects.Add(pNewRect->m_rcLine);
322e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
323e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else
324e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
325e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				//error
326e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
327e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
328e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		i++;
329e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
330e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
331e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
332e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit_Refresh::AddRefresh(const CPDF_Rect & rect)
333e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
334e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_RefreshRects.Add(rect);
335e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
336e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
337e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovconst CFX_Edit_RectArray * CFX_Edit_Refresh::GetRefreshRects() const
338e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
339e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return &m_RefreshRects;
340e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
341e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
342e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit_Refresh::EndRefresh()
343e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
344e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_RefreshRects.Empty();
345e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
346e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
347e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov/* ------------------------------------- CFX_Edit_Undo ------------------------------------- */
348e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
349e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_Edit_Undo::CFX_Edit_Undo(FX_INT32 nBufsize) : m_nCurUndoPos(0),
350e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_nBufSize(nBufsize),
351e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_bModified(FALSE),
352e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_bVirgin(TRUE),
353e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_bWorking(FALSE)
354e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
355e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
356e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
357e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_Edit_Undo::~CFX_Edit_Undo()
358e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
359e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	Reset();
360e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
361e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
362e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit_Undo::CanUndo() const
363e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
364e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_nCurUndoPos > 0;
365e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
366e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
367e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit_Undo::Undo()
368e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
369e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_bWorking = TRUE;
370e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
371e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_nCurUndoPos > 0)
372e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
373e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		IFX_Edit_UndoItem * pItem = m_UndoItemStack.GetAt(m_nCurUndoPos-1);
374e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ASSERT(pItem != NULL);
375e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
376e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pItem->Undo();
377e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
378e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_nCurUndoPos--;
379e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_bModified = (m_nCurUndoPos != 0);
380e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
381e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
382e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_bWorking = FALSE;
383e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
384e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
385e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL	CFX_Edit_Undo::CanRedo() const
386e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
387e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_nCurUndoPos < m_UndoItemStack.GetSize();
388e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
389e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
390e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit_Undo::Redo()
391e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
392e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_bWorking = TRUE;
393e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
394e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32 nStackSize = m_UndoItemStack.GetSize();
395e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
396e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_nCurUndoPos < nStackSize)
397e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
398e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		IFX_Edit_UndoItem * pItem = m_UndoItemStack.GetAt(m_nCurUndoPos);
399e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ASSERT(pItem != NULL);
400e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
401e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pItem->Redo();
402e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
403e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_nCurUndoPos++;
404e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_bModified = (m_nCurUndoPos != 0);
405e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
406e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
407e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_bWorking = FALSE;
408e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
409e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
410e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL	CFX_Edit_Undo::IsWorking() const
411e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
412e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_bWorking;
413e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
414e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
415e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit_Undo::AddItem(IFX_Edit_UndoItem* pItem)
416e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
417e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(!m_bWorking);
418e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pItem != NULL);
419e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_nBufSize > 1);
420e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
421e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_nCurUndoPos < m_UndoItemStack.GetSize())
422e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		RemoveTails();
423e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
424e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_UndoItemStack.GetSize() >= m_nBufSize)
425e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
426e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		RemoveHeads();
427e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_bVirgin = FALSE;
428e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
429e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
430e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_UndoItemStack.Add(pItem);
431e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_nCurUndoPos = m_UndoItemStack.GetSize();
432e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
433e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_bModified = (m_nCurUndoPos != 0);
434e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
435e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
436e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL	CFX_Edit_Undo::IsModified() const
437e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
438e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_bVirgin)
439e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return m_bModified;
440e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	else
441e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return TRUE;
442e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
443e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
444e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovIFX_Edit_UndoItem* CFX_Edit_Undo::GetItem(FX_INT32 nIndex)
445e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
446e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (nIndex>=0 && nIndex < m_UndoItemStack.GetSize())
447e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return m_UndoItemStack.GetAt(nIndex);
448e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
449e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return NULL;
450e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
451e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
452e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit_Undo::RemoveHeads()
453e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
454e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_UndoItemStack.GetSize() > 1);
455e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
456e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	delete m_UndoItemStack.GetAt(0);
457e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_UndoItemStack.RemoveAt(0);
458e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
459e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
460e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit_Undo::RemoveTails()
461e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
462e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	for (FX_INT32 i = m_UndoItemStack.GetSize()-1; i >= m_nCurUndoPos; i--)
463e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
464e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		delete m_UndoItemStack.GetAt(i);
465e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_UndoItemStack.RemoveAt(i);
466e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
467e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
468e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
469e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit_Undo::Reset()
470e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
471e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	for (FX_INT32 i=0, sz=m_UndoItemStack.GetSize(); i < sz; i++)
472e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
473e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		delete m_UndoItemStack.GetAt(i);
474e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
475e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_nCurUndoPos = 0;
476e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_UndoItemStack.RemoveAll();
477e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
478e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
479e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov/* -------------------------------- CFX_Edit_GroupUndoItem -------------------------------- */
480e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
481e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_Edit_GroupUndoItem::CFX_Edit_GroupUndoItem(const CFX_WideString& sTitle) : m_sTitle(sTitle)
482e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
483e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
484e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
485e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_Edit_GroupUndoItem::~CFX_Edit_GroupUndoItem()
486e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
487e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	for (int i=0,sz=m_Items.GetSize(); i<sz; i++)
488e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
489e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		delete m_Items[i];
490e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
491e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
492e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_Items.RemoveAll();
493e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
494e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
495e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit_GroupUndoItem::AddUndoItem(CFX_Edit_UndoItem* pUndoItem)
496e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
497e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pUndoItem != NULL);
498e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
499e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	pUndoItem->SetFirst(FALSE);
500e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	pUndoItem->SetLast(FALSE);
501e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
502e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_Items.Add(pUndoItem);
503e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
504e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_sTitle.IsEmpty())
505e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_sTitle = pUndoItem->GetUndoTitle();
506e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
507e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
508e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit_GroupUndoItem::UpdateItems()
509e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
510e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_Items.GetSize() > 0)
511e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
512e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CFX_Edit_UndoItem* pFirstItem = m_Items[0];
513e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ASSERT(pFirstItem != NULL);
514e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pFirstItem->SetFirst(TRUE);
515e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
516e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CFX_Edit_UndoItem* pLastItem = m_Items[m_Items.GetSize() - 1];
517e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ASSERT(pLastItem != NULL);
518e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pLastItem->SetLast(TRUE);
519e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
520e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
521e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
522e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit_GroupUndoItem::Undo()
523e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
524e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	for (int i=m_Items.GetSize()-1; i>=0; i--)
525e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
526e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CFX_Edit_UndoItem* pUndoItem = m_Items[i];
527e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ASSERT(pUndoItem != NULL);
528e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
529e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pUndoItem->Undo();
530e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
531e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
532e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
533e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit_GroupUndoItem::Redo()
534e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
535e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	for (int i=0,sz=m_Items.GetSize(); i<sz; i++)
536e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
537e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CFX_Edit_UndoItem* pUndoItem = m_Items[i];
538e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ASSERT(pUndoItem != NULL);
539e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
540e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pUndoItem->Redo();
541e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
542e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
543e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
544e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_WideString CFX_Edit_GroupUndoItem::GetUndoTitle()
545e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
546e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_sTitle;
547e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
548e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
549e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov/* ------------------------------------- CFX_Edit_UndoItem derived classes ------------------------------------- */
550e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
551e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFXEU_InsertWord::CFXEU_InsertWord(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace,
552e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								 FX_WORD word, FX_INT32 charset, const CPVT_WordProps * pWordProps)
553e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	: m_pEdit(pEdit), m_wpOld(wpOldPlace), m_wpNew(wpNewPlace), m_Word(word), m_nCharset(charset), m_WordProps()
554e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
555e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (pWordProps)
556e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_WordProps = *pWordProps;
557e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
558e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
559e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFXEU_InsertWord::~CFXEU_InsertWord()
560e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
561e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
562e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
563e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFXEU_InsertWord::Redo()
564e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
565e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pEdit)
566e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
567e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SelectNone();
568e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SetCaret(m_wpOld);
569e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->InsertWord(m_Word,m_nCharset,&m_WordProps,FALSE,TRUE);
570e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
571e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
572e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
573e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFXEU_InsertWord::Undo()
574e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
575e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pEdit)
576e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
577e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SelectNone();
578e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SetCaret(m_wpNew);
579e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->Backspace(FALSE,TRUE);
580e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
581e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
582e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
583e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov/* -------------------------------------------------------------------------- */
584e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
585e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFXEU_InsertReturn::CFXEU_InsertReturn(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace,
586e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			 const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps) :
587e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit(pEdit),
588e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_wpOld(wpOldPlace),
589e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_wpNew(wpNewPlace),
590e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_SecProps(),
591e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_WordProps()
592e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
593e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (pSecProps)
594e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_SecProps = *pSecProps;
595e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (pWordProps)
596e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_WordProps = *pWordProps;
597e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
598e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
599e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFXEU_InsertReturn::~CFXEU_InsertReturn()
600e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
601e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
602e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
603e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFXEU_InsertReturn::Redo()
604e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
605e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pEdit)
606e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
607e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SelectNone();
608e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SetCaret(m_wpOld);
609e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->InsertReturn(&m_SecProps,&m_WordProps,FALSE,TRUE);
610e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
611e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
612e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
613e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFXEU_InsertReturn::Undo()
614e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
615e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pEdit)
616e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
617e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SelectNone();
618e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SetCaret(m_wpNew);
619e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->Backspace(FALSE,TRUE);
620e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
621e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
622e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
623e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov/* -------------------------------------------------------------------------- */
624e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov//CFXEU_Backspace
625e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
626e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFXEU_Backspace::CFXEU_Backspace(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace,
627e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							   FX_WORD word, FX_INT32 charset,
628e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							   const CPVT_SecProps & SecProps, const CPVT_WordProps & WordProps) :
629e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit(pEdit),
630e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_wpOld(wpOldPlace),
631e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_wpNew(wpNewPlace),
632e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_Word(word),
633e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_nCharset(charset),
634e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_SecProps(SecProps),
635e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_WordProps(WordProps)
636e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
637e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
638e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
639e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFXEU_Backspace::~CFXEU_Backspace()
640e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
641e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
642e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
643e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFXEU_Backspace::Redo()
644e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
645e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pEdit)
646e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
647e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SelectNone();
648e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SetCaret(m_wpOld);
649e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->Backspace(FALSE,TRUE);
650e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
651e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
652e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
653e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFXEU_Backspace::Undo()
654e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
655e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pEdit)
656e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
657e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SelectNone();
658e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SetCaret(m_wpNew);
659e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (m_wpNew.SecCmp(m_wpOld) != 0)
660e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
661e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit->InsertReturn(&m_SecProps,&m_WordProps,FALSE,TRUE);
662e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
663e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else
664e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
665e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit->InsertWord(m_Word,m_nCharset,&m_WordProps,FALSE,TRUE);
666e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
667e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
668e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
669e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
670e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov/* -------------------------------------------------------------------------- */
671e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov//CFXEU_Delete
672e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
673e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFXEU_Delete::CFXEU_Delete(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace,
674e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							   FX_WORD word, FX_INT32 charset,
675e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							   const CPVT_SecProps & SecProps, const CPVT_WordProps & WordProps, FX_BOOL bSecEnd) :
676e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit(pEdit),
677e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_wpOld(wpOldPlace),
678e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_wpNew(wpNewPlace),
679e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_Word(word),
680e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_nCharset(charset),
681e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_SecProps(SecProps),
682e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_WordProps(WordProps),
683e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_bSecEnd(bSecEnd)
684e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
685e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
686e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
687e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFXEU_Delete::~CFXEU_Delete()
688e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
689e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
690e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
691e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFXEU_Delete::Redo()
692e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
693e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pEdit)
694e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
695e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SelectNone();
696e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SetCaret(m_wpOld);
697e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->Delete(FALSE,TRUE);
698e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
699e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
700e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
701e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFXEU_Delete::Undo()
702e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
703e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pEdit)
704e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
705e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SelectNone();
706e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SetCaret(m_wpNew);
707e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (m_bSecEnd)
708e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
709e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit->InsertReturn(&m_SecProps,&m_WordProps,FALSE,TRUE);
710e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
711e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else
712e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
713e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit->InsertWord(m_Word,m_nCharset,&m_WordProps,FALSE,TRUE);
714e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
715e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
716e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
717e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
718e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov/* -------------------------------------------------------------------------- */
719e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov//CFXEU_Clear
720e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
721e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFXEU_Clear::CFXEU_Clear(CFX_Edit * pEdit,  const CPVT_WordRange & wrSel, const CFX_WideString & swText) :
722e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit(pEdit),
723e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_wrSel(wrSel),
724e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_swText(swText)
725e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
726e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
727e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
728e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFXEU_Clear::~CFXEU_Clear()
729e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
730e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
731e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
732e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFXEU_Clear::Redo()
733e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
734e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pEdit)
735e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
736e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SelectNone();
737e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SetSel(m_wrSel.BeginPos,m_wrSel.EndPos);
738e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->Clear(FALSE,TRUE);
739e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
740e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
741e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
742e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFXEU_Clear::Undo()
743e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
744e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pEdit)
745e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
746e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SelectNone();
747e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SetCaret(m_wrSel.BeginPos);
748e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->InsertText(m_swText.c_str(), DEFAULT_CHARSET, NULL, NULL, FALSE, TRUE);
749e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SetSel(m_wrSel.BeginPos,m_wrSel.EndPos);
750e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
751e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
752e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
753e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov/* -------------------------------------------------------------------------- */
754e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov//CFXEU_ClearRich
755e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
756e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFXEU_ClearRich::CFXEU_ClearRich(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace,
757e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							   const CPVT_WordRange & wrSel, FX_WORD word, FX_INT32 charset,
758e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							   const CPVT_SecProps & SecProps, const CPVT_WordProps & WordProps) :
759e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit(pEdit),
760e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_wpOld(wpOldPlace),
761e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_wpNew(wpNewPlace),
762e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_wrSel(wrSel),
763e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_Word(word),
764e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_nCharset(charset),
765e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_SecProps(SecProps),
766e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_WordProps(WordProps)
767e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
768e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
769e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
770e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFXEU_ClearRich::~CFXEU_ClearRich()
771e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
772e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
773e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
774e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFXEU_ClearRich::Redo()
775e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
776e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pEdit && IsLast())
777e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
778e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SelectNone();
779e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SetSel(m_wrSel.BeginPos,m_wrSel.EndPos);
780e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->Clear(FALSE,TRUE);
781e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
782e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
783e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
784e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFXEU_ClearRich::Undo()
785e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
786e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pEdit)
787e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
788e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SelectNone();
789e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SetCaret(m_wpOld);
790e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (m_wpNew.SecCmp(m_wpOld) != 0)
791e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
792e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit->InsertReturn(&m_SecProps,&m_WordProps,FALSE,FALSE);
793e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
794e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else
795e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
796e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit->InsertWord(m_Word,m_nCharset,&m_WordProps,FALSE,FALSE);
797e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
798e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
799e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (IsFirst())
800e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
801e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit->PaintInsertText(m_wrSel.BeginPos,m_wrSel.EndPos);
802e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit->SetSel(m_wrSel.BeginPos,m_wrSel.EndPos);
803e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
804e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
805e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
806e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov/* -------------------------------------------------------------------------- */
807e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov//CFXEU_InsertText
808e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
809e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFXEU_InsertText::CFXEU_InsertText(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace,
810e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							   const CFX_WideString & swText, FX_INT32 charset,
811e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							   const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps) :
812e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit(pEdit),
813e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_wpOld(wpOldPlace),
814e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_wpNew(wpNewPlace),
815e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_swText(swText),
816e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_nCharset(charset),
817e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_SecProps(),
818e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_WordProps()
819e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
820e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (pSecProps)
821e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_SecProps = *pSecProps;
822e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (pWordProps)
823e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_WordProps = *pWordProps;
824e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
825e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
826e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFXEU_InsertText::~CFXEU_InsertText()
827e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
828e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
829e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
830e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFXEU_InsertText::Redo()
831e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
832e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pEdit && IsLast())
833e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
834e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SelectNone();
835e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SetCaret(m_wpOld);
836e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->InsertText(m_swText.c_str(), m_nCharset, &m_SecProps, &m_WordProps, FALSE, TRUE);
837e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
838e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
839e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
840e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFXEU_InsertText::Undo()
841e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
842e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pEdit)
843e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
844e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SelectNone();
845e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SetSel(m_wpOld,m_wpNew);
846e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->Clear(FALSE,TRUE);
847e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
848e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
849e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
850e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov/* -------------------------------------------------------------------------- */
851e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
852e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFXEU_SetSecProps::CFXEU_SetSecProps(CFX_Edit * pEdit, const CPVT_WordPlace & place, EDIT_PROPS_E ep,
853e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		const CPVT_SecProps & oldsecprops, const CPVT_WordProps & oldwordprops,
854e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		const CPVT_SecProps & newsecprops, const CPVT_WordProps & newwordprops, const CPVT_WordRange & range)
855e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		: m_pEdit(pEdit),
856e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_wpPlace(place),
857e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_wrPlace(range),
858e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_eProps(ep),
859e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_OldSecProps(oldsecprops),
860e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_NewSecProps(newsecprops),
861e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_OldWordProps(oldwordprops),
862e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_NewWordProps(newwordprops)
863e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
864e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
865e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
866e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFXEU_SetSecProps::~CFXEU_SetSecProps()
867e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
868e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
869e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
870e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFXEU_SetSecProps::Redo()
871e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
872e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pEdit)
873e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
874e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SetSecProps(m_eProps,m_wpPlace,&m_NewSecProps,&m_NewWordProps,m_wrPlace,FALSE);
875e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (IsLast())
876e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
877e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit->SelectNone();
878e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit->PaintSetProps(m_eProps,m_wrPlace);
879e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit->SetSel(m_wrPlace.BeginPos,m_wrPlace.EndPos);
880e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
881e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
882e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
883e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
884e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFXEU_SetSecProps::Undo()
885e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
886e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pEdit)
887e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
888e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SetSecProps(m_eProps,m_wpPlace,&m_OldSecProps,&m_OldWordProps,m_wrPlace,FALSE);
889e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (IsFirst())
890e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
891e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit->SelectNone();
892e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit->PaintSetProps(m_eProps,m_wrPlace);
893e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit->SetSel(m_wrPlace.BeginPos,m_wrPlace.EndPos);
894e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
895e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
896e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
897e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
898e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov/* -------------------------------------------------------------------------- */
899e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
900e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFXEU_SetWordProps::CFXEU_SetWordProps(CFX_Edit * pEdit, const CPVT_WordPlace & place, EDIT_PROPS_E ep,
901e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		const CPVT_WordProps & oldprops, const CPVT_WordProps & newprops, const CPVT_WordRange & range)
902e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		: m_pEdit(pEdit),
903e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_wpPlace(place),
904e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_wrPlace(range),
905e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_eProps(ep),
906e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_OldWordProps(oldprops),
907e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_NewWordProps(newprops)
908e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
909e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
910e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
911e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFXEU_SetWordProps::~CFXEU_SetWordProps()
912e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
913e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
914e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
915e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFXEU_SetWordProps::Redo()
916e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
917e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pEdit)
918e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
919e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SetWordProps(m_eProps,m_wpPlace,&m_NewWordProps,m_wrPlace,FALSE);
920e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (IsLast())
921e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
922e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit->SelectNone();
923e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit->PaintSetProps(m_eProps,m_wrPlace);
924e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit->SetSel(m_wrPlace.BeginPos,m_wrPlace.EndPos);
925e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
926e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
927e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
928e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
929e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFXEU_SetWordProps::Undo()
930e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
931e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pEdit)
932e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
933e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pEdit->SetWordProps(m_eProps,m_wpPlace,&m_OldWordProps,m_wrPlace,FALSE);
934e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (IsFirst())
935e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
936e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit->SelectNone();
937e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit->PaintSetProps(m_eProps,m_wrPlace);
938e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pEdit->SetSel(m_wrPlace.BeginPos,m_wrPlace.EndPos);
939e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
940e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
941e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
942e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
943e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov/* ------------------------------------- CFX_Edit ------------------------------------- */
944e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
945e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_Edit::CFX_Edit(IPDF_VariableText * pVT) :
946e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pVT(pVT),
947e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pNotify(NULL),
948e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pOprNotify(NULL),
949e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pVTProvide(NULL),
950e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_wpCaret(-1,-1,-1),
951e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_wpOldCaret(-1,-1,-1),
952e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_SelState(),
953e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_ptScrollPos(0,0),
954e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_ptRefreshScrollPos(0,0),
955e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_bEnableScroll(FALSE),
956e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pIterator(NULL),
957e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_ptCaret(0.0f,0.0f),
958e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_Undo(FX_EDIT_UNDO_MAXITEM),
959e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_nAlignment(0),
960e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_bNotifyFlag(FALSE),
961e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_bEnableOverflow(FALSE),
962e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_bEnableRefresh(TRUE),
963e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_rcOldContent(0.0f,0.0f,0.0f,0.0f),
964e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_bEnableUndo(TRUE),
965e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_bNotify(TRUE),
966e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_bOprNotify(FALSE),
967e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pGroupUndoItem(NULL)
968e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
969e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pVT != NULL);
970e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
971e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
972e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_Edit::~CFX_Edit()
973e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
974e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVTProvide)
975e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
976e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		delete m_pVTProvide;
977e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pVTProvide = NULL;
978e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
979e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
980e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pIterator)
981e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
982e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		delete m_pIterator;
983e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pIterator = NULL;
984e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
985e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
986e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pGroupUndoItem == NULL);
987e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
988e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
989e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// public methods
990e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
991e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::Initialize()
992e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
993e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pVT->Initialize();
994e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	SetCaret(m_pVT->GetBeginWordPlace());
995e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	SetCaretOrigin();
996e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
997e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
998e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetFontMap(IFX_Edit_FontMap * pFontMap)
999e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1000e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVTProvide)
1001e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		delete m_pVTProvide;
1002e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1003e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pVT->SetProvider(m_pVTProvide = new CFX_Edit_Provider(pFontMap));
1004e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1005e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1006e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetVTProvider(IPDF_VariableText_Provider* pProvider)
1007e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1008e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pVT->SetProvider(pProvider);
1009e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1010e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1011e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetNotify(IFX_Edit_Notify* pNotify)
1012e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1013e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pNotify = pNotify;
1014e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1015e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1016e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetOprNotify(IFX_Edit_OprNotify* pOprNotify)
1017e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1018e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pOprNotify = pOprNotify;
1019e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1020e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1021e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovIFX_Edit_Iterator * CFX_Edit::GetIterator()
1022e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1023e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (!m_pIterator)
1024e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pIterator = new CFX_Edit_Iterator(this,m_pVT->GetIterator());
1025e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1026e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pIterator;
1027e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1028e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1029e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovIPDF_VariableText *	CFX_Edit::GetVariableText()
1030e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1031e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pVT;
1032e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1033e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1034e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovIFX_Edit_FontMap* CFX_Edit::GetFontMap()
1035e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1036e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVTProvide)
1037e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return m_pVTProvide->GetFontMap();
1038e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1039e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return NULL;
1040e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1041e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1042e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetPlateRect(const CPDF_Rect & rect, FX_BOOL bPaint/* = TRUE*/)
1043e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1044e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pVT->SetPlateRect(rect);
1045e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_ptScrollPos = CPDF_Point(rect.left,rect.top);
1046e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (bPaint) Paint();
1047e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1048e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1049e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetAlignmentH(FX_INT32 nFormat/* =0 */, FX_BOOL bPaint/* = TRUE*/)
1050e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1051e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pVT->SetAlignment(nFormat);
1052e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (bPaint) Paint();
1053e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1054e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1055e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetAlignmentV(FX_INT32 nFormat/* =0 */, FX_BOOL bPaint/* = TRUE*/)
1056e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1057e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_nAlignment = nFormat;
1058e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (bPaint) Paint();
1059e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1060e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1061e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetPasswordChar(FX_WORD wSubWord/* ='*' */, FX_BOOL bPaint/* = TRUE*/)
1062e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1063e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pVT->SetPasswordChar(wSubWord);
1064e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (bPaint) Paint();
1065e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1066e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1067e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetLimitChar(FX_INT32 nLimitChar/* =0 */, FX_BOOL bPaint/* = TRUE*/)
1068e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1069e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pVT->SetLimitChar(nLimitChar);
1070e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (bPaint) Paint();
1071e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1072e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1073e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetCharArray(FX_INT32 nCharArray/* =0 */, FX_BOOL bPaint/* = TRUE*/)
1074e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1075e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pVT->SetCharArray(nCharArray);
1076e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (bPaint) Paint();
1077e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1078e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1079e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetCharSpace(FX_FLOAT fCharSpace/* =0.0f */, FX_BOOL bPaint/* = TRUE*/)
1080e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1081e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pVT->SetCharSpace(fCharSpace);
1082e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (bPaint) Paint();
1083e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1084e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1085e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetHorzScale(FX_INT32 nHorzScale/* =100 */, FX_BOOL bPaint/* = TRUE*/)
1086e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1087e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pVT->SetHorzScale(nHorzScale);
1088e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (bPaint) Paint();
1089e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1090e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1091e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetMultiLine(FX_BOOL bMultiLine/* =TRUE */, FX_BOOL bPaint/* = TRUE*/)
1092e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1093e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pVT->SetMultiLine(bMultiLine);
1094e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (bPaint) Paint();
1095e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1096e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1097e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetAutoReturn(FX_BOOL bAuto/* =TRUE */, FX_BOOL bPaint/* = TRUE*/)
1098e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1099e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pVT->SetAutoReturn(bAuto);
1100e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (bPaint) Paint();
1101e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1102e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1103e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetLineLeading(FX_FLOAT fLineLeading/* =TRUE */, FX_BOOL bPaint/* = TRUE*/)
1104e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1105e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pVT->SetLineLeading(fLineLeading);
1106e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (bPaint) Paint();
1107e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1108e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1109e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetAutoFontSize(FX_BOOL bAuto/* =TRUE */, FX_BOOL bPaint/* = TRUE*/)
1110e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1111e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pVT->SetAutoFontSize(bAuto);
1112e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (bPaint) Paint();
1113e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1114e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1115e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetFontSize(FX_FLOAT fFontSize, FX_BOOL bPaint/* = TRUE*/)
1116e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1117e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pVT->SetFontSize(fFontSize);
1118e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (bPaint) Paint();
1119e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1120e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1121e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetAutoScroll(FX_BOOL bAuto/* =TRUE */, FX_BOOL bPaint/* = TRUE*/)
1122e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1123e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_bEnableScroll = bAuto;
1124e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (bPaint) Paint();
1125e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1126e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1127e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetTextOverflow(FX_BOOL bAllowed /*= FALSE*/, FX_BOOL bPaint/* = TRUE*/)
1128e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1129e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_bEnableOverflow = bAllowed;
1130e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (bPaint) Paint();
1131e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1132e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1133e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetSel(FX_INT32 nStartChar,FX_INT32 nEndChar)
1134e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1135e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
1136e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1137e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (nStartChar == 0 && nEndChar < 0)
1138e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
1139e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			SelectAll();
1140e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
1141e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else if (nStartChar < 0)
1142e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
1143e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			this->SelectNone();
1144e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
1145e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else
1146e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
1147e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (nStartChar < nEndChar)
1148e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
1149e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetSel(m_pVT->WordIndexToWordPlace(nStartChar),m_pVT->WordIndexToWordPlace(nEndChar));
1150e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
1151e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else
1152e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
1153e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetSel(m_pVT->WordIndexToWordPlace(nEndChar),m_pVT->WordIndexToWordPlace(nStartChar));
1154e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
1155e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
1156e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1157e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1158e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1159e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetSel(const CPVT_WordPlace & begin,const CPVT_WordPlace & end)
1160e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1161e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
1162e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1163e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SelectNone();
1164e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1165e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_SelState.Set(begin,end);
1166e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1167e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetCaret(m_SelState.EndPos);
1168e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1169e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (m_SelState.IsExist())
1170e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
1171e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			ScrollToCaret();
1172e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_WordRange wr(m_SelState.BeginPos,m_SelState.EndPos);
1173e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			Refresh(RP_OPTIONAL,&wr);
1174e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			SetCaretInfo();
1175e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
1176e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else
1177e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
1178e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			ScrollToCaret();
1179e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			SetCaretInfo();
1180e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
1181e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1182e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1183e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1184e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::GetSel(FX_INT32 & nStartChar, FX_INT32 & nEndChar) const
1185e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1186e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	nStartChar = -1;
1187e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	nEndChar = -1;
1188e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1189e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
1190e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1191e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (m_SelState.IsExist())
1192e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
1193e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos)<0)
1194e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
1195e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				nStartChar = m_pVT->WordPlaceToWordIndex(m_SelState.BeginPos);
1196e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				nEndChar = m_pVT->WordPlaceToWordIndex(m_SelState.EndPos);
1197e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
1198e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else
1199e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
1200e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				nStartChar = m_pVT->WordPlaceToWordIndex(m_SelState.EndPos);
1201e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				nEndChar = m_pVT->WordPlaceToWordIndex(m_SelState.BeginPos);
1202e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
1203e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
1204e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else
1205e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
1206e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			nStartChar = m_pVT->WordPlaceToWordIndex(m_wpCaret);
1207e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			nEndChar = m_pVT->WordPlaceToWordIndex(m_wpCaret);
1208e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
1209e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1210e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1211e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1212e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_INT32 CFX_Edit::GetCaret() const
1213e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1214e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
1215e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return m_pVT->WordPlaceToWordIndex(m_wpCaret);
1216e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1217e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return -1;
1218e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1219e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1220e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPVT_WordPlace CFX_Edit::GetCaretWordPlace() const
1221e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1222e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_wpCaret;
1223e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1224e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1225e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_WideString CFX_Edit::GetText() const
1226e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1227e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_WideString swRet;
1228e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1229e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
1230e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1231e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
1232e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
1233e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			FX_BOOL bRich = m_pVT->IsRichText();
1234e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1235e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pIterator->SetAt(0);
1236e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1237e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_Word wordinfo;
1238e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_WordPlace oldplace = pIterator->GetAt();
1239e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			while (pIterator->NextWord())
1240e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
1241e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				CPVT_WordPlace place = pIterator->GetAt();
1242e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1243e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (pIterator->GetWord(wordinfo))
1244e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
1245e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					if (bRich)
1246e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					{
1247e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						swRet += wordinfo.Word;
1248e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					}
1249e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					else
1250e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					{
1251e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						swRet += wordinfo.Word;
1252e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					}
1253e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
1254e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1255e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (oldplace.SecCmp(place) != 0)
1256e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
1257e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					swRet += 0x0D;
1258e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					swRet += 0x0A;
1259e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
1260e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1261e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				oldplace = place;
1262e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
1263e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
1264e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1265e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1266e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return swRet;
1267e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1268e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1269e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_WideString CFX_Edit::GetRangeText(const CPVT_WordRange & range) const
1270e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1271e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_WideString swRet;
1272e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1273e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
1274e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1275e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		FX_BOOL bRich = m_pVT->IsRichText();
1276e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1277e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
1278e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
1279e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_WordRange wrTemp = range;
1280e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pVT->UpdateWordPlace(wrTemp.BeginPos);
1281e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pVT->UpdateWordPlace(wrTemp.EndPos);
1282e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pIterator->SetAt(wrTemp.BeginPos);
1283e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1284e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_Word wordinfo;
1285e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_WordPlace oldplace = wrTemp.BeginPos;
1286e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			while (pIterator->NextWord())
1287e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
1288e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				CPVT_WordPlace place = pIterator->GetAt();
1289e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (place.WordCmp(wrTemp.EndPos) > 0)break;
1290e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1291e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (pIterator->GetWord(wordinfo))
1292e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
1293e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					if (bRich)
1294e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					{
1295e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						swRet += wordinfo.Word;
1296e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					}
1297e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					else
1298e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					{
1299e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						swRet += wordinfo.Word;
1300e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					}
1301e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
1302e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1303e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (oldplace.SecCmp(place) != 0)
1304e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
1305e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					swRet += 0x0D;
1306e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					swRet += 0x0A;
1307e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
1308e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1309e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				oldplace = place;
1310e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
1311e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
1312e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1313e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1314e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return swRet;
1315e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1316e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1317e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_WideString CFX_Edit::GetSelText() const
1318e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1319e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return GetRangeText(m_SelState.ConvertToWordRange());
1320e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1321e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1322e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_INT32 CFX_Edit::GetTotalWords() const
1323e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1324e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pVT->GetTotalWords();
1325e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1326e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1327e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_INT32 CFX_Edit::GetTotalLines() const
1328e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1329e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32 nLines = 0;
1330e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1331e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
1332e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1333e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pIterator->SetAt(0);
1334e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		while (pIterator->NextLine())
1335e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			nLines++;
1336e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1337e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1338e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return nLines+1;
1339e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1340e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1341e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPVT_WordRange CFX_Edit::GetSelectWordRange() const
1342e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1343e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_SelState.ConvertToWordRange();
1344e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1345e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1346e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPVT_WordRange CFX_Edit::CombineWordRange(const CPVT_WordRange & wr1, const CPVT_WordRange & wr2)
1347e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1348e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPVT_WordRange wrRet;
1349e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1350e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (wr1.BeginPos.WordCmp(wr2.BeginPos) < 0)
1351e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1352e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		wrRet.BeginPos = wr1.BeginPos;
1353e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1354e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	else
1355e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1356e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		wrRet.BeginPos = wr2.BeginPos;
1357e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1358e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1359e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (wr1.EndPos.WordCmp(wr2.EndPos) < 0)
1360e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1361e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		wrRet.EndPos = wr2.EndPos;
1362e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1363e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	else
1364e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1365e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		wrRet.EndPos = wr1.EndPos;
1366e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1367e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1368e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return wrRet;
1369e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1370e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1371e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL	CFX_Edit::IsRichText() const
1372e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1373e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pVT->IsRichText();
1374e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1375e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1376e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetRichText(FX_BOOL bRichText/* =TRUE */, FX_BOOL bPaint/* = TRUE*/)
1377e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1378e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pVT->SetRichText(bRichText);
1379e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (bPaint) Paint();
1380e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1381e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1382e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit::SetRichFontIndex(FX_INT32 nFontIndex)
1383e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1384e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPVT_WordProps WordProps;
1385e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	WordProps.nFontIndex = nFontIndex;
1386e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return SetRichTextProps(EP_FONTINDEX,NULL,&WordProps);
1387e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1388e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1389e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit::SetRichFontSize(FX_FLOAT fFontSize)
1390e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1391e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPVT_WordProps WordProps;
1392e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	WordProps.fFontSize = fFontSize;
1393e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return SetRichTextProps(EP_FONTSIZE,NULL,&WordProps);
1394e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1395e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1396e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit::SetRichTextColor(FX_COLORREF dwColor)
1397e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1398e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPVT_WordProps WordProps;
1399e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	WordProps.dwWordColor = dwColor;
1400e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return SetRichTextProps(EP_WORDCOLOR,NULL,&WordProps);
1401e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1402e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1403e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit::SetRichTextScript(FX_INT32 nScriptType)
1404e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1405e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPVT_WordProps WordProps;
1406e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	WordProps.nScriptType = nScriptType;
1407e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return SetRichTextProps(EP_SCRIPTTYPE,NULL,&WordProps);
1408e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1409e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1410e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit::SetRichTextBold(FX_BOOL bBold)
1411e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1412e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPVT_WordProps WordProps;
1413e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (bBold)
1414e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		WordProps.nWordStyle |= PVTWORD_STYLE_BOLD;
1415e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return SetRichTextProps(EP_BOLD,NULL,&WordProps);
1416e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1417e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1418e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit::SetRichTextItalic(FX_BOOL bItalic)
1419e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1420e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPVT_WordProps WordProps;
1421e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (bItalic)
1422e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		WordProps.nWordStyle |= PVTWORD_STYLE_ITALIC;
1423e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return SetRichTextProps(EP_ITALIC,NULL,&WordProps);
1424e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1425e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1426e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit::SetRichTextUnderline(FX_BOOL bUnderline)
1427e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1428e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPVT_WordProps WordProps;
1429e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (bUnderline)
1430e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		WordProps.nWordStyle |= PVTWORD_STYLE_UNDERLINE;
1431e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return SetRichTextProps(EP_UNDERLINE,NULL,&WordProps);
1432e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1433e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1434e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit::SetRichTextCrossout(FX_BOOL bCrossout)
1435e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1436e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPVT_WordProps WordProps;
1437e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (bCrossout)
1438e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		WordProps.nWordStyle |= PVTWORD_STYLE_CROSSOUT;
1439e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return SetRichTextProps(EP_CROSSOUT,NULL,&WordProps);
1440e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1441e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1442e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit::SetRichTextCharSpace(FX_FLOAT fCharSpace)
1443e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1444e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPVT_WordProps WordProps;
1445e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	WordProps.fCharSpace = fCharSpace;
1446e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return SetRichTextProps(EP_CHARSPACE,NULL,&WordProps);
1447e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1448e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1449e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit::SetRichTextHorzScale(FX_INT32 nHorzScale /*= 100*/)
1450e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1451e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPVT_WordProps WordProps;
1452e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	WordProps.nHorzScale = nHorzScale;
1453e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return SetRichTextProps(EP_HORZSCALE,NULL,&WordProps);
1454e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1455e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1456e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit::SetRichTextLineLeading(FX_FLOAT fLineLeading)
1457e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1458e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPVT_SecProps SecProps;
1459e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	SecProps.fLineLeading = fLineLeading;
1460e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return SetRichTextProps(EP_LINELEADING,&SecProps,NULL);
1461e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1462e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1463e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit::SetRichTextLineIndent(FX_FLOAT fLineIndent)
1464e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1465e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPVT_SecProps SecProps;
1466e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	SecProps.fLineIndent = fLineIndent;
1467e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return SetRichTextProps(EP_LINEINDENT,&SecProps,NULL);
1468e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1469e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1470e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL	CFX_Edit::SetRichTextAlignment(FX_INT32 nAlignment)
1471e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1472e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPVT_SecProps SecProps;
1473e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	SecProps.nAlignment = nAlignment;
1474e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return SetRichTextProps(EP_ALIGNMENT,&SecProps,NULL);
1475e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1476e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1477e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit::SetRichTextProps(EDIT_PROPS_E eProps, const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps)
1478e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1479e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL bSet = FALSE;
1480e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL bSet1,bSet2;
1481e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid() && m_pVT->IsRichText())
1482e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1483e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
1484e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
1485e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_WordRange wrTemp = m_SelState.ConvertToWordRange();
1486e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1487e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pVT->UpdateWordPlace(wrTemp.BeginPos);
1488e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pVT->UpdateWordPlace(wrTemp.EndPos);
1489e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pIterator->SetAt(wrTemp.BeginPos);
1490e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1491e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			BeginGroupUndo(L"");;
1492e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1493e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			bSet = SetSecProps(eProps,wrTemp.BeginPos,pSecProps,pWordProps,wrTemp,TRUE);
1494e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1495e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			while (pIterator->NextWord())
1496e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
1497e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				CPVT_WordPlace place = pIterator->GetAt();
1498e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (place.WordCmp(wrTemp.EndPos) > 0) break;
1499e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				bSet1 = SetSecProps(eProps,place,pSecProps,pWordProps,wrTemp,TRUE);
1500e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				bSet2 = SetWordProps(eProps,place,pWordProps,wrTemp,TRUE);
1501e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1502e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (!bSet)
1503e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					bSet = (bSet1 || bSet2);
1504e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
1505e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1506e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			EndGroupUndo();
1507e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1508e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (bSet)
1509e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
1510e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				PaintSetProps(eProps,wrTemp);
1511e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
1512e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
1513e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1514e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1515e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return bSet;
1516e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1517e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1518e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::PaintSetProps(EDIT_PROPS_E eProps, const CPVT_WordRange & wr)
1519e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1520e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	switch(eProps)
1521e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1522e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case EP_LINELEADING:
1523e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case EP_LINEINDENT:
1524e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case EP_ALIGNMENT:
1525e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		RearrangePart(wr);
1526e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ScrollToCaret();
1527e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		Refresh(RP_ANALYSE);
1528e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetCaretOrigin();
1529e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetCaretInfo();
1530e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
1531e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case EP_WORDCOLOR:
1532e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case EP_UNDERLINE:
1533e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case EP_CROSSOUT:
1534e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		Refresh(RP_OPTIONAL,&wr);
1535e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
1536e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case EP_FONTINDEX:
1537e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case EP_FONTSIZE:
1538e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case EP_SCRIPTTYPE:
1539e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case EP_CHARSPACE:
1540e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case EP_HORZSCALE:
1541e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case EP_BOLD:
1542e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case EP_ITALIC:
1543e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		RearrangePart(wr);
1544e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ScrollToCaret();
1545e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1546e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPVT_WordRange wrRefresh(m_pVT->GetSectionBeginPlace(wr.BeginPos),
1547e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pVT->GetSectionEndPlace(wr.EndPos));
1548e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		Refresh(RP_ANALYSE,&wrRefresh);
1549e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1550e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetCaretOrigin();
1551e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetCaretInfo();
1552e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
1553e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1554e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1555e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1556e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit::SetSecProps(EDIT_PROPS_E eProps, const CPVT_WordPlace & place,
1557e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							   const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps,
1558e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							   const CPVT_WordRange & wr, FX_BOOL bAddUndo)
1559e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1560e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid() && m_pVT->IsRichText())
1561e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1562e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
1563e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
1564e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			FX_BOOL bSet = FALSE;
1565e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_Section secinfo;
1566e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_Section OldSecinfo;
1567e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1568e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_WordPlace oldplace = pIterator->GetAt();
1569e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1570e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (eProps == EP_LINELEADING || eProps == EP_LINEINDENT || eProps == EP_ALIGNMENT)
1571e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
1572e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (pSecProps)
1573e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
1574e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					pIterator->SetAt(place);
1575e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					if (pIterator->GetSection(secinfo))
1576e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					{
1577e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						if (bAddUndo) OldSecinfo = secinfo;
1578e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1579e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						switch(eProps)
1580e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
1581e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						case EP_LINELEADING:
1582e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							if (!FX_EDIT_IsFloatEqual(secinfo.SecProps.fLineLeading,pSecProps->fLineLeading))
1583e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
1584e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								secinfo.SecProps.fLineLeading = pSecProps->fLineLeading;
1585e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								bSet = TRUE;
1586e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
1587e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							break;
1588e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						case EP_LINEINDENT:
1589e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							if (!FX_EDIT_IsFloatEqual(secinfo.SecProps.fLineIndent,pSecProps->fLineIndent))
1590e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
1591e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								secinfo.SecProps.fLineIndent = pSecProps->fLineIndent;
1592e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								bSet = TRUE;
1593e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
1594e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							break;
1595e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						case EP_ALIGNMENT:
1596e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							if (secinfo.SecProps.nAlignment != pSecProps->nAlignment)
1597e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
1598e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								secinfo.SecProps.nAlignment = pSecProps->nAlignment;
1599e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								bSet = TRUE;
1600e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
1601e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							break;
1602e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						default:
1603e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							break;
1604e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
1605e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					}
1606e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
1607e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
1608e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else
1609e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
1610e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (pWordProps && place == m_pVT->GetSectionBeginPlace(place))
1611e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
1612e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					pIterator->SetAt(place);
1613e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					if (pIterator->GetSection(secinfo))
1614e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					{
1615e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						if (bAddUndo) OldSecinfo = secinfo;
1616e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1617e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						switch(eProps)
1618e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
1619e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						case EP_FONTINDEX:
1620e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							if (secinfo.WordProps.nFontIndex != pWordProps->nFontIndex)
1621e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
1622e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								secinfo.WordProps.nFontIndex = pWordProps->nFontIndex;
1623e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								bSet = TRUE;
1624e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
1625e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							break;
1626e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						case EP_FONTSIZE:
1627e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							if (!FX_EDIT_IsFloatEqual(secinfo.WordProps.fFontSize,pWordProps->fFontSize))
1628e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
1629e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								secinfo.WordProps.fFontSize = pWordProps->fFontSize;
1630e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								bSet = TRUE;
1631e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
1632e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							break;
1633e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						case EP_WORDCOLOR:
1634e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							if (secinfo.WordProps.dwWordColor != pWordProps->dwWordColor)
1635e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
1636e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								secinfo.WordProps.dwWordColor = pWordProps->dwWordColor;
1637e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								bSet = TRUE;
1638e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
1639e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							break;
1640e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						case EP_SCRIPTTYPE:
1641e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							if (secinfo.WordProps.nScriptType != pWordProps->nScriptType)
1642e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
1643e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								secinfo.WordProps.nScriptType = pWordProps->nScriptType;
1644e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								bSet = TRUE;
1645e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
1646e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							break;
1647e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						case EP_CHARSPACE:
1648e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							if (!FX_EDIT_IsFloatEqual(secinfo.WordProps.fCharSpace,pWordProps->fCharSpace))
1649e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
1650e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								secinfo.WordProps.fCharSpace = pWordProps->fCharSpace;
1651e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								bSet = TRUE;
1652e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
1653e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							break;
1654e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						case EP_HORZSCALE:
1655e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							if (secinfo.WordProps.nHorzScale != pWordProps->nHorzScale)
1656e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
1657e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								secinfo.WordProps.nHorzScale = pWordProps->nHorzScale;
1658e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								bSet = TRUE;
1659e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
1660e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							break;
1661e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						case EP_UNDERLINE:
1662e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							if (pWordProps->nWordStyle & PVTWORD_STYLE_UNDERLINE)
1663e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
1664e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) == 0)
1665e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								{
1666e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_UNDERLINE;
1667e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									bSet = TRUE;
1668e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								}
1669e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
1670e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							else
1671e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
1672e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) != 0)
1673e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								{
1674e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_UNDERLINE;
1675e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									bSet = TRUE;
1676e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								}
1677e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
1678e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							break;
1679e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						case EP_CROSSOUT:
1680e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							if (pWordProps->nWordStyle & PVTWORD_STYLE_CROSSOUT)
1681e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
1682e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) == 0)
1683e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								{
1684e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_CROSSOUT;
1685e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									bSet = TRUE;
1686e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								}
1687e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
1688e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							else
1689e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
1690e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) != 0)
1691e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								{
1692e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_CROSSOUT;
1693e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									bSet = TRUE;
1694e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								}
1695e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
1696e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							break;
1697e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						case EP_BOLD:
1698e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							if (pWordProps->nWordStyle & PVTWORD_STYLE_BOLD)
1699e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
1700e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) == 0)
1701e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								{
1702e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_BOLD;
1703e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									bSet = TRUE;
1704e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								}
1705e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
1706e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							else
1707e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
1708e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) != 0)
1709e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								{
1710e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_BOLD;
1711e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									bSet = TRUE;
1712e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								}
1713e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
1714e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							break;
1715e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						case EP_ITALIC:
1716e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							if (pWordProps->nWordStyle & PVTWORD_STYLE_ITALIC)
1717e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
1718e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) == 0)
1719e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								{
1720e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									secinfo.WordProps.nWordStyle |= PVTWORD_STYLE_ITALIC;
1721e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									bSet = TRUE;
1722e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								}
1723e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
1724e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							else
1725e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
1726e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								if ((secinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) != 0)
1727e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								{
1728e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									secinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_ITALIC;
1729e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									bSet = TRUE;
1730e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								}
1731e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
1732e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							break;
1733e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						default:
1734e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							break;
1735e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
1736e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					}
1737e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
1738e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
1739e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1740e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (bSet)
1741e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
1742e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				pIterator->SetSection(secinfo);
1743e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1744e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (bAddUndo && m_bEnableUndo)
1745e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
1746e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					AddEditUndoItem(new CFXEU_SetSecProps
1747e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						(this,place,eProps,OldSecinfo.SecProps,OldSecinfo.WordProps,secinfo.SecProps,secinfo.WordProps,wr));
1748e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
1749e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
1750e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1751e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pIterator->SetAt(oldplace);
1752e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1753e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return bSet;
1754e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
1755e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1756e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1757e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return FALSE;
1758e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1759e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1760e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit::SetWordProps(EDIT_PROPS_E eProps, const CPVT_WordPlace & place,
1761e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								const CPVT_WordProps * pWordProps, const CPVT_WordRange & wr, FX_BOOL bAddUndo)
1762e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1763e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid() && m_pVT->IsRichText())
1764e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1765e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
1766e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
1767e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			FX_BOOL bSet = FALSE;
1768e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_Word wordinfo;
1769e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_Word OldWordinfo;
1770e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1771e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_WordPlace oldplace = pIterator->GetAt();
1772e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1773e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (pWordProps)
1774e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
1775e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				pIterator->SetAt(place);
1776e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (pIterator->GetWord(wordinfo))
1777e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
1778e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					if (bAddUndo) OldWordinfo = wordinfo;
1779e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1780e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					switch(eProps)
1781e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					{
1782e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					case EP_FONTINDEX:
1783e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						if (wordinfo.WordProps.nFontIndex != pWordProps->nFontIndex)
1784e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
1785e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							if (IFX_Edit_FontMap* pFontMap = this->GetFontMap())
1786e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
1787e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								wordinfo.WordProps.nFontIndex = pFontMap->GetWordFontIndex(wordinfo.Word,wordinfo.nCharset,pWordProps->nFontIndex);
1788e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
1789e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							bSet = TRUE;
1790e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
1791e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						break;
1792e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					case EP_FONTSIZE:
1793e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						if (!FX_EDIT_IsFloatEqual(wordinfo.WordProps.fFontSize,pWordProps->fFontSize))
1794e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
1795e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							wordinfo.WordProps.fFontSize = pWordProps->fFontSize;
1796e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							bSet = TRUE;
1797e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
1798e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						break;
1799e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					case EP_WORDCOLOR:
1800e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						if (wordinfo.WordProps.dwWordColor != pWordProps->dwWordColor)
1801e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
1802e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							wordinfo.WordProps.dwWordColor = pWordProps->dwWordColor;
1803e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							bSet = TRUE;
1804e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
1805e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						break;
1806e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					case EP_SCRIPTTYPE:
1807e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						if (wordinfo.WordProps.nScriptType != pWordProps->nScriptType)
1808e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
1809e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							wordinfo.WordProps.nScriptType = pWordProps->nScriptType;
1810e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							bSet = TRUE;
1811e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
1812e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						break;
1813e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					case EP_CHARSPACE:
1814e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						if (!FX_EDIT_IsFloatEqual(wordinfo.WordProps.fCharSpace,pWordProps->fCharSpace))
1815e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
1816e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							wordinfo.WordProps.fCharSpace = pWordProps->fCharSpace;
1817e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							bSet = TRUE;
1818e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
1819e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						break;
1820e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					case EP_HORZSCALE:
1821e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						if (wordinfo.WordProps.nHorzScale != pWordProps->nHorzScale)
1822e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
1823e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							wordinfo.WordProps.nHorzScale = pWordProps->nHorzScale;
1824e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							bSet = TRUE;
1825e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
1826e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						break;
1827e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					case EP_UNDERLINE:
1828e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						if (pWordProps->nWordStyle & PVTWORD_STYLE_UNDERLINE)
1829e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
1830e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) == 0)
1831e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
1832e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_UNDERLINE;
1833e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								bSet = TRUE;
1834e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
1835e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
1836e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						else
1837e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
1838e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_UNDERLINE) != 0)
1839e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
1840e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_UNDERLINE;
1841e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								bSet = TRUE;
1842e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
1843e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
1844e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						break;
1845e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					case EP_CROSSOUT:
1846e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						if (pWordProps->nWordStyle & PVTWORD_STYLE_CROSSOUT)
1847e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
1848e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) == 0)
1849e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
1850e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_CROSSOUT;
1851e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								bSet = TRUE;
1852e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
1853e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
1854e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						else
1855e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
1856e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_CROSSOUT) != 0)
1857e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
1858e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_CROSSOUT;
1859e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								bSet = TRUE;
1860e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
1861e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
1862e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						break;
1863e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					case EP_BOLD:
1864e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						if (pWordProps->nWordStyle & PVTWORD_STYLE_BOLD)
1865e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
1866e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) == 0)
1867e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
1868e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_BOLD;
1869e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								bSet = TRUE;
1870e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
1871e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
1872e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						else
1873e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
1874e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_BOLD) != 0)
1875e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
1876e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_BOLD;
1877e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								bSet = TRUE;
1878e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
1879e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
1880e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						break;
1881e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					case EP_ITALIC:
1882e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						if (pWordProps->nWordStyle & PVTWORD_STYLE_ITALIC)
1883e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
1884e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) == 0)
1885e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
1886e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								wordinfo.WordProps.nWordStyle |= PVTWORD_STYLE_ITALIC;
1887e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								bSet = TRUE;
1888e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
1889e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
1890e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						else
1891e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
1892e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							if ((wordinfo.WordProps.nWordStyle & PVTWORD_STYLE_ITALIC) != 0)
1893e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
1894e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								wordinfo.WordProps.nWordStyle &= ~PVTWORD_STYLE_ITALIC;
1895e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								bSet = TRUE;
1896e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
1897e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
1898e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						break;
1899e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					default:
1900e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						break;
1901e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					}
1902e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
1903e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
1904e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1905e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (bSet)
1906e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
1907e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				pIterator->SetWord(wordinfo);
1908e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1909e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (bAddUndo && m_bEnableUndo)
1910e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
1911e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					AddEditUndoItem(new CFXEU_SetWordProps
1912e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						(this,place,eProps,OldWordinfo.WordProps,wordinfo.WordProps,wr));
1913e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
1914e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
1915e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1916e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pIterator->SetAt(oldplace);
1917e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return bSet;
1918e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
1919e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1920e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1921e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return FALSE;
1922e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1923e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1924e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetText(FX_LPCWSTR text,FX_INT32 charset /*= DEFAULT_CHARSET*/,
1925e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						const CPVT_SecProps * pSecProps /*= NULL*/,const CPVT_WordProps * pWordProps /*= NULL*/)
1926e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1927e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	SetText(text,charset,pSecProps,pWordProps,TRUE,TRUE);
1928e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1929e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1930e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit::InsertWord(FX_WORD word, FX_INT32 charset /*= DEFAULT_CHARSET*/, const CPVT_WordProps * pWordProps /*= NULL*/)
1931e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1932e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return InsertWord(word,charset,pWordProps,TRUE,TRUE);
1933e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1934e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1935e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit::InsertReturn(const CPVT_SecProps * pSecProps /*= NULL*/,const CPVT_WordProps * pWordProps /*= NULL*/)
1936e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1937e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return InsertReturn(pSecProps,pWordProps,TRUE,TRUE);
1938e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1939e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1940e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit::Backspace()
1941e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1942e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return Backspace(TRUE,TRUE);
1943e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1944e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1945e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit::Delete()
1946e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1947e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return Delete(TRUE,TRUE);
1948e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1949e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1950e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit::Clear()
1951e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1952e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return Clear(TRUE,TRUE);
1953e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1954e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1955e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit::InsertText(FX_LPCWSTR text, FX_INT32 charset /*= DEFAULT_CHARSET*/,
1956e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								const CPVT_SecProps * pSecProps /*= NULL*/,const CPVT_WordProps * pWordProps /*= NULL*/)
1957e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1958e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return InsertText(text,charset,pSecProps,pWordProps,TRUE,TRUE);
1959e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1960e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1961e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_FLOAT CFX_Edit::GetFontSize() const
1962e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1963e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pVT->GetFontSize();
1964e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1965e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1966e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_WORD CFX_Edit::GetPasswordChar() const
1967e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1968e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pVT->GetPasswordChar();
1969e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1970e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1971e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_INT32 CFX_Edit::GetCharArray() const
1972e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1973e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pVT->GetCharArray();
1974e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1975e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1976e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDF_Rect CFX_Edit::GetPlateRect() const
1977e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1978e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pVT->GetPlateRect();
1979e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1980e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1981e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDF_Rect CFX_Edit::GetContentRect() const
1982e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1983e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return VTToEdit(m_pVT->GetContentRect());
1984e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1985e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1986e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_INT32 CFX_Edit::GetHorzScale() const
1987e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1988e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pVT->GetHorzScale();
1989e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1990e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1991e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_FLOAT CFX_Edit::GetCharSpace() const
1992e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1993e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pVT->GetCharSpace();
1994e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1995e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1996e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// inner methods
1997e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1998e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPVT_WordRange CFX_Edit::GetWholeWordRange() const
1999e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2000e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
2001e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return CPVT_WordRange(m_pVT->GetBeginWordPlace(),m_pVT->GetEndWordPlace());
2002e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2003e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return CPVT_WordRange();
2004e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2005e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2006e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPVT_WordRange CFX_Edit::GetVisibleWordRange() const
2007e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2008e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_bEnableOverflow) return GetWholeWordRange();
2009e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2010e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
2011e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2012e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_Rect rcPlate = m_pVT->GetPlateRect();
2013e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2014e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPVT_WordPlace place1 = m_pVT->SearchWordPlace(EditToVT(CPDF_Point(rcPlate.left,rcPlate.top)));
2015e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPVT_WordPlace place2 = m_pVT->SearchWordPlace(EditToVT(CPDF_Point(rcPlate.right,rcPlate.bottom)));
2016e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2017e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return CPVT_WordRange(place1,place2);
2018e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2019e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2020e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return CPVT_WordRange();
2021e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2022e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2023e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPVT_WordPlace CFX_Edit::SearchWordPlace(const CPDF_Point& point) const
2024e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2025e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
2026e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2027e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return m_pVT->SearchWordPlace(EditToVT(point));
2028e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2029e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2030e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return CPVT_WordPlace();
2031e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2032e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2033e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::Paint()
2034e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2035e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
2036e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2037e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		RearrangeAll();
2038e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ScrollToCaret();
2039e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		Refresh(RP_NOANALYSE);
2040e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetCaretOrigin();
2041e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetCaretInfo();
2042e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2043e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2044e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2045e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::RearrangeAll()
2046e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2047e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
2048e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2049e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pVT->UpdateWordPlace(m_wpCaret);
2050e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pVT->RearrangeAll();
2051e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pVT->UpdateWordPlace(m_wpCaret);
2052e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetScrollInfo();
2053e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetContentChanged();
2054e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2055e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2056e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2057e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::RearrangePart(const CPVT_WordRange & range)
2058e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2059e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
2060e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2061e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pVT->UpdateWordPlace(m_wpCaret);
2062e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pVT->RearrangePart(range);
2063e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pVT->UpdateWordPlace(m_wpCaret);
2064e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetScrollInfo();
2065e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetContentChanged();
2066e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2067e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2068e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2069e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetContentChanged()
2070e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2071e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_bNotify && m_pNotify)
2072e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2073e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_Rect rcContent = m_pVT->GetContentRect();
2074e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (rcContent.Width() != m_rcOldContent.Width() ||
2075e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			rcContent.Height() != m_rcOldContent.Height())
2076e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2077e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (!m_bNotifyFlag)
2078e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2079e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_bNotifyFlag = TRUE;
2080e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_pNotify->IOnContentChange(rcContent);
2081e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_bNotifyFlag = FALSE;
2082e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2083e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_rcOldContent = rcContent;
2084e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2085e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2086e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2087e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2088e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SelectAll()
2089e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2090e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
2091e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2092e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_SelState = GetWholeWordRange();
2093e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetCaret(m_SelState.EndPos);
2094e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2095e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ScrollToCaret();
2096e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPVT_WordRange wrVisible = GetVisibleWordRange();
2097e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		Refresh(RP_OPTIONAL,&wrVisible);
2098e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetCaretInfo();
2099e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2100e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2101e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2102e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SelectNone()
2103e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2104e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
2105e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2106e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (m_SelState.IsExist())
2107e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2108e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_WordRange wrTemp = m_SelState.ConvertToWordRange();
2109e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_SelState.Default();
2110e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			Refresh(RP_OPTIONAL,&wrTemp);
2111e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2112e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2113e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2114e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2115e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL	CFX_Edit::IsSelected() const
2116e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2117e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_SelState.IsExist();
2118e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2119e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2120e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDF_Point CFX_Edit::VTToEdit(const CPDF_Point & point) const
2121e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2122e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect rcContent = m_pVT->GetContentRect();
2123e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect rcPlate = m_pVT->GetPlateRect();
2124e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2125e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_FLOAT fPadding = 0.0f;
2126e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2127e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	switch (m_nAlignment)
2128e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2129e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case 0:
2130e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		fPadding = 0.0f;
2131e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
2132e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case 1:
2133e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		fPadding = (rcPlate.Height() - rcContent.Height()) * 0.5f;
2134e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
2135e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case 2:
2136e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		fPadding = rcPlate.Height() - rcContent.Height();
2137e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
2138e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2139e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2140e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return CPDF_Point(point.x - (m_ptScrollPos.x - rcPlate.left),
2141e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		point.y - (m_ptScrollPos.y + fPadding - rcPlate.top));
2142e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2143e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2144e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDF_Point CFX_Edit::EditToVT(const CPDF_Point & point) const
2145e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2146e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect rcContent = m_pVT->GetContentRect();
2147e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect rcPlate = m_pVT->GetPlateRect();
2148e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2149e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_FLOAT fPadding = 0.0f;
2150e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2151e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	switch (m_nAlignment)
2152e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2153e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case 0:
2154e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		fPadding = 0.0f;
2155e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
2156e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case 1:
2157e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		fPadding = (rcPlate.Height() - rcContent.Height()) * 0.5f;
2158e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
2159e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case 2:
2160e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		fPadding = rcPlate.Height() - rcContent.Height();
2161e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
2162e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2163e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2164e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return CPDF_Point(point.x + (m_ptScrollPos.x - rcPlate.left),
2165e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		point.y + (m_ptScrollPos.y + fPadding - rcPlate.top));
2166e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2167e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2168e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDF_Rect CFX_Edit::VTToEdit(const CPDF_Rect & rect) const
2169e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2170e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Point ptLeftBottom = VTToEdit(CPDF_Point(rect.left,rect.bottom));
2171e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Point ptRightTop = VTToEdit(CPDF_Point(rect.right,rect.top));
2172e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2173e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return CPDF_Rect(ptLeftBottom.x,ptLeftBottom.y,ptRightTop.x,ptRightTop.y);
2174e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2175e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2176e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDF_Rect CFX_Edit::EditToVT(const CPDF_Rect & rect) const
2177e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2178e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Point ptLeftBottom = EditToVT(CPDF_Point(rect.left,rect.bottom));
2179e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Point ptRightTop = EditToVT(CPDF_Point(rect.right,rect.top));
2180e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2181e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return CPDF_Rect(ptLeftBottom.x,ptLeftBottom.y,ptRightTop.x,ptRightTop.y);
2182e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2183e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2184e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetScrollInfo()
2185e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2186e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_bNotify && m_pNotify)
2187e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2188e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_Rect rcPlate = m_pVT->GetPlateRect();
2189e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_Rect rcContent = m_pVT->GetContentRect();
2190e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2191e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (!m_bNotifyFlag)
2192e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2193e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_bNotifyFlag = TRUE;
2194e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pNotify->IOnSetScrollInfoX(rcPlate.left, rcPlate.right,
2195e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								rcContent.left, rcContent.right, rcPlate.Width() / 3, rcPlate.Width());
2196e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2197e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pNotify->IOnSetScrollInfoY(rcPlate.bottom, rcPlate.top,
2198e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					rcContent.bottom, rcContent.top, rcPlate.Height() / 3, rcPlate.Height());
2199e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_bNotifyFlag = FALSE;
2200e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2201e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2202e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2203e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2204e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetScrollPosX(FX_FLOAT fx)
2205e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2206e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (!m_bEnableScroll) return;
2207e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2208e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
2209e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2210e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (!FX_EDIT_IsFloatEqual(m_ptScrollPos.x,fx))
2211e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2212e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_ptScrollPos.x = fx;
2213e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			Refresh(RP_NOANALYSE);
2214e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2215e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (m_bNotify && m_pNotify)
2216e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2217e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (!m_bNotifyFlag)
2218e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
2219e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					m_bNotifyFlag = TRUE;
2220e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					m_pNotify->IOnSetScrollPosX(fx);
2221e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					m_bNotifyFlag = FALSE;
2222e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
2223e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2224e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2225e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2226e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2227e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2228e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetScrollPosY(FX_FLOAT fy)
2229e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2230e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (!m_bEnableScroll) return;
2231e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2232e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
2233e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2234e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (!FX_EDIT_IsFloatEqual(m_ptScrollPos.y,fy))
2235e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2236e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_ptScrollPos.y = fy;
2237e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			Refresh(RP_NOANALYSE);
2238e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2239e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (m_bNotify && m_pNotify)
2240e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2241e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (!m_bNotifyFlag)
2242e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
2243e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					m_bNotifyFlag = TRUE;
2244e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					m_pNotify->IOnSetScrollPosY(fy);
2245e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					m_bNotifyFlag = FALSE;
2246e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
2247e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2248e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2249e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2250e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2251e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2252e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetScrollPos(const CPDF_Point & point)
2253e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2254e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	SetScrollPosX(point.x);
2255e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	SetScrollPosY(point.y);
2256e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	SetScrollLimit();
2257e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	SetCaretInfo();
2258e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2259e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2260e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDF_Point CFX_Edit::GetScrollPos() const
2261e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2262e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_ptScrollPos;
2263e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2264e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2265e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetScrollLimit()
2266e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2267e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
2268e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2269e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_Rect rcContent = m_pVT->GetContentRect();
2270e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_Rect rcPlate = m_pVT->GetPlateRect();
2271e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2272e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (rcPlate.Width() > rcContent.Width())
2273e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2274e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			SetScrollPosX(rcPlate.left);
2275e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2276e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else
2277e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2278e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (FX_EDIT_IsFloatSmaller(m_ptScrollPos.x, rcContent.left))
2279e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2280e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetScrollPosX(rcContent.left);
2281e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2282e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else if (FX_EDIT_IsFloatBigger(m_ptScrollPos.x, rcContent.right - rcPlate.Width()))
2283e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2284e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetScrollPosX(rcContent.right - rcPlate.Width());
2285e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2286e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2287e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2288e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (rcPlate.Height() > rcContent.Height())
2289e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2290e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			SetScrollPosY(rcPlate.top);
2291e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2292e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else
2293e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2294e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (FX_EDIT_IsFloatSmaller(m_ptScrollPos.y, rcContent.bottom + rcPlate.Height()))
2295e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2296e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetScrollPosY(rcContent.bottom + rcPlate.Height());
2297e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2298e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else if (FX_EDIT_IsFloatBigger(m_ptScrollPos.y, rcContent.top))
2299e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2300e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetScrollPosY(rcContent.top);
2301e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2302e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2303e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2304e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2305e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2306e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::ScrollToCaret()
2307e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2308e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	SetScrollLimit();
2309e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2310e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
2311e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2312e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_Point ptHead(0,0);
2313e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_Point ptFoot(0,0);
2314e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2315e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
2316e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2317e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pIterator->SetAt(m_wpCaret);
2318e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2319e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_Word word;
2320e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_Line line;
2321e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (pIterator->GetWord(word))
2322e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2323e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				ptHead.x = word.ptWord.x + word.fWidth;
2324e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				ptHead.y = word.ptWord.y + word.fAscent;
2325e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				ptFoot.x = word.ptWord.x + word.fWidth;
2326e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				ptFoot.y = word.ptWord.y + word.fDescent;
2327e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2328e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else if (pIterator->GetLine(line))
2329e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2330e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				ptHead.x = line.ptLine.x;
2331e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				ptHead.y = line.ptLine.y + line.fLineAscent;
2332e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				ptFoot.x = line.ptLine.x;
2333e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				ptFoot.y = line.ptLine.y + line.fLineDescent;
2334e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2335e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2336e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2337e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_Point ptHeadEdit = VTToEdit(ptHead);
2338e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_Point ptFootEdit = VTToEdit(ptFoot);
2339e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2340e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_Rect rcPlate = m_pVT->GetPlateRect();
2341e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2342e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (!FX_EDIT_IsFloatEqual(rcPlate.left,rcPlate.right))
2343e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2344e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (FX_EDIT_IsFloatSmaller(ptHeadEdit.x, rcPlate.left) ||
2345e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				FX_EDIT_IsFloatEqual(ptHeadEdit.x, rcPlate.left))
2346e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2347e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetScrollPosX(ptHead.x);
2348e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2349e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else if (FX_EDIT_IsFloatBigger(ptHeadEdit.x, rcPlate.right))
2350e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2351e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetScrollPosX(ptHead.x - rcPlate.Width());
2352e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2353e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2354e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2355e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (!FX_EDIT_IsFloatEqual(rcPlate.top,rcPlate.bottom))
2356e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2357e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (FX_EDIT_IsFloatSmaller(ptFootEdit.y, rcPlate.bottom) ||
2358e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				FX_EDIT_IsFloatEqual(ptFootEdit.y, rcPlate.bottom))
2359e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2360e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (FX_EDIT_IsFloatSmaller(ptHeadEdit.y, rcPlate.top))
2361e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
2362e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					SetScrollPosY(ptFoot.y + rcPlate.Height());
2363e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
2364e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2365e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else if (FX_EDIT_IsFloatBigger(ptHeadEdit.y, rcPlate.top))
2366e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2367e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (FX_EDIT_IsFloatBigger(ptFootEdit.y, rcPlate.bottom))
2368e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
2369e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					SetScrollPosY(ptHead.y);
2370e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
2371e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2372e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2373e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2374e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2375e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2376e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::Refresh(REFRESH_PLAN_E ePlan,const CPVT_WordRange * pRange1,const CPVT_WordRange * pRange2)
2377e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2378e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_bEnableRefresh && m_pVT->IsValid())
2379e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2380e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_Refresh.BeginRefresh();
2381e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		RefreshPushLineRects(GetVisibleWordRange());
2382e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2383e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// 		if (!FX_EDIT_IsFloatEqual(m_ptRefreshScrollPos.x,m_ptScrollPos.x) ||
2384e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// 			!FX_EDIT_IsFloatEqual(m_ptRefreshScrollPos.y,m_ptScrollPos.y))
2385e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// 		{
2386e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_Refresh.NoAnalyse();
2387e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_ptRefreshScrollPos = m_ptScrollPos;
2388e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// 		}
2389e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// 		else
2390e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// 		{
2391e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// 			switch (ePlan)
2392e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// 			{
2393e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// 			case RP_ANALYSE:
2394e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// 				m_Refresh.Analyse(m_pVT->GetAlignment());
2395e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov//
2396e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// 				if (pRange1) RefreshPushRandomRects(*pRange1);
2397e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// 				if (pRange2) RefreshPushRandomRects(*pRange2);
2398e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// 				break;
2399e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// 			case RP_NOANALYSE:
2400e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// 				m_Refresh.NoAnalyse();
2401e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// 				break;
2402e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// 			case RP_OPTIONAL:
2403e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// 				if (pRange1) RefreshPushRandomRects(*pRange1);
2404e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// 				if (pRange2) RefreshPushRandomRects(*pRange2);
2405e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// 				break;
2406e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// 			}
2407e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// 		}
2408e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2409e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (m_bNotify && m_pNotify)
2410e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2411e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (!m_bNotifyFlag)
2412e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2413e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_bNotifyFlag = TRUE;
2414e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (const CFX_Edit_RectArray * pRects = m_Refresh.GetRefreshRects())
2415e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
2416e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					for (FX_INT32 i = 0, sz = pRects->GetSize(); i < sz; i++)
2417e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						m_pNotify->IOnInvalidateRect(pRects->GetAt(i));
2418e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
2419e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_bNotifyFlag = FALSE;
2420e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2421e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2422e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2423e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_Refresh.EndRefresh();
2424e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2425e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2426e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2427e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::RefreshPushLineRects(const CPVT_WordRange & wr)
2428e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2429e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
2430e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2431e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
2432e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2433e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_WordPlace wpBegin = wr.BeginPos;
2434e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pVT->UpdateWordPlace(wpBegin);
2435e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_WordPlace wpEnd = wr.EndPos;
2436e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pVT->UpdateWordPlace(wpEnd);
2437e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pIterator->SetAt(wpBegin);
2438e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2439e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_Line lineinfo;
2440e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			do
2441e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2442e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (!pIterator->GetLine(lineinfo))break;
2443e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (lineinfo.lineplace.LineCmp(wpEnd) > 0)break;
2444e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2445e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				CPDF_Rect rcLine(lineinfo.ptLine.x,
2446e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									lineinfo.ptLine.y + lineinfo.fLineDescent,
2447e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									lineinfo.ptLine.x + lineinfo.fLineWidth,
2448e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									lineinfo.ptLine.y + lineinfo.fLineAscent);
2449e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2450e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_Refresh.Push(CPVT_WordRange(lineinfo.lineplace,lineinfo.lineEnd),VTToEdit(rcLine));
2451e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2452e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}while (pIterator->NextLine());
2453e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2454e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2455e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2456e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2457e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::RefreshPushRandomRects(const CPVT_WordRange & wr)
2458e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2459e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
2460e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2461e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
2462e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2463e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_WordRange wrTemp = wr;
2464e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2465e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pVT->UpdateWordPlace(wrTemp.BeginPos);
2466e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pVT->UpdateWordPlace(wrTemp.EndPos);
2467e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pIterator->SetAt(wrTemp.BeginPos);
2468e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2469e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_Word wordinfo;
2470e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_Line lineinfo;
2471e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_WordPlace place;
2472e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2473e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			while (pIterator->NextWord())
2474e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2475e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				place = pIterator->GetAt();
2476e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (place.WordCmp(wrTemp.EndPos) > 0) break;
2477e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2478e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				pIterator->GetWord(wordinfo);
2479e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				pIterator->GetLine(lineinfo);
2480e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2481e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (place.LineCmp(wrTemp.BeginPos) == 0 || place.LineCmp(wrTemp.EndPos) == 0)
2482e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
2483e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					CPDF_Rect rcWord(wordinfo.ptWord.x,
2484e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov										lineinfo.ptLine.y + lineinfo.fLineDescent,
2485e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov										wordinfo.ptWord.x + wordinfo.fWidth,
2486e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov										lineinfo.ptLine.y + lineinfo.fLineAscent);
2487e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2488e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					m_Refresh.AddRefresh(VTToEdit(rcWord));
2489e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
2490e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				else
2491e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
2492e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					CPDF_Rect rcLine(lineinfo.ptLine.x,
2493e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov										lineinfo.ptLine.y + lineinfo.fLineDescent,
2494e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov										lineinfo.ptLine.x + lineinfo.fLineWidth,
2495e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov										lineinfo.ptLine.y + lineinfo.fLineAscent);
2496e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2497e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					m_Refresh.AddRefresh(VTToEdit(rcLine));
2498e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2499e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					pIterator->NextLine();
2500e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
2501e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2502e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2503e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2504e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2505e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2506e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::RefreshWordRange(const CPVT_WordRange& wr)
2507e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2508e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
2509e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2510e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPVT_WordRange wrTemp = wr;
2511e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2512e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pVT->UpdateWordPlace(wrTemp.BeginPos);
2513e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pVT->UpdateWordPlace(wrTemp.EndPos);
2514e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pIterator->SetAt(wrTemp.BeginPos);
2515e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2516e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPVT_Word wordinfo;
2517e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPVT_Line lineinfo;
2518e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPVT_WordPlace place;
2519e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2520e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		while (pIterator->NextWord())
2521e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2522e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			place = pIterator->GetAt();
2523e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (place.WordCmp(wrTemp.EndPos) > 0) break;
2524e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2525e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pIterator->GetWord(wordinfo);
2526e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pIterator->GetLine(lineinfo);
2527e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2528e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (place.LineCmp(wrTemp.BeginPos) == 0 || place.LineCmp(wrTemp.EndPos) == 0)
2529e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2530e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				CPDF_Rect rcWord(wordinfo.ptWord.x,
2531e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									lineinfo.ptLine.y + lineinfo.fLineDescent,
2532e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									wordinfo.ptWord.x + wordinfo.fWidth,
2533e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									lineinfo.ptLine.y + lineinfo.fLineAscent);
2534e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2535e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (m_bNotify && m_pNotify)
2536e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
2537e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					if (!m_bNotifyFlag)
2538e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					{
2539e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						m_bNotifyFlag = TRUE;
2540e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						CPDF_Rect rcRefresh = VTToEdit(rcWord);
2541e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						m_pNotify->IOnInvalidateRect(&rcRefresh);
2542e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						m_bNotifyFlag = FALSE;
2543e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					}
2544e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
2545e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2546e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else
2547e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2548e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				CPDF_Rect rcLine(lineinfo.ptLine.x,
2549e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									lineinfo.ptLine.y + lineinfo.fLineDescent,
2550e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									lineinfo.ptLine.x + lineinfo.fLineWidth,
2551e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									lineinfo.ptLine.y + lineinfo.fLineAscent);
2552e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2553e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (m_bNotify && m_pNotify)
2554e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
2555e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					if (!m_bNotifyFlag)
2556e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					{
2557e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						m_bNotifyFlag = TRUE;
2558e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						CPDF_Rect rcRefresh = VTToEdit(rcLine);
2559e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						m_pNotify->IOnInvalidateRect(&rcRefresh);
2560e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						m_bNotifyFlag = FALSE;
2561e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					}
2562e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
2563e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2564e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				pIterator->NextLine();
2565e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2566e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2567e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2568e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2569e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2570e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetCaret(const CPVT_WordPlace & place)
2571e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2572e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_wpOldCaret = m_wpCaret;
2573e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_wpCaret = place;
2574e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2575e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2576e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetCaretInfo()
2577e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2578e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_bNotify && m_pNotify)
2579e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2580e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (!m_bNotifyFlag)
2581e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2582e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPDF_Point ptHead(0.0f,0.0f),ptFoot(0.0f,0.0f);
2583e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2584e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
2585e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2586e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				pIterator->SetAt(m_wpCaret);
2587e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				CPVT_Word word;
2588e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				CPVT_Line line;
2589e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (pIterator->GetWord(word))
2590e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
2591e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					ptHead.x = word.ptWord.x + word.fWidth;
2592e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					ptHead.y = word.ptWord.y + word.fAscent;
2593e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					ptFoot.x = word.ptWord.x + word.fWidth;
2594e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					ptFoot.y = word.ptWord.y + word.fDescent;
2595e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
2596e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				else if (pIterator->GetLine(line))
2597e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
2598e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					ptHead.x = line.ptLine.x;
2599e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					ptHead.y = line.ptLine.y + line.fLineAscent;
2600e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					ptFoot.x = line.ptLine.x;
2601e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					ptFoot.y = line.ptLine.y + line.fLineDescent;
2602e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
2603e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2604e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2605e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_bNotifyFlag = TRUE;
2606e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pNotify->IOnSetCaret(!m_SelState.IsExist(),VTToEdit(ptHead),VTToEdit(ptFoot), m_wpCaret);
2607e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_bNotifyFlag = FALSE;
2608e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2609e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2610e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2611e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	SetCaretChange();
2612e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2613e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2614e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetCaretChange()
2615e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2616e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (this->m_wpCaret == this->m_wpOldCaret) return;
2617e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2618e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_bNotify && m_pVT->IsRichText() && m_pNotify)
2619e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2620e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPVT_SecProps SecProps;
2621e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPVT_WordProps WordProps;
2622e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2623e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
2624e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2625e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pIterator->SetAt(m_wpCaret);
2626e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_Word word;
2627e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_Section section;
2628e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2629e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (pIterator->GetSection(section))
2630e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2631e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SecProps = section.SecProps;
2632e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				WordProps = section.WordProps;
2633e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2634e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2635e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (pIterator->GetWord(word))
2636e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2637e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				WordProps = word.WordProps;
2638e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2639e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2640e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2641e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (!m_bNotifyFlag)
2642e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2643e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_bNotifyFlag = TRUE;
2644e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pNotify->IOnCaretChange(SecProps,WordProps);
2645e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_bNotifyFlag = FALSE;
2646e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2647e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2648e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2649e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2650e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetCaret(FX_INT32 nPos)
2651e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2652e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
2653e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2654e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SelectNone();
2655e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetCaret(m_pVT->WordIndexToWordPlace(nPos));
2656e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_SelState.Set(m_wpCaret,m_wpCaret);
2657e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2658e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ScrollToCaret();
2659e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetCaretOrigin();
2660e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetCaretInfo();
2661e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2662e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2663e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2664e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::OnMouseDown(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl)
2665e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2666e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
2667e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2668e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SelectNone();
2669e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetCaret(m_pVT->SearchWordPlace(EditToVT(point)));
2670e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_SelState.Set(m_wpCaret,m_wpCaret);
2671e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2672e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ScrollToCaret();
2673e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetCaretOrigin();
2674e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetCaretInfo();
2675e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2676e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2677e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2678e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::OnMouseMove(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl)
2679e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2680e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
2681e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2682e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetCaret(m_pVT->SearchWordPlace(EditToVT(point)));
2683e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2684e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (m_wpCaret != m_wpOldCaret)
2685e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2686e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_SelState.SetEndPos(m_wpCaret);
2687e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2688e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			ScrollToCaret();
2689e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_WordRange wr(m_wpOldCaret,m_wpCaret);
2690e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			Refresh(RP_OPTIONAL,&wr);
2691e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			SetCaretOrigin();
2692e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			SetCaretInfo();
2693e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2694e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2695e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2696e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2697e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::OnVK_UP(FX_BOOL bShift,FX_BOOL bCtrl)
2698e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2699e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
2700e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2701e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetCaret(m_pVT->GetUpWordPlace(m_wpCaret,m_ptCaret));
2702e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2703e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (bShift)
2704e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2705e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (m_SelState.IsExist())
2706e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_SelState.SetEndPos(m_wpCaret);
2707e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else
2708e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_SelState.Set(m_wpOldCaret,m_wpCaret);
2709e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2710e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (m_wpOldCaret != m_wpCaret)
2711e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2712e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				ScrollToCaret();
2713e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				CPVT_WordRange wr(m_wpOldCaret, m_wpCaret);
2714e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				Refresh(RP_OPTIONAL, &wr);
2715e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaretInfo();
2716e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2717e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2718e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else
2719e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2720e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			SelectNone();
2721e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2722e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			ScrollToCaret();
2723e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			SetCaretInfo();
2724e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2725e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2726e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2727e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2728e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::OnVK_DOWN(FX_BOOL bShift,FX_BOOL bCtrl)
2729e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2730e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
2731e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2732e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetCaret(m_pVT->GetDownWordPlace(m_wpCaret,m_ptCaret));
2733e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2734e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (bShift)
2735e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2736e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (m_SelState.IsExist())
2737e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_SelState.SetEndPos(m_wpCaret);
2738e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else
2739e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_SelState.Set(m_wpOldCaret,m_wpCaret);
2740e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2741e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (m_wpOldCaret != m_wpCaret)
2742e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2743e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				ScrollToCaret();
2744e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				CPVT_WordRange wr(m_wpOldCaret,m_wpCaret);
2745e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				Refresh(RP_OPTIONAL, &wr);
2746e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaretInfo();
2747e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2748e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2749e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else
2750e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2751e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			SelectNone();
2752e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2753e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			ScrollToCaret();
2754e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			SetCaretInfo();
2755e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2756e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2757e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2758e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2759e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::OnVK_LEFT(FX_BOOL bShift,FX_BOOL bCtrl)
2760e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2761e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
2762e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2763e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (bShift)
2764e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2765e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (m_wpCaret == m_pVT->GetLineBeginPlace(m_wpCaret) &&
2766e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_wpCaret != m_pVT->GetSectionBeginPlace(m_wpCaret))
2767e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaret(m_pVT->GetPrevWordPlace(m_wpCaret));
2768e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2769e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			SetCaret(m_pVT->GetPrevWordPlace(m_wpCaret));
2770e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2771e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (m_SelState.IsExist())
2772e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_SelState.SetEndPos(m_wpCaret);
2773e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else
2774e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_SelState.Set(m_wpOldCaret, m_wpCaret);
2775e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2776e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (m_wpOldCaret != m_wpCaret)
2777e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2778e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				ScrollToCaret();
2779e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				CPVT_WordRange wr(m_wpOldCaret,m_wpCaret);
2780e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				Refresh(RP_OPTIONAL,&wr);
2781e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaretInfo();
2782e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2783e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2784e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else
2785e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2786e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (m_SelState.IsExist())
2787e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2788e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos)<0)
2789e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					SetCaret(m_SelState.BeginPos);
2790e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				else
2791e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					SetCaret(m_SelState.EndPos);
2792e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2793e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SelectNone();
2794e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				ScrollToCaret();
2795e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaretInfo();
2796e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2797e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else
2798e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2799e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (m_wpCaret == m_pVT->GetLineBeginPlace(m_wpCaret) &&
2800e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					m_wpCaret != m_pVT->GetSectionBeginPlace(m_wpCaret))
2801e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					SetCaret(m_pVT->GetPrevWordPlace(m_wpCaret));
2802e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2803e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaret(m_pVT->GetPrevWordPlace(m_wpCaret));
2804e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2805e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				ScrollToCaret();
2806e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaretOrigin();
2807e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaretInfo();
2808e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2809e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2810e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2811e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2812e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2813e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::OnVK_RIGHT(FX_BOOL bShift,FX_BOOL bCtrl)
2814e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2815e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
2816e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2817e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (bShift)
2818e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2819e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			SetCaret(m_pVT->GetNextWordPlace(m_wpCaret));
2820e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2821e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (m_wpCaret == m_pVT->GetLineEndPlace(m_wpCaret) &&
2822e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_wpCaret != m_pVT->GetSectionEndPlace(m_wpCaret))
2823e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaret(m_pVT->GetNextWordPlace(m_wpCaret));
2824e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2825e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (m_SelState.IsExist())
2826e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_SelState.SetEndPos(m_wpCaret);
2827e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else
2828e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_SelState.Set(m_wpOldCaret,m_wpCaret);
2829e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2830e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (m_wpOldCaret != m_wpCaret)
2831e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2832e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				ScrollToCaret();
2833e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				CPVT_WordRange wr(m_wpOldCaret,m_wpCaret);
2834e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				Refresh(RP_OPTIONAL,&wr);
2835e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaretInfo();
2836e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2837e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2838e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else
2839e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2840e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (m_SelState.IsExist())
2841e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2842e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos)>0)
2843e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					SetCaret(m_SelState.BeginPos);
2844e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				else
2845e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					SetCaret(m_SelState.EndPos);
2846e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2847e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SelectNone();
2848e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				ScrollToCaret();
2849e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaretInfo();
2850e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2851e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else
2852e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2853e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaret(m_pVT->GetNextWordPlace(m_wpCaret));
2854e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2855e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (m_wpCaret == m_pVT->GetLineEndPlace(m_wpCaret) &&
2856e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					m_wpCaret != m_pVT->GetSectionEndPlace(m_wpCaret))
2857e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					SetCaret(m_pVT->GetNextWordPlace(m_wpCaret));
2858e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2859e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				ScrollToCaret();
2860e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaretOrigin();
2861e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaretInfo();
2862e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2863e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2864e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2865e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2866e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2867e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::OnVK_HOME(FX_BOOL bShift,FX_BOOL bCtrl)
2868e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2869e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
2870e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2871e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (bShift)
2872e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2873e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (bCtrl)
2874e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaret(m_pVT->GetBeginWordPlace());
2875e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else
2876e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaret(m_pVT->GetLineBeginPlace(m_wpCaret));
2877e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2878e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (m_SelState.IsExist())
2879e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_SelState.SetEndPos(m_wpCaret);
2880e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else
2881e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_SelState.Set(m_wpOldCaret,m_wpCaret);
2882e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2883e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			ScrollToCaret();
2884e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_WordRange wr(m_wpOldCaret, m_wpCaret);
2885e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			Refresh(RP_OPTIONAL, &wr);
2886e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			SetCaretInfo();
2887e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2888e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else
2889e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2890e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (m_SelState.IsExist())
2891e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2892e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos)<0)
2893e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					SetCaret(m_SelState.BeginPos);
2894e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				else
2895e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					SetCaret(m_SelState.EndPos);
2896e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2897e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SelectNone();
2898e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				ScrollToCaret();
2899e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaretInfo();
2900e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2901e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else
2902e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2903e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (bCtrl)
2904e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					SetCaret(m_pVT->GetBeginWordPlace());
2905e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				else
2906e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					SetCaret(m_pVT->GetLineBeginPlace(m_wpCaret));
2907e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2908e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				ScrollToCaret();
2909e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaretOrigin();
2910e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaretInfo();
2911e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2912e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2913e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2914e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2915e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2916e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::OnVK_END(FX_BOOL bShift,FX_BOOL bCtrl)
2917e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2918e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
2919e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2920e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (bShift)
2921e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2922e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (bCtrl)
2923e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaret(m_pVT->GetEndWordPlace());
2924e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else
2925e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaret(m_pVT->GetLineEndPlace(m_wpCaret));
2926e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2927e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (m_SelState.IsExist())
2928e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_SelState.SetEndPos(m_wpCaret);
2929e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else
2930e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_SelState.Set(m_wpOldCaret, m_wpCaret);
2931e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2932e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			ScrollToCaret();
2933e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_WordRange wr(m_wpOldCaret, m_wpCaret);
2934e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			Refresh(RP_OPTIONAL, &wr);
2935e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			SetCaretInfo();
2936e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2937e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else
2938e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2939e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (m_SelState.IsExist())
2940e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2941e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (m_SelState.BeginPos.WordCmp(m_SelState.EndPos)>0)
2942e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					SetCaret(m_SelState.BeginPos);
2943e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				else
2944e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					SetCaret(m_SelState.EndPos);
2945e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2946e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SelectNone();
2947e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				ScrollToCaret();
2948e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaretInfo();
2949e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2950e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else
2951e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2952e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (bCtrl)
2953e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					SetCaret(m_pVT->GetEndWordPlace());
2954e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				else
2955e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					SetCaret(m_pVT->GetLineEndPlace(m_wpCaret));
2956e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2957e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				ScrollToCaret();
2958e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaretOrigin();
2959e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaretInfo();
2960e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2961e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2962e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2963e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2964e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2965e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetText(FX_LPCWSTR text,FX_INT32 charset,
2966e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						const CPVT_SecProps * pSecProps,const CPVT_WordProps * pWordProps, FX_BOOL bAddUndo, FX_BOOL bPaint)
2967e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2968e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	Empty();
2969e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	DoInsertText(CPVT_WordPlace(0,0,-1), text, charset, pSecProps, pWordProps);
2970e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (bPaint) Paint();
2971e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_bOprNotify && m_pOprNotify)
2972e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pOprNotify->OnSetText(m_wpCaret, m_wpOldCaret);
2973e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	//if (bAddUndo)
2974e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2975e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2976e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit::InsertWord(FX_WORD word, FX_INT32 charset, const CPVT_WordProps * pWordProps, FX_BOOL bAddUndo, FX_BOOL bPaint)
2977e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2978e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (IsTextOverflow()) return FALSE;
2979e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2980e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
2981e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2982e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pVT->UpdateWordPlace(m_wpCaret);
2983e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2984e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetCaret(m_pVT->InsertWord(m_wpCaret,word,GetCharSetFromUnicode(word, charset),pWordProps));
2985e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_SelState.Set(m_wpCaret,m_wpCaret);
2986e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2987e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (m_wpCaret != m_wpOldCaret)
2988e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2989e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (bAddUndo && m_bEnableUndo)
2990e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2991e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				AddEditUndoItem(new CFXEU_InsertWord(this,m_wpOldCaret,m_wpCaret,word,charset,pWordProps));
2992e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2993e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2994e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (bPaint)
2995e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				PaintInsertText(m_wpOldCaret, m_wpCaret);
2996e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2997e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (m_bOprNotify && m_pOprNotify)
2998e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_pOprNotify->OnInsertWord(m_wpCaret, m_wpOldCaret);
2999e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3000e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return TRUE;
3001e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
3002e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
3003e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3004e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return FALSE;
3005e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3006e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3007e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit::InsertReturn(const CPVT_SecProps * pSecProps,const CPVT_WordProps * pWordProps,
3008e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							   FX_BOOL bAddUndo, FX_BOOL bPaint)
3009e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3010e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (IsTextOverflow()) return FALSE;
3011e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3012e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
3013e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
3014e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pVT->UpdateWordPlace(m_wpCaret);
3015e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetCaret(m_pVT->InsertSection(m_wpCaret,pSecProps,pWordProps));
3016e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_SelState.Set(m_wpCaret,m_wpCaret);
3017e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3018e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (m_wpCaret != m_wpOldCaret)
3019e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
3020e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (bAddUndo && m_bEnableUndo)
3021e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
3022e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				AddEditUndoItem(new CFXEU_InsertReturn(this,m_wpOldCaret,m_wpCaret,pSecProps,pWordProps));
3023e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
3024e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3025e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (bPaint)
3026e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
3027e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				RearrangePart(CPVT_WordRange(m_wpOldCaret, m_wpCaret));
3028e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				ScrollToCaret();
3029e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				CPVT_WordRange wr(m_wpOldCaret, GetVisibleWordRange().EndPos);
3030e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				Refresh(RP_ANALYSE, &wr);
3031e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaretOrigin();
3032e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaretInfo();
3033e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
3034e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3035e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (m_bOprNotify && m_pOprNotify)
3036e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_pOprNotify->OnInsertReturn(m_wpCaret, m_wpOldCaret);
3037e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3038e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return TRUE;
3039e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
3040e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
3041e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3042e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return FALSE;
3043e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3044e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3045e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit::Backspace(FX_BOOL bAddUndo, FX_BOOL bPaint)
3046e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3047e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
3048e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
3049e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (m_wpCaret == m_pVT->GetBeginWordPlace()) return FALSE;
3050e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3051e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPVT_Section section;
3052e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPVT_Word word;
3053e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3054e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (bAddUndo)
3055e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
3056e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
3057e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
3058e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				pIterator->SetAt(m_wpCaret);
3059e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				pIterator->GetSection(section);
3060e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				pIterator->GetWord(word);
3061e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
3062e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
3063e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3064e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pVT->UpdateWordPlace(m_wpCaret);
3065e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetCaret(m_pVT->BackSpaceWord(m_wpCaret));
3066e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_SelState.Set(m_wpCaret,m_wpCaret);
3067e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3068e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (m_wpCaret != m_wpOldCaret)
3069e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
3070e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (bAddUndo && m_bEnableUndo)
3071e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
3072e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (m_wpCaret.SecCmp(m_wpOldCaret) != 0)
3073e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					AddEditUndoItem(new CFXEU_Backspace(this,m_wpOldCaret,m_wpCaret,word.Word,word.nCharset,
3074e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						section.SecProps,section.WordProps));
3075e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				else
3076e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					AddEditUndoItem(new CFXEU_Backspace(this,m_wpOldCaret,m_wpCaret,word.Word,word.nCharset,
3077e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						section.SecProps,word.WordProps));
3078e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
3079e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3080e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (bPaint)
3081e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
3082e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				RearrangePart(CPVT_WordRange(m_wpCaret,m_wpOldCaret));
3083e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				ScrollToCaret();
3084e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3085e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				CPVT_WordRange wr;
3086e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (m_wpCaret.SecCmp(m_wpOldCaret) !=0)
3087e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					wr = CPVT_WordRange(m_pVT->GetPrevWordPlace(m_wpCaret),GetVisibleWordRange().EndPos);
3088e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				else if (m_wpCaret.LineCmp(m_wpOldCaret) !=0)
3089e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					wr = CPVT_WordRange(m_pVT->GetLineBeginPlace(m_wpCaret),m_pVT->GetSectionEndPlace(m_wpCaret));
3090e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				else
3091e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					wr = CPVT_WordRange(m_pVT->GetPrevWordPlace(m_wpCaret),m_pVT->GetSectionEndPlace(m_wpCaret));
3092e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3093e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				Refresh(RP_ANALYSE, &wr);
3094e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3095e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaretOrigin();
3096e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaretInfo();
3097e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
3098e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3099e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (m_bOprNotify && m_pOprNotify)
3100e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_pOprNotify->OnBackSpace(m_wpCaret, m_wpOldCaret);
3101e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3102e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return TRUE;
3103e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
3104e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
3105e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3106e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return FALSE;
3107e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3108e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3109e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit::Delete(FX_BOOL bAddUndo, FX_BOOL bPaint)
3110e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3111e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
3112e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
3113e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (m_wpCaret == m_pVT->GetEndWordPlace()) return FALSE;
3114e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3115e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPVT_Section section;
3116e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPVT_Word word;
3117e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3118e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (bAddUndo)
3119e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
3120e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
3121e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
3122e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				pIterator->SetAt(m_pVT->GetNextWordPlace(m_wpCaret));
3123e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				pIterator->GetSection(section);
3124e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				pIterator->GetWord(word);
3125e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
3126e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
3127e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3128e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pVT->UpdateWordPlace(m_wpCaret);
3129e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		FX_BOOL bSecEnd = (m_wpCaret == m_pVT->GetSectionEndPlace(m_wpCaret));
3130e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3131e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetCaret(m_pVT->DeleteWord(m_wpCaret));
3132e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_SelState.Set(m_wpCaret,m_wpCaret);
3133e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3134e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (bAddUndo && m_bEnableUndo)
3135e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
3136e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (bSecEnd)
3137e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				AddEditUndoItem(new CFXEU_Delete(this,m_wpOldCaret,m_wpCaret,word.Word,word.nCharset,
3138e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					section.SecProps,section.WordProps,bSecEnd));
3139e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else
3140e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				AddEditUndoItem(new CFXEU_Delete(this,m_wpOldCaret,m_wpCaret,word.Word,word.nCharset,
3141e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					section.SecProps,word.WordProps,bSecEnd));
3142e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
3143e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3144e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (bPaint)
3145e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
3146e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			RearrangePart(CPVT_WordRange(m_wpOldCaret,m_wpCaret));
3147e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			ScrollToCaret();
3148e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3149e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_WordRange wr;
3150e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (bSecEnd)
3151e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				wr = CPVT_WordRange(m_pVT->GetPrevWordPlace(m_wpOldCaret),GetVisibleWordRange().EndPos);
3152e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else if (m_wpCaret.LineCmp(m_wpOldCaret) !=0)
3153e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				wr = CPVT_WordRange(m_pVT->GetLineBeginPlace(m_wpCaret),m_pVT->GetSectionEndPlace(m_wpCaret));
3154e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else
3155e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				wr = CPVT_WordRange(m_pVT->GetPrevWordPlace(m_wpOldCaret),m_pVT->GetSectionEndPlace(m_wpCaret));
3156e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3157e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			Refresh(RP_ANALYSE, &wr);
3158e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3159e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			SetCaretOrigin();
3160e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			SetCaretInfo();
3161e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
3162e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3163e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (m_bOprNotify && m_pOprNotify)
3164e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pOprNotify->OnDelete(m_wpCaret, m_wpOldCaret);
3165e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3166e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return TRUE;
3167e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
3168e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3169e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return FALSE;
3170e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3171e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3172e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL	CFX_Edit::Empty()
3173e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3174e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
3175e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
3176e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pVT->DeleteWords(GetWholeWordRange());
3177e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetCaret(m_pVT->GetBeginWordPlace());
3178e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3179e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return TRUE;
3180e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
3181e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3182e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return FALSE;
3183e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3184e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3185e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit::Clear(FX_BOOL bAddUndo, FX_BOOL bPaint)
3186e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3187e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
3188e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
3189e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (m_SelState.IsExist())
3190e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
3191e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_WordRange range = m_SelState.ConvertToWordRange();
3192e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3193e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (bAddUndo && m_bEnableUndo)
3194e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
3195e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (m_pVT->IsRichText())
3196e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
3197e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					BeginGroupUndo(L"");
3198e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3199e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
3200e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					{
3201e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						pIterator->SetAt(range.EndPos);
3202e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3203e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						CPVT_Word wordinfo;
3204e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						CPVT_Section secinfo;
3205e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						do
3206e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
3207e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							CPVT_WordPlace place = pIterator->GetAt();
3208e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							if (place.WordCmp(range.BeginPos) <= 0)break;
3209e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3210e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							CPVT_WordPlace oldplace = m_pVT->GetPrevWordPlace(place);
3211e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3212e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							if (oldplace.SecCmp(place) != 0)
3213e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
3214e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								if (pIterator->GetSection(secinfo))
3215e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								{
3216e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									AddEditUndoItem(new CFXEU_ClearRich(this,oldplace,place,range,wordinfo.Word,
3217e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov										wordinfo.nCharset,secinfo.SecProps,secinfo.WordProps));
3218e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								}
3219e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
3220e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							else
3221e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
3222e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								if (pIterator->GetWord(wordinfo))
3223e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								{
3224e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									oldplace = m_pVT->AjustLineHeader(oldplace,TRUE);
3225e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									place = m_pVT->AjustLineHeader(place,TRUE);
3226e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3227e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									AddEditUndoItem(new CFXEU_ClearRich(this,oldplace,place,range,wordinfo.Word,
3228e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov										wordinfo.nCharset,secinfo.SecProps,wordinfo.WordProps));
3229e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								}
3230e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
3231e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}while (pIterator->PrevWord());
3232e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					}
3233e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					EndGroupUndo();
3234e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
3235e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				else
3236e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
3237e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					AddEditUndoItem(new CFXEU_Clear(this,range,GetSelText()));
3238e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
3239e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
3240e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3241e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			SelectNone();
3242e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			SetCaret(m_pVT->DeleteWords(range));
3243e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_SelState.Set(m_wpCaret,m_wpCaret);
3244e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3245e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (bPaint)
3246e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
3247e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				RearrangePart(range);
3248e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				ScrollToCaret();
3249e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3250e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				CPVT_WordRange wr(m_wpOldCaret, GetVisibleWordRange().EndPos);
3251e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				Refresh(RP_ANALYSE, &wr);
3252e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3253e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaretOrigin();
3254e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				SetCaretInfo();
3255e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
3256e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3257e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (m_bOprNotify && m_pOprNotify)
3258e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_pOprNotify->OnClear(m_wpCaret, m_wpOldCaret);
3259e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3260e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return TRUE;
3261e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
3262e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
3263e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3264e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return FALSE;
3265e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3266e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3267e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit::InsertText(FX_LPCWSTR text, FX_INT32 charset,
3268e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps, FX_BOOL bAddUndo, FX_BOOL bPaint)
3269e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3270e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (IsTextOverflow()) return FALSE;
3271e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3272e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pVT->UpdateWordPlace(m_wpCaret);
3273e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	SetCaret(DoInsertText(m_wpCaret, text, charset, pSecProps, pWordProps));
3274e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_SelState.Set(m_wpCaret,m_wpCaret);
3275e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3276e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_wpCaret != m_wpOldCaret)
3277e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
3278e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (bAddUndo && m_bEnableUndo)
3279e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
3280e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			AddEditUndoItem(new CFXEU_InsertText(this,m_wpOldCaret,m_wpCaret,text,charset,pSecProps,pWordProps));
3281e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
3282e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3283e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (bPaint)
3284e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			PaintInsertText(m_wpOldCaret, m_wpCaret);
3285e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3286e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (m_bOprNotify && m_pOprNotify)
3287e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pOprNotify->OnInsertText(m_wpCaret, m_wpOldCaret);
3288e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3289e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return TRUE;
3290e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
3291e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return FALSE;
3292e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3293e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3294e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::PaintInsertText(const CPVT_WordPlace & wpOld, const CPVT_WordPlace & wpNew)
3295e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3296e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
3297e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
3298e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		RearrangePart(CPVT_WordRange(wpOld,wpNew));
3299e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ScrollToCaret();
3300e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3301e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPVT_WordRange wr;
3302e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (m_wpCaret.LineCmp(wpOld) !=0)
3303e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			wr = CPVT_WordRange(m_pVT->GetLineBeginPlace(wpOld),m_pVT->GetSectionEndPlace(wpNew));
3304e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else
3305e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			wr = CPVT_WordRange(wpOld,m_pVT->GetSectionEndPlace(wpNew));
3306e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		Refresh(RP_ANALYSE, &wr);
3307e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetCaretOrigin();
3308e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetCaretInfo();
3309e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
3310e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3311e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3312e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit::Redo()
3313e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3314e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_bEnableUndo)
3315e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
3316e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (m_Undo.CanRedo())
3317e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
3318e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_Undo.Redo();
3319e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return TRUE;
3320e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
3321e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
3322e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3323e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return FALSE;
3324e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3325e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3326e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CFX_Edit::Undo()
3327e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3328e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_bEnableUndo)
3329e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
3330e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (m_Undo.CanUndo())
3331e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
3332e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_Undo.Undo();
3333e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return TRUE;
3334e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
3335e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
3336e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3337e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return FALSE;
3338e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3339e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3340e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::SetCaretOrigin()
3341e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3342e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
3343e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
3344e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (IPDF_VariableText_Iterator * pIterator = m_pVT->GetIterator())
3345e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
3346e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pIterator->SetAt(m_wpCaret);
3347e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_Word word;
3348e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPVT_Line line;
3349e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (pIterator->GetWord(word))
3350e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
3351e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_ptCaret.x = word.ptWord.x + word.fWidth;
3352e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_ptCaret.y = word.ptWord.y;
3353e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
3354e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else if (pIterator->GetLine(line))
3355e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
3356e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_ptCaret.x = line.ptLine.x;
3357e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_ptCaret.y = line.ptLine.y;
3358e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
3359e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
3360e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
3361e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3362e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3363e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_INT32 CFX_Edit::WordPlaceToWordIndex(const CPVT_WordPlace & place) const
3364e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3365e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
3366e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return m_pVT->WordPlaceToWordIndex(place);
3367e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3368e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return -1;
3369e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3370e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3371e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPVT_WordPlace CFX_Edit::WordIndexToWordPlace(FX_INT32 index) const
3372e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3373e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
3374e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return m_pVT->WordIndexToWordPlace(index);
3375e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3376e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return CPVT_WordPlace();
3377e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3378e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3379e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL	CFX_Edit::IsTextFull() const
3380e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3381e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32 nTotalWords = m_pVT->GetTotalWords();
3382e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32 nLimitChar = m_pVT->GetLimitChar();
3383e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32 nCharArray = m_pVT->GetCharArray();
3384e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3385e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return IsTextOverflow() || (nLimitChar>0 && nTotalWords >= nLimitChar)
3386e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		|| (nCharArray>0 && nTotalWords >= nCharArray);
3387e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3388e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3389e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL	CFX_Edit::IsTextOverflow() const
3390e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3391e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (!m_bEnableScroll && !m_bEnableOverflow)
3392e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
3393e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_Rect rcPlate = m_pVT->GetPlateRect();
3394e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_Rect rcContent = m_pVT->GetContentRect();
3395e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3396e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (m_pVT->IsMultiLine() && GetTotalLines() > 1)
3397e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
3398e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (FX_EDIT_IsFloatBigger(rcContent.Height(),rcPlate.Height())) return TRUE;
3399e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
3400e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3401e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (FX_EDIT_IsFloatBigger(rcContent.Width(),rcPlate.Width())) return TRUE;
3402e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
3403e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3404e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return FALSE;
3405e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3406e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3407e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPVT_WordPlace CFX_Edit::GetLineBeginPlace(const CPVT_WordPlace & place) const
3408e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3409e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pVT->GetLineBeginPlace(place);
3410e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3411e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3412e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPVT_WordPlace CFX_Edit::GetLineEndPlace(const CPVT_WordPlace & place) const
3413e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3414e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pVT->GetLineEndPlace(place);
3415e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3416e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3417e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPVT_WordPlace CFX_Edit::GetSectionBeginPlace(const CPVT_WordPlace & place) const
3418e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3419e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pVT->GetSectionBeginPlace(place);
3420e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3421e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3422e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPVT_WordPlace CFX_Edit::GetSectionEndPlace(const CPVT_WordPlace & place) const
3423e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3424e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pVT->GetSectionEndPlace(place);
3425e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3426e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3427e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL	CFX_Edit::CanUndo() const
3428e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3429e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_bEnableUndo)
3430e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
3431e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return m_Undo.CanUndo();
3432e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
3433e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3434e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return FALSE;
3435e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3436e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3437e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL	CFX_Edit::CanRedo() const
3438e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3439e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_bEnableUndo)
3440e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
3441e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return m_Undo.CanRedo();
3442e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
3443e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3444e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return FALSE;
3445e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3446e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3447e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL	CFX_Edit::IsModified() const
3448e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3449e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_bEnableUndo)
3450e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
3451e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return m_Undo.IsModified();
3452e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
3453e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3454e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return FALSE;
3455e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3456e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3457e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::EnableRefresh(FX_BOOL bRefresh)
3458e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3459e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_bEnableRefresh = bRefresh;
3460e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3461e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3462e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::EnableUndo(FX_BOOL bUndo)
3463e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3464e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	this->m_bEnableUndo = bUndo;
3465e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3466e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3467e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::EnableNotify(FX_BOOL bNotify)
3468e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3469e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	this->m_bNotify = bNotify;
3470e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3471e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3472e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::EnableOprNotify(FX_BOOL bNotify)
3473e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3474e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	this->m_bOprNotify = bNotify;
3475e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3476e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3477e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_FLOAT CFX_Edit::GetLineTop(const CPVT_WordPlace& place) const
3478e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3479e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator())
3480e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
3481e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPVT_WordPlace wpOld = pIterator->GetAt();
3482e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3483e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pIterator->SetAt(place);
3484e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPVT_Line line;
3485e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pIterator->GetLine(line);
3486e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3487e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pIterator->SetAt(wpOld);
3488e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3489e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return line.ptLine.y + line.fLineAscent;
3490e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
3491e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3492e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return 0.0f;
3493e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3494e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3495e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_FLOAT CFX_Edit::GetLineBottom(const CPVT_WordPlace& place) const
3496e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3497e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (IPDF_VariableText_Iterator* pIterator = m_pVT->GetIterator())
3498e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
3499e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPVT_WordPlace wpOld = pIterator->GetAt();
3500e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3501e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pIterator->SetAt(place);
3502e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPVT_Line line;
3503e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pIterator->GetLine(line);
3504e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3505e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pIterator->SetAt(wpOld);
3506e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3507e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return line.ptLine.y + line.fLineDescent;
3508e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
3509e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3510e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return 0.0f;
3511e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3512e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3513e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPVT_WordPlace CFX_Edit::DoInsertText(const CPVT_WordPlace& place, FX_LPCWSTR text, FX_INT32 charset,
3514e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									  const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps)
3515e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3516e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPVT_WordPlace wp = place;
3517e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3518e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pVT->IsValid())
3519e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
3520e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CFX_WideString sText = text;
3521e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3522e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		for (FX_INT32 i = 0, sz = sText.GetLength(); i < sz; i++)
3523e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
3524e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			FX_WORD word = sText[i];
3525e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			switch (word)
3526e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
3527e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			case 0x0D:
3528e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				wp = m_pVT->InsertSection(wp,pSecProps,pWordProps);
3529e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (sText[i+1] == 0x0A)
3530e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					i++;
3531e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				break;
3532e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			case 0x0A:
3533e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				wp = m_pVT->InsertSection(wp,pSecProps,pWordProps);
3534e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (sText[i+1] == 0x0D)
3535e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					i++;
3536e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				break;
3537e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			case 0x09:
3538e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				word = 0x20;
3539e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			default:
3540e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				wp = m_pVT->InsertWord(wp,word,GetCharSetFromUnicode(word, charset),pWordProps);
3541e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				break;
3542e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
3543e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
3544e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
3545e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3546e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return wp;
3547e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3548e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3549e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_INT32 CFX_Edit::GetCharSetFromUnicode(FX_WORD word, FX_INT32 nOldCharset)
3550e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3551e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (IFX_Edit_FontMap* pFontMap = this->GetFontMap())
3552e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return pFontMap->CharSetFromUnicode(word, nOldCharset);
3553e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	else
3554e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return nOldCharset;
3555e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3556e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3557e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::BeginGroupUndo(const CFX_WideString& sTitle)
3558e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3559e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pGroupUndoItem == NULL);
3560e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3561e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pGroupUndoItem = new CFX_Edit_GroupUndoItem(sTitle);
3562e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3563e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3564e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::EndGroupUndo()
3565e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3566e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pGroupUndoItem != NULL);
3567e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3568e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pGroupUndoItem->UpdateItems();
3569e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_Undo.AddItem(m_pGroupUndoItem);
3570e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_bOprNotify && m_pOprNotify)
3571e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pOprNotify->OnAddUndo(m_pGroupUndoItem);
3572e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pGroupUndoItem = NULL;
3573e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3574e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3575e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::AddEditUndoItem(CFX_Edit_UndoItem* pEditUndoItem)
3576e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3577e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_pGroupUndoItem)
3578e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pGroupUndoItem->AddUndoItem(pEditUndoItem);
3579e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	else
3580e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
3581e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_Undo.AddItem(pEditUndoItem);
3582e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (m_bOprNotify && m_pOprNotify)
3583e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_pOprNotify->OnAddUndo(pEditUndoItem);
3584e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
3585e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3586e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3587e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CFX_Edit::AddUndoItem(IFX_Edit_UndoItem* pUndoItem)
3588e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
3589e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_Undo.AddItem(pUndoItem);
3590e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_bOprNotify && m_pOprNotify)
3591e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_pOprNotify->OnAddUndo(pUndoItem);
3592e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3593e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3594