| 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 "fpdfsdk/fxedit/fxet_list.h" | 7 #include "fpdfsdk/fxedit/fxet_list.h" |
| 8 | 8 |
| 9 #include "core/fpdfdoc/cpvt_word.h" | 9 #include "core/fpdfdoc/cpvt_word.h" |
| 10 #include "fpdfsdk/fxedit/fxet_edit.h" | 10 #include "fpdfsdk/fxedit/fxet_edit.h" |
| 11 #include "fpdfsdk/pdfwindow/PWL_ListBox.h" | 11 #include "fpdfsdk/pdfwindow/PWL_ListBox.h" |
| 12 | 12 |
| 13 CFX_ListItem::CFX_ListItem() | 13 CFX_ListItem::CFX_ListItem() |
| 14 : m_pEdit(new CFX_Edit), | 14 : m_pEdit(new CFX_Edit), |
| 15 m_bSelected(FALSE), | 15 m_bSelected(false), |
| 16 m_rcListItem(0.0f, 0.0f, 0.0f, 0.0f) { | 16 m_rcListItem(0.0f, 0.0f, 0.0f, 0.0f) { |
| 17 m_pEdit->SetAlignmentV(1, TRUE); | 17 m_pEdit->SetAlignmentV(1, true); |
| 18 m_pEdit->Initialize(); | 18 m_pEdit->Initialize(); |
| 19 } | 19 } |
| 20 | 20 |
| 21 CFX_ListItem::~CFX_ListItem() { | 21 CFX_ListItem::~CFX_ListItem() { |
| 22 } | 22 } |
| 23 | 23 |
| 24 void CFX_ListItem::SetFontMap(IPVT_FontMap* pFontMap) { | 24 void CFX_ListItem::SetFontMap(IPVT_FontMap* pFontMap) { |
| 25 m_pEdit->SetFontMap(pFontMap); | 25 m_pEdit->SetFontMap(pFontMap); |
| 26 } | 26 } |
| 27 | 27 |
| 28 CFX_Edit* CFX_ListItem::GetEdit() const { | 28 CFX_Edit* CFX_ListItem::GetEdit() const { |
| 29 return m_pEdit.get(); | 29 return m_pEdit.get(); |
| 30 } | 30 } |
| 31 | 31 |
| 32 CFX_Edit_Iterator* CFX_ListItem::GetIterator() const { | 32 CFX_Edit_Iterator* CFX_ListItem::GetIterator() const { |
| 33 return m_pEdit->GetIterator(); | 33 return m_pEdit->GetIterator(); |
| 34 } | 34 } |
| 35 | 35 |
| 36 void CFX_ListItem::SetRect(const CLST_Rect& rect) { | 36 void CFX_ListItem::SetRect(const CLST_Rect& rect) { |
| 37 m_rcListItem = rect; | 37 m_rcListItem = rect; |
| 38 } | 38 } |
| 39 | 39 |
| 40 CLST_Rect CFX_ListItem::GetRect() const { | 40 CLST_Rect CFX_ListItem::GetRect() const { |
| 41 return m_rcListItem; | 41 return m_rcListItem; |
| 42 } | 42 } |
| 43 | 43 |
| 44 FX_BOOL CFX_ListItem::IsSelected() const { | 44 bool CFX_ListItem::IsSelected() const { |
| 45 return m_bSelected; | 45 return m_bSelected; |
| 46 } | 46 } |
| 47 | 47 |
| 48 void CFX_ListItem::SetSelect(FX_BOOL bSelected) { | 48 void CFX_ListItem::SetSelect(bool bSelected) { |
| 49 m_bSelected = bSelected; | 49 m_bSelected = bSelected; |
| 50 } | 50 } |
| 51 | 51 |
| 52 void CFX_ListItem::SetText(const CFX_WideString& text) { | 52 void CFX_ListItem::SetText(const CFX_WideString& text) { |
| 53 m_pEdit->SetText(text); | 53 m_pEdit->SetText(text); |
| 54 } | 54 } |
| 55 | 55 |
| 56 void CFX_ListItem::SetFontSize(FX_FLOAT fFontSize) { | 56 void CFX_ListItem::SetFontSize(FX_FLOAT fFontSize) { |
| 57 m_pEdit->SetFontSize(fFontSize); | 57 m_pEdit->SetFontSize(fFontSize); |
| 58 } | 58 } |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 for (int32_t i = 0, sz = m_aItems.GetSize(); i < sz; i++) { | 136 for (int32_t i = 0, sz = m_aItems.GetSize(); i < sz; i++) { |
| 137 if (CPLST_Select_Item* pItem = m_aItems.GetAt(i)) { | 137 if (CPLST_Select_Item* pItem = m_aItems.GetAt(i)) { |
| 138 if (pItem->nItemIndex == nItemIndex) | 138 if (pItem->nItemIndex == nItemIndex) |
| 139 return i; | 139 return i; |
| 140 } | 140 } |
| 141 } | 141 } |
| 142 | 142 |
| 143 return -1; | 143 return -1; |
| 144 } | 144 } |
| 145 | 145 |
| 146 FX_BOOL CPLST_Select::IsExist(int32_t nItemIndex) const { | 146 bool CPLST_Select::IsExist(int32_t nItemIndex) const { |
| 147 return Find(nItemIndex) >= 0; | 147 return Find(nItemIndex) >= 0; |
| 148 } | 148 } |
| 149 | 149 |
| 150 int32_t CPLST_Select::GetCount() const { | 150 int32_t CPLST_Select::GetCount() const { |
| 151 return m_aItems.GetSize(); | 151 return m_aItems.GetSize(); |
| 152 } | 152 } |
| 153 | 153 |
| 154 int32_t CPLST_Select::GetItemIndex(int32_t nIndex) const { | 154 int32_t CPLST_Select::GetItemIndex(int32_t nIndex) const { |
| 155 if (nIndex >= 0 && nIndex < m_aItems.GetSize()) | 155 if (nIndex >= 0 && nIndex < m_aItems.GetSize()) |
| 156 if (CPLST_Select_Item* pItem = m_aItems.GetAt(nIndex)) | 156 if (CPLST_Select_Item* pItem = m_aItems.GetAt(nIndex)) |
| (...skipping 26 matching lines...) Expand all Loading... |
| 183 m_aItems.RemoveAt(i); | 183 m_aItems.RemoveAt(i); |
| 184 } else { | 184 } else { |
| 185 pItem->nState = 0; | 185 pItem->nState = 0; |
| 186 } | 186 } |
| 187 } | 187 } |
| 188 } | 188 } |
| 189 } | 189 } |
| 190 | 190 |
| 191 CFX_ListCtrl::CFX_ListCtrl() | 191 CFX_ListCtrl::CFX_ListCtrl() |
| 192 : m_pNotify(nullptr), | 192 : m_pNotify(nullptr), |
| 193 m_bNotifyFlag(FALSE), | 193 m_bNotifyFlag(false), |
| 194 m_nSelItem(-1), | 194 m_nSelItem(-1), |
| 195 m_nFootIndex(-1), | 195 m_nFootIndex(-1), |
| 196 m_bCtrlSel(FALSE), | 196 m_bCtrlSel(false), |
| 197 m_nCaretIndex(-1), | 197 m_nCaretIndex(-1), |
| 198 m_fFontSize(0.0f), | 198 m_fFontSize(0.0f), |
| 199 m_pFontMap(nullptr), | 199 m_pFontMap(nullptr), |
| 200 m_bMultiple(FALSE) {} | 200 m_bMultiple(false) {} |
| 201 | 201 |
| 202 CFX_ListCtrl::~CFX_ListCtrl() { | 202 CFX_ListCtrl::~CFX_ListCtrl() { |
| 203 Empty(); | 203 Empty(); |
| 204 } | 204 } |
| 205 | 205 |
| 206 void CFX_ListCtrl::SetNotify(CPWL_List_Notify* pNotify) { | 206 void CFX_ListCtrl::SetNotify(CPWL_List_Notify* pNotify) { |
| 207 m_pNotify = pNotify; | 207 m_pNotify = pNotify; |
| 208 } | 208 } |
| 209 | 209 |
| 210 CFX_FloatPoint CFX_ListCtrl::InToOut(const CFX_FloatPoint& point) const { | 210 CFX_FloatPoint CFX_ListCtrl::InToOut(const CFX_FloatPoint& point) const { |
| (...skipping 20 matching lines...) Expand all Loading... |
| 231 | 231 |
| 232 CFX_FloatRect CFX_ListCtrl::OutToIn(const CFX_FloatRect& rect) const { | 232 CFX_FloatRect CFX_ListCtrl::OutToIn(const CFX_FloatRect& rect) const { |
| 233 CFX_FloatPoint ptLeftBottom = OutToIn(CFX_FloatPoint(rect.left, rect.bottom)); | 233 CFX_FloatPoint ptLeftBottom = OutToIn(CFX_FloatPoint(rect.left, rect.bottom)); |
| 234 CFX_FloatPoint ptRightTop = OutToIn(CFX_FloatPoint(rect.right, rect.top)); | 234 CFX_FloatPoint ptRightTop = OutToIn(CFX_FloatPoint(rect.right, rect.top)); |
| 235 | 235 |
| 236 return CFX_FloatRect(ptLeftBottom.x, ptLeftBottom.y, ptRightTop.x, | 236 return CFX_FloatRect(ptLeftBottom.x, ptLeftBottom.y, ptRightTop.x, |
| 237 ptRightTop.y); | 237 ptRightTop.y); |
| 238 } | 238 } |
| 239 | 239 |
| 240 void CFX_ListCtrl::OnMouseDown(const CFX_FloatPoint& point, | 240 void CFX_ListCtrl::OnMouseDown(const CFX_FloatPoint& point, |
| 241 FX_BOOL bShift, | 241 bool bShift, |
| 242 FX_BOOL bCtrl) { | 242 bool bCtrl) { |
| 243 int32_t nHitIndex = GetItemIndex(point); | 243 int32_t nHitIndex = GetItemIndex(point); |
| 244 | 244 |
| 245 if (IsMultipleSel()) { | 245 if (IsMultipleSel()) { |
| 246 if (bCtrl) { | 246 if (bCtrl) { |
| 247 if (IsItemSelected(nHitIndex)) { | 247 if (IsItemSelected(nHitIndex)) { |
| 248 m_aSelItems.Sub(nHitIndex); | 248 m_aSelItems.Sub(nHitIndex); |
| 249 SelectItems(); | 249 SelectItems(); |
| 250 m_bCtrlSel = FALSE; | 250 m_bCtrlSel = false; |
| 251 } else { | 251 } else { |
| 252 m_aSelItems.Add(nHitIndex); | 252 m_aSelItems.Add(nHitIndex); |
| 253 SelectItems(); | 253 SelectItems(); |
| 254 m_bCtrlSel = TRUE; | 254 m_bCtrlSel = true; |
| 255 } | 255 } |
| 256 | 256 |
| 257 m_nFootIndex = nHitIndex; | 257 m_nFootIndex = nHitIndex; |
| 258 } else if (bShift) { | 258 } else if (bShift) { |
| 259 m_aSelItems.DeselectAll(); | 259 m_aSelItems.DeselectAll(); |
| 260 m_aSelItems.Add(m_nFootIndex, nHitIndex); | 260 m_aSelItems.Add(m_nFootIndex, nHitIndex); |
| 261 SelectItems(); | 261 SelectItems(); |
| 262 } else { | 262 } else { |
| 263 m_aSelItems.DeselectAll(); | 263 m_aSelItems.DeselectAll(); |
| 264 m_aSelItems.Add(nHitIndex); | 264 m_aSelItems.Add(nHitIndex); |
| 265 SelectItems(); | 265 SelectItems(); |
| 266 | 266 |
| 267 m_nFootIndex = nHitIndex; | 267 m_nFootIndex = nHitIndex; |
| 268 } | 268 } |
| 269 | 269 |
| 270 SetCaret(nHitIndex); | 270 SetCaret(nHitIndex); |
| 271 } else { | 271 } else { |
| 272 SetSingleSelect(nHitIndex); | 272 SetSingleSelect(nHitIndex); |
| 273 } | 273 } |
| 274 | 274 |
| 275 if (!IsItemVisible(nHitIndex)) | 275 if (!IsItemVisible(nHitIndex)) |
| 276 ScrollToListItem(nHitIndex); | 276 ScrollToListItem(nHitIndex); |
| 277 } | 277 } |
| 278 | 278 |
| 279 void CFX_ListCtrl::OnMouseMove(const CFX_FloatPoint& point, | 279 void CFX_ListCtrl::OnMouseMove(const CFX_FloatPoint& point, |
| 280 FX_BOOL bShift, | 280 bool bShift, |
| 281 FX_BOOL bCtrl) { | 281 bool bCtrl) { |
| 282 int32_t nHitIndex = GetItemIndex(point); | 282 int32_t nHitIndex = GetItemIndex(point); |
| 283 | 283 |
| 284 if (IsMultipleSel()) { | 284 if (IsMultipleSel()) { |
| 285 if (bCtrl) { | 285 if (bCtrl) { |
| 286 if (m_bCtrlSel) | 286 if (m_bCtrlSel) |
| 287 m_aSelItems.Add(m_nFootIndex, nHitIndex); | 287 m_aSelItems.Add(m_nFootIndex, nHitIndex); |
| 288 else | 288 else |
| 289 m_aSelItems.Sub(m_nFootIndex, nHitIndex); | 289 m_aSelItems.Sub(m_nFootIndex, nHitIndex); |
| 290 | 290 |
| 291 SelectItems(); | 291 SelectItems(); |
| 292 } else { | 292 } else { |
| 293 m_aSelItems.DeselectAll(); | 293 m_aSelItems.DeselectAll(); |
| 294 m_aSelItems.Add(m_nFootIndex, nHitIndex); | 294 m_aSelItems.Add(m_nFootIndex, nHitIndex); |
| 295 SelectItems(); | 295 SelectItems(); |
| 296 } | 296 } |
| 297 | 297 |
| 298 SetCaret(nHitIndex); | 298 SetCaret(nHitIndex); |
| 299 } else { | 299 } else { |
| 300 SetSingleSelect(nHitIndex); | 300 SetSingleSelect(nHitIndex); |
| 301 } | 301 } |
| 302 | 302 |
| 303 if (!IsItemVisible(nHitIndex)) | 303 if (!IsItemVisible(nHitIndex)) |
| 304 ScrollToListItem(nHitIndex); | 304 ScrollToListItem(nHitIndex); |
| 305 } | 305 } |
| 306 | 306 |
| 307 void CFX_ListCtrl::OnVK(int32_t nItemIndex, FX_BOOL bShift, FX_BOOL bCtrl) { | 307 void CFX_ListCtrl::OnVK(int32_t nItemIndex, bool bShift, bool bCtrl) { |
| 308 if (IsMultipleSel()) { | 308 if (IsMultipleSel()) { |
| 309 if (nItemIndex >= 0 && nItemIndex < GetCount()) { | 309 if (nItemIndex >= 0 && nItemIndex < GetCount()) { |
| 310 if (bCtrl) { | 310 if (bCtrl) { |
| 311 } else if (bShift) { | 311 } else if (bShift) { |
| 312 m_aSelItems.DeselectAll(); | 312 m_aSelItems.DeselectAll(); |
| 313 m_aSelItems.Add(m_nFootIndex, nItemIndex); | 313 m_aSelItems.Add(m_nFootIndex, nItemIndex); |
| 314 SelectItems(); | 314 SelectItems(); |
| 315 } else { | 315 } else { |
| 316 m_aSelItems.DeselectAll(); | 316 m_aSelItems.DeselectAll(); |
| 317 m_aSelItems.Add(nItemIndex); | 317 m_aSelItems.Add(nItemIndex); |
| 318 SelectItems(); | 318 SelectItems(); |
| 319 m_nFootIndex = nItemIndex; | 319 m_nFootIndex = nItemIndex; |
| 320 } | 320 } |
| 321 | 321 |
| 322 SetCaret(nItemIndex); | 322 SetCaret(nItemIndex); |
| 323 } | 323 } |
| 324 } else { | 324 } else { |
| 325 SetSingleSelect(nItemIndex); | 325 SetSingleSelect(nItemIndex); |
| 326 } | 326 } |
| 327 | 327 |
| 328 if (!IsItemVisible(nItemIndex)) | 328 if (!IsItemVisible(nItemIndex)) |
| 329 ScrollToListItem(nItemIndex); | 329 ScrollToListItem(nItemIndex); |
| 330 } | 330 } |
| 331 | 331 |
| 332 void CFX_ListCtrl::OnVK_UP(FX_BOOL bShift, FX_BOOL bCtrl) { | 332 void CFX_ListCtrl::OnVK_UP(bool bShift, bool bCtrl) { |
| 333 OnVK(IsMultipleSel() ? GetCaret() - 1 : GetSelect() - 1, bShift, bCtrl); | 333 OnVK(IsMultipleSel() ? GetCaret() - 1 : GetSelect() - 1, bShift, bCtrl); |
| 334 } | 334 } |
| 335 | 335 |
| 336 void CFX_ListCtrl::OnVK_DOWN(FX_BOOL bShift, FX_BOOL bCtrl) { | 336 void CFX_ListCtrl::OnVK_DOWN(bool bShift, bool bCtrl) { |
| 337 OnVK(IsMultipleSel() ? GetCaret() + 1 : GetSelect() + 1, bShift, bCtrl); | 337 OnVK(IsMultipleSel() ? GetCaret() + 1 : GetSelect() + 1, bShift, bCtrl); |
| 338 } | 338 } |
| 339 | 339 |
| 340 void CFX_ListCtrl::OnVK_LEFT(FX_BOOL bShift, FX_BOOL bCtrl) { | 340 void CFX_ListCtrl::OnVK_LEFT(bool bShift, bool bCtrl) { |
| 341 OnVK(0, bShift, bCtrl); | 341 OnVK(0, bShift, bCtrl); |
| 342 } | 342 } |
| 343 | 343 |
| 344 void CFX_ListCtrl::OnVK_RIGHT(FX_BOOL bShift, FX_BOOL bCtrl) { | 344 void CFX_ListCtrl::OnVK_RIGHT(bool bShift, bool bCtrl) { |
| 345 OnVK(GetCount() - 1, bShift, bCtrl); | 345 OnVK(GetCount() - 1, bShift, bCtrl); |
| 346 } | 346 } |
| 347 | 347 |
| 348 void CFX_ListCtrl::OnVK_HOME(FX_BOOL bShift, FX_BOOL bCtrl) { | 348 void CFX_ListCtrl::OnVK_HOME(bool bShift, bool bCtrl) { |
| 349 OnVK(0, bShift, bCtrl); | 349 OnVK(0, bShift, bCtrl); |
| 350 } | 350 } |
| 351 | 351 |
| 352 void CFX_ListCtrl::OnVK_END(FX_BOOL bShift, FX_BOOL bCtrl) { | 352 void CFX_ListCtrl::OnVK_END(bool bShift, bool bCtrl) { |
| 353 OnVK(GetCount() - 1, bShift, bCtrl); | 353 OnVK(GetCount() - 1, bShift, bCtrl); |
| 354 } | 354 } |
| 355 | 355 |
| 356 FX_BOOL CFX_ListCtrl::OnChar(uint16_t nChar, FX_BOOL bShift, FX_BOOL bCtrl) { | 356 bool CFX_ListCtrl::OnChar(uint16_t nChar, bool bShift, bool bCtrl) { |
| 357 int32_t nIndex = GetLastSelected(); | 357 int32_t nIndex = GetLastSelected(); |
| 358 int32_t nFindIndex = FindNext(nIndex, nChar); | 358 int32_t nFindIndex = FindNext(nIndex, nChar); |
| 359 | 359 |
| 360 if (nFindIndex != nIndex) { | 360 if (nFindIndex != nIndex) { |
| 361 OnVK(nFindIndex, bShift, bCtrl); | 361 OnVK(nFindIndex, bShift, bCtrl); |
| 362 return TRUE; | 362 return true; |
| 363 } | 363 } |
| 364 return FALSE; | 364 return false; |
| 365 } | 365 } |
| 366 | 366 |
| 367 void CFX_ListCtrl::SetPlateRect(const CFX_FloatRect& rect) { | 367 void CFX_ListCtrl::SetPlateRect(const CFX_FloatRect& rect) { |
| 368 CFX_ListContainer::SetPlateRect(rect); | 368 CFX_ListContainer::SetPlateRect(rect); |
| 369 m_ptScrollPos.x = rect.left; | 369 m_ptScrollPos.x = rect.left; |
| 370 SetScrollPos(CFX_FloatPoint(rect.left, rect.top)); | 370 SetScrollPos(CFX_FloatPoint(rect.left, rect.top)); |
| 371 ReArrange(0); | 371 ReArrange(0); |
| 372 InvalidateItem(-1); | 372 InvalidateItem(-1); |
| 373 } | 373 } |
| 374 | 374 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 393 | 393 |
| 394 int32_t CFX_ListCtrl::GetSelect() const { | 394 int32_t CFX_ListCtrl::GetSelect() const { |
| 395 return m_nSelItem; | 395 return m_nSelItem; |
| 396 } | 396 } |
| 397 | 397 |
| 398 void CFX_ListCtrl::AddString(const CFX_WideString& str) { | 398 void CFX_ListCtrl::AddString(const CFX_WideString& str) { |
| 399 AddItem(str); | 399 AddItem(str); |
| 400 ReArrange(GetCount() - 1); | 400 ReArrange(GetCount() - 1); |
| 401 } | 401 } |
| 402 | 402 |
| 403 void CFX_ListCtrl::SetMultipleSelect(int32_t nItemIndex, FX_BOOL bSelected) { | 403 void CFX_ListCtrl::SetMultipleSelect(int32_t nItemIndex, bool bSelected) { |
| 404 if (!IsValid(nItemIndex)) | 404 if (!IsValid(nItemIndex)) |
| 405 return; | 405 return; |
| 406 | 406 |
| 407 if (bSelected != IsItemSelected(nItemIndex)) { | 407 if (bSelected != IsItemSelected(nItemIndex)) { |
| 408 if (bSelected) { | 408 if (bSelected) { |
| 409 SetItemSelect(nItemIndex, TRUE); | 409 SetItemSelect(nItemIndex, true); |
| 410 InvalidateItem(nItemIndex); | 410 InvalidateItem(nItemIndex); |
| 411 } else { | 411 } else { |
| 412 SetItemSelect(nItemIndex, FALSE); | 412 SetItemSelect(nItemIndex, false); |
| 413 InvalidateItem(nItemIndex); | 413 InvalidateItem(nItemIndex); |
| 414 } | 414 } |
| 415 } | 415 } |
| 416 } | 416 } |
| 417 | 417 |
| 418 void CFX_ListCtrl::SetSingleSelect(int32_t nItemIndex) { | 418 void CFX_ListCtrl::SetSingleSelect(int32_t nItemIndex) { |
| 419 if (!IsValid(nItemIndex)) | 419 if (!IsValid(nItemIndex)) |
| 420 return; | 420 return; |
| 421 | 421 |
| 422 if (m_nSelItem != nItemIndex) { | 422 if (m_nSelItem != nItemIndex) { |
| 423 if (m_nSelItem >= 0) { | 423 if (m_nSelItem >= 0) { |
| 424 SetItemSelect(m_nSelItem, FALSE); | 424 SetItemSelect(m_nSelItem, false); |
| 425 InvalidateItem(m_nSelItem); | 425 InvalidateItem(m_nSelItem); |
| 426 } | 426 } |
| 427 | 427 |
| 428 SetItemSelect(nItemIndex, TRUE); | 428 SetItemSelect(nItemIndex, true); |
| 429 InvalidateItem(nItemIndex); | 429 InvalidateItem(nItemIndex); |
| 430 m_nSelItem = nItemIndex; | 430 m_nSelItem = nItemIndex; |
| 431 } | 431 } |
| 432 } | 432 } |
| 433 | 433 |
| 434 void CFX_ListCtrl::SetCaret(int32_t nItemIndex) { | 434 void CFX_ListCtrl::SetCaret(int32_t nItemIndex) { |
| 435 if (!IsValid(nItemIndex)) | 435 if (!IsValid(nItemIndex)) |
| 436 return; | 436 return; |
| 437 | 437 |
| 438 if (IsMultipleSel()) { | 438 if (IsMultipleSel()) { |
| 439 int32_t nOldIndex = m_nCaretIndex; | 439 int32_t nOldIndex = m_nCaretIndex; |
| 440 | 440 |
| 441 if (nOldIndex != nItemIndex) { | 441 if (nOldIndex != nItemIndex) { |
| 442 m_nCaretIndex = nItemIndex; | 442 m_nCaretIndex = nItemIndex; |
| 443 InvalidateItem(nOldIndex); | 443 InvalidateItem(nOldIndex); |
| 444 InvalidateItem(nItemIndex); | 444 InvalidateItem(nItemIndex); |
| 445 } | 445 } |
| 446 } | 446 } |
| 447 } | 447 } |
| 448 | 448 |
| 449 void CFX_ListCtrl::InvalidateItem(int32_t nItemIndex) { | 449 void CFX_ListCtrl::InvalidateItem(int32_t nItemIndex) { |
| 450 if (m_pNotify) { | 450 if (m_pNotify) { |
| 451 if (nItemIndex == -1) { | 451 if (nItemIndex == -1) { |
| 452 if (!m_bNotifyFlag) { | 452 if (!m_bNotifyFlag) { |
| 453 m_bNotifyFlag = TRUE; | 453 m_bNotifyFlag = true; |
| 454 CFX_FloatRect rcRefresh = GetPlateRect(); | 454 CFX_FloatRect rcRefresh = GetPlateRect(); |
| 455 m_pNotify->IOnInvalidateRect(&rcRefresh); | 455 m_pNotify->IOnInvalidateRect(&rcRefresh); |
| 456 m_bNotifyFlag = FALSE; | 456 m_bNotifyFlag = false; |
| 457 } | 457 } |
| 458 } else { | 458 } else { |
| 459 if (!m_bNotifyFlag) { | 459 if (!m_bNotifyFlag) { |
| 460 m_bNotifyFlag = TRUE; | 460 m_bNotifyFlag = true; |
| 461 CFX_FloatRect rcRefresh = GetItemRect(nItemIndex); | 461 CFX_FloatRect rcRefresh = GetItemRect(nItemIndex); |
| 462 rcRefresh.left -= 1.0f; | 462 rcRefresh.left -= 1.0f; |
| 463 rcRefresh.right += 1.0f; | 463 rcRefresh.right += 1.0f; |
| 464 rcRefresh.bottom -= 1.0f; | 464 rcRefresh.bottom -= 1.0f; |
| 465 rcRefresh.top += 1.0f; | 465 rcRefresh.top += 1.0f; |
| 466 | 466 |
| 467 m_pNotify->IOnInvalidateRect(&rcRefresh); | 467 m_pNotify->IOnInvalidateRect(&rcRefresh); |
| 468 m_bNotifyFlag = FALSE; | 468 m_bNotifyFlag = false; |
| 469 } | 469 } |
| 470 } | 470 } |
| 471 } | 471 } |
| 472 } | 472 } |
| 473 | 473 |
| 474 void CFX_ListCtrl::SelectItems() { | 474 void CFX_ListCtrl::SelectItems() { |
| 475 for (int32_t i = 0, sz = m_aSelItems.GetCount(); i < sz; i++) { | 475 for (int32_t i = 0, sz = m_aSelItems.GetCount(); i < sz; i++) { |
| 476 int32_t nItemIndex = m_aSelItems.GetItemIndex(i); | 476 int32_t nItemIndex = m_aSelItems.GetItemIndex(i); |
| 477 int32_t nState = m_aSelItems.GetState(i); | 477 int32_t nState = m_aSelItems.GetState(i); |
| 478 | 478 |
| 479 switch (nState) { | 479 switch (nState) { |
| 480 case 1: | 480 case 1: |
| 481 SetMultipleSelect(nItemIndex, TRUE); | 481 SetMultipleSelect(nItemIndex, true); |
| 482 break; | 482 break; |
| 483 case -1: | 483 case -1: |
| 484 SetMultipleSelect(nItemIndex, FALSE); | 484 SetMultipleSelect(nItemIndex, false); |
| 485 break; | 485 break; |
| 486 } | 486 } |
| 487 } | 487 } |
| 488 | 488 |
| 489 m_aSelItems.Done(); | 489 m_aSelItems.Done(); |
| 490 } | 490 } |
| 491 | 491 |
| 492 void CFX_ListCtrl::Select(int32_t nItemIndex) { | 492 void CFX_ListCtrl::Select(int32_t nItemIndex) { |
| 493 if (!IsValid(nItemIndex)) | 493 if (!IsValid(nItemIndex)) |
| 494 return; | 494 return; |
| 495 | 495 |
| 496 if (IsMultipleSel()) { | 496 if (IsMultipleSel()) { |
| 497 m_aSelItems.Add(nItemIndex); | 497 m_aSelItems.Add(nItemIndex); |
| 498 SelectItems(); | 498 SelectItems(); |
| 499 } else { | 499 } else { |
| 500 SetSingleSelect(nItemIndex); | 500 SetSingleSelect(nItemIndex); |
| 501 } | 501 } |
| 502 } | 502 } |
| 503 | 503 |
| 504 FX_BOOL CFX_ListCtrl::IsItemVisible(int32_t nItemIndex) const { | 504 bool CFX_ListCtrl::IsItemVisible(int32_t nItemIndex) const { |
| 505 CFX_FloatRect rcPlate = GetPlateRect(); | 505 CFX_FloatRect rcPlate = GetPlateRect(); |
| 506 CFX_FloatRect rcItem = GetItemRect(nItemIndex); | 506 CFX_FloatRect rcItem = GetItemRect(nItemIndex); |
| 507 | 507 |
| 508 return rcItem.bottom >= rcPlate.bottom && rcItem.top <= rcPlate.top; | 508 return rcItem.bottom >= rcPlate.bottom && rcItem.top <= rcPlate.top; |
| 509 } | 509 } |
| 510 | 510 |
| 511 void CFX_ListCtrl::ScrollToListItem(int32_t nItemIndex) { | 511 void CFX_ListCtrl::ScrollToListItem(int32_t nItemIndex) { |
| 512 if (!IsValid(nItemIndex)) | 512 if (!IsValid(nItemIndex)) |
| 513 return; | 513 return; |
| 514 | 514 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 526 } | 526 } |
| 527 } | 527 } |
| 528 } | 528 } |
| 529 | 529 |
| 530 void CFX_ListCtrl::SetScrollInfo() { | 530 void CFX_ListCtrl::SetScrollInfo() { |
| 531 if (m_pNotify) { | 531 if (m_pNotify) { |
| 532 CFX_FloatRect rcPlate = GetPlateRect(); | 532 CFX_FloatRect rcPlate = GetPlateRect(); |
| 533 CFX_FloatRect rcContent = GetContentRectInternal(); | 533 CFX_FloatRect rcContent = GetContentRectInternal(); |
| 534 | 534 |
| 535 if (!m_bNotifyFlag) { | 535 if (!m_bNotifyFlag) { |
| 536 m_bNotifyFlag = TRUE; | 536 m_bNotifyFlag = true; |
| 537 m_pNotify->IOnSetScrollInfoY(rcPlate.bottom, rcPlate.top, | 537 m_pNotify->IOnSetScrollInfoY(rcPlate.bottom, rcPlate.top, |
| 538 rcContent.bottom, rcContent.top, | 538 rcContent.bottom, rcContent.top, |
| 539 GetFirstHeight(), rcPlate.Height()); | 539 GetFirstHeight(), rcPlate.Height()); |
| 540 m_bNotifyFlag = FALSE; | 540 m_bNotifyFlag = false; |
| 541 } | 541 } |
| 542 } | 542 } |
| 543 } | 543 } |
| 544 | 544 |
| 545 void CFX_ListCtrl::SetScrollPos(const CFX_FloatPoint& point) { | 545 void CFX_ListCtrl::SetScrollPos(const CFX_FloatPoint& point) { |
| 546 SetScrollPosY(point.y); | 546 SetScrollPosY(point.y); |
| 547 } | 547 } |
| 548 | 548 |
| 549 void CFX_ListCtrl::SetScrollPosY(FX_FLOAT fy) { | 549 void CFX_ListCtrl::SetScrollPosY(FX_FLOAT fy) { |
| 550 if (!IsFloatEqual(m_ptScrollPos.y, fy)) { | 550 if (!IsFloatEqual(m_ptScrollPos.y, fy)) { |
| 551 CFX_FloatRect rcPlate = GetPlateRect(); | 551 CFX_FloatRect rcPlate = GetPlateRect(); |
| 552 CFX_FloatRect rcContent = GetContentRectInternal(); | 552 CFX_FloatRect rcContent = GetContentRectInternal(); |
| 553 | 553 |
| 554 if (rcPlate.Height() > rcContent.Height()) { | 554 if (rcPlate.Height() > rcContent.Height()) { |
| 555 fy = rcPlate.top; | 555 fy = rcPlate.top; |
| 556 } else { | 556 } else { |
| 557 if (IsFloatSmaller(fy - rcPlate.Height(), rcContent.bottom)) { | 557 if (IsFloatSmaller(fy - rcPlate.Height(), rcContent.bottom)) { |
| 558 fy = rcContent.bottom + rcPlate.Height(); | 558 fy = rcContent.bottom + rcPlate.Height(); |
| 559 } else if (IsFloatBigger(fy, rcContent.top)) { | 559 } else if (IsFloatBigger(fy, rcContent.top)) { |
| 560 fy = rcContent.top; | 560 fy = rcContent.top; |
| 561 } | 561 } |
| 562 } | 562 } |
| 563 | 563 |
| 564 m_ptScrollPos.y = fy; | 564 m_ptScrollPos.y = fy; |
| 565 InvalidateItem(-1); | 565 InvalidateItem(-1); |
| 566 | 566 |
| 567 if (m_pNotify) { | 567 if (m_pNotify) { |
| 568 if (!m_bNotifyFlag) { | 568 if (!m_bNotifyFlag) { |
| 569 m_bNotifyFlag = TRUE; | 569 m_bNotifyFlag = true; |
| 570 m_pNotify->IOnSetScrollPosY(fy); | 570 m_pNotify->IOnSetScrollPosY(fy); |
| 571 m_bNotifyFlag = FALSE; | 571 m_bNotifyFlag = false; |
| 572 } | 572 } |
| 573 } | 573 } |
| 574 } | 574 } |
| 575 } | 575 } |
| 576 | 576 |
| 577 CFX_FloatRect CFX_ListCtrl::GetContentRectInternal() const { | 577 CFX_FloatRect CFX_ListCtrl::GetContentRectInternal() const { |
| 578 return InnerToOuter(CFX_ListContainer::GetContentRect()); | 578 return InnerToOuter(CFX_ListContainer::GetContentRect()); |
| 579 } | 579 } |
| 580 | 580 |
| 581 CFX_FloatRect CFX_ListCtrl::GetContentRect() const { | 581 CFX_FloatRect CFX_ListCtrl::GetContentRect() const { |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 626 InvalidateItem(-1); | 626 InvalidateItem(-1); |
| 627 } | 627 } |
| 628 | 628 |
| 629 void CFX_ListCtrl::Cancel() { | 629 void CFX_ListCtrl::Cancel() { |
| 630 m_aSelItems.DeselectAll(); | 630 m_aSelItems.DeselectAll(); |
| 631 } | 631 } |
| 632 | 632 |
| 633 int32_t CFX_ListCtrl::GetItemIndex(const CFX_FloatPoint& point) const { | 633 int32_t CFX_ListCtrl::GetItemIndex(const CFX_FloatPoint& point) const { |
| 634 CFX_FloatPoint pt = OuterToInner(OutToIn(point)); | 634 CFX_FloatPoint pt = OuterToInner(OutToIn(point)); |
| 635 | 635 |
| 636 FX_BOOL bFirst = TRUE; | 636 bool bFirst = true; |
| 637 FX_BOOL bLast = TRUE; | 637 bool bLast = true; |
| 638 | 638 |
| 639 for (int32_t i = 0, sz = m_aListItems.GetSize(); i < sz; i++) { | 639 for (int32_t i = 0, sz = m_aListItems.GetSize(); i < sz; i++) { |
| 640 if (CFX_ListItem* pListItem = m_aListItems.GetAt(i)) { | 640 if (CFX_ListItem* pListItem = m_aListItems.GetAt(i)) { |
| 641 CLST_Rect rcListItem = pListItem->GetRect(); | 641 CLST_Rect rcListItem = pListItem->GetRect(); |
| 642 | 642 |
| 643 if (IsFloatBigger(pt.y, rcListItem.top)) { | 643 if (IsFloatBigger(pt.y, rcListItem.top)) { |
| 644 bFirst = FALSE; | 644 bFirst = false; |
| 645 } | 645 } |
| 646 | 646 |
| 647 if (IsFloatSmaller(pt.y, rcListItem.bottom)) { | 647 if (IsFloatSmaller(pt.y, rcListItem.bottom)) { |
| 648 bLast = FALSE; | 648 bLast = false; |
| 649 } | 649 } |
| 650 | 650 |
| 651 if (pt.y >= rcListItem.top && pt.y < rcListItem.bottom) { | 651 if (pt.y >= rcListItem.top && pt.y < rcListItem.bottom) { |
| 652 return i; | 652 return i; |
| 653 } | 653 } |
| 654 } | 654 } |
| 655 } | 655 } |
| 656 | 656 |
| 657 if (bFirst) | 657 if (bFirst) |
| 658 return 0; | 658 return 0; |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 748 | 748 |
| 749 if (CFX_ListItem* pListItem = m_aListItems.GetAt(nCircleIndex)) { | 749 if (CFX_ListItem* pListItem = m_aListItems.GetAt(nCircleIndex)) { |
| 750 if (Toupper(pListItem->GetFirstChar()) == Toupper(nChar)) | 750 if (Toupper(pListItem->GetFirstChar()) == Toupper(nChar)) |
| 751 return nCircleIndex; | 751 return nCircleIndex; |
| 752 } | 752 } |
| 753 } | 753 } |
| 754 | 754 |
| 755 return nCircleIndex; | 755 return nCircleIndex; |
| 756 } | 756 } |
| 757 | 757 |
| 758 FX_BOOL CFX_ListCtrl::IsItemSelected(int32_t nIndex) const { | 758 bool CFX_ListCtrl::IsItemSelected(int32_t nIndex) const { |
| 759 if (CFX_ListItem* pListItem = m_aListItems.GetAt(nIndex)) | 759 if (CFX_ListItem* pListItem = m_aListItems.GetAt(nIndex)) |
| 760 return pListItem->IsSelected(); | 760 return pListItem->IsSelected(); |
| 761 return FALSE; | 761 return false; |
| 762 } | 762 } |
| 763 | 763 |
| 764 void CFX_ListCtrl::SetItemSelect(int32_t nItemIndex, FX_BOOL bSelected) { | 764 void CFX_ListCtrl::SetItemSelect(int32_t nItemIndex, bool bSelected) { |
| 765 if (CFX_ListItem* pListItem = m_aListItems.GetAt(nItemIndex)) { | 765 if (CFX_ListItem* pListItem = m_aListItems.GetAt(nItemIndex)) { |
| 766 pListItem->SetSelect(bSelected); | 766 pListItem->SetSelect(bSelected); |
| 767 } | 767 } |
| 768 } | 768 } |
| 769 | 769 |
| 770 void CFX_ListCtrl::SetMultipleSel(FX_BOOL bMultiple) { | 770 void CFX_ListCtrl::SetMultipleSel(bool bMultiple) { |
| 771 m_bMultiple = bMultiple; | 771 m_bMultiple = bMultiple; |
| 772 } | 772 } |
| 773 | 773 |
| 774 FX_BOOL CFX_ListCtrl::IsMultipleSel() const { | 774 bool CFX_ListCtrl::IsMultipleSel() const { |
| 775 return m_bMultiple; | 775 return m_bMultiple; |
| 776 } | 776 } |
| 777 | 777 |
| 778 FX_BOOL CFX_ListCtrl::IsValid(int32_t nItemIndex) const { | 778 bool CFX_ListCtrl::IsValid(int32_t nItemIndex) const { |
| 779 return nItemIndex >= 0 && nItemIndex < m_aListItems.GetSize(); | 779 return nItemIndex >= 0 && nItemIndex < m_aListItems.GetSize(); |
| 780 } | 780 } |
| 781 | 781 |
| 782 CFX_WideString CFX_ListCtrl::GetItemText(int32_t nIndex) const { | 782 CFX_WideString CFX_ListCtrl::GetItemText(int32_t nIndex) const { |
| 783 if (CFX_ListItem* pListItem = m_aListItems.GetAt(nIndex)) { | 783 if (CFX_ListItem* pListItem = m_aListItems.GetAt(nIndex)) { |
| 784 return pListItem->GetText(); | 784 return pListItem->GetText(); |
| 785 } | 785 } |
| 786 | 786 |
| 787 return L""; | 787 return L""; |
| 788 } | 788 } |
| OLD | NEW |