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 74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#ifndef XFA_FWL_CFWL_LISTBOX_H_ 84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define XFA_FWL_CFWL_LISTBOX_H_ 94d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <memory> 114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <vector> 124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_edit.h" 144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_event.h" 154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_listbox.h" 164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_listitem.h" 174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_widget.h" 184d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "xfa/fwl/cfwl_widgetproperties.h" 194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define FWL_STYLEEXT_LTB_MultiSelection (1L << 0) 214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define FWL_STYLEEXT_LTB_LeftAlign (0L << 4) 224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define FWL_STYLEEXT_LTB_CenterAlign (1L << 4) 234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define FWL_STYLEEXT_LTB_RightAlign (2L << 4) 244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define FWL_STYLEEXT_LTB_AlignMask (3L << 4) 254d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define FWL_STYLEEXT_LTB_ShowScrollBarFocus (1L << 10) 264d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define FWL_ITEMSTATE_LTB_Selected (1L << 0) 274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define FWL_ITEMSTATE_LTB_Focused (1L << 1) 284d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 294d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CFWL_MessageKillFocus; 304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CFWL_MessageMouse; 314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CFWL_MessageMouseWheel; 324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CFX_DIBitmap; 334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmannclass CFWL_ListBox : public CFWL_Widget { 354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann public: 364d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann explicit CFWL_ListBox(const CFWL_App* pApp, 374d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann std::unique_ptr<CFWL_WidgetProperties> properties, 384d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_Widget* pOuter); 394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ~CFWL_ListBox() override; 404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 414d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann // CFWL_Widget 424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann FWL_Type GetClassID() const override; 434d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void Update() override; 4433357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann FWL_WidgetHit HitTest(const CFX_PointF& point) override; 45d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void DrawWidget(CXFA_Graphics* pGraphics, const CFX_Matrix& matrix) override; 464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) override; 474d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void OnProcessMessage(CFWL_Message* pMessage) override; 484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void OnProcessEvent(CFWL_Event* pEvent) override; 49d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void OnDrawWidget(CXFA_Graphics* pGraphics, 50d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const CFX_Matrix& matrix) override; 514d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 524d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int32_t CountItems(const CFWL_Widget* pWidget) const; 534d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_ListItem* GetItem(const CFWL_Widget* pWidget, int32_t nIndex) const; 544d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int32_t GetItemIndex(CFWL_Widget* pWidget, CFWL_ListItem* pItem); 554d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 56d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFWL_ListItem* AddString(const WideStringView& wsAdd); 574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void RemoveAt(int32_t iIndex); 584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void DeleteString(CFWL_ListItem* pItem); 594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void DeleteAll(); 604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int32_t CountSelItems(); 624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_ListItem* GetSelItem(int32_t nIndexSel); 634d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int32_t GetSelIndex(int32_t nIndex); 644d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void SetSelItem(CFWL_ListItem* hItem, bool bSelect); 654d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 66d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann float GetItemHeight() const { return m_fItemHeight; } 67d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann float CalcItemHeight(); 684d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 694d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann protected: 704d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_ListItem* GetListItem(CFWL_ListItem* hItem, uint32_t dwKeyCode); 714d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void SetSelection(CFWL_ListItem* hStart, CFWL_ListItem* hEnd, bool bSelected); 7233357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann CFWL_ListItem* GetItemAtPoint(const CFX_PointF& point); 734d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool ScrollToVisible(CFWL_ListItem* hItem); 744d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void InitVerticalScrollBar(); 754d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void InitHorizontalScrollBar(); 764d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool IsShowScrollBar(bool bVert); 774d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_ScrollBar* GetVertScrollBar() const { return m_pVertScrollBar.get(); } 784d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFX_RectF& GetRTClient() const { return m_rtClient; } 794d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 804d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann private: 814d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void SetSelectionDirect(CFWL_ListItem* hItem, bool bSelect); 824d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool IsMultiSelection() const; 834d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool IsItemSelected(CFWL_ListItem* hItem); 844d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void ClearSelection(); 854d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void SelectAll(); 864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_ListItem* GetFocusedItem(); 874d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void SetFocusItem(CFWL_ListItem* hItem); 88d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void DrawBkground(CXFA_Graphics* pGraphics, 894d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann IFWL_ThemeProvider* pTheme, 904d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFX_Matrix* pMatrix); 91d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void DrawItems(CXFA_Graphics* pGraphics, 924d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann IFWL_ThemeProvider* pTheme, 934d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFX_Matrix* pMatrix); 94d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void DrawItem(CXFA_Graphics* pGraphics, 954d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann IFWL_ThemeProvider* pTheme, 964d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_ListItem* hItem, 974d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann int32_t Index, 984d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFX_RectF& rtItem, 994d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFX_Matrix* pMatrix); 100d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann void DrawStatic(CXFA_Graphics* pGraphics, IFWL_ThemeProvider* pTheme); 1014d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_SizeF CalcSize(bool bAutoSize); 1024d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void UpdateItemSize(CFWL_ListItem* hItem, 1034d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_SizeF& size, 104d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann float fWidth, 105d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann float fHeight, 1064d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bAutoSize) const; 107d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann float GetMaxTextWidth(); 108d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann float GetScrollWidth(); 1094d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1104d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void OnFocusChanged(CFWL_Message* pMsg, bool bSet); 1114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void OnLButtonDown(CFWL_MessageMouse* pMsg); 1124d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void OnLButtonUp(CFWL_MessageMouse* pMsg); 1134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void OnMouseWheel(CFWL_MessageMouseWheel* pMsg); 1144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void OnKeyDown(CFWL_MessageKey* pMsg); 1154d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void OnVK(CFWL_ListItem* hItem, bool bShift, bool bCtrl); 1164d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool OnScroll(CFWL_ScrollBar* pScrollBar, 1174d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_EventScroll::Code dwCode, 118d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann float fPos); 1194d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1204d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_RectF m_rtClient; 1214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_RectF m_rtStatic; 1224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_RectF m_rtConent; 1234d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann std::unique_ptr<CFWL_ScrollBar> m_pHorzScrollBar; 1244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann std::unique_ptr<CFWL_ScrollBar> m_pVertScrollBar; 125d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann FDE_TextStyle m_dwTTOStyles; 126d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann FDE_TextAlignment m_iTTOAligns; 1274d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFWL_ListItem* m_hAnchor; 128d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann float m_fItemHeight; 129d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann float m_fScorllBarWidth; 1304d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool m_bLButtonDown; 1314d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann IFWL_ThemeProvider* m_pScrollBarTP; 1324d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann std::vector<std::unique_ptr<CFWL_ListItem>> m_ItemArray; 1334d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann}; 1344d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann 1354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#endif // XFA_FWL_CFWL_LISTBOX_H_ 136