| 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/cfwl_combobox.h" | 7 #include "xfa/fwl/cfwl_combobox.h" |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <memory> | 10 #include <memory> |
| (...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 401 CFX_WideString wsText = m_pListBox->GetDataProviderItemText(hItem); | 401 CFX_WideString wsText = m_pListBox->GetDataProviderItemText(hItem); |
| 402 m_pEdit->SetText(wsText); | 402 m_pEdit->SetText(wsText); |
| 403 m_pEdit->Update(); | 403 m_pEdit->Update(); |
| 404 m_pEdit->SetSelected(); | 404 m_pEdit->SetSelected(); |
| 405 } | 405 } |
| 406 | 406 |
| 407 void CFWL_ComboBox::Layout() { | 407 void CFWL_ComboBox::Layout() { |
| 408 if (m_pWidgetMgr->IsFormDisabled()) | 408 if (m_pWidgetMgr->IsFormDisabled()) |
| 409 return DisForm_Layout(); | 409 return DisForm_Layout(); |
| 410 | 410 |
| 411 GetClientRect(m_rtClient); | 411 m_rtClient = GetClientRect(); |
| 412 FX_FLOAT* pFWidth = static_cast<FX_FLOAT*>( | 412 FX_FLOAT* pFWidth = static_cast<FX_FLOAT*>( |
| 413 GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth)); | 413 GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth)); |
| 414 if (!pFWidth) | 414 if (!pFWidth) |
| 415 return; | 415 return; |
| 416 | 416 |
| 417 FX_FLOAT fBtn = *pFWidth; | 417 FX_FLOAT fBtn = *pFWidth; |
| 418 m_rtBtn.Set(m_rtClient.right() - fBtn, m_rtClient.top, fBtn, | 418 m_rtBtn.Set(m_rtClient.right() - fBtn, m_rtClient.top, fBtn, |
| 419 m_rtClient.height); | 419 m_rtClient.height); |
| 420 if (!IsDropDownStyle() || !m_pEdit) | 420 if (!IsDropDownStyle() || !m_pEdit) |
| 421 return; | 421 return; |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 505 dwAdd |= FWL_STYLEEXT_LTB_LeftAlign; | 505 dwAdd |= FWL_STYLEEXT_LTB_LeftAlign; |
| 506 break; | 506 break; |
| 507 } | 507 } |
| 508 } | 508 } |
| 509 m_pListBox->ModifyStylesEx(dwAdd, FWL_STYLEEXT_CMB_ListItemAlignMask); | 509 m_pListBox->ModifyStylesEx(dwAdd, FWL_STYLEEXT_CMB_ListItemAlignMask); |
| 510 } | 510 } |
| 511 | 511 |
| 512 void CFWL_ComboBox::ProcessSelChanged(bool bLButtonUp) { | 512 void CFWL_ComboBox::ProcessSelChanged(bool bLButtonUp) { |
| 513 m_iCurSel = m_pListBox->GetItemIndex(this, m_pListBox->GetSelItem(0)); | 513 m_iCurSel = m_pListBox->GetItemIndex(this, m_pListBox->GetSelItem(0)); |
| 514 if (!IsDropDownStyle()) { | 514 if (!IsDropDownStyle()) { |
| 515 Repaint(&m_rtClient); | 515 RepaintRect(m_rtClient); |
| 516 return; | 516 return; |
| 517 } | 517 } |
| 518 | 518 |
| 519 CFWL_ListItem* hItem = m_pListBox->GetItem(this, m_iCurSel); | 519 CFWL_ListItem* hItem = m_pListBox->GetItem(this, m_iCurSel); |
| 520 if (!hItem) | 520 if (!hItem) |
| 521 return; | 521 return; |
| 522 | 522 |
| 523 CFX_WideString wsText = m_pListBox->GetItemText(this, hItem); | 523 CFX_WideString wsText = m_pListBox->GetItemText(this, hItem); |
| 524 if (m_pEdit) { | 524 if (m_pEdit) { |
| 525 m_pEdit->SetText(wsText); | 525 m_pEdit->SetText(wsText); |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 615 if (bActivate) { | 615 if (bActivate) { |
| 616 m_pListBox->RemoveStates(FWL_WGTSTATE_Invisible); | 616 m_pListBox->RemoveStates(FWL_WGTSTATE_Invisible); |
| 617 CFWL_Event postEvent(CFWL_Event::Type::PostDropDown, this); | 617 CFWL_Event postEvent(CFWL_Event::Type::PostDropDown, this); |
| 618 DispatchEvent(&postEvent); | 618 DispatchEvent(&postEvent); |
| 619 } else { | 619 } else { |
| 620 m_pListBox->SetStates(FWL_WGTSTATE_Invisible); | 620 m_pListBox->SetStates(FWL_WGTSTATE_Invisible); |
| 621 } | 621 } |
| 622 | 622 |
| 623 CFX_RectF rect = m_pListBox->GetWidgetRect(); | 623 CFX_RectF rect = m_pListBox->GetWidgetRect(); |
| 624 rect.Inflate(2, 2); | 624 rect.Inflate(2, 2); |
| 625 Repaint(&rect); | 625 RepaintRect(rect); |
| 626 } | 626 } |
| 627 | 627 |
| 628 void CFWL_ComboBox::DisForm_ModifyStylesEx(uint32_t dwStylesExAdded, | 628 void CFWL_ComboBox::DisForm_ModifyStylesEx(uint32_t dwStylesExAdded, |
| 629 uint32_t dwStylesExRemoved) { | 629 uint32_t dwStylesExRemoved) { |
| 630 if (!m_pEdit) | 630 if (!m_pEdit) |
| 631 DisForm_InitComboEdit(); | 631 DisForm_InitComboEdit(); |
| 632 | 632 |
| 633 bool bAddDropDown = !!(dwStylesExAdded & FWL_STYLEEXT_CMB_DropDown); | 633 bool bAddDropDown = !!(dwStylesExAdded & FWL_STYLEEXT_CMB_DropDown); |
| 634 bool bDelDropDown = !!(dwStylesExRemoved & FWL_STYLEEXT_CMB_DropDown); | 634 bool bDelDropDown = !!(dwStylesExRemoved & FWL_STYLEEXT_CMB_DropDown); |
| 635 | 635 |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 710 if (!m_pListBox || !DisForm_IsDropListVisible()) | 710 if (!m_pListBox || !DisForm_IsDropListVisible()) |
| 711 return rect; | 711 return rect; |
| 712 | 712 |
| 713 CFX_RectF rtList = m_pListBox->GetWidgetRect(); | 713 CFX_RectF rtList = m_pListBox->GetWidgetRect(); |
| 714 rtList.Offset(rect.left, rect.top); | 714 rtList.Offset(rect.left, rect.top); |
| 715 rect.Union(rtList); | 715 rect.Union(rtList); |
| 716 return rect; | 716 return rect; |
| 717 } | 717 } |
| 718 | 718 |
| 719 void CFWL_ComboBox::DisForm_Layout() { | 719 void CFWL_ComboBox::DisForm_Layout() { |
| 720 GetClientRect(m_rtClient); | 720 m_rtClient = GetClientRect(); |
| 721 m_rtContent = m_rtClient; | 721 m_rtContent = m_rtClient; |
| 722 FX_FLOAT* pFWidth = static_cast<FX_FLOAT*>( | 722 FX_FLOAT* pFWidth = static_cast<FX_FLOAT*>( |
| 723 GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth)); | 723 GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth)); |
| 724 if (!pFWidth) | 724 if (!pFWidth) |
| 725 return; | 725 return; |
| 726 | 726 |
| 727 FX_FLOAT borderWidth = 1; | 727 FX_FLOAT borderWidth = 1; |
| 728 FX_FLOAT fBtn = *pFWidth; | 728 FX_FLOAT fBtn = *pFWidth; |
| 729 if (!(GetStylesEx() & FWL_STYLEEXT_CMB_ReadOnly)) { | 729 if (!(GetStylesEx() & FWL_STYLEEXT_CMB_ReadOnly)) { |
| 730 m_rtBtn.Set(m_rtClient.right() - fBtn, m_rtClient.top + borderWidth, | 730 m_rtBtn.Set(m_rtClient.right() - fBtn, m_rtClient.top + borderWidth, |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 823 void CFWL_ComboBox::OnFocusChanged(CFWL_Message* pMsg, bool bSet) { | 823 void CFWL_ComboBox::OnFocusChanged(CFWL_Message* pMsg, bool bSet) { |
| 824 if (bSet) { | 824 if (bSet) { |
| 825 m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; | 825 m_pProperties->m_dwStates |= FWL_WGTSTATE_Focused; |
| 826 if (IsDropDownStyle() && pMsg->m_pSrcTarget != m_pListBox.get()) { | 826 if (IsDropDownStyle() && pMsg->m_pSrcTarget != m_pListBox.get()) { |
| 827 if (!m_pEdit) | 827 if (!m_pEdit) |
| 828 return; | 828 return; |
| 829 m_pEdit->SetSelected(); | 829 m_pEdit->SetSelected(); |
| 830 return; | 830 return; |
| 831 } | 831 } |
| 832 | 832 |
| 833 Repaint(&m_rtClient); | 833 RepaintRect(m_rtClient); |
| 834 return; | 834 return; |
| 835 } | 835 } |
| 836 | 836 |
| 837 m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; | 837 m_pProperties->m_dwStates &= ~FWL_WGTSTATE_Focused; |
| 838 if (!IsDropDownStyle() || pMsg->m_pDstTarget == m_pListBox.get()) { | 838 if (!IsDropDownStyle() || pMsg->m_pDstTarget == m_pListBox.get()) { |
| 839 Repaint(&m_rtClient); | 839 RepaintRect(m_rtClient); |
| 840 return; | 840 return; |
| 841 } | 841 } |
| 842 if (!m_pEdit) | 842 if (!m_pEdit) |
| 843 return; | 843 return; |
| 844 | 844 |
| 845 m_pEdit->FlagFocus(false); | 845 m_pEdit->FlagFocus(false); |
| 846 m_pEdit->ClearSelected(); | 846 m_pEdit->ClearSelected(); |
| 847 } | 847 } |
| 848 | 848 |
| 849 void CFWL_ComboBox::OnLButtonDown(CFWL_MessageMouse* pMsg) { | 849 void CFWL_ComboBox::OnLButtonDown(CFWL_MessageMouse* pMsg) { |
| 850 if (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) | 850 if (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) |
| 851 return; | 851 return; |
| 852 | 852 |
| 853 CFX_RectF& rtBtn = IsDropDownStyle() ? m_rtBtn : m_rtClient; | 853 CFX_RectF& rtBtn = IsDropDownStyle() ? m_rtBtn : m_rtClient; |
| 854 if (!rtBtn.Contains(pMsg->m_fx, pMsg->m_fy)) | 854 if (!rtBtn.Contains(pMsg->m_fx, pMsg->m_fy)) |
| 855 return; | 855 return; |
| 856 | 856 |
| 857 if (IsDropDownStyle() && m_pEdit) | 857 if (IsDropDownStyle() && m_pEdit) |
| 858 MatchEditText(); | 858 MatchEditText(); |
| 859 | 859 |
| 860 m_bLButtonDown = true; | 860 m_bLButtonDown = true; |
| 861 m_iBtnState = CFWL_PartState_Pressed; | 861 m_iBtnState = CFWL_PartState_Pressed; |
| 862 Repaint(&m_rtClient); | 862 RepaintRect(m_rtClient); |
| 863 | 863 |
| 864 ShowDropList(true); | 864 ShowDropList(true); |
| 865 m_iBtnState = CFWL_PartState_Normal; | 865 m_iBtnState = CFWL_PartState_Normal; |
| 866 Repaint(&m_rtClient); | 866 RepaintRect(m_rtClient); |
| 867 } | 867 } |
| 868 | 868 |
| 869 void CFWL_ComboBox::OnLButtonUp(CFWL_MessageMouse* pMsg) { | 869 void CFWL_ComboBox::OnLButtonUp(CFWL_MessageMouse* pMsg) { |
| 870 m_bLButtonDown = false; | 870 m_bLButtonDown = false; |
| 871 if (m_rtBtn.Contains(pMsg->m_fx, pMsg->m_fy)) | 871 if (m_rtBtn.Contains(pMsg->m_fx, pMsg->m_fy)) |
| 872 m_iBtnState = CFWL_PartState_Hovered; | 872 m_iBtnState = CFWL_PartState_Hovered; |
| 873 else | 873 else |
| 874 m_iBtnState = CFWL_PartState_Normal; | 874 m_iBtnState = CFWL_PartState_Normal; |
| 875 | 875 |
| 876 Repaint(&m_rtBtn); | 876 RepaintRect(m_rtBtn); |
| 877 } | 877 } |
| 878 | 878 |
| 879 void CFWL_ComboBox::OnMouseMove(CFWL_MessageMouse* pMsg) { | 879 void CFWL_ComboBox::OnMouseMove(CFWL_MessageMouse* pMsg) { |
| 880 int32_t iOldState = m_iBtnState; | 880 int32_t iOldState = m_iBtnState; |
| 881 if (m_rtBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { | 881 if (m_rtBtn.Contains(pMsg->m_fx, pMsg->m_fy)) { |
| 882 m_iBtnState = | 882 m_iBtnState = |
| 883 m_bLButtonDown ? CFWL_PartState_Pressed : CFWL_PartState_Hovered; | 883 m_bLButtonDown ? CFWL_PartState_Pressed : CFWL_PartState_Hovered; |
| 884 } else { | 884 } else { |
| 885 m_iBtnState = CFWL_PartState_Normal; | 885 m_iBtnState = CFWL_PartState_Normal; |
| 886 } | 886 } |
| 887 if ((iOldState != m_iBtnState) && | 887 if ((iOldState != m_iBtnState) && |
| 888 !((m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) == | 888 !((m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) == |
| 889 FWL_WGTSTATE_Disabled)) { | 889 FWL_WGTSTATE_Disabled)) { |
| 890 Repaint(&m_rtBtn); | 890 RepaintRect(m_rtBtn); |
| 891 } | 891 } |
| 892 } | 892 } |
| 893 | 893 |
| 894 void CFWL_ComboBox::OnMouseLeave(CFWL_MessageMouse* pMsg) { | 894 void CFWL_ComboBox::OnMouseLeave(CFWL_MessageMouse* pMsg) { |
| 895 if (!IsDropListVisible() && | 895 if (!IsDropListVisible() && |
| 896 !((m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) == | 896 !((m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) == |
| 897 FWL_WGTSTATE_Disabled)) { | 897 FWL_WGTSTATE_Disabled)) { |
| 898 m_iBtnState = CFWL_PartState_Normal; | 898 m_iBtnState = CFWL_PartState_Normal; |
| 899 Repaint(&m_rtBtn); | 899 RepaintRect(m_rtBtn); |
| 900 } | 900 } |
| 901 } | 901 } |
| 902 | 902 |
| 903 void CFWL_ComboBox::OnKey(CFWL_MessageKey* pMsg) { | 903 void CFWL_ComboBox::OnKey(CFWL_MessageKey* pMsg) { |
| 904 uint32_t dwKeyCode = pMsg->m_dwKeyCode; | 904 uint32_t dwKeyCode = pMsg->m_dwKeyCode; |
| 905 if (dwKeyCode == FWL_VKEY_Tab) | 905 if (dwKeyCode == FWL_VKEY_Tab) |
| 906 return; | 906 return; |
| 907 if (pMsg->m_pDstTarget == this) | 907 if (pMsg->m_pDstTarget == this) |
| 908 DoSubCtrlKey(pMsg); | 908 DoSubCtrlKey(pMsg); |
| 909 } | 909 } |
| (...skipping 26 matching lines...) Expand all Loading... |
| 936 return; | 936 return; |
| 937 if (bUp) | 937 if (bUp) |
| 938 iCurSel--; | 938 iCurSel--; |
| 939 else | 939 else |
| 940 iCurSel++; | 940 iCurSel++; |
| 941 } | 941 } |
| 942 m_iCurSel = iCurSel; | 942 m_iCurSel = iCurSel; |
| 943 if (bDropDown && m_pEdit) | 943 if (bDropDown && m_pEdit) |
| 944 SyncEditText(m_iCurSel); | 944 SyncEditText(m_iCurSel); |
| 945 else | 945 else |
| 946 Repaint(&m_rtClient); | 946 RepaintRect(m_rtClient); |
| 947 return; | 947 return; |
| 948 } | 948 } |
| 949 | 949 |
| 950 if (IsDropDownStyle()) | 950 if (IsDropDownStyle()) |
| 951 m_pEdit->GetDelegate()->OnProcessMessage(pMsg); | 951 m_pEdit->GetDelegate()->OnProcessMessage(pMsg); |
| 952 } | 952 } |
| 953 | 953 |
| 954 void CFWL_ComboBox::DisForm_OnProcessMessage(CFWL_Message* pMessage) { | 954 void CFWL_ComboBox::DisForm_OnProcessMessage(CFWL_Message* pMessage) { |
| 955 if (!pMessage) | 955 if (!pMessage) |
| 956 return; | 956 return; |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1069 else | 1069 else |
| 1070 iCurSel++; | 1070 iCurSel++; |
| 1071 } | 1071 } |
| 1072 m_iCurSel = iCurSel; | 1072 m_iCurSel = iCurSel; |
| 1073 SyncEditText(m_iCurSel); | 1073 SyncEditText(m_iCurSel); |
| 1074 return; | 1074 return; |
| 1075 } | 1075 } |
| 1076 if (m_pEdit) | 1076 if (m_pEdit) |
| 1077 m_pEdit->GetDelegate()->OnProcessMessage(pMsg); | 1077 m_pEdit->GetDelegate()->OnProcessMessage(pMsg); |
| 1078 } | 1078 } |
| OLD | NEW |