1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved. 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file. 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/formfiller/FormFiller.h" 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/formfiller/FFL_FormFiller.h" 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/formfiller/FFL_CheckBox.h" 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ------------------------------- CFFL_CheckBox ------------------------------- */ 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFFL_CheckBox::CFFL_CheckBox(CPDFDoc_Environment* pApp, CPDFSDK_Widget* pWidget) : 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFFL_Button(pApp, pWidget) 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFFL_CheckBox::~CFFL_CheckBox() 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_Wnd* CFFL_CheckBox::NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView* pPageView) 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_CheckBox* pWnd = new CPWL_CheckBox(); 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pWnd->Create(cp); 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(m_pWidget != NULL); 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pWnd->SetCheck(m_pWidget->IsChecked()); 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return pWnd; 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CFFL_CheckBox::OnKeyDown(CPDFSDK_Annot* pAnnot, FX_UINT nKeyCode, FX_UINT nFlags) 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov switch (nKeyCode) 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case FWL_VKEY_Return: 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case FWL_VKEY_Space: 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return TRUE; 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov default: 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFFL_FormFiller::OnKeyDown(pAnnot, nKeyCode, nFlags); 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CFFL_CheckBox::OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags) 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov switch (nChar) 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case FWL_VKEY_Return: 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case FWL_VKEY_Space: 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller(); 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(pIFormFiller != NULL); 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDFSDK_PageView* pPageView = pAnnot->GetPageView(); 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(pPageView != NULL); 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL bReset = FALSE; 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL bExit = FALSE; 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pIFormFiller->OnButtonUp(m_pWidget, pPageView, bReset, bExit,nFlags); 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (bReset) return TRUE; 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (bExit) return TRUE; 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags); 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_CheckBox * pWnd = (CPWL_CheckBox*)GetPDFWindow(pPageView, TRUE)) 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pWnd->SetCheck(!pWnd->IsChecked()); 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CommitData(pPageView,nFlags); 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return TRUE; 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov default: 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags); 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CFFL_CheckBox::OnLButtonUp(CPDFSDK_PageView *pPageView, CPDFSDK_Annot* pAnnot, FX_UINT nFlags, const CPDF_Point& point) 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFFL_Button::OnLButtonUp(pPageView, pAnnot, nFlags, point); 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (IsValid()) 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_CheckBox * pWnd = (CPWL_CheckBox*)GetPDFWindow(pPageView, TRUE)) 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDFSDK_Widget* pWidget = (CPDFSDK_Widget*)pAnnot; 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pWnd->SetCheck(!pWidget->IsChecked()); 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // pWnd->SetCheck(!pWnd->IsChecked()); 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!CommitData(pPageView, nFlags)) return FALSE; 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return TRUE; 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CFFL_CheckBox::IsDataChanged(CPDFSDK_PageView* pPageView) 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(m_pWidget != NULL); 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_CheckBox* pWnd = (CPWL_CheckBox*)GetPDFWindow(pPageView, FALSE)) 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return pWnd->IsChecked() != m_pWidget->IsChecked(); 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FALSE; 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CFFL_CheckBox::SaveData(CPDFSDK_PageView* pPageView) 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(m_pWidget != NULL); 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_CheckBox* pWnd = (CPWL_CheckBox*)GetPDFWindow(pPageView, FALSE)) 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL bNewChecked = pWnd->IsChecked(); 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (bNewChecked) 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_FormField* pField = m_pWidget->GetFormField(); 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(pField != NULL); 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for (FX_INT32 i=0,sz=pField->CountControls(); i<sz; i++) 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPDF_FormControl* pCtrl = pField->GetControl(i)) 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (pCtrl->IsChecked()) 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pWidget->SetCheck(bNewChecked, FALSE); 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pWidget->UpdateField(); 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetChangeMark(); 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 145