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