14d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved.
24d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be
34d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// found in the LICENSE file.
44d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
54d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
64d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
7d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#ifndef FPDFSDK_PWL_CPWL_LIST_BOX_H_
8d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#define FPDFSDK_PWL_CPWL_LIST_BOX_H_
94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <memory>
114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
12d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "core/fxcrt/unowned_ptr.h"
13d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "fpdfsdk/pwl/cpwl_wnd.h"
144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
15d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannclass CPWL_ListCtrl;
164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CPWL_List_Notify;
174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CPWL_ListBox;
184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass IPWL_Filler_Notify;
194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannstruct CPVT_WordPlace;
204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CPWL_List_Notify {
224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann public:
234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  explicit CPWL_List_Notify(CPWL_ListBox* pList);
244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ~CPWL_List_Notify();
254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
26d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  void IOnSetScrollInfoY(float fPlateMin,
27d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                         float fPlateMax,
28d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                         float fContentMin,
29d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                         float fContentMax,
30d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                         float fSmallStep,
31d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                         float fBigStep);
32d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  void IOnSetScrollPosY(float fy);
334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void IOnInvalidateRect(CFX_FloatRect* pRect);
344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann private:
36d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  UnownedPtr<CPWL_ListBox> m_pList;
374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann};
384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CPWL_ListBox : public CPWL_Wnd {
404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann public:
414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CPWL_ListBox();
424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  ~CPWL_ListBox() override;
434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  // CPWL_Wnd
45d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  ByteString GetClassName() const override;
464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void OnCreated() override;
474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void OnDestroy() override;
484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void DrawThisAppearance(CFX_RenderDevice* pDevice,
49d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann                          const CFX_Matrix& mtUser2Device) override;
504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool OnKeyDown(uint16_t nChar, uint32_t nFlag) override;
514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool OnChar(uint16_t nChar, uint32_t nFlag) override;
5233357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  bool OnLButtonDown(const CFX_PointF& point, uint32_t nFlag) override;
5333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  bool OnLButtonUp(const CFX_PointF& point, uint32_t nFlag) override;
5433357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann  bool OnMouseMove(const CFX_PointF& point, uint32_t nFlag) override;
554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool OnMouseWheel(short zDelta,
5633357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann                    const CFX_PointF& point,
574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann                    uint32_t nFlag) override;
584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void KillFocus() override;
59d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  void SetScrollInfo(const PWL_SCROLL_INFO& info) override;
60d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  void SetScrollPosition(float pos) override;
61d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  void ScrollWindowVertically(float pos) override;
62d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  bool RePosChildWnd() override;
634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_FloatRect GetFocusRect() const override;
64d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  void SetFontSize(float fFontSize) override;
65d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  float GetFontSize() const override;
664d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
67d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  virtual WideString GetText() const;
684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
69d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  bool OnNotifySelectionChanged(bool bKeyDown, uint32_t nFlag);
704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
71d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  void AddString(const WideString& str);
724d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void SetTopVisibleIndex(int32_t nItemIndex);
734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void ScrollToListItem(int32_t nItemIndex);
744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void ResetContent();
754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void Reset();
764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void Select(int32_t nItemIndex);
774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void SetCaret(int32_t nItemIndex);
784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void SetHoverSel(bool bHoverSel);
794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t GetCount() const;
814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool IsMultipleSel() const;
824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t GetCaretIndex() const;
834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t GetCurSel() const;
844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool IsItemSelected(int32_t nItemIndex) const;
854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  int32_t GetTopVisibleIndex() const;
86d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  int32_t FindNext(int32_t nIndex, wchar_t nChar) const;
874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_FloatRect GetContentRect() const;
88d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  float GetFirstHeight() const;
894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  CFX_FloatRect GetListRect() const;
904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
914d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void SetFillerNotify(IPWL_Filler_Notify* pNotify) {
924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann    m_pFillerNotify = pNotify;
934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  }
944d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  void AttachFFLData(CFFL_FormFiller* pData) { m_pFormFiller = pData; }
964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann protected:
98d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  std::unique_ptr<CPWL_ListCtrl> m_pList;
994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  std::unique_ptr<CPWL_List_Notify> m_pListNotify;
1004d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool m_bMouseDown;
1014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann  bool m_bHoverSel;
102d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  UnownedPtr<IPWL_Filler_Notify> m_pFillerNotify;
1034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
1044d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann private:
105d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann  UnownedPtr<CFFL_FormFiller> m_pFormFiller;
1064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann};
1074d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann
108d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#endif  // FPDFSDK_PWL_CPWL_LIST_BOX_H_
109