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/ifwl_combobox.h" | 7 #include "xfa/fwl/core/ifwl_combobox.h" |
8 | 8 |
9 #include "xfa/fde/cfde_txtedtengine.h" | 9 #include "xfa/fde/cfde_txtedtengine.h" |
10 #include "xfa/fde/tto/fde_textout.h" | 10 #include "xfa/fde/tto/fde_textout.h" |
11 #include "xfa/fwl/core/cfwl_message.h" | 11 #include "xfa/fwl/core/cfwl_message.h" |
12 #include "xfa/fwl/core/cfwl_themebackground.h" | 12 #include "xfa/fwl/core/cfwl_themebackground.h" |
13 #include "xfa/fwl/core/cfwl_themepart.h" | 13 #include "xfa/fwl/core/cfwl_themepart.h" |
14 #include "xfa/fwl/core/cfwl_themetext.h" | 14 #include "xfa/fwl/core/cfwl_themetext.h" |
15 #include "xfa/fwl/core/cfwl_widgetmgr.h" | 15 #include "xfa/fwl/core/cfwl_widgetmgr.h" |
16 #include "xfa/fwl/core/fwl_noteimp.h" | 16 #include "xfa/fwl/core/fwl_noteimp.h" |
17 #include "xfa/fwl/core/ifwl_app.h" | 17 #include "xfa/fwl/core/ifwl_app.h" |
18 #include "xfa/fwl/core/ifwl_comboedit.h" | 18 #include "xfa/fwl/core/ifwl_comboedit.h" |
19 #include "xfa/fwl/core/ifwl_combolist.h" | 19 #include "xfa/fwl/core/ifwl_combolist.h" |
20 #include "xfa/fwl/core/ifwl_formproxy.h" | 20 #include "xfa/fwl/core/ifwl_formproxy.h" |
21 #include "xfa/fwl/core/ifwl_themeprovider.h" | 21 #include "xfa/fwl/core/ifwl_themeprovider.h" |
22 | 22 |
23 // static | 23 IFWL_ComboBox::IFWL_ComboBox(const CFWL_WidgetImpProperties& properties) |
24 IFWL_ComboBox* IFWL_ComboBox::Create( | 24 : IFWL_Widget(properties, nullptr), |
25 const CFWL_WidgetImpProperties& properties) { | |
26 return new IFWL_ComboBox(properties, nullptr); | |
27 } | |
28 | |
29 IFWL_ComboBox::IFWL_ComboBox(const CFWL_WidgetImpProperties& properties, | |
30 IFWL_Widget* pOuter) | |
31 : IFWL_Widget(properties, pOuter), | |
32 m_pForm(nullptr), | 25 m_pForm(nullptr), |
33 m_bLButtonDown(FALSE), | 26 m_bLButtonDown(FALSE), |
34 m_iCurSel(-1), | 27 m_iCurSel(-1), |
35 m_iBtnState(CFWL_PartState_Normal), | 28 m_iBtnState(CFWL_PartState_Normal), |
36 m_fComboFormHandler(0), | 29 m_fComboFormHandler(0), |
37 m_bNeedShowList(FALSE) { | 30 m_bNeedShowList(FALSE) { |
38 m_rtClient.Reset(); | 31 m_rtClient.Reset(); |
39 m_rtBtn.Reset(); | 32 m_rtBtn.Reset(); |
40 m_rtHandler.Reset(); | 33 m_rtHandler.Reset(); |
41 } | 34 } |
(...skipping 17 matching lines...) Expand all Loading... |
59 return FWL_Error::Indefinite; | 52 return FWL_Error::Indefinite; |
60 | 53 |
61 m_pDelegate = new CFWL_ComboBoxImpDelegate(this); | 54 m_pDelegate = new CFWL_ComboBoxImpDelegate(this); |
62 CFWL_WidgetImpProperties prop; | 55 CFWL_WidgetImpProperties prop; |
63 prop.m_pThemeProvider = m_pProperties->m_pThemeProvider; | 56 prop.m_pThemeProvider = m_pProperties->m_pThemeProvider; |
64 prop.m_dwStyles |= FWL_WGTSTYLE_Border | FWL_WGTSTYLE_VScroll; | 57 prop.m_dwStyles |= FWL_WGTSTYLE_Border | FWL_WGTSTYLE_VScroll; |
65 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CMB_ListItemIconText) | 58 if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CMB_ListItemIconText) |
66 prop.m_dwStyleExes |= FWL_STYLEEXT_LTB_Icon; | 59 prop.m_dwStyleExes |= FWL_STYLEEXT_LTB_Icon; |
67 | 60 |
68 prop.m_pDataProvider = m_pProperties->m_pDataProvider; | 61 prop.m_pDataProvider = m_pProperties->m_pDataProvider; |
69 m_pListBox.reset(IFWL_ComboList::Create(prop, this)); | 62 m_pListBox.reset(new IFWL_ComboList(prop, this)); |
70 m_pListBox->Initialize(); | 63 m_pListBox->Initialize(); |
71 if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CMB_DropDown) && !m_pEdit) { | 64 if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_CMB_DropDown) && !m_pEdit) { |
72 CFWL_WidgetImpProperties prop2; | 65 CFWL_WidgetImpProperties prop2; |
73 m_pEdit.reset(IFWL_ComboEdit::Create(prop2, this)); | 66 m_pEdit.reset(new IFWL_ComboEdit(prop2, this)); |
74 m_pEdit->Initialize(); | 67 m_pEdit->Initialize(); |
75 m_pEdit->SetOuter(this); | 68 m_pEdit->SetOuter(this); |
76 } | 69 } |
77 if (m_pEdit) | 70 if (m_pEdit) |
78 m_pEdit->SetParent(this); | 71 m_pEdit->SetParent(this); |
79 | 72 |
80 SetStates(m_pProperties->m_dwStates); | 73 SetStates(m_pProperties->m_dwStates); |
81 return FWL_Error::Succeeded; | 74 return FWL_Error::Succeeded; |
82 } | 75 } |
83 | 76 |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 | 111 |
119 FWL_Error IFWL_ComboBox::ModifyStylesEx(uint32_t dwStylesExAdded, | 112 FWL_Error IFWL_ComboBox::ModifyStylesEx(uint32_t dwStylesExAdded, |
120 uint32_t dwStylesExRemoved) { | 113 uint32_t dwStylesExRemoved) { |
121 if (m_pWidgetMgr->IsFormDisabled()) { | 114 if (m_pWidgetMgr->IsFormDisabled()) { |
122 return DisForm_ModifyStylesEx(dwStylesExAdded, dwStylesExRemoved); | 115 return DisForm_ModifyStylesEx(dwStylesExAdded, dwStylesExRemoved); |
123 } | 116 } |
124 bool bAddDropDown = !!(dwStylesExAdded & FWL_STYLEEXT_CMB_DropDown); | 117 bool bAddDropDown = !!(dwStylesExAdded & FWL_STYLEEXT_CMB_DropDown); |
125 bool bRemoveDropDown = !!(dwStylesExRemoved & FWL_STYLEEXT_CMB_DropDown); | 118 bool bRemoveDropDown = !!(dwStylesExRemoved & FWL_STYLEEXT_CMB_DropDown); |
126 if (bAddDropDown && !m_pEdit) { | 119 if (bAddDropDown && !m_pEdit) { |
127 CFWL_WidgetImpProperties prop; | 120 CFWL_WidgetImpProperties prop; |
128 m_pEdit.reset(IFWL_ComboEdit::Create(prop, nullptr)); | 121 m_pEdit.reset(new IFWL_ComboEdit(prop, nullptr)); |
129 m_pEdit->Initialize(); | 122 m_pEdit->Initialize(); |
130 m_pEdit->SetOuter(this); | 123 m_pEdit->SetOuter(this); |
131 m_pEdit->SetParent(this); | 124 m_pEdit->SetParent(this); |
132 } else if (bRemoveDropDown && m_pEdit) { | 125 } else if (bRemoveDropDown && m_pEdit) { |
133 m_pEdit->SetStates(FWL_WGTSTATE_Invisible, TRUE); | 126 m_pEdit->SetStates(FWL_WGTSTATE_Invisible, TRUE); |
134 } | 127 } |
135 return IFWL_Widget::ModifyStylesEx(dwStylesExAdded, dwStylesExRemoved); | 128 return IFWL_Widget::ModifyStylesEx(dwStylesExAdded, dwStylesExRemoved); |
136 } | 129 } |
137 | 130 |
138 FWL_Error IFWL_ComboBox::Update() { | 131 FWL_Error IFWL_ComboBox::Update() { |
(...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
716 void IFWL_ComboBox::InitProxyForm() { | 709 void IFWL_ComboBox::InitProxyForm() { |
717 if (m_pForm) | 710 if (m_pForm) |
718 return; | 711 return; |
719 if (!m_pListBox) | 712 if (!m_pListBox) |
720 return; | 713 return; |
721 | 714 |
722 CFWL_WidgetImpProperties propForm; | 715 CFWL_WidgetImpProperties propForm; |
723 propForm.m_pOwner = this; | 716 propForm.m_pOwner = this; |
724 propForm.m_dwStyles = FWL_WGTSTYLE_Popup; | 717 propForm.m_dwStyles = FWL_WGTSTYLE_Popup; |
725 propForm.m_dwStates = FWL_WGTSTATE_Invisible; | 718 propForm.m_dwStates = FWL_WGTSTATE_Invisible; |
726 m_pForm = IFWL_FormProxy::Create(propForm, m_pListBox.get()); | 719 |
| 720 m_pForm = new IFWL_FormProxy(propForm, m_pListBox.get()); |
727 m_pForm->Initialize(); | 721 m_pForm->Initialize(); |
728 m_pListBox->SetParent(m_pForm); | 722 m_pListBox->SetParent(m_pForm); |
729 m_pListProxyDelegate = new CFWL_ComboProxyImpDelegate(m_pForm, this); | 723 m_pListProxyDelegate = new CFWL_ComboProxyImpDelegate(m_pForm, this); |
730 m_pForm->SetDelegate(m_pListProxyDelegate); | 724 m_pForm->SetDelegate(m_pListProxyDelegate); |
731 } | 725 } |
732 | 726 |
733 FWL_Error IFWL_ComboBox::DisForm_Initialize() { | 727 FWL_Error IFWL_ComboBox::DisForm_Initialize() { |
734 if (IFWL_Widget::Initialize() != FWL_Error::Succeeded) | 728 if (IFWL_Widget::Initialize() != FWL_Error::Succeeded) |
735 return FWL_Error::Indefinite; | 729 return FWL_Error::Indefinite; |
736 | 730 |
737 m_pDelegate = new CFWL_ComboBoxImpDelegate(this); | 731 m_pDelegate = new CFWL_ComboBoxImpDelegate(this); |
738 DisForm_InitComboList(); | 732 DisForm_InitComboList(); |
739 DisForm_InitComboEdit(); | 733 DisForm_InitComboEdit(); |
740 return FWL_Error::Succeeded; | 734 return FWL_Error::Succeeded; |
741 } | 735 } |
742 | 736 |
743 void IFWL_ComboBox::DisForm_InitComboList() { | 737 void IFWL_ComboBox::DisForm_InitComboList() { |
744 if (m_pListBox) | 738 if (m_pListBox) |
745 return; | 739 return; |
746 | 740 |
747 CFWL_WidgetImpProperties prop; | 741 CFWL_WidgetImpProperties prop; |
748 prop.m_pParent = this; | 742 prop.m_pParent = this; |
749 prop.m_dwStyles = FWL_WGTSTYLE_Border | FWL_WGTSTYLE_VScroll; | 743 prop.m_dwStyles = FWL_WGTSTYLE_Border | FWL_WGTSTYLE_VScroll; |
750 prop.m_dwStates = FWL_WGTSTATE_Invisible; | 744 prop.m_dwStates = FWL_WGTSTATE_Invisible; |
751 prop.m_pDataProvider = m_pProperties->m_pDataProvider; | 745 prop.m_pDataProvider = m_pProperties->m_pDataProvider; |
752 prop.m_pThemeProvider = m_pProperties->m_pThemeProvider; | 746 prop.m_pThemeProvider = m_pProperties->m_pThemeProvider; |
753 m_pListBox.reset(IFWL_ComboList::Create(prop, this)); | 747 m_pListBox.reset(new IFWL_ComboList(prop, this)); |
754 m_pListBox->Initialize(); | 748 m_pListBox->Initialize(); |
755 } | 749 } |
756 | 750 |
757 void IFWL_ComboBox::DisForm_InitComboEdit() { | 751 void IFWL_ComboBox::DisForm_InitComboEdit() { |
758 if (m_pEdit) { | 752 if (m_pEdit) { |
759 return; | 753 return; |
760 } | 754 } |
761 CFWL_WidgetImpProperties prop; | 755 CFWL_WidgetImpProperties prop; |
762 prop.m_pParent = this; | 756 prop.m_pParent = this; |
763 prop.m_pThemeProvider = m_pProperties->m_pThemeProvider; | 757 prop.m_pThemeProvider = m_pProperties->m_pThemeProvider; |
764 m_pEdit.reset(IFWL_ComboEdit::Create(prop, this)); | 758 m_pEdit.reset(new IFWL_ComboEdit(prop, this)); |
765 m_pEdit->Initialize(); | 759 m_pEdit->Initialize(); |
766 m_pEdit->SetOuter(this); | 760 m_pEdit->SetOuter(this); |
767 } | 761 } |
768 | 762 |
769 void IFWL_ComboBox::DisForm_ShowDropList(FX_BOOL bActivate) { | 763 void IFWL_ComboBox::DisForm_ShowDropList(FX_BOOL bActivate) { |
770 FX_BOOL bDropList = DisForm_IsDropListShowed(); | 764 FX_BOOL bDropList = DisForm_IsDropListShowed(); |
771 if (bDropList == bActivate) { | 765 if (bDropList == bActivate) { |
772 return; | 766 return; |
773 } | 767 } |
774 if (bActivate) { | 768 if (bActivate) { |
(...skipping 660 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1435 } | 1429 } |
1436 | 1430 |
1437 void CFWL_ComboProxyImpDelegate::OnFocusChanged(CFWL_MsgKillFocus* pMsg, | 1431 void CFWL_ComboProxyImpDelegate::OnFocusChanged(CFWL_MsgKillFocus* pMsg, |
1438 FX_BOOL bSet) { | 1432 FX_BOOL bSet) { |
1439 if (!bSet) { | 1433 if (!bSet) { |
1440 if (!pMsg->m_pSetFocus) { | 1434 if (!pMsg->m_pSetFocus) { |
1441 m_pComboBox->ShowDropList(FALSE); | 1435 m_pComboBox->ShowDropList(FALSE); |
1442 } | 1436 } |
1443 } | 1437 } |
1444 } | 1438 } |
OLD | NEW |