| 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/pdfwindow/PWL_ListBox.h" | 7 #include "fpdfsdk/pdfwindow/PWL_ListBox.h" |
| 8 | 8 |
| 9 #include "fpdfsdk/fxedit/fxet_edit.h" | 9 #include "fpdfsdk/fxedit/fxet_edit.h" |
| 10 #include "fpdfsdk/fxedit/fxet_list.h" | 10 #include "fpdfsdk/fxedit/fxet_list.h" |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 Info.fContentMax = fContentMax; | 35 Info.fContentMax = fContentMax; |
| 36 Info.fSmallStep = fSmallStep; | 36 Info.fSmallStep = fSmallStep; |
| 37 Info.fBigStep = fBigStep; | 37 Info.fBigStep = fBigStep; |
| 38 | 38 |
| 39 m_pList->OnNotify(m_pList, PNM_SETSCROLLINFO, SBT_VSCROLL, (intptr_t)&Info); | 39 m_pList->OnNotify(m_pList, PNM_SETSCROLLINFO, SBT_VSCROLL, (intptr_t)&Info); |
| 40 | 40 |
| 41 if (CPWL_ScrollBar* pScroll = m_pList->GetVScrollBar()) { | 41 if (CPWL_ScrollBar* pScroll = m_pList->GetVScrollBar()) { |
| 42 if (IsFloatBigger(Info.fPlateWidth, Info.fContentMax - Info.fContentMin) || | 42 if (IsFloatBigger(Info.fPlateWidth, Info.fContentMax - Info.fContentMin) || |
| 43 IsFloatEqual(Info.fPlateWidth, Info.fContentMax - Info.fContentMin)) { | 43 IsFloatEqual(Info.fPlateWidth, Info.fContentMax - Info.fContentMin)) { |
| 44 if (pScroll->IsVisible()) { | 44 if (pScroll->IsVisible()) { |
| 45 pScroll->SetVisible(FALSE); | 45 pScroll->SetVisible(false); |
| 46 m_pList->RePosChildWnd(); | 46 m_pList->RePosChildWnd(); |
| 47 } | 47 } |
| 48 } else { | 48 } else { |
| 49 if (!pScroll->IsVisible()) { | 49 if (!pScroll->IsVisible()) { |
| 50 pScroll->SetVisible(TRUE); | 50 pScroll->SetVisible(true); |
| 51 m_pList->RePosChildWnd(); | 51 m_pList->RePosChildWnd(); |
| 52 } | 52 } |
| 53 } | 53 } |
| 54 } | 54 } |
| 55 } | 55 } |
| 56 | 56 |
| 57 void CPWL_List_Notify::IOnSetScrollPosY(FX_FLOAT fy) { | 57 void CPWL_List_Notify::IOnSetScrollPosY(FX_FLOAT fy) { |
| 58 m_pList->OnNotify(m_pList, PNM_SETSCROLLPOS, SBT_VSCROLL, (intptr_t)&fy); | 58 m_pList->OnNotify(m_pList, PNM_SETSCROLLPOS, SBT_VSCROLL, (intptr_t)&fy); |
| 59 } | 59 } |
| 60 | 60 |
| 61 void CPWL_List_Notify::IOnInvalidateRect(CFX_FloatRect* pRect) { | 61 void CPWL_List_Notify::IOnInvalidateRect(CFX_FloatRect* pRect) { |
| 62 m_pList->InvalidateRect(pRect); | 62 m_pList->InvalidateRect(pRect); |
| 63 } | 63 } |
| 64 | 64 |
| 65 CPWL_ListBox::CPWL_ListBox() | 65 CPWL_ListBox::CPWL_ListBox() |
| 66 : m_pList(new CFX_ListCtrl), | 66 : m_pList(new CFX_ListCtrl), |
| 67 m_bMouseDown(FALSE), | 67 m_bMouseDown(false), |
| 68 m_bHoverSel(FALSE), | 68 m_bHoverSel(false), |
| 69 m_pFillerNotify(nullptr) {} | 69 m_pFillerNotify(nullptr) {} |
| 70 | 70 |
| 71 CPWL_ListBox::~CPWL_ListBox() { | 71 CPWL_ListBox::~CPWL_ListBox() { |
| 72 } | 72 } |
| 73 | 73 |
| 74 CFX_ByteString CPWL_ListBox::GetClassName() const { | 74 CFX_ByteString CPWL_ListBox::GetClassName() const { |
| 75 return "CPWL_ListBox"; | 75 return "CPWL_ListBox"; |
| 76 } | 76 } |
| 77 | 77 |
| 78 void CPWL_ListBox::OnCreated() { | 78 void CPWL_ListBox::OnCreated() { |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 186 } else { | 186 } else { |
| 187 CFX_SystemHandler* pSysHandler = GetSystemHandler(); | 187 CFX_SystemHandler* pSysHandler = GetSystemHandler(); |
| 188 CFX_Edit::DrawEdit(pDevice, pUser2Device, m_pList->GetItemEdit(i), | 188 CFX_Edit::DrawEdit(pDevice, pUser2Device, m_pList->GetItemEdit(i), |
| 189 CPWL_Utils::PWLColorToFXColor(GetTextColor()), | 189 CPWL_Utils::PWLColorToFXColor(GetTextColor()), |
| 190 CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor()), | 190 CPWL_Utils::PWLColorToFXColor(GetTextStrokeColor()), |
| 191 rcList, ptOffset, nullptr, pSysHandler, nullptr); | 191 rcList, ptOffset, nullptr, pSysHandler, nullptr); |
| 192 } | 192 } |
| 193 } | 193 } |
| 194 } | 194 } |
| 195 | 195 |
| 196 FX_BOOL CPWL_ListBox::OnKeyDown(uint16_t nChar, uint32_t nFlag) { | 196 bool CPWL_ListBox::OnKeyDown(uint16_t nChar, uint32_t nFlag) { |
| 197 CPWL_Wnd::OnKeyDown(nChar, nFlag); | 197 CPWL_Wnd::OnKeyDown(nChar, nFlag); |
| 198 | 198 |
| 199 switch (nChar) { | 199 switch (nChar) { |
| 200 default: | 200 default: |
| 201 return FALSE; | 201 return false; |
| 202 case FWL_VKEY_Up: | 202 case FWL_VKEY_Up: |
| 203 case FWL_VKEY_Down: | 203 case FWL_VKEY_Down: |
| 204 case FWL_VKEY_Home: | 204 case FWL_VKEY_Home: |
| 205 case FWL_VKEY_Left: | 205 case FWL_VKEY_Left: |
| 206 case FWL_VKEY_End: | 206 case FWL_VKEY_End: |
| 207 case FWL_VKEY_Right: | 207 case FWL_VKEY_Right: |
| 208 break; | 208 break; |
| 209 } | 209 } |
| 210 | 210 |
| 211 switch (nChar) { | 211 switch (nChar) { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 224 case FWL_VKEY_End: | 224 case FWL_VKEY_End: |
| 225 m_pList->OnVK_END(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); | 225 m_pList->OnVK_END(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); |
| 226 break; | 226 break; |
| 227 case FWL_VKEY_Right: | 227 case FWL_VKEY_Right: |
| 228 m_pList->OnVK_RIGHT(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); | 228 m_pList->OnVK_RIGHT(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); |
| 229 break; | 229 break; |
| 230 case FWL_VKEY_Delete: | 230 case FWL_VKEY_Delete: |
| 231 break; | 231 break; |
| 232 } | 232 } |
| 233 | 233 |
| 234 FX_BOOL bExit = FALSE; | 234 bool bExit = false; |
| 235 OnNotifySelChanged(TRUE, bExit, nFlag); | 235 OnNotifySelChanged(true, bExit, nFlag); |
| 236 | 236 |
| 237 return TRUE; | 237 return true; |
| 238 } | 238 } |
| 239 | 239 |
| 240 FX_BOOL CPWL_ListBox::OnChar(uint16_t nChar, uint32_t nFlag) { | 240 bool CPWL_ListBox::OnChar(uint16_t nChar, uint32_t nFlag) { |
| 241 CPWL_Wnd::OnChar(nChar, nFlag); | 241 CPWL_Wnd::OnChar(nChar, nFlag); |
| 242 | 242 |
| 243 if (!m_pList->OnChar(nChar, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag))) | 243 if (!m_pList->OnChar(nChar, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag))) |
| 244 return FALSE; | 244 return false; |
| 245 | 245 |
| 246 FX_BOOL bExit = FALSE; | 246 bool bExit = false; |
| 247 OnNotifySelChanged(TRUE, bExit, nFlag); | 247 OnNotifySelChanged(true, bExit, nFlag); |
| 248 | 248 |
| 249 return TRUE; | 249 return true; |
| 250 } | 250 } |
| 251 | 251 |
| 252 FX_BOOL CPWL_ListBox::OnLButtonDown(const CFX_FloatPoint& point, | 252 bool CPWL_ListBox::OnLButtonDown(const CFX_FloatPoint& point, uint32_t nFlag) { |
| 253 uint32_t nFlag) { | |
| 254 CPWL_Wnd::OnLButtonDown(point, nFlag); | 253 CPWL_Wnd::OnLButtonDown(point, nFlag); |
| 255 | 254 |
| 256 if (ClientHitTest(point)) { | 255 if (ClientHitTest(point)) { |
| 257 m_bMouseDown = TRUE; | 256 m_bMouseDown = true; |
| 258 SetFocus(); | 257 SetFocus(); |
| 259 SetCapture(); | 258 SetCapture(); |
| 260 | 259 |
| 261 m_pList->OnMouseDown(point, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); | 260 m_pList->OnMouseDown(point, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); |
| 262 } | 261 } |
| 263 | 262 |
| 264 return TRUE; | 263 return true; |
| 265 } | 264 } |
| 266 | 265 |
| 267 FX_BOOL CPWL_ListBox::OnLButtonUp(const CFX_FloatPoint& point, uint32_t nFlag) { | 266 bool CPWL_ListBox::OnLButtonUp(const CFX_FloatPoint& point, uint32_t nFlag) { |
| 268 CPWL_Wnd::OnLButtonUp(point, nFlag); | 267 CPWL_Wnd::OnLButtonUp(point, nFlag); |
| 269 | 268 |
| 270 if (m_bMouseDown) { | 269 if (m_bMouseDown) { |
| 271 ReleaseCapture(); | 270 ReleaseCapture(); |
| 272 m_bMouseDown = FALSE; | 271 m_bMouseDown = false; |
| 273 } | 272 } |
| 274 | 273 |
| 275 FX_BOOL bExit = FALSE; | 274 bool bExit = false; |
| 276 OnNotifySelChanged(FALSE, bExit, nFlag); | 275 OnNotifySelChanged(false, bExit, nFlag); |
| 277 | 276 |
| 278 return TRUE; | 277 return true; |
| 279 } | 278 } |
| 280 | 279 |
| 281 void CPWL_ListBox::SetHoverSel(FX_BOOL bHoverSel) { | 280 void CPWL_ListBox::SetHoverSel(bool bHoverSel) { |
| 282 m_bHoverSel = bHoverSel; | 281 m_bHoverSel = bHoverSel; |
| 283 } | 282 } |
| 284 | 283 |
| 285 FX_BOOL CPWL_ListBox::OnMouseMove(const CFX_FloatPoint& point, uint32_t nFlag) { | 284 bool CPWL_ListBox::OnMouseMove(const CFX_FloatPoint& point, uint32_t nFlag) { |
| 286 CPWL_Wnd::OnMouseMove(point, nFlag); | 285 CPWL_Wnd::OnMouseMove(point, nFlag); |
| 287 | 286 |
| 288 if (m_bHoverSel && !IsCaptureMouse() && ClientHitTest(point)) | 287 if (m_bHoverSel && !IsCaptureMouse() && ClientHitTest(point)) |
| 289 m_pList->Select(m_pList->GetItemIndex(point)); | 288 m_pList->Select(m_pList->GetItemIndex(point)); |
| 290 if (m_bMouseDown) | 289 if (m_bMouseDown) |
| 291 m_pList->OnMouseMove(point, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); | 290 m_pList->OnMouseMove(point, IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); |
| 292 | 291 |
| 293 return TRUE; | 292 return true; |
| 294 } | 293 } |
| 295 | 294 |
| 296 void CPWL_ListBox::OnNotify(CPWL_Wnd* pWnd, | 295 void CPWL_ListBox::OnNotify(CPWL_Wnd* pWnd, |
| 297 uint32_t msg, | 296 uint32_t msg, |
| 298 intptr_t wParam, | 297 intptr_t wParam, |
| 299 intptr_t lParam) { | 298 intptr_t lParam) { |
| 300 CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam); | 299 CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam); |
| 301 | 300 |
| 302 FX_FLOAT fPos; | 301 FX_FLOAT fPos; |
| 303 | 302 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 334 void CPWL_ListBox::KillFocus() { | 333 void CPWL_ListBox::KillFocus() { |
| 335 CPWL_Wnd::KillFocus(); | 334 CPWL_Wnd::KillFocus(); |
| 336 } | 335 } |
| 337 | 336 |
| 338 void CPWL_ListBox::RePosChildWnd() { | 337 void CPWL_ListBox::RePosChildWnd() { |
| 339 CPWL_Wnd::RePosChildWnd(); | 338 CPWL_Wnd::RePosChildWnd(); |
| 340 | 339 |
| 341 m_pList->SetPlateRect(GetListRect()); | 340 m_pList->SetPlateRect(GetListRect()); |
| 342 } | 341 } |
| 343 | 342 |
| 344 void CPWL_ListBox::OnNotifySelChanged(FX_BOOL bKeyDown, | 343 void CPWL_ListBox::OnNotifySelChanged(bool bKeyDown, |
| 345 FX_BOOL& bExit, | 344 bool& bExit, |
| 346 uint32_t nFlag) { | 345 uint32_t nFlag) { |
| 347 if (!m_pFillerNotify) | 346 if (!m_pFillerNotify) |
| 348 return; | 347 return; |
| 349 | 348 |
| 350 FX_BOOL bRC = TRUE; | 349 bool bRC = true; |
| 351 CFX_WideString swChange = GetText(); | 350 CFX_WideString swChange = GetText(); |
| 352 CFX_WideString strChangeEx; | 351 CFX_WideString strChangeEx; |
| 353 int nSelStart = 0; | 352 int nSelStart = 0; |
| 354 int nSelEnd = swChange.GetLength(); | 353 int nSelEnd = swChange.GetLength(); |
| 355 m_pFillerNotify->OnBeforeKeyStroke(GetAttachedData(), swChange, strChangeEx, | 354 m_pFillerNotify->OnBeforeKeyStroke(GetAttachedData(), swChange, strChangeEx, |
| 356 nSelStart, nSelEnd, bKeyDown, bRC, bExit, | 355 nSelStart, nSelEnd, bKeyDown, bRC, bExit, |
| 357 nFlag); | 356 nFlag); |
| 358 } | 357 } |
| 359 | 358 |
| 360 CFX_FloatRect CPWL_ListBox::GetFocusRect() const { | 359 CFX_FloatRect CPWL_ListBox::GetFocusRect() const { |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 400 } | 399 } |
| 401 | 400 |
| 402 void CPWL_ListBox::ResetContent() { | 401 void CPWL_ListBox::ResetContent() { |
| 403 m_pList->Empty(); | 402 m_pList->Empty(); |
| 404 } | 403 } |
| 405 | 404 |
| 406 void CPWL_ListBox::Reset() { | 405 void CPWL_ListBox::Reset() { |
| 407 m_pList->Cancel(); | 406 m_pList->Cancel(); |
| 408 } | 407 } |
| 409 | 408 |
| 410 FX_BOOL CPWL_ListBox::IsMultipleSel() const { | 409 bool CPWL_ListBox::IsMultipleSel() const { |
| 411 return m_pList->IsMultipleSel(); | 410 return m_pList->IsMultipleSel(); |
| 412 } | 411 } |
| 413 | 412 |
| 414 int32_t CPWL_ListBox::GetCaretIndex() const { | 413 int32_t CPWL_ListBox::GetCaretIndex() const { |
| 415 return m_pList->GetCaret(); | 414 return m_pList->GetCaret(); |
| 416 } | 415 } |
| 417 | 416 |
| 418 int32_t CPWL_ListBox::GetCurSel() const { | 417 int32_t CPWL_ListBox::GetCurSel() const { |
| 419 return m_pList->GetSelect(); | 418 return m_pList->GetSelect(); |
| 420 } | 419 } |
| 421 | 420 |
| 422 FX_BOOL CPWL_ListBox::IsItemSelected(int32_t nItemIndex) const { | 421 bool CPWL_ListBox::IsItemSelected(int32_t nItemIndex) const { |
| 423 return m_pList->IsItemSelected(nItemIndex); | 422 return m_pList->IsItemSelected(nItemIndex); |
| 424 } | 423 } |
| 425 | 424 |
| 426 int32_t CPWL_ListBox::GetTopVisibleIndex() const { | 425 int32_t CPWL_ListBox::GetTopVisibleIndex() const { |
| 427 m_pList->ScrollToListItem(m_pList->GetFirstSelected()); | 426 m_pList->ScrollToListItem(m_pList->GetFirstSelected()); |
| 428 return m_pList->GetTopItem(); | 427 return m_pList->GetTopItem(); |
| 429 } | 428 } |
| 430 | 429 |
| 431 int32_t CPWL_ListBox::GetCount() const { | 430 int32_t CPWL_ListBox::GetCount() const { |
| 432 return m_pList->GetCount(); | 431 return m_pList->GetCount(); |
| 433 } | 432 } |
| 434 | 433 |
| 435 int32_t CPWL_ListBox::FindNext(int32_t nIndex, FX_WCHAR nChar) const { | 434 int32_t CPWL_ListBox::FindNext(int32_t nIndex, FX_WCHAR nChar) const { |
| 436 return m_pList->FindNext(nIndex, nChar); | 435 return m_pList->FindNext(nIndex, nChar); |
| 437 } | 436 } |
| 438 | 437 |
| 439 CFX_FloatRect CPWL_ListBox::GetContentRect() const { | 438 CFX_FloatRect CPWL_ListBox::GetContentRect() const { |
| 440 return m_pList->GetContentRect(); | 439 return m_pList->GetContentRect(); |
| 441 } | 440 } |
| 442 | 441 |
| 443 FX_FLOAT CPWL_ListBox::GetFirstHeight() const { | 442 FX_FLOAT CPWL_ListBox::GetFirstHeight() const { |
| 444 return m_pList->GetFirstHeight(); | 443 return m_pList->GetFirstHeight(); |
| 445 } | 444 } |
| 446 | 445 |
| 447 CFX_FloatRect CPWL_ListBox::GetListRect() const { | 446 CFX_FloatRect CPWL_ListBox::GetListRect() const { |
| 448 return CPWL_Utils::DeflateRect( | 447 return CPWL_Utils::DeflateRect( |
| 449 GetWindowRect(), (FX_FLOAT)(GetBorderWidth() + GetInnerBorderWidth())); | 448 GetWindowRect(), (FX_FLOAT)(GetBorderWidth() + GetInnerBorderWidth())); |
| 450 } | 449 } |
| 451 | 450 |
| 452 FX_BOOL CPWL_ListBox::OnMouseWheel(short zDelta, | 451 bool CPWL_ListBox::OnMouseWheel(short zDelta, |
| 453 const CFX_FloatPoint& point, | 452 const CFX_FloatPoint& point, |
| 454 uint32_t nFlag) { | 453 uint32_t nFlag) { |
| 455 if (zDelta < 0) | 454 if (zDelta < 0) |
| 456 m_pList->OnVK_DOWN(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); | 455 m_pList->OnVK_DOWN(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); |
| 457 else | 456 else |
| 458 m_pList->OnVK_UP(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); | 457 m_pList->OnVK_UP(IsSHIFTpressed(nFlag), IsCTRLpressed(nFlag)); |
| 459 | 458 |
| 460 FX_BOOL bExit = FALSE; | 459 bool bExit = false; |
| 461 OnNotifySelChanged(FALSE, bExit, nFlag); | 460 OnNotifySelChanged(false, bExit, nFlag); |
| 462 return TRUE; | 461 return true; |
| 463 } | 462 } |
| OLD | NEW |