// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#ifndef XFA_FXFA_PARSER_CSCRIPT_DATAWINDOW_H_
#define XFA_FXFA_PARSER_CSCRIPT_DATAWINDOW_H_

#include "fxjs/cfxjse_arguments.h"
#include "xfa/fxfa/parser/xfa_object.h"

class CScript_DataWindow : public CXFA_Object {
 public:
  explicit CScript_DataWindow(CXFA_Document* pDocument);
  ~CScript_DataWindow() override;

  void MoveCurrentRecord(CFXJSE_Arguments* pArguments);
  void Record(CFXJSE_Arguments* pArguments);
  void GotoRecord(CFXJSE_Arguments* pArguments);
  void IsRecordGroup(CFXJSE_Arguments* pArguments);
  void RecordsBefore(CFXJSE_Value* pValue,
                     bool bSetting,
                     XFA_ATTRIBUTE eAttribute);
  void CurrentRecordNumber(CFXJSE_Value* pValue,
                           bool bSetting,
                           XFA_ATTRIBUTE eAttribute);
  void RecordsAfter(CFXJSE_Value* pValue,
                    bool bSetting,
                    XFA_ATTRIBUTE eAttribute);
  void IsDefined(CFXJSE_Value* pValue, bool bSetting, XFA_ATTRIBUTE eAttribute);
};

#endif  // XFA_FXFA_PARSER_CSCRIPT_DATAWINDOW_H_
