// 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,
                     FX_BOOL bSetting,
                     XFA_ATTRIBUTE eAttribute);
  void CurrentRecordNumber(CFXJSE_Value* pValue,
                           FX_BOOL bSetting,
                           XFA_ATTRIBUTE eAttribute);
  void RecordsAfter(CFXJSE_Value* pValue,
                    FX_BOOL bSetting,
                    XFA_ATTRIBUTE eAttribute);
  void IsDefined(CFXJSE_Value* pValue,
                 FX_BOOL bSetting,
                 XFA_ATTRIBUTE eAttribute);
};

#endif  // XFA_FXFA_PARSER_CSCRIPT_DATAWINDOW_H_
