OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "xfa/fwl/lightwidget/cfwl_listbox.h" | 7 #include "xfa/fwl/lightwidget/cfwl_listbox.h" |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 | 10 |
11 #include "third_party/base/stl_util.h" | 11 #include "third_party/base/stl_util.h" |
12 | 12 |
| 13 IFWL_ListBox* CFWL_ListBox::GetWidget() { |
| 14 return static_cast<IFWL_ListBox*>(m_pIface.get()); |
| 15 } |
| 16 |
| 17 const IFWL_ListBox* CFWL_ListBox::GetWidget() const { |
| 18 return static_cast<IFWL_ListBox*>(m_pIface.get()); |
| 19 } |
| 20 |
13 CFWL_ListBox* CFWL_ListBox::Create() { | 21 CFWL_ListBox* CFWL_ListBox::Create() { |
14 return new CFWL_ListBox; | 22 return new CFWL_ListBox; |
15 } | 23 } |
16 | 24 |
17 FWL_Error CFWL_ListBox::Initialize(const CFWL_WidgetProperties* pProperties) { | 25 FWL_Error CFWL_ListBox::Initialize(const CFWL_WidgetProperties* pProperties) { |
18 if (m_pIface) | 26 if (m_pIface) |
19 return FWL_Error::Indefinite; | 27 return FWL_Error::Indefinite; |
20 if (pProperties) { | 28 if (pProperties) { |
21 *m_pProperties = *pProperties; | 29 *m_pProperties = *pProperties; |
22 } | 30 } |
23 std::unique_ptr<IFWL_ListBox> pListBox(IFWL_ListBox::Create( | 31 std::unique_ptr<IFWL_ListBox> pListBox(IFWL_ListBox::Create( |
24 m_pProperties->MakeWidgetImpProperties(&m_ListBoxDP), nullptr)); | 32 m_pProperties->MakeWidgetImpProperties(&m_ListBoxDP), nullptr)); |
25 FWL_Error ret = pListBox->Initialize(); | 33 FWL_Error ret = pListBox->Initialize(); |
26 if (ret != FWL_Error::Succeeded) { | 34 if (ret != FWL_Error::Succeeded) { |
27 return ret; | 35 return ret; |
28 } | 36 } |
29 m_pIface = pListBox.release(); | 37 m_pIface = std::move(pListBox); |
30 CFWL_Widget::Initialize(); | 38 CFWL_Widget::Initialize(); |
31 return FWL_Error::Succeeded; | 39 return FWL_Error::Succeeded; |
32 } | 40 } |
33 | 41 |
34 FWL_Error CFWL_ListBox::AddDIBitmap(CFX_DIBitmap* pDIB, IFWL_ListItem* pItem) { | 42 FWL_Error CFWL_ListBox::AddDIBitmap(CFX_DIBitmap* pDIB, IFWL_ListItem* pItem) { |
35 static_cast<CFWL_ListItem*>(pItem)->m_pDIB = pDIB; | 43 static_cast<CFWL_ListItem*>(pItem)->m_pDIB = pDIB; |
36 return FWL_Error::Succeeded; | 44 return FWL_Error::Succeeded; |
37 } | 45 } |
38 | 46 |
39 IFWL_ListItem* CFWL_ListBox::AddString(const CFX_WideStringC& wsAdd, | 47 IFWL_ListItem* CFWL_ListBox::AddString(const CFX_WideStringC& wsAdd, |
40 FX_BOOL bSelect) { | 48 FX_BOOL bSelect) { |
41 std::unique_ptr<CFWL_ListItem> pItem(new CFWL_ListItem); | 49 std::unique_ptr<CFWL_ListItem> pItem(new CFWL_ListItem); |
42 pItem->m_dwStates = 0; | 50 pItem->m_dwStates = 0; |
43 pItem->m_wsText = wsAdd; | 51 pItem->m_wsText = wsAdd; |
44 pItem->m_dwStates = bSelect ? FWL_ITEMSTATE_LTB_Selected : 0; | 52 pItem->m_dwStates = bSelect ? FWL_ITEMSTATE_LTB_Selected : 0; |
45 m_ListBoxDP.m_ItemArray.push_back(std::move(pItem)); | 53 m_ListBoxDP.m_ItemArray.push_back(std::move(pItem)); |
46 return m_ListBoxDP.m_ItemArray.back().get(); | 54 return m_ListBoxDP.m_ItemArray.back().get(); |
47 } | 55 } |
48 | 56 |
49 FX_BOOL CFWL_ListBox::DeleteString(IFWL_ListItem* pItem) { | 57 FX_BOOL CFWL_ListBox::DeleteString(IFWL_ListItem* pItem) { |
50 int32_t nIndex = m_ListBoxDP.GetItemIndex(GetWidget(), pItem); | 58 int32_t nIndex = m_ListBoxDP.GetItemIndex(GetWidget(), pItem); |
51 if (nIndex < 0 || | 59 if (nIndex < 0 || |
52 static_cast<size_t>(nIndex) >= m_ListBoxDP.m_ItemArray.size()) { | 60 static_cast<size_t>(nIndex) >= m_ListBoxDP.m_ItemArray.size()) { |
53 return FALSE; | 61 return FALSE; |
54 } | 62 } |
55 int32_t iCount = m_ListBoxDP.CountItems(m_pIface); | 63 int32_t iCount = m_ListBoxDP.CountItems(m_pIface.get()); |
56 int32_t iSel = nIndex + 1; | 64 int32_t iSel = nIndex + 1; |
57 if (iSel >= iCount) { | 65 if (iSel >= iCount) { |
58 iSel = nIndex - 1; | 66 iSel = nIndex - 1; |
59 if (iSel < 0) { | 67 if (iSel < 0) { |
60 iSel = -1; | 68 iSel = -1; |
61 } | 69 } |
62 } | 70 } |
63 if (iSel >= 0) { | 71 if (iSel >= 0) { |
64 CFWL_ListItem* pSel = | 72 CFWL_ListItem* pSel = |
65 static_cast<CFWL_ListItem*>(m_ListBoxDP.GetItem(m_pIface, iSel)); | 73 static_cast<CFWL_ListItem*>(m_ListBoxDP.GetItem(m_pIface.get(), iSel)); |
66 pSel->m_dwStates |= FWL_ITEMSTATE_LTB_Selected; | 74 pSel->m_dwStates |= FWL_ITEMSTATE_LTB_Selected; |
67 } | 75 } |
68 m_ListBoxDP.m_ItemArray.erase(m_ListBoxDP.m_ItemArray.begin() + nIndex); | 76 m_ListBoxDP.m_ItemArray.erase(m_ListBoxDP.m_ItemArray.begin() + nIndex); |
69 return TRUE; | 77 return TRUE; |
70 } | 78 } |
71 | 79 |
72 void CFWL_ListBox::DeleteAll() { | 80 void CFWL_ListBox::DeleteAll() { |
73 m_ListBoxDP.m_ItemArray.clear(); | 81 m_ListBoxDP.m_ItemArray.clear(); |
74 } | 82 } |
75 | 83 |
76 int32_t CFWL_ListBox::CountSelItems() { | 84 int32_t CFWL_ListBox::CountSelItems() { |
77 if (!m_pIface) | 85 if (!GetWidget()) |
78 return 0; | 86 return 0; |
79 return static_cast<IFWL_ListBox*>(m_pIface)->CountSelItems(); | 87 return GetWidget()->CountSelItems(); |
80 } | 88 } |
81 | 89 |
82 IFWL_ListItem* CFWL_ListBox::GetSelItem(int32_t nIndexSel) { | 90 IFWL_ListItem* CFWL_ListBox::GetSelItem(int32_t nIndexSel) { |
83 if (!m_pIface) | 91 if (!GetWidget()) |
84 return nullptr; | 92 return nullptr; |
85 return static_cast<IFWL_ListBox*>(m_pIface)->GetSelItem(nIndexSel); | 93 return GetWidget()->GetSelItem(nIndexSel); |
86 } | 94 } |
87 | 95 |
88 int32_t CFWL_ListBox::GetSelIndex(int32_t nIndex) { | 96 int32_t CFWL_ListBox::GetSelIndex(int32_t nIndex) { |
89 if (!m_pIface) | 97 if (!GetWidget()) |
90 return 0; | 98 return 0; |
91 return static_cast<IFWL_ListBox*>(m_pIface)->GetSelIndex(nIndex); | 99 return GetWidget()->GetSelIndex(nIndex); |
92 } | 100 } |
93 | 101 |
94 FWL_Error CFWL_ListBox::SetSelItem(IFWL_ListItem* pItem, FX_BOOL bSelect) { | 102 FWL_Error CFWL_ListBox::SetSelItem(IFWL_ListItem* pItem, FX_BOOL bSelect) { |
95 if (!m_pIface) | 103 if (!GetWidget()) |
96 return FWL_Error::Indefinite; | 104 return FWL_Error::Indefinite; |
97 return static_cast<IFWL_ListBox*>(m_pIface)->SetSelItem(pItem, bSelect); | 105 return GetWidget()->SetSelItem(pItem, bSelect); |
98 } | 106 } |
99 | 107 |
100 FWL_Error CFWL_ListBox::GetItemText(IFWL_ListItem* pItem, | 108 FWL_Error CFWL_ListBox::GetItemText(IFWL_ListItem* pItem, |
101 CFX_WideString& wsText) { | 109 CFX_WideString& wsText) { |
102 if (!m_pIface) | 110 if (!GetWidget()) |
103 return FWL_Error::Indefinite; | 111 return FWL_Error::Indefinite; |
104 return static_cast<IFWL_ListBox*>(m_pIface)->GetItemText(pItem, wsText); | 112 return GetWidget()->GetItemText(pItem, wsText); |
105 } | 113 } |
106 | 114 |
107 FWL_Error CFWL_ListBox::GetScrollPos(FX_FLOAT& fPos, FX_BOOL bVert) { | 115 FWL_Error CFWL_ListBox::GetScrollPos(FX_FLOAT& fPos, FX_BOOL bVert) { |
108 if (!m_pIface) | 116 if (!GetWidget()) |
109 return FWL_Error::Indefinite; | 117 return FWL_Error::Indefinite; |
110 return static_cast<IFWL_ListBox*>(m_pIface)->GetScrollPos(fPos, bVert); | 118 return GetWidget()->GetScrollPos(fPos, bVert); |
111 } | 119 } |
112 | 120 |
113 FWL_Error CFWL_ListBox::SetItemHeight(FX_FLOAT fItemHeight) { | 121 FWL_Error CFWL_ListBox::SetItemHeight(FX_FLOAT fItemHeight) { |
114 m_ListBoxDP.m_fItemHeight = fItemHeight; | 122 m_ListBoxDP.m_fItemHeight = fItemHeight; |
115 return FWL_Error::Succeeded; | 123 return FWL_Error::Succeeded; |
116 } | 124 } |
117 | 125 |
118 IFWL_ListItem* CFWL_ListBox::GetFocusItem() { | 126 IFWL_ListItem* CFWL_ListBox::GetFocusItem() { |
119 for (const auto& pItem : m_ListBoxDP.m_ItemArray) { | 127 for (const auto& pItem : m_ListBoxDP.m_ItemArray) { |
120 if (pItem->m_dwStates & FWL_ITEMSTATE_LTB_Focused) | 128 if (pItem->m_dwStates & FWL_ITEMSTATE_LTB_Focused) |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 static_cast<CFWL_ListItem*>(pItem)->m_pData = pData; | 170 static_cast<CFWL_ListItem*>(pItem)->m_pData = pData; |
163 return FWL_Error::Succeeded; | 171 return FWL_Error::Succeeded; |
164 } | 172 } |
165 | 173 |
166 void* CFWL_ListBox::GetItemData(IFWL_ListItem* pItem) { | 174 void* CFWL_ListBox::GetItemData(IFWL_ListItem* pItem) { |
167 return pItem ? static_cast<CFWL_ListItem*>(pItem)->m_pData : nullptr; | 175 return pItem ? static_cast<CFWL_ListItem*>(pItem)->m_pData : nullptr; |
168 } | 176 } |
169 | 177 |
170 IFWL_ListItem* CFWL_ListBox::GetItemAtPoint(FX_FLOAT fx, FX_FLOAT fy) { | 178 IFWL_ListItem* CFWL_ListBox::GetItemAtPoint(FX_FLOAT fx, FX_FLOAT fy) { |
171 CFX_RectF rtClient; | 179 CFX_RectF rtClient; |
172 m_pIface->GetClientRect(rtClient); | 180 GetWidget()->GetClientRect(rtClient); |
173 fx -= rtClient.left; | 181 fx -= rtClient.left; |
174 fy -= rtClient.top; | 182 fy -= rtClient.top; |
175 FX_FLOAT fPosX = 0; | 183 FX_FLOAT fPosX = 0; |
176 FX_FLOAT fPosY = 0; | 184 FX_FLOAT fPosY = 0; |
177 static_cast<IFWL_ListBox*>(m_pIface)->GetScrollPos(fx); | 185 GetWidget()->GetScrollPos(fx); |
178 static_cast<IFWL_ListBox*>(m_pIface)->GetScrollPos(fy, FALSE); | 186 GetWidget()->GetScrollPos(fy, FALSE); |
179 int32_t nCount = m_ListBoxDP.CountItems(nullptr); | 187 int32_t nCount = m_ListBoxDP.CountItems(nullptr); |
180 for (int32_t i = 0; i < nCount; i++) { | 188 for (int32_t i = 0; i < nCount; i++) { |
181 IFWL_ListItem* pItem = m_ListBoxDP.GetItem(nullptr, i); | 189 IFWL_ListItem* pItem = m_ListBoxDP.GetItem(nullptr, i); |
182 if (!pItem) { | 190 if (!pItem) { |
183 continue; | 191 continue; |
184 } | 192 } |
185 CFX_RectF rtItem; | 193 CFX_RectF rtItem; |
186 m_ListBoxDP.GetItemRect(nullptr, pItem, rtItem); | 194 m_ListBoxDP.GetItemRect(nullptr, pItem, rtItem); |
187 rtItem.Offset(-fPosX, -fPosY); | 195 rtItem.Offset(-fPosX, -fPosY); |
188 if (rtItem.Contains(fx, fy)) { | 196 if (rtItem.Contains(fx, fy)) { |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
342 m_rtItem.Reset(); | 350 m_rtItem.Reset(); |
343 m_dwStates = 0; | 351 m_dwStates = 0; |
344 m_wsText = L""; | 352 m_wsText = L""; |
345 m_pDIB = nullptr; | 353 m_pDIB = nullptr; |
346 m_pData = nullptr; | 354 m_pData = nullptr; |
347 m_dwCheckState = 0; | 355 m_dwCheckState = 0; |
348 m_rtCheckBox.Reset(); | 356 m_rtCheckBox.Reset(); |
349 } | 357 } |
350 | 358 |
351 CFWL_ListItem::~CFWL_ListItem() {} | 359 CFWL_ListItem::~CFWL_ListItem() {} |
OLD | NEW |