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