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