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