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/fxfa/app/xfa_ffchoicelist.h" | 7 #include "xfa/fxfa/app/xfa_ffchoicelist.h" |
8 | 8 |
| 9 #include "third_party/base/ptr_util.h" |
9 #include "xfa/fwl/core/cfwl_app.h" | 10 #include "xfa/fwl/core/cfwl_app.h" |
10 #include "xfa/fwl/core/cfwl_combobox.h" | 11 #include "xfa/fwl/core/cfwl_combobox.h" |
| 12 #include "xfa/fwl/core/cfwl_edit.h" |
11 #include "xfa/fwl/core/cfwl_evtselectchanged.h" | 13 #include "xfa/fwl/core/cfwl_evtselectchanged.h" |
12 #include "xfa/fwl/core/cfwl_listbox.h" | 14 #include "xfa/fwl/core/cfwl_listbox.h" |
13 #include "xfa/fwl/core/cfwl_notedriver.h" | 15 #include "xfa/fwl/core/cfwl_notedriver.h" |
14 #include "xfa/fwl/core/ifwl_combobox.h" | 16 #include "xfa/fwl/core/cfwl_widgetproperties.h" |
15 #include "xfa/fwl/core/ifwl_edit.h" | |
16 #include "xfa/fwl/core/ifwl_listbox.h" | |
17 #include "xfa/fxfa/app/xfa_fffield.h" | 17 #include "xfa/fxfa/app/xfa_fffield.h" |
18 #include "xfa/fxfa/app/xfa_fwladapter.h" | 18 #include "xfa/fxfa/app/xfa_fwladapter.h" |
19 #include "xfa/fxfa/cxfa_eventparam.h" | 19 #include "xfa/fxfa/cxfa_eventparam.h" |
20 #include "xfa/fxfa/xfa_ffdoc.h" | 20 #include "xfa/fxfa/xfa_ffdoc.h" |
21 #include "xfa/fxfa/xfa_ffdocview.h" | 21 #include "xfa/fxfa/xfa_ffdocview.h" |
22 #include "xfa/fxfa/xfa_ffpageview.h" | 22 #include "xfa/fxfa/xfa_ffpageview.h" |
23 #include "xfa/fxfa/xfa_ffwidget.h" | 23 #include "xfa/fxfa/xfa_ffwidget.h" |
24 | 24 |
25 CXFA_FFListBox::CXFA_FFListBox(CXFA_FFPageView* pPageView, | 25 CXFA_FFListBox::CXFA_FFListBox(CXFA_FFPageView* pPageView, |
26 CXFA_WidgetAcc* pDataAcc) | 26 CXFA_WidgetAcc* pDataAcc) |
27 : CXFA_FFField(pPageView, pDataAcc), m_pOldDelegate(nullptr) {} | 27 : CXFA_FFField(pPageView, pDataAcc), m_pOldDelegate(nullptr) {} |
28 | 28 |
29 CXFA_FFListBox::~CXFA_FFListBox() { | 29 CXFA_FFListBox::~CXFA_FFListBox() { |
30 if (m_pNormalWidget) { | 30 if (m_pNormalWidget) { |
31 IFWL_Widget* pWidget = m_pNormalWidget->GetWidget(); | 31 CFWL_NoteDriver* pNoteDriver = |
32 CFWL_NoteDriver* pNoteDriver = pWidget->GetOwnerApp()->GetNoteDriver(); | 32 m_pNormalWidget->GetOwnerApp()->GetNoteDriver(); |
33 pNoteDriver->UnregisterEventTarget(pWidget); | 33 pNoteDriver->UnregisterEventTarget(m_pNormalWidget); |
34 } | 34 } |
35 } | 35 } |
36 | 36 |
37 bool CXFA_FFListBox::LoadWidget() { | 37 bool CXFA_FFListBox::LoadWidget() { |
38 CFWL_ListBox* pListBox = new CFWL_ListBox(GetFWLApp()); | 38 CFWL_ListBox* pListBox = new CFWL_ListBox( |
39 pListBox->Initialize(); | 39 GetFWLApp(), pdfium::MakeUnique<CFWL_WidgetProperties>(), nullptr); |
40 pListBox->ModifyStyles(FWL_WGTSTYLE_VScroll | FWL_WGTSTYLE_NoBackground, | 40 pListBox->ModifyStyles(FWL_WGTSTYLE_VScroll | FWL_WGTSTYLE_NoBackground, |
41 0xFFFFFFFF); | 41 0xFFFFFFFF); |
42 m_pNormalWidget = (CFWL_Widget*)pListBox; | 42 m_pNormalWidget = (CFWL_Widget*)pListBox; |
43 m_pNormalWidget->SetLayoutItem(this); | 43 m_pNormalWidget->SetLayoutItem(this); |
44 | 44 |
45 IFWL_Widget* pWidget = m_pNormalWidget->GetWidget(); | 45 CFWL_NoteDriver* pNoteDriver = |
46 CFWL_NoteDriver* pNoteDriver = pWidget->GetOwnerApp()->GetNoteDriver(); | 46 m_pNormalWidget->GetOwnerApp()->GetNoteDriver(); |
47 pNoteDriver->RegisterEventTarget(pWidget, pWidget); | 47 pNoteDriver->RegisterEventTarget(m_pNormalWidget, m_pNormalWidget); |
48 | 48 |
49 m_pOldDelegate = m_pNormalWidget->GetDelegate(); | 49 m_pOldDelegate = m_pNormalWidget->GetDelegate(); |
50 m_pNormalWidget->SetDelegate(this); | 50 m_pNormalWidget->SetDelegate(this); |
51 m_pNormalWidget->LockUpdate(); | 51 m_pNormalWidget->LockUpdate(); |
52 | 52 |
53 CFX_WideStringArray wsLabelArray; | 53 CFX_WideStringArray wsLabelArray; |
54 m_pDataAcc->GetChoiceListItems(wsLabelArray, false); | 54 m_pDataAcc->GetChoiceListItems(wsLabelArray, false); |
55 int32_t iItems = wsLabelArray.GetSize(); | 55 int32_t iItems = wsLabelArray.GetSize(); |
56 for (int32_t i = 0; i < iItems; i++) { | 56 for (int32_t i = 0; i < iItems; i++) { |
57 pListBox->AddString(wsLabelArray[i].AsStringC()); | 57 pListBox->AddString(wsLabelArray[i].AsStringC()); |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 CFWL_ListItem* lpItemSel = pListBox->GetSelItem(iSelArray[j]); | 144 CFWL_ListItem* lpItemSel = pListBox->GetSelItem(iSelArray[j]); |
145 selItemArray.Add(lpItemSel); | 145 selItemArray.Add(lpItemSel); |
146 } | 146 } |
147 pListBox->SetSelItem(pListBox->GetSelItem(-1), false); | 147 pListBox->SetSelItem(pListBox->GetSelItem(-1), false); |
148 for (int32_t i = 0; i < iSelCount; i++) { | 148 for (int32_t i = 0; i < iSelCount; i++) { |
149 ((CFWL_ListBox*)m_pNormalWidget)->SetSelItem(selItemArray[i], true); | 149 ((CFWL_ListBox*)m_pNormalWidget)->SetSelItem(selItemArray[i], true); |
150 } | 150 } |
151 m_pNormalWidget->Update(); | 151 m_pNormalWidget->Update(); |
152 return true; | 152 return true; |
153 } | 153 } |
154 void CXFA_FFListBox::OnSelectChanged(IFWL_Widget* pWidget, | 154 void CXFA_FFListBox::OnSelectChanged(CFWL_Widget* pWidget, |
155 const CFX_Int32Array& arrSels) { | 155 const CFX_Int32Array& arrSels) { |
156 CXFA_EventParam eParam; | 156 CXFA_EventParam eParam; |
157 eParam.m_eType = XFA_EVENT_Change; | 157 eParam.m_eType = XFA_EVENT_Change; |
158 eParam.m_pTarget = m_pDataAcc; | 158 eParam.m_pTarget = m_pDataAcc; |
159 m_pDataAcc->GetValue(eParam.m_wsPrevText, XFA_VALUEPICTURE_Raw); | 159 m_pDataAcc->GetValue(eParam.m_wsPrevText, XFA_VALUEPICTURE_Raw); |
160 CFWL_ListBox* pListBox = (CFWL_ListBox*)m_pNormalWidget; | 160 CFWL_ListBox* pListBox = (CFWL_ListBox*)m_pNormalWidget; |
161 int32_t iSels = pListBox->CountSelItems(); | 161 int32_t iSels = pListBox->CountSelItems(); |
162 if (iSels > 0) { | 162 if (iSels > 0) { |
163 pListBox->GetItemText(nullptr, pListBox->GetSelItem(0), eParam.m_wsNewText); | 163 pListBox->GetItemText(nullptr, pListBox->GetSelItem(0), eParam.m_wsNewText); |
164 } | 164 } |
(...skipping 25 matching lines...) Expand all Loading... |
190 | 190 |
191 void CXFA_FFListBox::OnProcessMessage(CFWL_Message* pMessage) { | 191 void CXFA_FFListBox::OnProcessMessage(CFWL_Message* pMessage) { |
192 m_pOldDelegate->OnProcessMessage(pMessage); | 192 m_pOldDelegate->OnProcessMessage(pMessage); |
193 } | 193 } |
194 | 194 |
195 void CXFA_FFListBox::OnProcessEvent(CFWL_Event* pEvent) { | 195 void CXFA_FFListBox::OnProcessEvent(CFWL_Event* pEvent) { |
196 CXFA_FFField::OnProcessEvent(pEvent); | 196 CXFA_FFField::OnProcessEvent(pEvent); |
197 switch (pEvent->GetClassID()) { | 197 switch (pEvent->GetClassID()) { |
198 case CFWL_EventType::SelectChanged: { | 198 case CFWL_EventType::SelectChanged: { |
199 CFX_Int32Array arrSels; | 199 CFX_Int32Array arrSels; |
200 OnSelectChanged(m_pNormalWidget->GetWidget(), arrSels); | 200 OnSelectChanged(m_pNormalWidget, arrSels); |
201 break; | 201 break; |
202 } | 202 } |
203 default: | 203 default: |
204 break; | 204 break; |
205 } | 205 } |
206 m_pOldDelegate->OnProcessEvent(pEvent); | 206 m_pOldDelegate->OnProcessEvent(pEvent); |
207 } | 207 } |
208 void CXFA_FFListBox::OnDrawWidget(CFX_Graphics* pGraphics, | 208 void CXFA_FFListBox::OnDrawWidget(CFX_Graphics* pGraphics, |
209 const CFX_Matrix* pMatrix) { | 209 const CFX_Matrix* pMatrix) { |
210 m_pOldDelegate->OnDrawWidget(pGraphics, pMatrix); | 210 m_pOldDelegate->OnDrawWidget(pGraphics, pMatrix); |
(...skipping 19 matching lines...) Expand all Loading... |
230 } | 230 } |
231 CFX_RectF rtWidget; | 231 CFX_RectF rtWidget; |
232 ((CFWL_ComboBox*)m_pNormalWidget)->GetBBox(rtWidget); | 232 ((CFWL_ComboBox*)m_pNormalWidget)->GetBBox(rtWidget); |
233 if (rtWidget.Contains(fx, fy)) { | 233 if (rtWidget.Contains(fx, fy)) { |
234 return true; | 234 return true; |
235 } | 235 } |
236 return false; | 236 return false; |
237 } | 237 } |
238 bool CXFA_FFComboBox::LoadWidget() { | 238 bool CXFA_FFComboBox::LoadWidget() { |
239 CFWL_ComboBox* pComboBox = new CFWL_ComboBox(GetFWLApp()); | 239 CFWL_ComboBox* pComboBox = new CFWL_ComboBox(GetFWLApp()); |
240 pComboBox->Initialize(); | |
241 m_pNormalWidget = (CFWL_Widget*)pComboBox; | 240 m_pNormalWidget = (CFWL_Widget*)pComboBox; |
242 m_pNormalWidget->SetLayoutItem(this); | 241 m_pNormalWidget->SetLayoutItem(this); |
243 | 242 |
244 IFWL_Widget* pWidget = m_pNormalWidget->GetWidget(); | 243 CFWL_NoteDriver* pNoteDriver = |
245 CFWL_NoteDriver* pNoteDriver = pWidget->GetOwnerApp()->GetNoteDriver(); | 244 m_pNormalWidget->GetOwnerApp()->GetNoteDriver(); |
246 pNoteDriver->RegisterEventTarget(pWidget, pWidget); | 245 pNoteDriver->RegisterEventTarget(m_pNormalWidget, m_pNormalWidget); |
247 | 246 |
248 m_pOldDelegate = m_pNormalWidget->GetDelegate(); | 247 m_pOldDelegate = m_pNormalWidget->GetDelegate(); |
249 m_pNormalWidget->SetDelegate(this); | 248 m_pNormalWidget->SetDelegate(this); |
250 m_pNormalWidget->LockUpdate(); | 249 m_pNormalWidget->LockUpdate(); |
251 | 250 |
252 CFX_WideStringArray wsLabelArray; | 251 CFX_WideStringArray wsLabelArray; |
253 m_pDataAcc->GetChoiceListItems(wsLabelArray, false); | 252 m_pDataAcc->GetChoiceListItems(wsLabelArray, false); |
254 int32_t iItems = wsLabelArray.GetSize(); | 253 int32_t iItems = wsLabelArray.GetSize(); |
255 for (int32_t i = 0; i < iItems; i++) { | 254 for (int32_t i = 0; i < iItems; i++) { |
256 pComboBox->AddString(wsLabelArray[i].AsStringC()); | 255 pComboBox->AddString(wsLabelArray[i].AsStringC()); |
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
468 } | 467 } |
469 void CXFA_FFComboBox::DeleteItem(int32_t nIndex) { | 468 void CXFA_FFComboBox::DeleteItem(int32_t nIndex) { |
470 if (nIndex < 0) { | 469 if (nIndex < 0) { |
471 ((CFWL_ComboBox*)m_pNormalWidget)->RemoveAll(); | 470 ((CFWL_ComboBox*)m_pNormalWidget)->RemoveAll(); |
472 } else { | 471 } else { |
473 ((CFWL_ComboBox*)m_pNormalWidget)->RemoveAt(nIndex); | 472 ((CFWL_ComboBox*)m_pNormalWidget)->RemoveAt(nIndex); |
474 } | 473 } |
475 m_pNormalWidget->Update(); | 474 m_pNormalWidget->Update(); |
476 AddInvalidateRect(); | 475 AddInvalidateRect(); |
477 } | 476 } |
478 void CXFA_FFComboBox::OnTextChanged(IFWL_Widget* pWidget, | 477 void CXFA_FFComboBox::OnTextChanged(CFWL_Widget* pWidget, |
479 const CFX_WideString& wsChanged) { | 478 const CFX_WideString& wsChanged) { |
480 CXFA_EventParam eParam; | 479 CXFA_EventParam eParam; |
481 m_pDataAcc->GetValue(eParam.m_wsPrevText, XFA_VALUEPICTURE_Raw); | 480 m_pDataAcc->GetValue(eParam.m_wsPrevText, XFA_VALUEPICTURE_Raw); |
482 eParam.m_wsChange = wsChanged; | 481 eParam.m_wsChange = wsChanged; |
483 FWLEventSelChange(&eParam); | 482 FWLEventSelChange(&eParam); |
484 } | 483 } |
485 void CXFA_FFComboBox::OnSelectChanged(IFWL_Widget* pWidget, | 484 void CXFA_FFComboBox::OnSelectChanged(CFWL_Widget* pWidget, bool bLButtonUp) { |
486 bool bLButtonUp) { | |
487 CXFA_EventParam eParam; | 485 CXFA_EventParam eParam; |
488 m_pDataAcc->GetValue(eParam.m_wsPrevText, XFA_VALUEPICTURE_Raw); | 486 m_pDataAcc->GetValue(eParam.m_wsPrevText, XFA_VALUEPICTURE_Raw); |
489 FWLEventSelChange(&eParam); | 487 FWLEventSelChange(&eParam); |
490 if (m_pDataAcc->GetChoiceListCommitOn() == XFA_ATTRIBUTEENUM_Select && | 488 if (m_pDataAcc->GetChoiceListCommitOn() == XFA_ATTRIBUTEENUM_Select && |
491 bLButtonUp) { | 489 bLButtonUp) { |
492 m_pDocView->SetFocusWidgetAcc(nullptr); | 490 m_pDocView->SetFocusWidgetAcc(nullptr); |
493 } | 491 } |
494 } | 492 } |
495 void CXFA_FFComboBox::OnPreOpen(IFWL_Widget* pWidget) { | 493 void CXFA_FFComboBox::OnPreOpen(CFWL_Widget* pWidget) { |
496 CXFA_EventParam eParam; | 494 CXFA_EventParam eParam; |
497 eParam.m_eType = XFA_EVENT_PreOpen; | 495 eParam.m_eType = XFA_EVENT_PreOpen; |
498 eParam.m_pTarget = m_pDataAcc; | 496 eParam.m_pTarget = m_pDataAcc; |
499 m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_PreOpen, &eParam); | 497 m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_PreOpen, &eParam); |
500 } | 498 } |
501 void CXFA_FFComboBox::OnPostOpen(IFWL_Widget* pWidget) { | 499 void CXFA_FFComboBox::OnPostOpen(CFWL_Widget* pWidget) { |
502 CXFA_EventParam eParam; | 500 CXFA_EventParam eParam; |
503 eParam.m_eType = XFA_EVENT_PostOpen; | 501 eParam.m_eType = XFA_EVENT_PostOpen; |
504 eParam.m_pTarget = m_pDataAcc; | 502 eParam.m_pTarget = m_pDataAcc; |
505 m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_PostOpen, &eParam); | 503 m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_PostOpen, &eParam); |
506 } | 504 } |
507 | 505 |
508 void CXFA_FFComboBox::OnProcessMessage(CFWL_Message* pMessage) { | 506 void CXFA_FFComboBox::OnProcessMessage(CFWL_Message* pMessage) { |
509 m_pOldDelegate->OnProcessMessage(pMessage); | 507 m_pOldDelegate->OnProcessMessage(pMessage); |
510 } | 508 } |
511 | 509 |
512 void CXFA_FFComboBox::OnProcessEvent(CFWL_Event* pEvent) { | 510 void CXFA_FFComboBox::OnProcessEvent(CFWL_Event* pEvent) { |
513 CXFA_FFField::OnProcessEvent(pEvent); | 511 CXFA_FFField::OnProcessEvent(pEvent); |
514 switch (pEvent->GetClassID()) { | 512 switch (pEvent->GetClassID()) { |
515 case CFWL_EventType::SelectChanged: { | 513 case CFWL_EventType::SelectChanged: { |
516 CFWL_EvtSelectChanged* postEvent = | 514 CFWL_EvtSelectChanged* postEvent = |
517 static_cast<CFWL_EvtSelectChanged*>(pEvent); | 515 static_cast<CFWL_EvtSelectChanged*>(pEvent); |
518 OnSelectChanged(m_pNormalWidget->GetWidget(), postEvent->bLButtonUp); | 516 OnSelectChanged(m_pNormalWidget, postEvent->bLButtonUp); |
519 break; | 517 break; |
520 } | 518 } |
521 case CFWL_EventType::EditChanged: { | 519 case CFWL_EventType::EditChanged: { |
522 CFX_WideString wsChanged; | 520 CFX_WideString wsChanged; |
523 OnTextChanged(m_pNormalWidget->GetWidget(), wsChanged); | 521 OnTextChanged(m_pNormalWidget, wsChanged); |
524 break; | 522 break; |
525 } | 523 } |
526 case CFWL_EventType::PreDropDown: { | 524 case CFWL_EventType::PreDropDown: { |
527 OnPreOpen(m_pNormalWidget->GetWidget()); | 525 OnPreOpen(m_pNormalWidget); |
528 break; | 526 break; |
529 } | 527 } |
530 case CFWL_EventType::PostDropDown: { | 528 case CFWL_EventType::PostDropDown: { |
531 OnPostOpen(m_pNormalWidget->GetWidget()); | 529 OnPostOpen(m_pNormalWidget); |
532 break; | 530 break; |
533 } | 531 } |
534 default: | 532 default: |
535 break; | 533 break; |
536 } | 534 } |
537 m_pOldDelegate->OnProcessEvent(pEvent); | 535 m_pOldDelegate->OnProcessEvent(pEvent); |
538 } | 536 } |
539 | 537 |
540 void CXFA_FFComboBox::OnDrawWidget(CFX_Graphics* pGraphics, | 538 void CXFA_FFComboBox::OnDrawWidget(CFX_Graphics* pGraphics, |
541 const CFX_Matrix* pMatrix) { | 539 const CFX_Matrix* pMatrix) { |
542 m_pOldDelegate->OnDrawWidget(pGraphics, pMatrix); | 540 m_pOldDelegate->OnDrawWidget(pGraphics, pMatrix); |
543 } | 541 } |
OLD | NEW |