1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 
7 #ifndef FPDFSDK_INCLUDE_PDFWINDOW_PWL_COMBOBOX_H_
8 #define FPDFSDK_INCLUDE_PDFWINDOW_PWL_COMBOBOX_H_
9 
10 #include "PWL_Edit.h"
11 #include "PWL_ListBox.h"
12 #include "PWL_Wnd.h"
13 
14 class CPWL_CBEdit : public CPWL_Edit
15 {
16 public:
CPWL_CBEdit()17 	CPWL_CBEdit(){};
~CPWL_CBEdit()18 	virtual ~CPWL_CBEdit(){};
19 };
20 
21 class PWL_CLASS CPWL_CBListBox : public CPWL_ListBox
22 {
23 public:
CPWL_CBListBox()24 	CPWL_CBListBox(){};
~CPWL_CBListBox()25 	virtual ~CPWL_CBListBox(){};
26 
27 public:
28 	virtual FX_BOOL				OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
29 
30 	FX_BOOL				OnKeyDownWithExit(FX_WORD nChar, FX_BOOL & bExit, FX_DWORD nFlag);
31 	FX_BOOL				OnCharWithExit(FX_WORD nChar, FX_BOOL & bExit, FX_DWORD nFlag);
32 };
33 
34 #define PWL_COMBOBOX_BUTTON_WIDTH		13
35 
36 class CPWL_CBButton : public CPWL_Wnd
37 {
38 public:
CPWL_CBButton()39 	CPWL_CBButton(){};
~CPWL_CBButton()40 	virtual ~CPWL_CBButton(){};
41 
42 public:
43 	virtual void				GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream);
44 	virtual void				DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
45 
46 	virtual FX_BOOL				OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag);
47 	virtual FX_BOOL				OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
48 
49 };
50 
51 class PWL_CLASS CPWL_ComboBox : public CPWL_Wnd
52 {
53 public:
54 	CPWL_ComboBox();
55 	operator CPWL_Edit* ()		{return m_pEdit;}
56 
57 public:
58 	virtual CFX_ByteString		GetClassName() const;
59 	virtual void				OnCreate(PWL_CREATEPARAM & cp);
60 
61 	virtual FX_BOOL				OnKeyDown(FX_WORD nChar, FX_DWORD nFlag);
62 	virtual FX_BOOL				OnChar(FX_WORD nChar, FX_DWORD nFlag);
63 
64 	virtual void				OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, FX_INTPTR wParam = 0, FX_INTPTR lParam = 0);
65 
66 	virtual void				CreateChildWnd(const PWL_CREATEPARAM & cp);
67 	virtual void				RePosChildWnd();
68 
69 	virtual CPDF_Rect			GetFocusRect() const;
70 
71 	virtual void				SetFocus();
72 	virtual void				KillFocus();
73 
74 	FX_BOOL						IsModified() const;
75 
76 public:
77 	void						SetFillerNotify(IPWL_Filler_Notify* pNotify);
78 
79 	CFX_WideString				GetText() const;
80 	void						SetText(FX_LPCWSTR text);
81 
82 	void						AddString(FX_LPCWSTR string);
83 	FX_INT32					GetSelect() const;
84 	void						SetSelect(FX_INT32 nItemIndex);
85 
86 	void						SetEditSel(FX_INT32 nStartChar,FX_INT32 nEndChar);
87 	void						GetEditSel(FX_INT32 & nStartChar, FX_INT32 & nEndChar ) const;
88 	void						Clear();
89 	void						SelectAll();
90 	FX_BOOL						IsPopup() const;
91 
92 	void						SetSelectText();
93 
94 private:
95 	void						CreateEdit(const PWL_CREATEPARAM & cp);
96 	void						CreateButton(const PWL_CREATEPARAM & cp);
97 	void						CreateListBox(const PWL_CREATEPARAM & cp);
98 
99 	void						SetPopup(FX_BOOL bPopup);
100 
101 private:
102 	CPWL_CBEdit*				m_pEdit;
103 	CPWL_CBButton*				m_pButton;
104 	CPWL_CBListBox*				m_pList;
105 
106 	FX_BOOL						m_bPopup;
107 	CPDF_Rect					m_rcOldWindow;
108 	FX_INT32					m_nPopupWhere;
109 	FX_INT32					m_nSelectItem;
110 	IPWL_Filler_Notify*			m_pFillerNotify;
111 
112 public:
AttachFFLData(void * pData)113 	void							AttachFFLData(void* pData) {m_pFormFiller = pData;}
114 private:
115 	void*							m_pFormFiller;
116 };
117 
118 #endif  // FPDFSDK_INCLUDE_PDFWINDOW_PWL_COMBOBOX_H_
119