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