1e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved.
2e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Use of this source code is governed by a BSD-style license that can be
3e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// found in the LICENSE file.
4e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
5e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
7e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#ifndef FPDFSDK_INCLUDE_PDFWINDOW_PWL_WND_H_
8e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define FPDFSDK_INCLUDE_PDFWINDOW_PWL_WND_H_
9e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
10e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../../../core/include/fxcrt/fx_basic.h"
11e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../../../core/include/fpdfdoc/fpdf_doc.h"
12e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../fx_systemhandler.h"
13e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
14e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPWL_MsgControl;
15e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPWL_ScrollBar;
16e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPWL_Timer;
17e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPWL_TimerHandler;
18e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPWL_Wnd;
19e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass IFX_Edit_FontMap;
20e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass IFX_SystemHandler;
21e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass IPWL_Provider;
22e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass IPWL_SpellCheck;
23e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
24e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#ifdef FX_READER_DLL
25e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	#ifdef PWL_EXPORT
26e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			#define PWL_CLASS		__declspec(dllexport)
27e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			#define PWL_FUNCTION	PWL_CLASS
28e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		#else
29e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			#define PWL_CLASS
30e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			#define PWL_FUNCTION
31e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	#endif
32e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#else
33e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	#define PWL_CLASS
34e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	#define PWL_FUNCTION
35e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#endif
36e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
37e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov//window styles
38e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PWS_CHILD							0x80000000L
39e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PWS_BORDER							0x40000000L
40e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PWS_BACKGROUND						0x20000000L
41e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PWS_HSCROLL							0x10000000L
42e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PWS_VSCROLL							0x08000000L
43e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PWS_VISIBLE							0x04000000L
44e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PWS_DISABLE							0x02000000L
45e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PWS_READONLY						0x01000000L
46e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PWS_AUTOFONTSIZE					0x00800000L
47e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PWS_AUTOTRANSPARENT					0x00400000L
48e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PWS_NOREFRESHCLIP					0x00200000L
49e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
50e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov//edit and label styles
51e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PES_MULTILINE						0x0001L
52e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PES_PASSWORD						0x0002L
53e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PES_LEFT							0x0004L
54e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PES_RIGHT							0x0008L
55e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PES_MIDDLE							0x0010L
56e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PES_TOP								0x0020L
57e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PES_BOTTOM							0x0040L
58e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PES_CENTER							0x0080L
59e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PES_CHARARRAY						0x0100L
60e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PES_AUTOSCROLL						0x0200L
61e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PES_AUTORETURN						0x0400L
62e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PES_UNDO							0x0800L
63e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PES_RICH							0x1000L
64e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PES_SPELLCHECK						0x2000L
65e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PES_TEXTOVERFLOW					0x4000L
66e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PES_NOREAD							0x8000L
67e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
68e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov//listbox styles
69e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PLBS_MULTIPLESEL					0x0001L
70e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PLBS_HOVERSEL						0x0008L
71e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
72e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov//combobox styles
73e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PCBS_ALLOWCUSTOMTEXT				0x0001L
74e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
75e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov//richedit styles
76e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PRES_MULTILINE						0x0001L
77e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PRES_AUTORETURN						0x0002L
78e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PRES_AUTOSCROLL						0x0004L
79e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PRES_SPELLCHECK						0x0008L
80e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PRES_UNDO							0x0100L
81e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PRES_MULTIPAGES						0x0200L
82e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PRES_TEXTOVERFLOW					0x0400L
83e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
84e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov//border style
85e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PBS_SOLID							0
86e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PBS_DASH							1
87e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PBS_BEVELED							2
88e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PBS_INSET							3
89e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PBS_UNDERLINED						4
90e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PBS_SHADOW							5
91e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
92e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov//notification messages
93e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PNM_ADDCHILD						0x00000000L
94e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PNM_REMOVECHILD						0x00000001L
95e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PNM_SETSCROLLINFO					0x00000002L
96e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PNM_SETSCROLLPOS					0x00000003L
97e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PNM_SCROLLWINDOW					0x00000004L
98e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PNM_LBUTTONDOWN						0x00000005L
99e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PNM_LBUTTONUP						0x00000006L
100e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PNM_MOUSEMOVE						0x00000007L
101e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define	PNM_NOTERESET						0x00000008L
102e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PNM_SETCARETINFO					0x00000009L
103e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PNM_SELCHANGED						0x0000000AL
104e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define	PNM_NOTEEDITCHANGED					0x0000000BL
105e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
106e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PWL_CLASSNAME_EDIT					"CPWL_Edit"
107e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
108e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovstruct CPWL_Dash
109e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
110e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Dash(FX_INT32 dash, FX_INT32 gap, FX_INT32 phase) : nDash(dash), nGap(gap), nPhase(phase)
111e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{}
112e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
113e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32			nDash;
114e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32			nGap;
115e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32			nPhase;
116e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
117e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
118e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovstruct PWL_CLASS CPWL_Color
119e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
120e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Color(FX_INT32 type = COLORTYPE_TRANSPARENT, FX_FLOAT color1 = 0.0f, FX_FLOAT color2 = 0.0f, FX_FLOAT color3 = 0.0f, FX_FLOAT color4 = 0.0f)
121e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		: nColorType(type), fColor1(color1), fColor2(color2), fColor3(color3), fColor4(color4)
122e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{}
123e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
124e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Color(FX_INT32 r, FX_INT32 g, FX_INT32 b) :
125e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nColorType(COLORTYPE_RGB), fColor1(r/255.0f), fColor2(g/255.0f), fColor3(b/255.0f), fColor4(0)
126e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{}
127e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
128e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void ConvertColorType(FX_INT32 nColorType);
129e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
130e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	/*
131e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	COLORTYPE_TRANSPARENT
132e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	COLORTYPE_RGB
133e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	COLORTYPE_CMYK
134e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	COLORTYPE_GRAY
135e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	*/
136e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32					nColorType;
137e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_FLOAT					fColor1,fColor2,fColor3,fColor4;
138e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
139e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
140e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovinline FX_BOOL operator == (const CPWL_Color &c1, const CPWL_Color &c2)
141e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
142e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return c1.nColorType == c2.nColorType &&
143e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		c1.fColor1 - c2.fColor1 < 0.0001 && c1.fColor1 - c2.fColor1 > -0.0001 &&
144e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		c1.fColor2 - c2.fColor2 < 0.0001 && c1.fColor2 - c2.fColor2 > -0.0001 &&
145e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		c1.fColor3 - c2.fColor3 < 0.0001 && c1.fColor3 - c2.fColor3 > -0.0001 &&
146e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		c1.fColor4 - c2.fColor4 < 0.0001 && c1.fColor4 - c2.fColor4 > -0.0001;
147e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
148e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
149e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovinline FX_BOOL operator != (const CPWL_Color &c1, const CPWL_Color &c2)
150e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
151e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return !operator == (c1, c2);
152e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
153e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
154e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PWL_SCROLLBAR_WIDTH					12.0f
155e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PWL_SCROLLBAR_BUTTON_WIDTH			9.0f
156e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PWL_SCROLLBAR_POSBUTTON_MINWIDTH	2.0f
157e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PWL_SCROLLBAR_TRANSPARANCY			150
158e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PWL_SCROLLBAR_BKCOLOR				CPWL_Color(COLORTYPE_RGB,220.0f/255.0f,220.0f/255.0f,220.0f/255.0f)
159e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PWL_DEFAULT_SELTEXTCOLOR			CPWL_Color(COLORTYPE_RGB,1,1,1)
160e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PWL_DEFAULT_SELBACKCOLOR			CPWL_Color(COLORTYPE_RGB,0,51.0f/255.0f,113.0f/255.0f)
161e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PWL_DEFAULT_BACKCOLOR				PWL_DEFAULT_SELTEXTCOLOR
162e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PWL_DEFAULT_TEXTCOLOR				CPWL_Color(COLORTYPE_RGB,0,0,0)
163e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PWL_DEFAULT_FONTSIZE				9.0f
164e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PWL_DEFAULT_BLACKCOLOR				CPWL_Color(COLORTYPE_GRAY,0)
165e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PWL_DEFAULT_WHITECOLOR				CPWL_Color(COLORTYPE_GRAY,1)
166e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PWL_DEFAULT_HEAVYGRAYCOLOR			CPWL_Color(COLORTYPE_GRAY,0.50)
167e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PWL_DEFAULT_LIGHTGRAYCOLOR			CPWL_Color(COLORTYPE_GRAY,0.75)
168e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PWL_TRIANGLE_HALFLEN				2.0f
169e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define	PWL_CBBUTTON_TRIANGLE_HALFLEN		3.0f
170e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define PWL_INVALIDATE_INFLATE				2
171e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
172e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass IPWL_SpellCheck
173e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
174e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic:
175e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        virtual ~IPWL_SpellCheck() { }
176e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual FX_BOOL							CheckWord(FX_LPCSTR sWord) = 0;
177e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual void							SuggestWords(FX_LPCSTR sWord, CFX_ByteStringArray & sSuggest) = 0;
178e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
179e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
180e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass IPWL_Provider
181e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
182e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic:
183e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        virtual ~IPWL_Provider() { }
184e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
185e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	//get a matrix which map user space to CWnd client space
186e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual CPDF_Matrix						GetWindowMatrix(void* pAttachedData) = 0;
187e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
188e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	/*
189e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	0 L"&Undo\tCtrl+Z"
190e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	1 L"&Redo\tCtrl+Shift+Z"
191e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	2 L"Cu&t\tCtrl+X"
192e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	3 L"&Copy\tCtrl+C"
193e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	4 L"&Paste\tCtrl+V"
194e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	5 L"&Delete"
195e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	6  L"&Select All\tCtrl+A"
196e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	*/
197e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual CFX_WideString					LoadPopupMenuString(FX_INT32 nIndex) = 0;
198e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
199e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
200e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass IPWL_FocusHandler
201e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
202e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic:
203e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        virtual ~IPWL_FocusHandler() { }
204e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual void							OnSetFocus(CPWL_Wnd* pWnd) = 0;
205e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual void							OnKillFocus(CPWL_Wnd* pWnd) = 0;
206e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
207e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
208e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovstruct PWL_CREATEPARAM
209e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
210e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic:
211e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	PWL_CREATEPARAM() : rcRectWnd(0,0,0,0),
212e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pSystemHandler(NULL),
213e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pFontMap(NULL),
214e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pProvider(NULL),
215e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pFocusHandler(NULL),
216e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		dwFlags(0),
217e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		sBackgroundColor(),
218e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		hAttachedWnd(NULL),
219e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pSpellCheck(NULL),
220e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nBorderStyle(PBS_SOLID),
221e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		dwBorderWidth(1),
222e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		sBorderColor(),
223e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		sTextColor(),
224e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		sTextStrokeColor(),
225e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nTransparency(255),
226e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		fFontSize(PWL_DEFAULT_FONTSIZE),
227e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		sDash(3,0,0),
228e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pAttachedData(NULL),
229e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pParentWnd(NULL),
230e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pMsgControl(NULL),
231e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		eCursorType(FXCT_ARROW),
232e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		mtChild(1,0,0,1,0,0)
233e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
234e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
235e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
236e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect				rcRectWnd;				//required
237e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	IFX_SystemHandler*		pSystemHandler;			//required
238e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	IFX_Edit_FontMap*		pFontMap;				//required for text window
239e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	IPWL_Provider*			pProvider;				//required for self coordinate
240e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	IPWL_FocusHandler*		pFocusHandler;			//optional
241e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_DWORD				dwFlags;				//optional
242e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Color				sBackgroundColor;		//optional
243e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_HWND					hAttachedWnd;			//required for no-reader framework
244e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	IPWL_SpellCheck*		pSpellCheck;			//required for spellchecking
245e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32				nBorderStyle;			//optional
246e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32				dwBorderWidth;			//optional
247e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Color				sBorderColor;			//optional
248e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Color				sTextColor;				//optional
249e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Color				sTextStrokeColor;		//optional
250e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32				nTransparency;			//optional
251e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_FLOAT				fFontSize;				//optional
252e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Dash				sDash;					//optional
253e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void*					pAttachedData;			//optional
254e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Wnd*				pParentWnd;				//ignore
255e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_MsgControl*		pMsgControl;			//ignore
256e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32				eCursorType;			//ignore
257e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Matrix				mtChild;				//ignore
258e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
259e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
260e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass CPWL_Timer
261e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
262e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic:
263e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Timer(CPWL_TimerHandler* pAttached, IFX_SystemHandler* pSystemHandler);
264e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual ~CPWL_Timer();
265e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
266e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32							SetPWLTimer(FX_INT32 nElapse);
267e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void								KillPWLTimer();
268e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	static void 						TimerProc(FX_INT32 idEvent);
269e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
270e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovprivate:
271e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32							m_nTimerID;
272e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_TimerHandler*					m_pAttached;
273e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	IFX_SystemHandler*					m_pSystemHandler;
274e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
275e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
276e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass PWL_CLASS CPWL_TimerHandler
277e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
278e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic:
279e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_TimerHandler();
280e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual ~CPWL_TimerHandler();
281e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
282e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void								BeginTimer(FX_INT32 nElapse);
283e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void								EndTimer();
284e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual void						TimerProc();
285e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual IFX_SystemHandler*			GetSystemHandler() const = 0;
286e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
287e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovprivate:
288e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Timer*							m_pTimer;
289e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
290e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
291e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovclass PWL_CLASS CPWL_Wnd : public CPWL_TimerHandler
292e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
293e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	friend class CPWL_MsgControl;
294e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovpublic:
295e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Wnd();
296e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual ~CPWL_Wnd();
297e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
298e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void							Create(const PWL_CREATEPARAM & cp);
299e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual CFX_ByteString			GetClassName() const;
300e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void							Destroy();
301e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void							Move(const CPDF_Rect & rcNew,FX_BOOL bReset,FX_BOOL bRefresh);
302e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual void					InvalidateRect(CPDF_Rect* pRect = NULL);
303e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
304e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void							GetAppearanceStream(CFX_ByteString & sAppStream);
305e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void							DrawAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
306e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
307e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual FX_BOOL					OnKeyDown(FX_WORD nChar, FX_DWORD nFlag);
308e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual FX_BOOL					OnKeyUp(FX_WORD nChar, FX_DWORD nFlag);
309e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual FX_BOOL					OnChar(FX_WORD nChar, FX_DWORD nFlag);
310e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual FX_BOOL					OnLButtonDblClk(const CPDF_Point & point, FX_DWORD nFlag);
311e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual FX_BOOL					OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag);
312e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual FX_BOOL					OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
313e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual FX_BOOL					OnMButtonDblClk(const CPDF_Point & point, FX_DWORD nFlag);
314e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual FX_BOOL					OnMButtonDown(const CPDF_Point & point, FX_DWORD nFlag);
315e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual FX_BOOL					OnMButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
316e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual FX_BOOL					OnRButtonDblClk(const CPDF_Point & point, FX_DWORD nFlag);
317e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual FX_BOOL					OnRButtonDown(const CPDF_Point & point, FX_DWORD nFlag);
318e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual FX_BOOL					OnRButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
319e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual FX_BOOL					OnMouseMove(const CPDF_Point & point, FX_DWORD nFlag);
320e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual FX_BOOL					OnMouseWheel(short zDelta, const CPDF_Point & point, FX_DWORD nFlag);
321e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
322e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual void					SetFocus();
323e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual void					KillFocus();
324e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void							SetCapture();
325e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void							ReleaseCapture();
326e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
327e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual void					OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, FX_INTPTR wParam = 0, FX_INTPTR lParam = 0);
328e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual void					SetTextColor(const CPWL_Color & color);
329e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual void					SetTextStrokeColor(const CPWL_Color & color);
330e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual void					SetVisible(FX_BOOL bVisible);
331e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
332e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual CPDF_Rect				GetFocusRect() const;
333e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual CPWL_Color				GetBackgroundColor() const;
334e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual CPWL_Color				GetBorderColor() const;
335e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual CPWL_Color				GetTextColor() const;
336e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual CPWL_Color				GetTextStrokeColor() const;
337e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual FX_FLOAT				GetFontSize() const;
338e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual FX_INT32				GetInnerBorderWidth() const;
339e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual CPWL_Color				GetBorderLeftTopColor(FX_INT32 nBorderStyle) const;
340e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual CPWL_Color				GetBorderRightBottomColor(FX_INT32 nBorderStyle) const;
341e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
342e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual FX_BOOL					IsModified() const {return FALSE;}
343e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
344e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual void					SetFontSize(FX_FLOAT fFontSize);
345e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
346e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void							SetBackgroundColor(const CPWL_Color & color);
347e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void							SetBorderColor(const CPWL_Color & color);
348e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void							SetBorderWidth(FX_INT32 nBorderWidth);
349e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void							SetClipRect(const CPDF_Rect & rect);
350e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void							SetBorderStyle(FX_INT32 eBorderStyle);
351e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void							SetBorderDash(const CPWL_Dash & sDash);
352e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
353e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect						GetOriginWindowRect() const;
354e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual CPDF_Rect				GetWindowRect() const;
355e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual CPDF_Rect				GetClientRect() const;
356e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Point						GetCenterPoint() const;
357e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect						GetClientCenterSquare() const;
358e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect						GetWindowCenterSquare() const;
359e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32						GetBorderWidth() const;
360e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL							IsVisible() const {return m_bVisible;}
361e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL							HasFlag(FX_DWORD dwFlags) const;
362e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void							AddFlag(FX_DWORD dwFlags);
363e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void							RemoveFlag(FX_DWORD dwFlags);
364e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect						GetClipRect() const;
365e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Wnd*						GetParentWindow() const;
366e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32						GetBorderStyle() const;
367e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Dash						GetBorderDash() const;
368e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void*							GetAttachedData() const;
369e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
370e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL							WndHitTest(const CPDF_Point & point) const;
371e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL							ClientHitTest(const CPDF_Point & point) const;
372e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL							IsCaptureMouse() const;
373e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
374e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	const CPWL_Wnd*					GetFocused() const;
375e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL							IsFocused() const;
376e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL							IsReadOnly() const;
377e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_ScrollBar*					GetVScrollBar() const;
378e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
379e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	IFX_Edit_FontMap*				GetFontMap() const;
380e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	IPWL_Provider*					GetProvider() const;
381e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual IFX_SystemHandler*		GetSystemHandler() const;
382e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	IPWL_FocusHandler*				GetFocusHandler() const;
383e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
384e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32						GetTransparency();
385e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void							SetTransparency(FX_INT32 nTransparency);
386e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
387e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Matrix						GetChildToRoot() const;
388e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Matrix						GetChildMatrix() const;
389e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void							SetChildMatrix(const CPDF_Matrix& mt);
390e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Matrix						GetWindowMatrix() const;
391e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
392e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual CPDF_Point				ChildToParent(const CPDF_Point& point) const;
393e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual CPDF_Rect				ChildToParent(const CPDF_Rect& rect) const;
394e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual CPDF_Point				ParentToChild(const CPDF_Point& point) const;
395e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual CPDF_Rect				ParentToChild(const CPDF_Rect& rect) const;
396e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
397e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	//those methods only implemented by listctrl item
398e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual FX_FLOAT				GetItemHeight(FX_FLOAT fLimitWidth) {return 0;}
399e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual FX_FLOAT				GetItemLeftMargin() {return 0;}
400e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual FX_FLOAT				GetItemRightMargin() {return 0;}
401e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
402e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void							EnableWindow(FX_BOOL bEnable);
403e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL							IsEnabled();
404e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual void					SetCursor();
405e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
406e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovprotected:
407e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual void					CreateChildWnd(const PWL_CREATEPARAM & cp);
408e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual void					RePosChildWnd();
409e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void							GetAppearanceStream(CFX_ByteTextBuf & sAppStream);
410e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual void					GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream);
411e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual void					GetChildAppearanceStream(CFX_ByteTextBuf & sAppStream);
412e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
413e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual void					DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
414e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual void					DrawChildAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
415e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
416e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual void					OnCreate(PWL_CREATEPARAM & cp);
417e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual void					OnCreated();
418e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual void					OnDestroy();
419e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
420e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual void					OnSetFocus();
421e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual void					OnKillFocus();
422e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
423e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual void					OnEnabled();
424e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	virtual void					OnDisabled();
425e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
426e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void							SetNotifyFlag(FX_BOOL bNotifying = TRUE){m_bNotifying = bNotifying;};
427e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
428e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL							IsValid() const;
429e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	PWL_CREATEPARAM					GetCreationParam() const;
430e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL							IsNotifying() const {return m_bNotifying;}
431e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
432e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void							InvalidateRectMove(const CPDF_Rect & rcOld, const CPDF_Rect & rcNew);
433e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
434e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void							PWLtoWnd(const CPDF_Point & point, FX_INT32& x, FX_INT32& y) const;
435e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_RECT							PWLtoWnd(const CPDF_Rect & rect) const;
436e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_HWND							GetAttachedHWnd() const;
437e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
438e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL							IsWndCaptureMouse(const CPWL_Wnd * pWnd) const;
439e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL							IsWndCaptureKeyboard(const CPWL_Wnd * pWnd) const;
440e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	const CPWL_Wnd*					GetRootWnd() const;
441e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
442e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL							IsCTRLpressed(FX_DWORD nFlag) const;
443e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL							IsSHIFTpressed(FX_DWORD nFlag) const;
444e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL							IsALTpressed(FX_DWORD nFlag) const;
445e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL							IsINSERTpressed(FX_DWORD nFlag) const;
446e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
447e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovprivate:
448e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void							AddChild(CPWL_Wnd * pWnd);
449e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void							RemoveChild(CPWL_Wnd * pWnd);
450e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
451e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void							CreateScrollBar(const PWL_CREATEPARAM & cp);
452e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void							CreateVScrollBar(const PWL_CREATEPARAM & cp);
453e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
454e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void							AjustStyle();
455e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void							CreateMsgControl();
456e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	void							DestroyMsgControl();
457e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
458e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_MsgControl*				GetMsgControl() const;
459e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
460e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovprotected:
461e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_ArrayTemplate<CPWL_Wnd*>	m_aChildren;
462e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
463e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovprivate:
464e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	PWL_CREATEPARAM					m_sPrivateParam;
465e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
466e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_ScrollBar*					m_pVScrollBar;
467e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
468e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect						m_rcWindow;
469e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect						m_rcClip;
470e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
471e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL							m_bCreated;
472e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL							m_bVisible;
473e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL							m_bNotifying;
474e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL							m_bEnabled;
475e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov};
476e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
477e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#endif  // FPDFSDK_INCLUDE_PDFWINDOW_PWL_WND_H_
478