Chromium Code Reviews| 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""; |
|
dsinclair
2016/11/10 14:44:55
m_wsData was never set, made it explicit.
| |
| 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; |
|
dsinclair
2016/11/10 14:44:55
m_fItemHeight was never set so ... I guessed at a
| |
| 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 |