1// Copyright 2017 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 "fxjs/xfa/cjx_boolean.h"
8
9#include "fxjs/cfxjse_value.h"
10#include "xfa/fxfa/cxfa_widgetacc.h"
11#include "xfa/fxfa/parser/cxfa_boolean.h"
12
13CJX_Boolean::CJX_Boolean(CXFA_Boolean* node) : CJX_Content(node) {}
14
15CJX_Boolean::~CJX_Boolean() = default;
16
17void CJX_Boolean::use(CFXJSE_Value* pValue,
18                      bool bSetting,
19                      XFA_Attribute eAttribute) {
20  Script_Attribute_String(pValue, bSetting, eAttribute);
21}
22
23void CJX_Boolean::defaultValue(CFXJSE_Value* pValue,
24                               bool bSetting,
25                               XFA_Attribute eAttribute) {
26  if (!bSetting) {
27    WideString wsValue = GetContent(true);
28    pValue->SetBoolean(wsValue == L"1");
29    return;
30  }
31
32  ByteString newValue;
33  if (pValue && !(pValue->IsNull() || pValue->IsUndefined()))
34    newValue = pValue->ToString();
35
36  int32_t iValue = FXSYS_atoi(newValue.c_str());
37  WideString wsNewValue(iValue == 0 ? L"0" : L"1");
38  WideString wsFormatValue(wsNewValue);
39  CXFA_WidgetAcc* pContainerWidgetAcc =
40      ToNode(GetXFAObject())->GetContainerWidgetAcc();
41  if (pContainerWidgetAcc)
42    wsFormatValue = pContainerWidgetAcc->GetFormatDataValue(wsNewValue);
43
44  SetContent(wsNewValue, wsFormatValue, true, true, true);
45}
46
47void CJX_Boolean::usehref(CFXJSE_Value* pValue,
48                          bool bSetting,
49                          XFA_Attribute eAttribute) {
50  Script_Attribute_String(pValue, bSetting, eAttribute);
51}
52
53void CJX_Boolean::value(CFXJSE_Value* pValue,
54                        bool bSetting,
55                        XFA_Attribute eAttribute) {
56  defaultValue(pValue, bSetting, eAttribute);
57}
58