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#ifndef _FXET_EDIT_H_
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define _FXET_EDIT_H_
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "fx_edit.h"
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_Edit_Page;
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstruct CFX_Edit_LineRect;
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_Edit_LineRectArray;
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_Edit_RectArray;
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_Edit_Refresh;
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_Edit_Select;
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_Edit;
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_Edit_Iterator;
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_Edit_Refresh;
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_Edit_UndoItem;
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_Edit_Undo;
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_Edit_Provider;
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FX_EDIT_IsFloatZero(f)						(f < 0.0001 && f > -0.0001)
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FX_EDIT_IsFloatEqual(fa,fb)					FX_EDIT_IsFloatZero(fa - fb)
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FX_EDIT_IsFloatBigger(fa,fb)				(fa > fb && !FX_EDIT_IsFloatEqual(fa,fb))
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FX_EDIT_IsFloatSmaller(fa,fb)				(fa < fb && !FX_EDIT_IsFloatEqual(fa,fb))
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtemplate<class T> T FX_EDIT_MIN (const T & i, const T & j) { return ((i < j) ? i : j); }
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtemplate<class T> T FX_EDIT_MAX (const T & i, const T & j) { return ((i > j) ? i : j); }
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define	FX_EDIT_PI									3.14159265358979f
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FX_EDIT_ITALIC_ANGEL						10 * FX_EDIT_PI / 180.0f
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ------------------------- CFX_Edit_Refresh ---------------------------- */
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovenum REFRESH_PLAN_E
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	RP_ANALYSE,
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	RP_NOANALYSE,
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	RP_OPTIONAL
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovenum EDIT_PROPS_E
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	EP_LINELEADING,
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	EP_LINEINDENT,
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	EP_ALIGNMENT,
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	EP_FONTINDEX,
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	EP_FONTSIZE,
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	EP_WORDCOLOR,
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	EP_SCRIPTTYPE,
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	EP_UNDERLINE,
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	EP_CROSSOUT,
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	EP_CHARSPACE,
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	EP_HORZSCALE,
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	EP_BOLD,
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	EP_ITALIC
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstruct CFX_Edit_LineRect
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit_LineRect(const CPVT_WordRange & wrLine,const CPDF_Rect & rcLine) :
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_wrLine(wrLine), m_rcLine(rcLine)
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL operator != (const CFX_Edit_LineRect & linerect) const
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FXSYS_memcmp(this, &linerect, sizeof(CFX_Edit_LineRect)) != 0;
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL IsSameHeight(const CFX_Edit_LineRect & linerect) const
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FX_EDIT_IsFloatZero((m_rcLine.top - m_rcLine.bottom) - (linerect.m_rcLine.top -linerect.m_rcLine.bottom));
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL IsSameTop(const CFX_Edit_LineRect & linerect) const
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FX_EDIT_IsFloatZero(m_rcLine.top - linerect.m_rcLine.top);
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL IsSameLeft(const CFX_Edit_LineRect & linerect) const
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FX_EDIT_IsFloatZero(m_rcLine.left - linerect.m_rcLine.left);
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL IsSameRight(const CFX_Edit_LineRect & linerect) const
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FX_EDIT_IsFloatZero(m_rcLine.right - linerect.m_rcLine.right);
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordRange							m_wrLine;
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Rect								m_rcLine;
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_Edit_LineRectArray
100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit_LineRectArray()
103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual ~CFX_Edit_LineRectArray()
107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		Empty();
109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void Empty()
112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		for (FX_INT32 i = 0, sz = m_LineRects.GetSize(); i < sz; i++)
114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			delete m_LineRects.GetAt(i);
115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_LineRects.RemoveAll();
117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void RemoveAll()
120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_LineRects.RemoveAll();
122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void operator = (CFX_Edit_LineRectArray & rects)
125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		Empty();
127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		for (FX_INT32 i = 0, sz = rects.GetSize(); i < sz; i++)
128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_LineRects.Add(rects.GetAt(i));
129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		rects.RemoveAll();
131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void Add(const CPVT_WordRange & wrLine,const CPDF_Rect & rcLine)
134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (CFX_Edit_LineRect * pRect = new CFX_Edit_LineRect(wrLine,rcLine))
136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_LineRects.Add(pRect);
137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32 GetSize() const
140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return m_LineRects.GetSize();
142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit_LineRect * GetAt(FX_INT32 nIndex) const
145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (nIndex < 0 || nIndex >= m_LineRects.GetSize())
147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			return NULL;
148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return m_LineRects.GetAt(nIndex);
150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ArrayTemplate<CFX_Edit_LineRect*>		m_LineRects;
153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_Edit_RectArray
156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit_RectArray()
159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual ~CFX_Edit_RectArray()
163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		this->Empty();
165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void Empty()
168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		for (FX_INT32 i = 0, sz = m_Rects.GetSize(); i < sz; i++)
170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			delete m_Rects.GetAt(i);
171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		this->m_Rects.RemoveAll();
173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void Add(const CPDF_Rect & rect)
176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		//check for overlaped area
178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		for (FX_INT32 i = 0, sz = m_Rects.GetSize(); i < sz; i++)
179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (CPDF_Rect * pRect = m_Rects.GetAt(i))
180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (pRect->Contains(rect))return;
181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (CPDF_Rect * pNewRect = new CPDF_Rect(rect))
183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_Rects.Add(pNewRect);
184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32 GetSize() const
187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return m_Rects.GetSize();
189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Rect * GetAt(FX_INT32 nIndex) const
192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (nIndex < 0 || nIndex >= m_Rects.GetSize())
194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			return NULL;
195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return m_Rects.GetAt(nIndex);
197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ArrayTemplate<CPDF_Rect*>			m_Rects;
200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_Edit_Refresh
203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit_Refresh();
206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual ~CFX_Edit_Refresh();
207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									BeginRefresh();
209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									Push(const CPVT_WordRange & linerange,const CPDF_Rect & rect);
210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									NoAnalyse();
211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									Analyse(FX_INT32 nAlignment);
212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									AddRefresh(const CPDF_Rect & rect);
213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	const CFX_Edit_RectArray *				GetRefreshRects() const;
214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									EndRefresh();
215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit_LineRectArray					m_NewLineRects;
218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit_LineRectArray					m_OldLineRects;
219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit_RectArray						m_RefreshRects;
220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ------------------------- CFX_Edit_Select ---------------------------- */
224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_Edit_Select
226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit_Select()
229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit_Select(const CPVT_WordPlace & begin,const CPVT_WordPlace & end)
233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		Set(begin,end);
235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit_Select(const CPVT_WordRange & range)
238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		Set(range.BeginPos,range.EndPos);
240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordRange ConvertToWordRange() const
243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return CPVT_WordRange(this->BeginPos,this->EndPos);
245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void Default()
248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		BeginPos.Default();
250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		EndPos.Default();
251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void Set(const CPVT_WordPlace & begin,const CPVT_WordPlace & end)
254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		this->BeginPos = begin;
256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		this->EndPos = end;
257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void SetBeginPos(const CPVT_WordPlace & begin)
260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		this->BeginPos = begin;
262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void SetEndPos(const CPVT_WordPlace & end)
265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		this->EndPos = end;
267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL IsExist() const
270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return this->BeginPos != this->EndPos;
272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL operator != (const CPVT_WordRange & wr) const
275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return wr.BeginPos != this->BeginPos || wr.EndPos != this->EndPos;
277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordPlace BeginPos,EndPos;
280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ------------------------- CFX_Edit_Undo ---------------------------- */
283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_Edit_Undo
285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit_Undo(FX_INT32 nBufsize = 10000);
288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual ~CFX_Edit_Undo();
289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									Undo();
291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									Redo();
292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									AddItem(IFX_Edit_UndoItem* pItem);
294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									CanUndo() const;
296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									CanRedo() const;
297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									IsModified() const;
298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									IsWorking() const;
299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									Reset();
301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	IFX_Edit_UndoItem*						GetItem(FX_INT32 nIndex);
303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32								GetItemCount(){return m_UndoItemStack.GetSize();}
304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32								GetCurUndoPos(){return m_nCurUndoPos;}
305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetBufSize(FX_INT32 nSize){m_nBufSize = nSize;}
308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32								GetBufSize(){return m_nBufSize;}
309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									RemoveHeads();
311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									RemoveTails();
312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ArrayTemplate<IFX_Edit_UndoItem*>	m_UndoItemStack;
315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32								m_nCurUndoPos;
317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32								m_nBufSize;
318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									m_bModified;
319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									m_bVirgin;
320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									m_bWorking;
321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_Edit_UndoItem : public IFX_Edit_UndoItem
324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit_UndoItem() : m_bFirst(TRUE), m_bLast(TRUE) {}
327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual ~CFX_Edit_UndoItem(){}
328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual CFX_WideString					GetUndoTitle() {return L"";}
330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual void							Release(){delete this;}
331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetFirst(FX_BOOL bFirst){m_bFirst = bFirst;}
334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									IsFirst(){return m_bFirst;}
335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetLast(FX_BOOL bLast){m_bLast = bLast;}
336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									IsLast(){return m_bLast;}
337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									m_bFirst;
340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									m_bLast;
341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_Edit_GroupUndoItem : public IFX_Edit_UndoItem
344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit_GroupUndoItem(const CFX_WideString& sTitle);
347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual ~CFX_Edit_GroupUndoItem();
348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									AddUndoItem(CFX_Edit_UndoItem* pUndoItem);
350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									UpdateItems();
351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual void							Undo();
354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual void							Redo();
355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual CFX_WideString					GetUndoTitle();
356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual void							Release();
357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString							m_sTitle;
360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ArrayTemplate<CFX_Edit_UndoItem*>	m_Items;
361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ------------------------- CFX_Edit_UndoItem derived classes ---------------------------- */
364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFXEU_InsertWord : public CFX_Edit_UndoItem
366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFXEU_InsertWord(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace,
369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_WORD word, FX_INT32 charset, const CPVT_WordProps * pWordProps);
370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual ~CFXEU_InsertWord();
371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						Redo();
373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						Undo();
374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit*					m_pEdit;
377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordPlace				m_wpOld;
379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordPlace				m_wpNew;
380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_WORD						m_Word;
381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32					m_nCharset;
382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordProps				m_WordProps;
383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFXEU_InsertReturn : public CFX_Edit_UndoItem
386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFXEU_InsertReturn(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace,
389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							 const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps);
390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual ~CFXEU_InsertReturn();
391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						Redo();
393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						Undo();
394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit *					m_pEdit;
397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordPlace				m_wpOld;
399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordPlace				m_wpNew;
400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_SecProps				m_SecProps;
401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordProps				m_WordProps;
402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFXEU_Backspace : public CFX_Edit_UndoItem
405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFXEU_Backspace(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace,
408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						FX_WORD word, FX_INT32 charset,
409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						const CPVT_SecProps & SecProps, const CPVT_WordProps & WordProps);
410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual ~CFXEU_Backspace();
411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						Redo();
413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						Undo();
414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit *					m_pEdit;
417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordPlace				m_wpOld;
419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordPlace				m_wpNew;
420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_WORD						m_Word;
421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32					m_nCharset;
422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_SecProps				m_SecProps;
423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordProps				m_WordProps;
424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFXEU_Delete : public CFX_Edit_UndoItem
427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFXEU_Delete(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace,
430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						FX_WORD word, FX_INT32 charset,
431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						const CPVT_SecProps & SecProps, const CPVT_WordProps & WordProps, FX_BOOL bSecEnd);
432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual ~CFXEU_Delete();
433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						Redo();
435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						Undo();
436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit *					m_pEdit;
439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordPlace				m_wpOld;
441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordPlace				m_wpNew;
442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_WORD						m_Word;
443ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32					m_nCharset;
444ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_SecProps				m_SecProps;
445ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordProps				m_WordProps;
446ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL						m_bSecEnd;
447ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
448ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFXEU_Clear : public CFX_Edit_UndoItem
450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
451ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFXEU_Clear(CFX_Edit * pEdit, const CPVT_WordRange & wrSel, const CFX_WideString & swText);
453ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual ~CFXEU_Clear();
454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
455ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						Redo();
456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						Undo();
457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
459ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit*					m_pEdit;
460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordRange				m_wrSel;
462ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString				m_swText;
463ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
464ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
465ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFXEU_ClearRich : public CFX_Edit_UndoItem
466ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
467ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
468ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFXEU_ClearRich(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace,
469ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						const CPVT_WordRange & wrSel,
470ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					   FX_WORD word, FX_INT32 charset,
471ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					   const CPVT_SecProps & SecProps, const CPVT_WordProps & WordProps);
472ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual ~CFXEU_ClearRich();
473ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
474ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						Redo();
475ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						Undo();
476ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
477ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
478ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit *					m_pEdit;
479ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
480ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordPlace				m_wpOld;
481ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordPlace				m_wpNew;
482ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordRange				m_wrSel;
483ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_WORD						m_Word;
484ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32					m_nCharset;
485ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_SecProps				m_SecProps;
486ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordProps				m_WordProps;
487ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
488ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
489ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFXEU_InsertText : public CFX_Edit_UndoItem
490ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
491ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
492ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFXEU_InsertText(CFX_Edit * pEdit, const CPVT_WordPlace & wpOldPlace, const CPVT_WordPlace & wpNewPlace,
493ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						   const CFX_WideString & swText, FX_INT32 charset,
494ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						   const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps);
495ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual ~CFXEU_InsertText();
496ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
497ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						Redo();
498ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						Undo();
499ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
500ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
501ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit *					m_pEdit;
502ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
503ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordPlace				m_wpOld;
504ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordPlace				m_wpNew;
505ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString				m_swText;
506ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32					m_nCharset;
507ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_SecProps				m_SecProps;
508ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordProps				m_WordProps;
509ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
510ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
511ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFXEU_SetSecProps : public CFX_Edit_UndoItem
512ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
513ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
514ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFXEU_SetSecProps(CFX_Edit * pEdit, const CPVT_WordPlace & place, EDIT_PROPS_E ep,
515ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		const CPVT_SecProps & oldsecprops, const CPVT_WordProps & oldwordprops,
516ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		const CPVT_SecProps & newsecprops, const CPVT_WordProps & newwordprops, const CPVT_WordRange & range);
517ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual ~CFXEU_SetSecProps();
518ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
519ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						Redo();
520ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						Undo();
521ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
522ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
523ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit *					m_pEdit;
524ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordPlace				m_wpPlace;
525ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordRange				m_wrPlace;
526ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	EDIT_PROPS_E				m_eProps;
527ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
528ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_SecProps				m_OldSecProps;
529ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_SecProps				m_NewSecProps;
530ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordProps				m_OldWordProps;
531ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordProps				m_NewWordProps;
532ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
533ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
534ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFXEU_SetWordProps : public CFX_Edit_UndoItem
535ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
536ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
537ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFXEU_SetWordProps(CFX_Edit * pEdit, const CPVT_WordPlace & place, EDIT_PROPS_E ep,
538ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		const CPVT_WordProps & oldprops, const CPVT_WordProps & newprops, const CPVT_WordRange & range);
539ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual ~CFXEU_SetWordProps();
540ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
541ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						Redo();
542ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						Undo();
543ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
544ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
545ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit *					m_pEdit;
546ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordPlace				m_wpPlace;
547ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordRange				m_wrPlace;
548ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	EDIT_PROPS_E				m_eProps;
549ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
550ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordProps				m_OldWordProps;
551ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordProps				m_NewWordProps;
552ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
553ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
554ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ------------------------- CFX_Edit ---------------------------- */
555ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
556ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_Edit : public IFX_Edit
557ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
558ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	friend class CFX_Edit_Iterator;
559ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	friend class CFXEU_InsertWord;
560ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	friend class CFXEU_InsertReturn;
561ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	friend class CFXEU_Backspace;
562ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	friend class CFXEU_Delete;
563ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	friend class CFXEU_Clear;
564ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	friend class CFXEU_ClearRich;
565ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	friend class CFXEU_SetSecProps;
566ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	friend class CFXEU_SetWordProps;
567ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	friend class CFXEU_InsertText;
568ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
569ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
570ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit(IPDF_VariableText * pVT);
571ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual ~CFX_Edit();
572ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
573ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetFontMap(IFX_Edit_FontMap * pFontMap);
574ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetVTProvider(IPDF_VariableText_Provider* pProvider);
575ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetNotify(IFX_Edit_Notify * pNotify);
576ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetOprNotify(IFX_Edit_OprNotify* pOprNotify);
577ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	IFX_Edit_Iterator*						GetIterator();
578ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	IPDF_VariableText *						GetVariableText();
579ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	IFX_Edit_FontMap*						GetFontMap();
580ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
581ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									Initialize();
582ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetPlateRect(const CPDF_Rect & rect, FX_BOOL bPaint = TRUE);
583ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetScrollPos(const CPDF_Point & point);
584ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
585ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetAlignmentH(FX_INT32 nFormat = 0, FX_BOOL bPaint = TRUE);
586ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetAlignmentV(FX_INT32 nFormat = 0, FX_BOOL bPaint = TRUE);
587ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetPasswordChar(FX_WORD wSubWord = '*', FX_BOOL bPaint = TRUE);
588ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetLimitChar(FX_INT32 nLimitChar = 0, FX_BOOL bPaint = TRUE);
589ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetCharArray(FX_INT32 nCharArray = 0, FX_BOOL bPaint = TRUE);
590ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetCharSpace(FX_FLOAT fCharSpace = 0.0f, FX_BOOL bPaint = TRUE);
591ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetHorzScale(FX_INT32 nHorzScale = 100, FX_BOOL bPaint = TRUE);
592ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetLineLeading(FX_FLOAT fLineLeading, FX_BOOL bPaint = TRUE);
593ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetMultiLine(FX_BOOL bMultiLine = TRUE, FX_BOOL bPaint = TRUE);
594ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetAutoReturn(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE);
595ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetAutoFontSize(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE);
596ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetAutoScroll(FX_BOOL bAuto = TRUE, FX_BOOL bPaint = TRUE);
597ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetFontSize(FX_FLOAT fFontSize, FX_BOOL bPaint = TRUE);
598ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetTextOverflow(FX_BOOL bAllowed = FALSE, FX_BOOL bPaint = TRUE);
599ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
600ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									IsRichText() const;
601ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetRichText(FX_BOOL bRichText = TRUE, FX_BOOL bPaint = TRUE);
602ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									SetRichFontSize(FX_FLOAT fFontSize);
603ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									SetRichFontIndex(FX_INT32 nFontIndex);
604ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									SetRichTextColor(FX_COLORREF dwColor);
605ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									SetRichTextScript(FX_INT32 nScriptType);
606ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									SetRichTextBold(FX_BOOL bBold = TRUE);
607ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									SetRichTextItalic(FX_BOOL bItalic = TRUE);
608ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									SetRichTextUnderline(FX_BOOL bUnderline = TRUE);
609ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									SetRichTextCrossout(FX_BOOL bCrossout = TRUE);
610ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									SetRichTextCharSpace(FX_FLOAT fCharSpace);
611ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									SetRichTextHorzScale(FX_INT32 nHorzScale = 100);
612ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									SetRichTextLineLeading(FX_FLOAT fLineLeading);
613ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									SetRichTextLineIndent(FX_FLOAT fLineIndent);
614ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									SetRichTextAlignment(FX_INT32 nAlignment);
615ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
616ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									OnMouseDown(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl);
617ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									OnMouseMove(const CPDF_Point & point,FX_BOOL bShift,FX_BOOL bCtrl);
618ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									OnVK_UP(FX_BOOL bShift,FX_BOOL bCtrl);
619ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									OnVK_DOWN(FX_BOOL bShift,FX_BOOL bCtrl);
620ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									OnVK_LEFT(FX_BOOL bShift,FX_BOOL bCtrl);
621ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									OnVK_RIGHT(FX_BOOL bShift,FX_BOOL bCtrl);
622ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									OnVK_HOME(FX_BOOL bShift,FX_BOOL bCtrl);
623ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									OnVK_END(FX_BOOL bShift,FX_BOOL bCtrl);
624ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
625ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetText(FX_LPCWSTR text,FX_INT32 charset = DEFAULT_CHARSET,
626ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov													const CPVT_SecProps * pSecProps = NULL,const CPVT_WordProps * pWordProps = NULL);
627ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									InsertWord(FX_WORD word, FX_INT32 charset = DEFAULT_CHARSET, const CPVT_WordProps * pWordProps = NULL);
628ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									InsertReturn(const CPVT_SecProps * pSecProps = NULL,const CPVT_WordProps * pWordProps = NULL);
629ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									Backspace();
630ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									Delete();
631ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									Clear();
632ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									Empty();
633ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									InsertText(FX_LPCWSTR text, FX_INT32 charset = DEFAULT_CHARSET,
634ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov													const CPVT_SecProps * pSecProps = NULL,const CPVT_WordProps * pWordProps = NULL);
635ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									Redo();
636ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									Undo();
637ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordPlace							DoInsertText(const CPVT_WordPlace& place, FX_LPCWSTR text, FX_INT32 charset,
638ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov												const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps);
639ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32								GetCharSetFromUnicode(FX_WORD word, FX_INT32 nOldCharset);
640ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
641ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32								WordPlaceToWordIndex(const CPVT_WordPlace & place) const;
642ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordPlace							WordIndexToWordPlace(FX_INT32 index) const;
643ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
644ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordPlace							GetLineBeginPlace(const CPVT_WordPlace & place) const;
645ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordPlace							GetLineEndPlace(const CPVT_WordPlace & place) const;
646ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordPlace							GetSectionBeginPlace(const CPVT_WordPlace & place) const;
647ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordPlace							GetSectionEndPlace(const CPVT_WordPlace & place) const;
648ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordPlace							SearchWordPlace(const CPDF_Point& point) const;
649ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
650ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32								GetCaret() const;
651ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordPlace							GetCaretWordPlace() const;
652ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString							GetSelText() const;
653ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString							GetText() const;
654ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_FLOAT								GetFontSize() const;
655ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_WORD									GetPasswordChar() const;
656ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Point								GetScrollPos() const;
657ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32								GetCharArray() const;
658ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Rect								GetPlateRect() const;
659ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Rect								GetContentRect() const;
660ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString							GetRangeText(const CPVT_WordRange & range) const;
661ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32								GetHorzScale() const;
662ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_FLOAT								GetCharSpace() const;
663ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32								GetTotalWords() const;
664ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32								GetTotalLines() const;
665ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
666ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetSel(FX_INT32 nStartChar,FX_INT32 nEndChar);
667ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									GetSel(FX_INT32 & nStartChar, FX_INT32 & nEndChar) const;
668ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
669ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
670ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SelectAll();
671ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SelectNone();
672ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetSel(const CPVT_WordPlace & begin,const CPVT_WordPlace & end);
673ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									IsSelected() const;
674ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
675ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									RearrangeAll();
676ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									RearrangePart(const CPVT_WordRange & range);
677ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									Paint();
678ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									ScrollToCaret();
679ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetScrollInfo();
680ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetScrollPosX(FX_FLOAT fx);
681ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetScrollPosY(FX_FLOAT fy);
682ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetScrollLimit();
683ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetContentChanged();
684ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									EnableNotify(FX_BOOL bNotify);
685ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
686ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetText(FX_LPCWSTR text,FX_INT32 charset,
687ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov													const CPVT_SecProps * pSecProps,const CPVT_WordProps * pWordProps,FX_BOOL bAddUndo, FX_BOOL bPaint);
688ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									InsertWord(FX_WORD word, FX_INT32 charset, const CPVT_WordProps * pWordProps,FX_BOOL bAddUndo, FX_BOOL bPaint);
689ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									InsertReturn(const CPVT_SecProps * pSecProps,const CPVT_WordProps * pWordProps,FX_BOOL bAddUndo, FX_BOOL bPaint);
690ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									Backspace(FX_BOOL bAddUndo, FX_BOOL bPaint);
691ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									Delete(FX_BOOL bAddUndo, FX_BOOL bPaint);
692ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									Clear(FX_BOOL bAddUndo, FX_BOOL bPaint);
693ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									InsertText(FX_LPCWSTR text, FX_INT32 charset,
694ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov												const CPVT_SecProps * pSecProps,const CPVT_WordProps * pWordProps,FX_BOOL bAddUndo, FX_BOOL bPaint);
695ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									SetRichTextProps(EDIT_PROPS_E eProps,
696ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov												const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps);
697ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									SetSecProps(EDIT_PROPS_E eProps, const CPVT_WordPlace & place,
698ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov												const CPVT_SecProps * pSecProps, const CPVT_WordProps * pWordProps, const CPVT_WordRange & wr, FX_BOOL bAddUndo);
699ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									SetWordProps(EDIT_PROPS_E eProps, const CPVT_WordPlace & place,
700ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov												const CPVT_WordProps * pWordProps, const CPVT_WordRange & wr, FX_BOOL bAddUndo);
701ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									PaintSetProps(EDIT_PROPS_E eProps, const CPVT_WordRange & wr);
702ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									PaintInsertText(const CPVT_WordPlace & wpOld, const CPVT_WordPlace & wpNew);
703ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
704ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	inline CPDF_Point						VTToEdit(const CPDF_Point & point) const;
705ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	inline CPDF_Point						EditToVT(const CPDF_Point & point) const;
706ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	inline CPDF_Rect						VTToEdit(const CPDF_Rect & rect) const;
707ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	inline CPDF_Rect						EditToVT(const CPDF_Rect & rect) const;
708ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
709ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									EnableRefresh(FX_BOOL bRefresh);
710ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									Refresh(REFRESH_PLAN_E ePlan,const CPVT_WordRange * pRange1 = NULL,const CPVT_WordRange * pRange2 = NULL);
711ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									RefreshPushLineRects(const CPVT_WordRange & wr);
712ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									RefreshPushRandomRects(const CPVT_WordRange & wr);
713ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									RefreshWordRange(const CPVT_WordRange& wr);
714ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
715ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetCaret(FX_INT32 nPos);
716ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetCaret(const CPVT_WordPlace & place);
717ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetCaretInfo();
718ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetCaretOrigin();
719ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetCaretChange();
720ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
721ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordRange							GetWholeWordRange() const;
722ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordRange							GetVisibleWordRange() const;
723ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordRange							GetLatinWordsRange(const CPVT_WordPlace & place) const;
724ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordRange							CombineWordRange(const CPVT_WordRange & wr1, const CPVT_WordRange & wr2);
725ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordRange							GetSelectWordRange() const;
726ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
727ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									EnableUndo(FX_BOOL bUndo);
728ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									EnableOprNotify(FX_BOOL bNotify);
729ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
730ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									IsTextFull() const;
731ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									IsTextOverflow() const;
732ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									CanUndo() const;
733ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									CanRedo() const;
734ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									IsModified() const;
735ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
736ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									BeginGroupUndo(const CFX_WideString& sTitle);
737ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									EndGroupUndo();
738ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									AddEditUndoItem(CFX_Edit_UndoItem* pEditUndoItem);
739ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									AddUndoItem(IFX_Edit_UndoItem* pUndoItem);
740ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
741ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetPageInfo(const CPVT_WordPlace& place);
742ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordPlace							SearchPageEndPlace(const CPVT_WordPlace& wpPageBegin, const CPDF_Point& point) const;
743ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_FLOAT								GetLineTop(const CPVT_WordPlace& place) const;
744ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_FLOAT								GetLineBottom(const CPVT_WordPlace& place) const;
745ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
746ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
747ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	IPDF_VariableText*						m_pVT;
748ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	IFX_Edit_Notify*						m_pNotify;
749ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	IFX_Edit_OprNotify*						m_pOprNotify;
750ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit_Provider*						m_pVTProvide;
751ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
752ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordPlace							m_wpCaret;
753ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPVT_WordPlace							m_wpOldCaret;
754ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit_Select							m_SelState;
755ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
756ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Point								m_ptScrollPos;
757ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Point								m_ptRefreshScrollPos;
758ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									m_bEnableScroll;
759ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	IFX_Edit_Iterator *						m_pIterator;
760ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit_Refresh						m_Refresh;
761ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Point								m_ptCaret;
762ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit_Undo							m_Undo;
763ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32								m_nAlignment;
764ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									m_bNotifyFlag;
765ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									m_bTextFullFlag;
766ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									m_bEnableOverflow;
767ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									m_bEnableRefresh;
768ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Rect								m_rcOldContent;
769ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									m_bEnableUndo;
770ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									m_bNotify;
771ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									m_bOprNotify;
772ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit_GroupUndoItem*					m_pGroupUndoItem;
773ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
774ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
775ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ------------------------- CFX_Edit_Iterator ---------------------------- */
776ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
777ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_Edit_Iterator : public IFX_Edit_Iterator
778ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
779ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
780ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit_Iterator(CFX_Edit * pEdit,IPDF_VariableText_Iterator * pVTIterator);
781ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual ~CFX_Edit_Iterator();
782ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
783ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									NextWord();
784ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									NextLine();
785ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									NextSection();
786ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									PrevWord();
787ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									PrevLine();
788ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									PrevSection();
789ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
790ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									GetWord(CPVT_Word & word) const;
791ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									GetLine(CPVT_Line & line) const;
792ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL									GetSection(CPVT_Section & section) const;
793ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetAt(FX_INT32 nWordIndex);
794ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void									SetAt(const CPVT_WordPlace & place);
795ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	const CPVT_WordPlace &					GetAt() const;
796ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	IFX_Edit*								GetEdit() const;
797ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
798ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
799ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit *								m_pEdit;
800ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	IPDF_VariableText_Iterator*				m_pVTIterator;
801ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
802ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
803ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_Edit_Provider : public IPDF_VariableText_Provider
804ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
805ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
806ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_Edit_Provider(IFX_Edit_FontMap* pFontMap);
807ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual ~CFX_Edit_Provider();
808ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
809ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	IFX_Edit_FontMap*			GetFontMap();
810ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
811ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32					GetCharWidth(FX_INT32 nFontIndex, FX_WORD word, FX_INT32 nWordStyle);
812ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32					GetTypeAscent(FX_INT32 nFontIndex);
813ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32					GetTypeDescent(FX_INT32 nFontIndex);
814ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32					GetWordFontIndex(FX_WORD word, FX_INT32 charset, FX_INT32 nFontIndex);
815ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32					GetDefaultFontIndex();
816ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL						IsLatinWord(FX_WORD word);
817ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
818ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
819ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	IFX_Edit_FontMap*			m_pFontMap;
820ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
821ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
822ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif //_FXET_EDIT_H_
823ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
824