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_RadioButton.h" 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//#include "../include/FFL_Undo.h" 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ------------------------------- CFFL_RadioButton ------------------------------- */ 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFFL_RadioButton::CFFL_RadioButton(CPDFDoc_Environment* pApp, CPDFSDK_Annot* pWidget) : 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFFL_Button(pApp, pWidget) 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFFL_RadioButton::~CFFL_RadioButton() 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPWL_Wnd* CFFL_RadioButton::NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView* pPageView) 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPWL_RadioButton* pWnd = new CPWL_RadioButton(); 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_RadioButton::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 Ganov 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CFFL_RadioButton::OnChar(CPDFSDK_Annot* pAnnot, FX_UINT nChar, FX_UINT nFlags) 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov switch (nChar) 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case FWL_VKEY_Return: 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case FWL_VKEY_Space: 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller(); 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(pIFormFiller != NULL); 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDFSDK_PageView* pPageView = pAnnot->GetPageView(); 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(pPageView != NULL); 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL bReset = FALSE; 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL bExit = FALSE; 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pIFormFiller->OnButtonUp(m_pWidget, pPageView, bReset, bExit,nFlags); 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (bReset) return TRUE; 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (bExit) return TRUE; 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags); 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_RadioButton * pWnd = (CPWL_RadioButton*)GetPDFWindow(pPageView, TRUE)) 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pWnd->SetCheck(TRUE); 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_RadioButton::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_RadioButton * pWnd = (CPWL_RadioButton*)GetPDFWindow(pPageView, TRUE)) 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pWnd->SetCheck(TRUE); 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!CommitData(pPageView,nFlags)) return FALSE; 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return TRUE; 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CFFL_RadioButton::IsDataChanged(CPDFSDK_PageView* pPageView) 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(m_pWidget != NULL); 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_RadioButton* pWnd = (CPWL_RadioButton*)GetPDFWindow(pPageView, FALSE)) 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return pWnd->IsChecked() != m_pWidget->IsChecked(); 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FALSE; 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CFFL_RadioButton::SaveData(CPDFSDK_PageView* pPageView) 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(m_pWidget != NULL); 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPWL_RadioButton* pWnd = (CPWL_RadioButton*)GetPDFWindow(pPageView, FALSE)) 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL bNewChecked = pWnd->IsChecked(); 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (bNewChecked) 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_FormField* pField = m_pWidget->GetFormField(); 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(pField != NULL); 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for (FX_INT32 i=0,sz=pField->CountControls(); i<sz; i++) 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (CPDF_FormControl* pCtrl = pField->GetControl(i)) 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (pCtrl->IsChecked()) 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pWidget->SetCheck(bNewChecked, FALSE); 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pWidget->UpdateField(); 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov SetChangeMark(); 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 138