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_ffcheckbutton.h" | 7 #include "xfa/fxfa/app/xfa_ffcheckbutton.h" |
8 | 8 |
| 9 #include "third_party/base/ptr_util.h" |
9 #include "xfa/fwl/core/cfwl_checkbox.h" | 10 #include "xfa/fwl/core/cfwl_checkbox.h" |
10 #include "xfa/fwl/core/cfwl_message.h" | 11 #include "xfa/fwl/core/cfwl_message.h" |
11 #include "xfa/fwl/core/cfwl_widgetmgr.h" | 12 #include "xfa/fwl/core/cfwl_widgetmgr.h" |
12 #include "xfa/fwl/core/fwl_noteimp.h" | 13 #include "xfa/fwl/core/fwl_noteimp.h" |
| 14 #include "xfa/fxfa/app/cxfa_ffcheckbuttondelegate.h" |
13 #include "xfa/fxfa/app/xfa_ffexclgroup.h" | 15 #include "xfa/fxfa/app/xfa_ffexclgroup.h" |
14 #include "xfa/fxfa/app/xfa_fffield.h" | 16 #include "xfa/fxfa/app/xfa_fffield.h" |
15 #include "xfa/fxfa/xfa_ffapp.h" | 17 #include "xfa/fxfa/xfa_ffapp.h" |
16 #include "xfa/fxfa/xfa_ffdoc.h" | 18 #include "xfa/fxfa/xfa_ffdoc.h" |
17 #include "xfa/fxfa/xfa_ffdocview.h" | 19 #include "xfa/fxfa/xfa_ffdocview.h" |
18 #include "xfa/fxfa/xfa_ffpageview.h" | 20 #include "xfa/fxfa/xfa_ffpageview.h" |
19 #include "xfa/fxfa/xfa_ffwidget.h" | 21 #include "xfa/fxfa/xfa_ffwidget.h" |
20 | 22 |
21 CXFA_FFCheckButton::CXFA_FFCheckButton(CXFA_FFPageView* pPageView, | 23 CXFA_FFCheckButton::CXFA_FFCheckButton(CXFA_FFPageView* pPageView, |
22 CXFA_WidgetAcc* pDataAcc) | 24 CXFA_WidgetAcc* pDataAcc) |
23 : CXFA_FFField(pPageView, pDataAcc), m_pOldDelegate(nullptr) { | 25 : CXFA_FFField(pPageView, pDataAcc) { |
24 m_rtCheckBox.Set(0, 0, 0, 0); | 26 m_rtCheckBox.Set(0, 0, 0, 0); |
25 } | 27 } |
26 | 28 |
27 CXFA_FFCheckButton::~CXFA_FFCheckButton() {} | 29 CXFA_FFCheckButton::~CXFA_FFCheckButton() {} |
28 | 30 |
29 FX_BOOL CXFA_FFCheckButton::LoadWidget() { | 31 FX_BOOL CXFA_FFCheckButton::LoadWidget() { |
30 CFWL_CheckBox* pCheckBox = new CFWL_CheckBox(GetFWLApp()); | 32 CFWL_CheckBox* pCheckBox = new CFWL_CheckBox(GetFWLApp()); |
31 pCheckBox->Initialize(); | 33 pCheckBox->Initialize(); |
32 m_pNormalWidget = pCheckBox; | 34 m_pNormalWidget = pCheckBox; |
33 m_pNormalWidget->SetLayoutItem(this); | 35 m_pNormalWidget->SetLayoutItem(this); |
34 | 36 |
35 IFWL_Widget* pWidget = m_pNormalWidget->GetWidget(); | 37 IFWL_Widget* pWidget = m_pNormalWidget->GetWidget(); |
36 CFWL_NoteDriver* pNoteDriver = pWidget->GetOwnerApp()->GetNoteDriver(); | 38 CFWL_NoteDriver* pNoteDriver = pWidget->GetOwnerApp()->GetNoteDriver(); |
37 pNoteDriver->RegisterEventTarget(pWidget, pWidget); | 39 pNoteDriver->RegisterEventTarget(pWidget, pWidget); |
38 | 40 |
39 m_pOldDelegate = m_pNormalWidget->GetCurrentDelegate(); | 41 m_pNormalWidget->SetDelegate(pdfium::MakeUnique<CXFA_FFCheckButtonDelegate>( |
40 m_pNormalWidget->SetCurrentDelegate(this); | 42 m_pNormalWidget->ReleaseDelegate(), this)); |
41 | 43 |
42 if (m_pDataAcc->IsRadioButton()) | 44 if (m_pDataAcc->IsRadioButton()) |
43 pCheckBox->ModifyStylesEx(FWL_STYLEEXT_CKB_RadioButton, 0xFFFFFFFF); | 45 pCheckBox->ModifyStylesEx(FWL_STYLEEXT_CKB_RadioButton, 0xFFFFFFFF); |
44 | 46 |
45 m_pNormalWidget->LockUpdate(); | 47 m_pNormalWidget->LockUpdate(); |
46 UpdateWidgetProperty(); | 48 UpdateWidgetProperty(); |
47 SetFWLCheckState(m_pDataAcc->GetCheckState()); | 49 SetFWLCheckState(m_pDataAcc->GetCheckState()); |
48 m_pNormalWidget->UnlockUpdate(); | 50 m_pNormalWidget->UnlockUpdate(); |
49 return CXFA_FFField::LoadWidget(); | 51 return CXFA_FFField::LoadWidget(); |
50 } | 52 } |
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
288 } | 290 } |
289 FX_BOOL CXFA_FFCheckButton::UpdateFWLData() { | 291 FX_BOOL CXFA_FFCheckButton::UpdateFWLData() { |
290 if (!m_pNormalWidget) { | 292 if (!m_pNormalWidget) { |
291 return FALSE; | 293 return FALSE; |
292 } | 294 } |
293 XFA_CHECKSTATE eState = m_pDataAcc->GetCheckState(); | 295 XFA_CHECKSTATE eState = m_pDataAcc->GetCheckState(); |
294 SetFWLCheckState(eState); | 296 SetFWLCheckState(eState); |
295 m_pNormalWidget->Update(); | 297 m_pNormalWidget->Update(); |
296 return TRUE; | 298 return TRUE; |
297 } | 299 } |
298 | |
299 void CXFA_FFCheckButton::OnProcessMessage(CFWL_Message* pMessage) { | |
300 m_pOldDelegate->OnProcessMessage(pMessage); | |
301 } | |
302 | |
303 void CXFA_FFCheckButton::OnProcessEvent(CFWL_Event* pEvent) { | |
304 CXFA_FFField::OnProcessEvent(pEvent); | |
305 switch (pEvent->GetClassID()) { | |
306 case CFWL_EventType::CheckStateChanged: { | |
307 CXFA_EventParam eParam; | |
308 eParam.m_eType = XFA_EVENT_Change; | |
309 m_pDataAcc->GetValue(eParam.m_wsNewText, XFA_VALUEPICTURE_Raw); | |
310 CXFA_WidgetAcc* pFFExclGroup = m_pDataAcc->GetExclGroup(); | |
311 if (ProcessCommittedData()) { | |
312 eParam.m_pTarget = pFFExclGroup; | |
313 if (pFFExclGroup) { | |
314 m_pDocView->AddValidateWidget(pFFExclGroup); | |
315 m_pDocView->AddCalculateWidgetAcc(pFFExclGroup); | |
316 pFFExclGroup->ProcessEvent(XFA_ATTRIBUTEENUM_Change, &eParam); | |
317 } | |
318 eParam.m_pTarget = m_pDataAcc; | |
319 m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Change, &eParam); | |
320 } else { | |
321 SetFWLCheckState(m_pDataAcc->GetCheckState()); | |
322 } | |
323 if (pFFExclGroup) { | |
324 eParam.m_pTarget = pFFExclGroup; | |
325 pFFExclGroup->ProcessEvent(XFA_ATTRIBUTEENUM_Click, &eParam); | |
326 } | |
327 eParam.m_pTarget = m_pDataAcc; | |
328 m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Click, &eParam); | |
329 break; | |
330 } | |
331 default: | |
332 break; | |
333 } | |
334 m_pOldDelegate->OnProcessEvent(pEvent); | |
335 } | |
336 | |
337 void CXFA_FFCheckButton::OnDrawWidget(CFX_Graphics* pGraphics, | |
338 const CFX_Matrix* pMatrix) { | |
339 m_pOldDelegate->OnDrawWidget(pGraphics, pMatrix); | |
340 } | |
OLD | NEW |