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

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

Issue 2527783004: Add CFWL_ListBox::IsMultiSelection(). (Closed)
Patch Set: Created 4 years 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/core/cfwl_listbox.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <algorithm> 9 #include <algorithm>
10 #include <memory> 10 #include <memory>
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 void CFWL_ListBox::SetSelItem(CFWL_ListItem* pItem, bool bSelect) { 189 void CFWL_ListBox::SetSelItem(CFWL_ListItem* pItem, bool bSelect) {
190 if (!pItem) { 190 if (!pItem) {
191 if (bSelect) { 191 if (bSelect) {
192 SelectAll(); 192 SelectAll();
193 } else { 193 } else {
194 ClearSelection(); 194 ClearSelection();
195 SetFocusItem(nullptr); 195 SetFocusItem(nullptr);
196 } 196 }
197 return; 197 return;
198 } 198 }
199 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_MultiSelection) 199 if (IsMultiSelection())
200 SetSelectionDirect(pItem, bSelect); 200 SetSelectionDirect(pItem, bSelect);
201 else 201 else
202 SetSelection(pItem, pItem, bSelect); 202 SetSelection(pItem, pItem, bSelect);
203 } 203 }
204 204
205 void CFWL_ListBox::GetDataProviderItemText(CFWL_ListItem* pItem, 205 void CFWL_ListBox::GetDataProviderItemText(CFWL_ListItem* pItem,
206 CFX_WideString& wsText) { 206 CFX_WideString& wsText) {
207 if (!pItem) 207 if (!pItem)
208 return; 208 return;
209 GetItemText(this, pItem, wsText); 209 GetItemText(this, pItem, wsText);
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 } 262 }
263 } 263 }
264 264
265 void CFWL_ListBox::SetSelectionDirect(CFWL_ListItem* pItem, bool bSelect) { 265 void CFWL_ListBox::SetSelectionDirect(CFWL_ListItem* pItem, bool bSelect) {
266 uint32_t dwOldStyle = GetItemStyles(this, pItem); 266 uint32_t dwOldStyle = GetItemStyles(this, pItem);
267 bSelect ? dwOldStyle |= FWL_ITEMSTATE_LTB_Selected 267 bSelect ? dwOldStyle |= FWL_ITEMSTATE_LTB_Selected
268 : dwOldStyle &= ~FWL_ITEMSTATE_LTB_Selected; 268 : dwOldStyle &= ~FWL_ITEMSTATE_LTB_Selected;
269 SetItemStyles(this, pItem, dwOldStyle); 269 SetItemStyles(this, pItem, dwOldStyle);
270 } 270 }
271 271
272 bool CFWL_ListBox::IsMultiSelection() const {
273 return m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_MultiSelection;
274 }
275
272 bool CFWL_ListBox::IsItemSelected(CFWL_ListItem* pItem) { 276 bool CFWL_ListBox::IsItemSelected(CFWL_ListItem* pItem) {
273 uint32_t dwState = GetItemStyles(this, pItem); 277 uint32_t dwState = GetItemStyles(this, pItem);
274 return (dwState & FWL_ITEMSTATE_LTB_Selected) != 0; 278 return (dwState & FWL_ITEMSTATE_LTB_Selected) != 0;
275 } 279 }
276 280
277 void CFWL_ListBox::ClearSelection() { 281 void CFWL_ListBox::ClearSelection() {
278 bool bMulti = m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_MultiSelection; 282 bool bMulti = IsMultiSelection();
279 int32_t iCount = CountItems(this); 283 int32_t iCount = CountItems(this);
280 for (int32_t i = 0; i < iCount; i++) { 284 for (int32_t i = 0; i < iCount; i++) {
281 CFWL_ListItem* pItem = GetItem(this, i); 285 CFWL_ListItem* pItem = GetItem(this, i);
282 uint32_t dwState = GetItemStyles(this, pItem); 286 uint32_t dwState = GetItemStyles(this, pItem);
283 if (!(dwState & FWL_ITEMSTATE_LTB_Selected)) 287 if (!(dwState & FWL_ITEMSTATE_LTB_Selected))
284 continue; 288 continue;
285 SetSelectionDirect(pItem, false); 289 SetSelectionDirect(pItem, false);
286 if (!bMulti) 290 if (!bMulti)
287 return; 291 return;
288 } 292 }
289 } 293 }
290 294
291 void CFWL_ListBox::SelectAll() { 295 void CFWL_ListBox::SelectAll() {
292 if (!(m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_MultiSelection)) 296 if (!IsMultiSelection())
293 return; 297 return;
294 298
295 int32_t iCount = CountItems(this); 299 int32_t iCount = CountItems(this);
296 if (iCount <= 0) 300 if (iCount <= 0)
297 return; 301 return;
298 302
299 CFWL_ListItem* pItemStart = GetItem(this, 0); 303 CFWL_ListItem* pItemStart = GetItem(this, 0);
300 CFWL_ListItem* pItemEnd = GetItem(this, iCount - 1); 304 CFWL_ListItem* pItemEnd = GetItem(this, iCount - 1);
301 SetSelection(pItemStart, pItemEnd, false); 305 SetSelection(pItemStart, pItemEnd, false);
302 } 306 }
(...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after
845 849
846 void CFWL_ListBox::OnLButtonDown(CFWL_MsgMouse* pMsg) { 850 void CFWL_ListBox::OnLButtonDown(CFWL_MsgMouse* pMsg) {
847 m_bLButtonDown = true; 851 m_bLButtonDown = true;
848 if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0) 852 if ((m_pProperties->m_dwStates & FWL_WGTSTATE_Focused) == 0)
849 SetFocus(true); 853 SetFocus(true);
850 854
851 CFWL_ListItem* pItem = GetItemAtPoint(pMsg->m_fx, pMsg->m_fy); 855 CFWL_ListItem* pItem = GetItemAtPoint(pMsg->m_fx, pMsg->m_fy);
852 if (!pItem) 856 if (!pItem)
853 return; 857 return;
854 858
855 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_MultiSelection) { 859 if (IsMultiSelection()) {
856 if (pMsg->m_dwFlags & FWL_KEYFLAG_Ctrl) { 860 if (pMsg->m_dwFlags & FWL_KEYFLAG_Ctrl) {
857 bool bSelected = IsItemSelected(pItem); 861 bool bSelected = IsItemSelected(pItem);
858 SetSelectionDirect(pItem, !bSelected); 862 SetSelectionDirect(pItem, !bSelected);
859 m_hAnchor = pItem; 863 m_hAnchor = pItem;
860 } else if (pMsg->m_dwFlags & FWL_KEYFLAG_Shift) { 864 } else if (pMsg->m_dwFlags & FWL_KEYFLAG_Shift) {
861 if (m_hAnchor) 865 if (m_hAnchor)
862 SetSelection(m_hAnchor, pItem, true); 866 SetSelection(m_hAnchor, pItem, true);
863 else 867 else
864 SetSelectionDirect(pItem, true); 868 SetSelectionDirect(pItem, true);
865 } else { 869 } else {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
915 } 919 }
916 default: 920 default:
917 break; 921 break;
918 } 922 }
919 } 923 }
920 924
921 void CFWL_ListBox::OnVK(CFWL_ListItem* pItem, bool bShift, bool bCtrl) { 925 void CFWL_ListBox::OnVK(CFWL_ListItem* pItem, bool bShift, bool bCtrl) {
922 if (!pItem) 926 if (!pItem)
923 return; 927 return;
924 928
925 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_LTB_MultiSelection) { 929 if (IsMultiSelection()) {
926 if (bCtrl) { 930 if (bCtrl) {
927 // Do nothing. 931 // Do nothing.
928 } else if (bShift) { 932 } else if (bShift) {
929 if (m_hAnchor) 933 if (m_hAnchor)
930 SetSelection(m_hAnchor, pItem, true); 934 SetSelection(m_hAnchor, pItem, true);
931 else 935 else
932 SetSelectionDirect(pItem, true); 936 SetSelectionDirect(pItem, true);
933 } else { 937 } else {
934 SetSelection(pItem, pItem, true); 938 SetSelection(pItem, pItem, true);
935 m_hAnchor = pItem; 939 m_hAnchor = pItem;
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
1124 void CFWL_ListBox::DeleteAll() { 1128 void CFWL_ListBox::DeleteAll() {
1125 m_ItemArray.clear(); 1129 m_ItemArray.clear();
1126 } 1130 }
1127 1131
1128 uint32_t CFWL_ListBox::GetItemStates(CFWL_ListItem* pItem) { 1132 uint32_t CFWL_ListBox::GetItemStates(CFWL_ListItem* pItem) {
1129 if (!pItem) 1133 if (!pItem)
1130 return 0; 1134 return 0;
1131 return pItem->m_dwStates | pItem->m_dwCheckState; 1135 return pItem->m_dwStates | pItem->m_dwCheckState;
1132 } 1136 }
1133 1137
OLDNEW
« no previous file with comments | « xfa/fwl/core/cfwl_listbox.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698