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/core/cfwl_listbox.h" | 7 #include "xfa/fwl/core/cfwl_listbox.h" |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 | 10 |
(...skipping 14 matching lines...) Expand all Loading... | |
25 | 25 |
26 void CFWL_ListBox::Initialize() { | 26 void CFWL_ListBox::Initialize() { |
27 ASSERT(!m_pIface); | 27 ASSERT(!m_pIface); |
28 | 28 |
29 m_pIface = pdfium::MakeUnique<IFWL_ListBox>( | 29 m_pIface = pdfium::MakeUnique<IFWL_ListBox>( |
30 m_pApp, pdfium::MakeUnique<CFWL_WidgetProperties>(this), nullptr); | 30 m_pApp, pdfium::MakeUnique<CFWL_WidgetProperties>(this), nullptr); |
31 | 31 |
32 CFWL_Widget::Initialize(); | 32 CFWL_Widget::Initialize(); |
33 } | 33 } |
34 | 34 |
35 FWL_Error CFWL_ListBox::AddDIBitmap(CFX_DIBitmap* pDIB, CFWL_ListItem* pItem) { | |
36 static_cast<CFWL_ListItem*>(pItem)->m_pDIB = pDIB; | |
37 return FWL_Error::Succeeded; | |
38 } | |
39 | |
40 CFWL_ListItem* CFWL_ListBox::AddString(const CFX_WideStringC& wsAdd, | 35 CFWL_ListItem* CFWL_ListBox::AddString(const CFX_WideStringC& wsAdd, |
41 bool bSelect) { | 36 bool bSelect) { |
42 std::unique_ptr<CFWL_ListItem> pItem(new CFWL_ListItem); | 37 std::unique_ptr<CFWL_ListItem> pItem(new CFWL_ListItem); |
43 pItem->m_dwStates = 0; | 38 pItem->m_dwStates = 0; |
44 pItem->m_wsText = wsAdd; | 39 pItem->m_wsText = wsAdd; |
45 pItem->m_dwStates = bSelect ? FWL_ITEMSTATE_LTB_Selected : 0; | 40 pItem->m_dwStates = bSelect ? FWL_ITEMSTATE_LTB_Selected : 0; |
46 m_ItemArray.push_back(std::move(pItem)); | 41 m_ItemArray.push_back(std::move(pItem)); |
47 return m_ItemArray.back().get(); | 42 return m_ItemArray.back().get(); |
48 } | 43 } |
49 | 44 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
99 void CFWL_ListBox::GetItemText(CFWL_ListItem* pItem, CFX_WideString& wsText) { | 94 void CFWL_ListBox::GetItemText(CFWL_ListItem* pItem, CFX_WideString& wsText) { |
100 if (GetWidget()) | 95 if (GetWidget()) |
101 ToListBox(GetWidget())->GetItemText(pItem, wsText); | 96 ToListBox(GetWidget())->GetItemText(pItem, wsText); |
102 } | 97 } |
103 | 98 |
104 void CFWL_ListBox::GetScrollPos(FX_FLOAT& fPos, bool bVert) { | 99 void CFWL_ListBox::GetScrollPos(FX_FLOAT& fPos, bool bVert) { |
105 if (GetWidget()) | 100 if (GetWidget()) |
106 ToListBox(GetWidget())->GetScrollPos(fPos, bVert); | 101 ToListBox(GetWidget())->GetScrollPos(fPos, bVert); |
107 } | 102 } |
108 | 103 |
109 FWL_Error CFWL_ListBox::SetItemHeight(FX_FLOAT fItemHeight) { | |
110 m_fItemHeight = fItemHeight; | |
111 return FWL_Error::Succeeded; | |
112 } | |
113 | |
114 CFWL_ListItem* CFWL_ListBox::GetFocusItem() { | |
115 for (const auto& pItem : m_ItemArray) { | |
116 if (pItem->m_dwStates & FWL_ITEMSTATE_LTB_Focused) | |
117 return pItem.get(); | |
118 } | |
119 return nullptr; | |
120 } | |
121 | |
122 FWL_Error CFWL_ListBox::SetFocusItem(CFWL_ListItem* pItem) { | |
123 int32_t nIndex = GetItemIndex(GetWidget(), pItem); | |
124 m_ItemArray[nIndex]->m_dwStates |= FWL_ITEMSTATE_LTB_Focused; | |
125 return FWL_Error::Succeeded; | |
126 } | |
127 | |
128 int32_t CFWL_ListBox::CountItems() { | 104 int32_t CFWL_ListBox::CountItems() { |
129 return pdfium::CollectionSize<int32_t>(m_ItemArray); | 105 return pdfium::CollectionSize<int32_t>(m_ItemArray); |
130 } | 106 } |
131 | 107 |
132 CFWL_ListItem* CFWL_ListBox::GetItem(int32_t nIndex) { | 108 CFWL_ListItem* CFWL_ListBox::GetItem(int32_t nIndex) { |
133 if (nIndex < 0 || nIndex >= CountItems()) | 109 if (nIndex < 0 || nIndex >= CountItems()) |
134 return nullptr; | 110 return nullptr; |
135 | 111 |
136 return m_ItemArray[nIndex].get(); | 112 return m_ItemArray[nIndex].get(); |
137 } | 113 } |
138 | 114 |
139 FWL_Error CFWL_ListBox::SetItemString(CFWL_ListItem* pItem, | |
140 const CFX_WideStringC& wsText) { | |
141 if (!pItem) | |
142 return FWL_Error::Indefinite; | |
143 static_cast<CFWL_ListItem*>(pItem)->m_wsText = wsText; | |
144 return FWL_Error::Succeeded; | |
145 } | |
146 | |
147 FWL_Error CFWL_ListBox::GetItemString(CFWL_ListItem* pItem, | |
148 CFX_WideString& wsText) { | |
149 if (!pItem) | |
150 return FWL_Error::Indefinite; | |
151 wsText = static_cast<CFWL_ListItem*>(pItem)->m_wsText; | |
152 return FWL_Error::Succeeded; | |
153 } | |
154 | |
155 FWL_Error CFWL_ListBox::SetItemData(CFWL_ListItem* pItem, void* pData) { | |
156 if (!pItem) | |
157 return FWL_Error::Indefinite; | |
158 static_cast<CFWL_ListItem*>(pItem)->m_pData = pData; | |
159 return FWL_Error::Succeeded; | |
160 } | |
161 | |
162 void* CFWL_ListBox::GetItemData(CFWL_ListItem* pItem) { | |
163 return pItem ? static_cast<CFWL_ListItem*>(pItem)->m_pData : nullptr; | |
164 } | |
165 | |
166 CFWL_ListItem* CFWL_ListBox::GetItemAtPoint(FX_FLOAT fx, FX_FLOAT fy) { | |
167 CFX_RectF rtClient; | |
168 GetWidget()->GetClientRect(rtClient); | |
169 fx -= rtClient.left; | |
170 fy -= rtClient.top; | |
171 FX_FLOAT fPosX = 0; | |
172 FX_FLOAT fPosY = 0; | |
173 ToListBox(GetWidget())->GetScrollPos(fx); | |
174 ToListBox(GetWidget())->GetScrollPos(fy, false); | |
175 int32_t nCount = CountItems(nullptr); | |
176 for (int32_t i = 0; i < nCount; i++) { | |
177 CFWL_ListItem* pItem = GetItem(nullptr, i); | |
178 if (!pItem) { | |
179 continue; | |
180 } | |
181 CFX_RectF rtItem; | |
182 GetItemRect(nullptr, pItem, rtItem); | |
183 rtItem.Offset(-fPosX, -fPosY); | |
184 if (rtItem.Contains(fx, fy)) { | |
185 return pItem; | |
186 } | |
187 } | |
188 return nullptr; | |
189 } | |
190 | |
191 uint32_t CFWL_ListBox::GetItemStates(CFWL_ListItem* pItem) { | 115 uint32_t CFWL_ListBox::GetItemStates(CFWL_ListItem* pItem) { |
192 if (!pItem) | 116 if (!pItem) |
193 return 0; | 117 return 0; |
194 CFWL_ListItem* pListItem = static_cast<CFWL_ListItem*>(pItem); | 118 CFWL_ListItem* pListItem = static_cast<CFWL_ListItem*>(pItem); |
195 return pListItem->m_dwStates | pListItem->m_dwCheckState; | 119 return pListItem->m_dwStates | pListItem->m_dwCheckState; |
196 } | 120 } |
197 | 121 |
198 FWL_Error CFWL_ListBox::GetCaption(IFWL_Widget* pWidget, | 122 FWL_Error CFWL_ListBox::GetCaption(IFWL_Widget* pWidget, |
199 CFX_WideString& wsCaption) { | 123 CFX_WideString& wsCaption) { |
200 wsCaption = m_wsData; | 124 wsCaption = L""; |
201 return FWL_Error::Succeeded; | 125 return FWL_Error::Succeeded; |
202 } | 126 } |
203 | 127 |
204 int32_t CFWL_ListBox::CountItems(const IFWL_Widget* pWidget) { | 128 int32_t CFWL_ListBox::CountItems(const IFWL_Widget* pWidget) { |
205 return pdfium::CollectionSize<int32_t>(m_ItemArray); | 129 return pdfium::CollectionSize<int32_t>(m_ItemArray); |
206 } | 130 } |
207 | 131 |
208 CFWL_ListItem* CFWL_ListBox::GetItem(const IFWL_Widget* pWidget, | 132 CFWL_ListItem* CFWL_ListBox::GetItem(const IFWL_Widget* pWidget, |
209 int32_t nIndex) { | 133 int32_t nIndex) { |
210 if (nIndex < 0 || nIndex >= CountItems(pWidget)) | 134 if (nIndex < 0 || nIndex >= CountItems(pWidget)) |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
271 } | 195 } |
272 | 196 |
273 void CFWL_ListBox::SetItemRect(IFWL_Widget* pWidget, | 197 void CFWL_ListBox::SetItemRect(IFWL_Widget* pWidget, |
274 CFWL_ListItem* pItem, | 198 CFWL_ListItem* pItem, |
275 const CFX_RectF& rtItem) { | 199 const CFX_RectF& rtItem) { |
276 if (pItem) | 200 if (pItem) |
277 static_cast<CFWL_ListItem*>(pItem)->m_rtItem = rtItem; | 201 static_cast<CFWL_ListItem*>(pItem)->m_rtItem = rtItem; |
278 } | 202 } |
279 | 203 |
280 FX_FLOAT CFWL_ListBox::GetItemHeight(IFWL_Widget* pWidget) { | 204 FX_FLOAT CFWL_ListBox::GetItemHeight(IFWL_Widget* pWidget) { |
281 return m_fItemHeight; | 205 return 20; |
npm
2016/11/10 19:12:06
Isn't 0 better?
| |
282 } | 206 } |
283 | 207 |
284 CFX_DIBitmap* CFWL_ListBox::GetItemIcon(IFWL_Widget* pWidget, | 208 CFX_DIBitmap* CFWL_ListBox::GetItemIcon(IFWL_Widget* pWidget, |
285 CFWL_ListItem* pItem) { | 209 CFWL_ListItem* pItem) { |
286 return static_cast<CFWL_ListItem*>(pItem)->m_pDIB; | 210 return static_cast<CFWL_ListItem*>(pItem)->m_pDIB; |
287 } | 211 } |
288 | 212 |
289 void CFWL_ListBox::GetItemCheckRect(IFWL_Widget* pWidget, | 213 void CFWL_ListBox::GetItemCheckRect(IFWL_Widget* pWidget, |
290 CFWL_ListItem* pItem, | 214 CFWL_ListItem* pItem, |
291 CFX_RectF& rtCheck) { | 215 CFX_RectF& rtCheck) { |
292 rtCheck = static_cast<CFWL_ListItem*>(pItem)->m_rtCheckBox; | 216 rtCheck = static_cast<CFWL_ListItem*>(pItem)->m_rtCheckBox; |
293 } | 217 } |
294 | 218 |
295 void CFWL_ListBox::SetItemCheckRect(IFWL_Widget* pWidget, | 219 void CFWL_ListBox::SetItemCheckRect(IFWL_Widget* pWidget, |
296 CFWL_ListItem* pItem, | 220 CFWL_ListItem* pItem, |
297 const CFX_RectF& rtCheck) { | 221 const CFX_RectF& rtCheck) { |
298 static_cast<CFWL_ListItem*>(pItem)->m_rtCheckBox = rtCheck; | 222 static_cast<CFWL_ListItem*>(pItem)->m_rtCheckBox = rtCheck; |
299 } | 223 } |
300 | 224 |
301 uint32_t CFWL_ListBox::GetItemCheckState(IFWL_Widget* pWidget, | 225 uint32_t CFWL_ListBox::GetItemCheckState(IFWL_Widget* pWidget, |
302 CFWL_ListItem* pItem) { | 226 CFWL_ListItem* pItem) { |
303 return static_cast<CFWL_ListItem*>(pItem)->m_dwCheckState; | 227 return static_cast<CFWL_ListItem*>(pItem)->m_dwCheckState; |
304 } | 228 } |
305 | 229 |
306 void CFWL_ListBox::SetItemCheckState(IFWL_Widget* pWidget, | 230 void CFWL_ListBox::SetItemCheckState(IFWL_Widget* pWidget, |
307 CFWL_ListItem* pItem, | 231 CFWL_ListItem* pItem, |
308 uint32_t dwCheckState) { | 232 uint32_t dwCheckState) { |
309 static_cast<CFWL_ListItem*>(pItem)->m_dwCheckState = dwCheckState; | 233 static_cast<CFWL_ListItem*>(pItem)->m_dwCheckState = dwCheckState; |
310 } | 234 } |
OLD | NEW |