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