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 _PWL_COMBOBOX_H_
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define _PWL_COMBOBOX_H_
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPWL_CBEdit : public CPWL_Edit
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPWL_CBEdit(){};
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual ~CPWL_CBEdit(){};
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass PWL_CLASS CPWL_CBListBox : public CPWL_ListBox
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPWL_CBListBox(){};
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual ~CPWL_CBListBox(){};
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual FX_BOOL				OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual FX_BOOL				OnKeyDown(FX_WORD nChar, FX_BOOL & bExit, FX_DWORD nFlag);
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual FX_BOOL				OnChar(FX_WORD nChar, FX_BOOL & bExit, FX_DWORD nFlag);
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PWL_COMBOBOX_BUTTON_WIDTH		13
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPWL_CBButton : public CPWL_Wnd
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPWL_CBButton(){};
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual ~CPWL_CBButton(){};
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual void				GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream);
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual void				DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual FX_BOOL				OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag);
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual FX_BOOL				OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass PWL_CLASS CPWL_ComboBox : public CPWL_Wnd
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPWL_ComboBox();
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	operator CPWL_Edit* ()		{return m_pEdit;}
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual CFX_ByteString		GetClassName() const;
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual void				OnCreate(PWL_CREATEPARAM & cp);
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual FX_BOOL				OnKeyDown(FX_WORD nChar, FX_DWORD nFlag);
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual FX_BOOL				OnChar(FX_WORD nChar, FX_DWORD nFlag);
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual void				OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, FX_INTPTR wParam = 0, FX_INTPTR lParam = 0);
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual void				CreateChildWnd(const PWL_CREATEPARAM & cp);
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual void				RePosChildWnd();
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual CPDF_Rect			GetFocusRect() const;
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual void				SetFocus();
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual void				KillFocus();
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL						IsModified() const;
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						SetFillerNotify(IPWL_Filler_Notify* pNotify);
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString				GetText() const;
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						SetText(FX_LPCWSTR text);
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						AddString(FX_LPCWSTR string);
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32					GetSelect() const;
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						SetSelect(FX_INT32 nItemIndex);
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						SetEditSel(FX_INT32 nStartChar,FX_INT32 nEndChar);
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						GetEditSel(FX_INT32 & nStartChar, FX_INT32 & nEndChar ) const;
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						Clear();
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						SelectAll();
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL						IsPopup() const;
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						SetSelectText();
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						CreateEdit(const PWL_CREATEPARAM & cp);
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						CreateButton(const PWL_CREATEPARAM & cp);
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						CreateListBox(const PWL_CREATEPARAM & cp);
94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						SetPopup(FX_BOOL bPopup);
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPWL_CBEdit*				m_pEdit;
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPWL_CBButton*				m_pButton;
100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPWL_CBListBox*				m_pList;
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL						m_bPopup;
103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Rect					m_rcOldWindow;
104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32					m_nPopupWhere;
105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_INT32					m_nSelectItem;
106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	IPWL_Filler_Notify*			m_pFillerNotify;
107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void							AttachFFLData(void* pData) {m_pFormFiller = pData;}
110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void*							m_pFormFiller;
112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif // !defined(AFX_PWL_COMBOBOX_H__9D6645F8_64AA_4806_94E8_95FDEDD39C17__INCLUDED_)
115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
116