Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(20)

Side by Side Diff: xfa/fwl/lightwidget/cfwl_listbox.cpp

Issue 2430923006: Move fwl/lightwidget to fwl/core (Closed)
Patch Set: Rebase to master Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « xfa/fwl/lightwidget/cfwl_listbox.h ('k') | xfa/fwl/lightwidget/cfwl_picturebox.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7 #include "xfa/fwl/lightwidget/cfwl_listbox.h"
8
9 #include <memory>
10
11 #include "third_party/base/stl_util.h"
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
21 FWL_Error CFWL_ListBox::Initialize(const CFWL_WidgetProperties* pProperties) {
22 if (m_pIface)
23 return FWL_Error::Indefinite;
24 if (pProperties) {
25 *m_pProperties = *pProperties;
26 }
27 std::unique_ptr<IFWL_ListBox> pListBox(new IFWL_ListBox(
28 m_pProperties->MakeWidgetImpProperties(&m_ListBoxDP), nullptr));
29 FWL_Error ret = pListBox->Initialize();
30 if (ret != FWL_Error::Succeeded) {
31 return ret;
32 }
33 m_pIface = std::move(pListBox);
34 CFWL_Widget::Initialize();
35 return FWL_Error::Succeeded;
36 }
37
38 FWL_Error CFWL_ListBox::AddDIBitmap(CFX_DIBitmap* pDIB, IFWL_ListItem* pItem) {
39 static_cast<CFWL_ListItem*>(pItem)->m_pDIB = pDIB;
40 return FWL_Error::Succeeded;
41 }
42
43 IFWL_ListItem* CFWL_ListBox::AddString(const CFX_WideStringC& wsAdd,
44 FX_BOOL bSelect) {
45 std::unique_ptr<CFWL_ListItem> pItem(new CFWL_ListItem);
46 pItem->m_dwStates = 0;
47 pItem->m_wsText = wsAdd;
48 pItem->m_dwStates = bSelect ? FWL_ITEMSTATE_LTB_Selected : 0;
49 m_ListBoxDP.m_ItemArray.push_back(std::move(pItem));
50 return m_ListBoxDP.m_ItemArray.back().get();
51 }
52
53 FX_BOOL CFWL_ListBox::DeleteString(IFWL_ListItem* pItem) {
54 int32_t nIndex = m_ListBoxDP.GetItemIndex(GetWidget(), pItem);
55 if (nIndex < 0 ||
56 static_cast<size_t>(nIndex) >= m_ListBoxDP.m_ItemArray.size()) {
57 return FALSE;
58 }
59 int32_t iCount = m_ListBoxDP.CountItems(m_pIface.get());
60 int32_t iSel = nIndex + 1;
61 if (iSel >= iCount) {
62 iSel = nIndex - 1;
63 if (iSel < 0) {
64 iSel = -1;
65 }
66 }
67 if (iSel >= 0) {
68 CFWL_ListItem* pSel =
69 static_cast<CFWL_ListItem*>(m_ListBoxDP.GetItem(m_pIface.get(), iSel));
70 pSel->m_dwStates |= FWL_ITEMSTATE_LTB_Selected;
71 }
72 m_ListBoxDP.m_ItemArray.erase(m_ListBoxDP.m_ItemArray.begin() + nIndex);
73 return TRUE;
74 }
75
76 void CFWL_ListBox::DeleteAll() {
77 m_ListBoxDP.m_ItemArray.clear();
78 }
79
80 int32_t CFWL_ListBox::CountSelItems() {
81 if (!GetWidget())
82 return 0;
83 return GetWidget()->CountSelItems();
84 }
85
86 IFWL_ListItem* CFWL_ListBox::GetSelItem(int32_t nIndexSel) {
87 if (!GetWidget())
88 return nullptr;
89 return GetWidget()->GetSelItem(nIndexSel);
90 }
91
92 int32_t CFWL_ListBox::GetSelIndex(int32_t nIndex) {
93 if (!GetWidget())
94 return 0;
95 return GetWidget()->GetSelIndex(nIndex);
96 }
97
98 FWL_Error CFWL_ListBox::SetSelItem(IFWL_ListItem* pItem, FX_BOOL bSelect) {
99 if (!GetWidget())
100 return FWL_Error::Indefinite;
101 return GetWidget()->SetSelItem(pItem, bSelect);
102 }
103
104 FWL_Error CFWL_ListBox::GetItemText(IFWL_ListItem* pItem,
105 CFX_WideString& wsText) {
106 if (!GetWidget())
107 return FWL_Error::Indefinite;
108 return GetWidget()->GetItemText(pItem, wsText);
109 }
110
111 FWL_Error CFWL_ListBox::GetScrollPos(FX_FLOAT& fPos, FX_BOOL bVert) {
112 if (!GetWidget())
113 return FWL_Error::Indefinite;
114 return GetWidget()->GetScrollPos(fPos, bVert);
115 }
116
117 FWL_Error CFWL_ListBox::SetItemHeight(FX_FLOAT fItemHeight) {
118 m_ListBoxDP.m_fItemHeight = fItemHeight;
119 return FWL_Error::Succeeded;
120 }
121
122 IFWL_ListItem* CFWL_ListBox::GetFocusItem() {
123 for (const auto& pItem : m_ListBoxDP.m_ItemArray) {
124 if (pItem->m_dwStates & FWL_ITEMSTATE_LTB_Focused)
125 return pItem.get();
126 }
127 return nullptr;
128 }
129
130 FWL_Error CFWL_ListBox::SetFocusItem(IFWL_ListItem* pItem) {
131 int32_t nIndex = m_ListBoxDP.GetItemIndex(GetWidget(), pItem);
132 m_ListBoxDP.m_ItemArray[nIndex]->m_dwStates |= FWL_ITEMSTATE_LTB_Focused;
133 return FWL_Error::Succeeded;
134 }
135
136 int32_t CFWL_ListBox::CountItems() {
137 return pdfium::CollectionSize<int32_t>(m_ListBoxDP.m_ItemArray);
138 }
139
140 IFWL_ListItem* CFWL_ListBox::GetItem(int32_t nIndex) {
141 if (nIndex < 0 || nIndex >= CountItems())
142 return nullptr;
143
144 return m_ListBoxDP.m_ItemArray[nIndex].get();
145 }
146
147 FWL_Error CFWL_ListBox::SetItemString(IFWL_ListItem* pItem,
148 const CFX_WideStringC& wsText) {
149 if (!pItem)
150 return FWL_Error::Indefinite;
151 static_cast<CFWL_ListItem*>(pItem)->m_wsText = wsText;
152 return FWL_Error::Succeeded;
153 }
154
155 FWL_Error CFWL_ListBox::GetItemString(IFWL_ListItem* pItem,
156 CFX_WideString& wsText) {
157 if (!pItem)
158 return FWL_Error::Indefinite;
159 wsText = static_cast<CFWL_ListItem*>(pItem)->m_wsText;
160 return FWL_Error::Succeeded;
161 }
162
163 FWL_Error CFWL_ListBox::SetItemData(IFWL_ListItem* pItem, void* pData) {
164 if (!pItem)
165 return FWL_Error::Indefinite;
166 static_cast<CFWL_ListItem*>(pItem)->m_pData = pData;
167 return FWL_Error::Succeeded;
168 }
169
170 void* CFWL_ListBox::GetItemData(IFWL_ListItem* pItem) {
171 return pItem ? static_cast<CFWL_ListItem*>(pItem)->m_pData : nullptr;
172 }
173
174 IFWL_ListItem* CFWL_ListBox::GetItemAtPoint(FX_FLOAT fx, FX_FLOAT fy) {
175 CFX_RectF rtClient;
176 GetWidget()->GetClientRect(rtClient);
177 fx -= rtClient.left;
178 fy -= rtClient.top;
179 FX_FLOAT fPosX = 0;
180 FX_FLOAT fPosY = 0;
181 GetWidget()->GetScrollPos(fx);
182 GetWidget()->GetScrollPos(fy, FALSE);
183 int32_t nCount = m_ListBoxDP.CountItems(nullptr);
184 for (int32_t i = 0; i < nCount; i++) {
185 IFWL_ListItem* pItem = m_ListBoxDP.GetItem(nullptr, i);
186 if (!pItem) {
187 continue;
188 }
189 CFX_RectF rtItem;
190 m_ListBoxDP.GetItemRect(nullptr, pItem, rtItem);
191 rtItem.Offset(-fPosX, -fPosY);
192 if (rtItem.Contains(fx, fy)) {
193 return pItem;
194 }
195 }
196 return nullptr;
197 }
198
199 uint32_t CFWL_ListBox::GetItemStates(IFWL_ListItem* pItem) {
200 if (!pItem)
201 return 0;
202 CFWL_ListItem* pListItem = static_cast<CFWL_ListItem*>(pItem);
203 return pListItem->m_dwStates | pListItem->m_dwCheckState;
204 }
205
206 CFWL_ListBox::CFWL_ListBox() {}
207
208 CFWL_ListBox::~CFWL_ListBox() {}
209
210 CFWL_ListBox::CFWL_ListBoxDP::CFWL_ListBoxDP() {}
211
212 CFWL_ListBox::CFWL_ListBoxDP::~CFWL_ListBoxDP() {}
213
214 FWL_Error CFWL_ListBox::CFWL_ListBoxDP::GetCaption(IFWL_Widget* pWidget,
215 CFX_WideString& wsCaption) {
216 wsCaption = m_wsData;
217 return FWL_Error::Succeeded;
218 }
219
220 int32_t CFWL_ListBox::CFWL_ListBoxDP::CountItems(const IFWL_Widget* pWidget) {
221 return pdfium::CollectionSize<int32_t>(m_ItemArray);
222 }
223
224 IFWL_ListItem* CFWL_ListBox::CFWL_ListBoxDP::GetItem(const IFWL_Widget* pWidget,
225 int32_t nIndex) {
226 if (nIndex < 0 || nIndex >= CountItems(pWidget))
227 return nullptr;
228
229 return m_ItemArray[nIndex].get();
230 }
231
232 int32_t CFWL_ListBox::CFWL_ListBoxDP::GetItemIndex(IFWL_Widget* pWidget,
233 IFWL_ListItem* pItem) {
234 auto it = std::find_if(
235 m_ItemArray.begin(), m_ItemArray.end(),
236 [pItem](const std::unique_ptr<CFWL_ListItem>& candidate) {
237 return candidate.get() == static_cast<CFWL_ListItem*>(pItem);
238 });
239 return it != m_ItemArray.end() ? it - m_ItemArray.begin() : -1;
240 }
241
242 FX_BOOL CFWL_ListBox::CFWL_ListBoxDP::SetItemIndex(IFWL_Widget* pWidget,
243 IFWL_ListItem* pItem,
244 int32_t nIndex) {
245 if (nIndex < 0 || nIndex >= CountItems(pWidget))
246 return FALSE;
247 m_ItemArray[nIndex].reset(static_cast<CFWL_ListItem*>(pItem));
248 return TRUE;
249 }
250
251 uint32_t CFWL_ListBox::CFWL_ListBoxDP::GetItemStyles(IFWL_Widget* pWidget,
252 IFWL_ListItem* pItem) {
253 if (!pItem)
254 return 0;
255 return static_cast<CFWL_ListItem*>(pItem)->m_dwStates;
256 }
257
258 FWL_Error CFWL_ListBox::CFWL_ListBoxDP::GetItemText(IFWL_Widget* pWidget,
259 IFWL_ListItem* pItem,
260 CFX_WideString& wsText) {
261 if (!pItem)
262 return FWL_Error::Indefinite;
263 wsText = static_cast<CFWL_ListItem*>(pItem)->m_wsText;
264 return FWL_Error::Succeeded;
265 }
266
267 FWL_Error CFWL_ListBox::CFWL_ListBoxDP::GetItemRect(IFWL_Widget* pWidget,
268 IFWL_ListItem* pItem,
269 CFX_RectF& rtItem) {
270 if (!pItem)
271 return FWL_Error::Indefinite;
272 rtItem = static_cast<CFWL_ListItem*>(pItem)->m_rtItem;
273 return FWL_Error::Succeeded;
274 }
275
276 void* CFWL_ListBox::CFWL_ListBoxDP::GetItemData(IFWL_Widget* pWidget,
277 IFWL_ListItem* pItem) {
278 return pItem ? static_cast<CFWL_ListItem*>(pItem)->m_pData : nullptr;
279 }
280
281 FWL_Error CFWL_ListBox::CFWL_ListBoxDP::SetItemStyles(IFWL_Widget* pWidget,
282 IFWL_ListItem* pItem,
283 uint32_t dwStyle) {
284 if (!pItem)
285 return FWL_Error::Indefinite;
286 static_cast<CFWL_ListItem*>(pItem)->m_dwStates = dwStyle;
287 return FWL_Error::Succeeded;
288 }
289
290 FWL_Error CFWL_ListBox::CFWL_ListBoxDP::SetItemText(IFWL_Widget* pWidget,
291 IFWL_ListItem* pItem,
292 const FX_WCHAR* pszText) {
293 if (!pItem)
294 return FWL_Error::Indefinite;
295 static_cast<CFWL_ListItem*>(pItem)->m_wsText = pszText;
296 return FWL_Error::Succeeded;
297 }
298
299 FWL_Error CFWL_ListBox::CFWL_ListBoxDP::SetItemRect(IFWL_Widget* pWidget,
300 IFWL_ListItem* pItem,
301 const CFX_RectF& rtItem) {
302 if (!pItem)
303 return FWL_Error::Indefinite;
304 static_cast<CFWL_ListItem*>(pItem)->m_rtItem = rtItem;
305 return FWL_Error::Succeeded;
306 }
307
308 FX_FLOAT CFWL_ListBox::CFWL_ListBoxDP::GetItemHeight(IFWL_Widget* pWidget) {
309 return m_fItemHeight;
310 }
311
312 CFX_DIBitmap* CFWL_ListBox::CFWL_ListBoxDP::GetItemIcon(IFWL_Widget* pWidget,
313 IFWL_ListItem* pItem) {
314 return static_cast<CFWL_ListItem*>(pItem)->m_pDIB;
315 }
316
317 FWL_Error CFWL_ListBox::CFWL_ListBoxDP::GetItemCheckRect(IFWL_Widget* pWidget,
318 IFWL_ListItem* pItem,
319 CFX_RectF& rtCheck) {
320 rtCheck = static_cast<CFWL_ListItem*>(pItem)->m_rtCheckBox;
321 return FWL_Error::Succeeded;
322 }
323
324 FWL_Error CFWL_ListBox::CFWL_ListBoxDP::SetItemCheckRect(
325 IFWL_Widget* pWidget,
326 IFWL_ListItem* pItem,
327 const CFX_RectF& rtCheck) {
328 static_cast<CFWL_ListItem*>(pItem)->m_rtCheckBox = rtCheck;
329 return FWL_Error::Succeeded;
330 }
331
332 uint32_t CFWL_ListBox::CFWL_ListBoxDP::GetItemCheckState(IFWL_Widget* pWidget,
333 IFWL_ListItem* pItem) {
334 return static_cast<CFWL_ListItem*>(pItem)->m_dwCheckState;
335 }
336
337 FWL_Error CFWL_ListBox::CFWL_ListBoxDP::SetItemCheckState(
338 IFWL_Widget* pWidget,
339 IFWL_ListItem* pItem,
340 uint32_t dwCheckState) {
341 static_cast<CFWL_ListItem*>(pItem)->m_dwCheckState = dwCheckState;
342 return FWL_Error::Succeeded;
343 }
344
345 CFWL_ListItem::CFWL_ListItem() {
346 m_rtItem.Reset();
347 m_dwStates = 0;
348 m_wsText = L"";
349 m_pDIB = nullptr;
350 m_pData = nullptr;
351 m_dwCheckState = 0;
352 m_rtCheckBox.Reset();
353 }
354
355 CFWL_ListItem::~CFWL_ListItem() {}
OLDNEW
« no previous file with comments | « xfa/fwl/lightwidget/cfwl_listbox.h ('k') | xfa/fwl/lightwidget/cfwl_picturebox.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698