// 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 _FXFA_NODEACC_H
#define _FXFA_NODEACC_H
class CXFA_Node;
class IFX_Locale;
class CXFA_Data;
class CXFA_Font;
class CXFA_Fill;
class CXFA_Margin;
class CXFA_Caption;
class CXFA_Para;
class CXFA_Event;
class CXFA_Script;
class CXFA_Value;
class CXFA_Calculate;
class CXFA_Line;
class CXFA_Text;
class CXFA_ExData;
class CXFA_Image;
class CXFA_Validate;
class CXFA_Variables;
class CXFA_Bind;
class CXFA_Assist;
class CXFA_ToolTip;
class CXFA_Keep;
class CXFA_Submit;
class CXFA_BindItems;
class CXFA_Stroke;
class CXFA_Corner;
class CXFA_Edge;
class CXFA_Box;
class CXFA_Arc;
class CXFA_Border;
class CXFA_Rectangle;
class CXFA_WidgetData;
class CXFA_Occur;
class CXFA_Filter;
class CXFA_Certificate;
class CXFA_WrapCertificate;
class CXFA_Oids;
class CXFA_SubjectDNs;
class CXFA_DigestMethods;
class CXFA_Encodings;
class CXFA_EncryptionMethods;
class CXFA_Reasons;
class CXFA_Manifest;
inline FX_BOOL XFA_IsSpace(FX_WCHAR c)
{
    return (c == 0x20) || (c == 0x0d) || (c == 0x0a) || (c == 0x09);
}
inline FX_BOOL XFA_IsDigit(FX_WCHAR c)
{
    return c >= '0' && c <= '9';
}
typedef CFX_ArrayTemplate<CXFA_Node*> CXFA_NodeArray;
typedef CFX_ArrayTemplate<CXFA_Object*> CXFA_ObjArray;
class CXFA_Data : public CFX_Object
{
public:
    CXFA_Data(CXFA_Node* pNode) : m_pNode(pNode) {}
    operator CXFA_Node*() const
    {
        return m_pNode;
    }
    CXFA_Node*	GetNode()
    {
        return m_pNode;
    }

    FX_BOOL			IsExistInXML() const
    {
        return m_pNode != NULL;
    }

    XFA_ELEMENT		GetClassID() const;
protected:
    FX_BOOL TryMeasure(XFA_ATTRIBUTE eAttr, FX_FLOAT &fValue, FX_BOOL bUseDefault = FALSE) const;
    FX_BOOL	SetMeasure(XFA_ATTRIBUTE eAttr, FX_FLOAT fValue);
    CXFA_Node*				m_pNode;
};
class CXFA_Fill : public CXFA_Data
{
public:
    CXFA_Fill(CXFA_Node* pNode);
    ~CXFA_Fill();

    FX_INT32		GetPresence();

    FX_ARGB			GetColor(FX_BOOL bText = FALSE);

    void			SetColor(FX_ARGB color);


    FX_INT32		GetFillType();

    FX_INT32		GetPattern(FX_ARGB& foreColor);

    FX_INT32		GetStipple(FX_ARGB& stippleColor);

    FX_INT32		GetLinear(FX_ARGB& endColor);

    FX_INT32		GetRadial(FX_ARGB& endColor);
    FX_BOOL			SetPresence(FX_INT32 iPresence);
    FX_BOOL			SetFillType(FX_INT32 iType);
    FX_BOOL			SetPattern(FX_INT32 iPattern, FX_ARGB foreColor);
    FX_BOOL			SetStipple(FX_INT32 iStipple, FX_ARGB stippleColor);
    FX_BOOL			SetLinear(FX_INT32 iLinear, FX_ARGB endColor);
    FX_BOOL			SetRadial(FX_INT32 iRadial, FX_ARGB endColor);
};
class CXFA_Margin : public CXFA_Data
{
public:
    CXFA_Margin(CXFA_Node* pNode);
    FX_BOOL		GetLeftInset(FX_FLOAT &fInset, FX_FLOAT fDefInset = 0) const;
    FX_BOOL		GetTopInset(FX_FLOAT &fInset, FX_FLOAT fDefInset = 0) const;
    FX_BOOL		GetRightInset(FX_FLOAT &fInset, FX_FLOAT fDefInset = 0) const;
    FX_BOOL		GetBottomInset(FX_FLOAT &fInset, FX_FLOAT fDefInset = 0) const;
    FX_BOOL		SetLeftInset(FX_FLOAT fInset);
    FX_BOOL		SetTopInset(FX_FLOAT fInset);
    FX_BOOL		SetRightInset(FX_FLOAT fInset);
    FX_BOOL		SetBottomInset(FX_FLOAT fInset);
};
class CXFA_Font : public CXFA_Data
{
public:
    CXFA_Font(CXFA_Node* pNode);

    FX_FLOAT		GetBaselineShift();

    FX_FLOAT		GetHorizontalScale();

    FX_FLOAT		GetVerticalScale();

    FX_FLOAT		GetLetterSpacing();

    FX_INT32		GetLineThrough();

    FX_INT32		GetLineThroughPeriod();

    FX_INT32		GetOverline();

    FX_INT32		GetOverlinePeriod();

    FX_INT32		GetUnderline();

    FX_INT32		GetUnderlinePeriod();

    FX_FLOAT		GetFontSize();

    void			GetTypeface(CFX_WideStringC &wsTypeFace);

    FX_BOOL			IsBold();

    FX_BOOL			IsItalic();

    FX_BOOL			IsUseKerning();

    FX_ARGB			GetColor();

    void			SetColor(FX_ARGB color);
    FX_BOOL			SetBaselineShift(FX_FLOAT fBaselineShift);
    FX_BOOL			SetHorizontalScale(FX_FLOAT fHorizontalScale);
    FX_BOOL			SetVerticalScale(FX_FLOAT fVerticalScale);
    FX_BOOL			SetLetterSpacing(FX_FLOAT fLetterSpacing, XFA_UNIT eUnit);
    FX_BOOL			SetLineThrough(FX_INT32 iLineThrough);
    FX_BOOL			SetLineThroughPeriod(FX_INT32 iLineThroughPeriod);
    FX_BOOL			SetOverline(FX_INT32 iOverline);
    FX_BOOL			SetOverlinePeriod(FX_INT32 iOverlinePeriod);
    FX_BOOL			SetUnderline(FX_INT32 iUnderline);
    FX_BOOL			SetUnderlinePeriod(FX_INT32 iUnderlinePeriod);
};
class CXFA_Caption : public CXFA_Data
{
public:
    CXFA_Caption(CXFA_Node* pNode);

    FX_INT32		GetPresence();

    FX_INT32		GetPlacementType();

    FX_FLOAT		GetReserve();

    CXFA_Margin		GetMargin();

    CXFA_Font		GetFont();

    CXFA_Value		GetValue();

    CXFA_Para		GetPara();
    FX_BOOL			SetPresence(FX_INT32 iPresence);
    FX_BOOL			SetPlacementType(FX_INT32 iType);
    FX_BOOL			SetReserve(FX_FLOAT fReserve);
};
class CXFA_Para : public CXFA_Data
{
public:
    CXFA_Para(CXFA_Node* pNode);

    FX_INT32		GetHorizontalAlign();

    FX_INT32		GetVerticalAlign();

    FX_FLOAT		GetLineHeight();
    FX_FLOAT		GetMarginLeft();
    FX_FLOAT		GetMarginRight();
    FX_INT32		GetOrphans();
    FX_FLOAT		GetRadixOffset();
    FX_FLOAT		GetSpaceAbove();
    FX_FLOAT		GetSpaceBelow();
    FX_FLOAT		GetTextIndent();
    FX_INT32		GetWidows();
    FX_BOOL			SetHorizontalAlign(FX_INT32 iHorizontalAlign);
    FX_BOOL			SetVerticalAlign(FX_INT32 iVerticalAlign);
    FX_BOOL			SetLineHeight(FX_FLOAT fLineHeight);
    FX_BOOL			SetMarginLeft(FX_FLOAT fMarginLeft);
    FX_BOOL			SetMarginRight(FX_FLOAT fMarginRight);
    FX_BOOL			SetOrphans(FX_INT32 iOrphans);
    FX_BOOL			SetRadixOffset(FX_FLOAT fRadixOffset);
    FX_BOOL			SetSpaceAbove(FX_FLOAT fSpaceAbove);
    FX_BOOL			SetSpaceBelow(FX_FLOAT fSpaceBelow);
    FX_BOOL			SetTextIndent(FX_FLOAT fTextIndent);
    FX_BOOL			SetWidows(FX_INT32 iWidows);
};
class CXFA_Keep : public CXFA_Data
{
public:
    CXFA_Keep(CXFA_Node *pNode, CXFA_Node *pParent);

    FX_INT32		GetIntact();
    FX_INT32		GetNext();
    FX_INT32		GetPrevious();
    FX_BOOL			SetIntact(FX_INT32 iIntact);
    FX_BOOL			SetNext(FX_INT32 iNext);
    FX_BOOL			SetPrevious(FX_INT32 iPrevious);
private:
    CXFA_Node		*m_pParent;
};
enum XFA_TEXTENCODING {
    XFA_TEXTENCODING_None,
    XFA_TEXTENCODING_Big5,
    XFA_TEXTENCODING_FontSpecific,
    XFA_TEXTENCODING_GBK,
    XFA_TEXTENCODING_GB18030,
    XFA_TEXTENCODING_GB2312,
    XFA_TEXTENCODING_ISO8859NN,
    XFA_TEXTENCODING_KSC5601,
    XFA_TEXTENCODING_ShiftJIS,
    XFA_TEXTENCODING_UCS2,
    XFA_TEXTENCODING_UTF16,
    XFA_TEXTENCODING_UTF8
};
class CXFA_Event : public CXFA_Data
{
public:
    CXFA_Event(CXFA_Node* pNode);


    FX_INT32			GetActivity();

    FX_INT32			GetEventType();
    void				GetRef(CFX_WideStringC &wsRef);

    FX_INT32			GetExecuteRunAt();
    FX_INT32			GetExecuteType();
    void				GetExecuteConnection(CFX_WideString &wsConnection);


    CXFA_Script			GetScript();


    CXFA_Submit			GetSubmit();


    FX_INT32			GetSignDataOperation();
    void				GetSignDataTarget(CFX_WideString &wsTarget);
    FX_BOOL				SetActivity(FX_INT32 iActivity);
    FX_BOOL				SetEventType(FX_INT32 iEventType);
    FX_BOOL				SetExecuteRunAt(FX_INT32 iExecuteRunAt);
    FX_BOOL				SetExecuteType(FX_INT32 iExecuteType);
    FX_BOOL				SetExecuteConnection(const CFX_WideString& wsConnection);
    FX_BOOL				SetSignDataOperation(FX_INT32 iOperation);
    FX_BOOL				SetSignDataTarget(const CFX_WideString& wsTarget);
};
enum XFA_SCRIPTTYPE {
    XFA_SCRIPTTYPE_Formcalc = 0,
    XFA_SCRIPTTYPE_Javascript,
    XFA_SCRIPTTYPE_Unkown,
};
class CXFA_Script : public CXFA_Data
{
public:
    CXFA_Script(CXFA_Node* pNode);
    void				GetBinding(CFX_WideString &wsBinding);

    XFA_SCRIPTTYPE		GetContentType();
    FX_INT32			GetRunAt();
    void				GetExpression(CFX_WideString &wsExpression);
    FX_BOOL				SetBinding(const CFX_WideString& wsBinding);
    FX_BOOL				SetContentType(XFA_SCRIPTTYPE eType);
    FX_BOOL				SetRunAt(FX_INT32 iRunAt);
    FX_BOOL				SetExpression(const CFX_WideString& wsExpression);
};
class CXFA_Submit : public CXFA_Data
{
public:
    CXFA_Submit(CXFA_Node* pNode);
    FX_BOOL				IsSubmitEmbedPDF();
    FX_INT32			GetSubmitFormat();
    void				GetSubmitTarget(CFX_WideStringC &wsTarget);
    XFA_TEXTENCODING	GetSubmitTextEncoding();
    void				GetSubmitXDPContent(CFX_WideStringC &wsContent);
    FX_BOOL				SetSubmitFormat(FX_INT32 iSubmitFormat);
    FX_BOOL				SetSubmitTarget(const CFX_WideString& wsTarget);
    FX_BOOL				SetSubmitTextEncoding(XFA_TEXTENCODING eTextEncoding);
    FX_BOOL				SetSubmitXDPContent(const CFX_WideString& wsContent);
};
class CXFA_Value : public CXFA_Data
{
public:
    CXFA_Value(CXFA_Node* pNode) : CXFA_Data(pNode) {}

    XFA_ELEMENT		GetChildValueClassID();

    FX_BOOL			GetChildValueContent(CFX_WideString &wsContent);
    CXFA_Arc		GetArc();
    CXFA_Line		GetLine();
    CXFA_Rectangle	GetRectangle();
    CXFA_Text		GetText();
    CXFA_ExData		GetExData();
    CXFA_Image		GetImage();
    FX_BOOL			SetChildValueContent(const CFX_WideString& wsContent, FX_BOOL bNotify = FALSE, XFA_ELEMENT iType = XFA_ELEMENT_UNKNOWN);
};
class CXFA_Line : public CXFA_Data
{
public:
    CXFA_Line(CXFA_Node* pNode) : CXFA_Data(pNode) {}
    FX_INT32		GetHand();
    FX_BOOL			GetSlop();
    CXFA_Edge		GetEdge();
    FX_BOOL			SetHand(FX_INT32 iHand);
    FX_BOOL			SetSlop(FX_INT32 iSlop);
};
class CXFA_Text : public CXFA_Data
{
public:
    CXFA_Text(CXFA_Node* pNode);
    void		GetName(CFX_WideStringC &wsName);
    FX_INT32	GetMaxChars();
    void		GetRid(CFX_WideStringC &wsRid);
    void		GetContent(CFX_WideString &wsText);
    void		SetContent(CFX_WideString wsText, FX_BOOL bNotify = TRUE);
    FX_BOOL		SetName(const CFX_WideString& wsName);
    FX_BOOL		SetMaxChars(FX_INT32 iMaxChars);
    FX_BOOL		SetRid(const CFX_WideString& wsRid);
};
class CXFA_ExData : public CXFA_Data
{
public:
    CXFA_ExData(CXFA_Node* pNode);
    void		GetContentType(CFX_WideStringC &wsContentType);
    void		GetHref(CFX_WideStringC &wsHref);
    FX_INT32	GetMaxLength();
    void		GetRid(CFX_WideStringC &wsRid);
    FX_INT32	GetTransferEncoding();
    void		GetContent(CFX_WideString &wsText);
    FX_BOOL		SetContentType(const CFX_WideString& wsContentType);
    FX_BOOL		SetHref(const CFX_WideString& wsHref);
    FX_BOOL		SetMaxLength(FX_INT32 iMaxLength);
    FX_BOOL		SetRid(const CFX_WideString& wsRid);
    FX_BOOL		SetTransferEncoding(FX_INT32 iTransferEncoding);
    FX_BOOL		SetContent(const CFX_WideString& wsText, FX_BOOL bNotify = FALSE,  FX_BOOL bScriptModify = FALSE, FX_BOOL bSyncData = TRUE);
};
class CXFA_Image : public CXFA_Data
{
public:
    CXFA_Image(CXFA_Node* pNode, FX_BOOL bDefValue);
    FX_INT32	GetAspect();
    FX_BOOL		GetContentType(CFX_WideString &wsContentType);
    FX_BOOL		GetHref(CFX_WideString &wsHref);
    FX_INT32	GetTransferEncoding();
    FX_BOOL		GetContent(CFX_WideString &wsText);
    FX_BOOL		SetAspect(FX_INT32 iAspect);
    FX_BOOL		SetContentType(const CFX_WideString& wsContentType);
    FX_BOOL		SetHref(const CFX_WideString& wsHref);
    FX_BOOL		SetTransferEncoding(FX_INT32 iTransferEncoding);
    FX_BOOL		SetContent(const CFX_WideString& wsText);
protected:
    FX_BOOL		m_bDefValue;
};
class CXFA_Calculate : public CXFA_Data
{
public:
    CXFA_Calculate(CXFA_Node* pNode);

    FX_INT32		GetOverride();
    CXFA_Script		GetScript();
    void			GetMessageText(CFX_WideString &wsMessage);
    FX_BOOL			SetOverride(FX_INT32 iOverride);
    FX_BOOL			SetMessageText(const CFX_WideString& wsMessage);
};
class CXFA_Validate : public CXFA_Data
{
public:
    CXFA_Validate(CXFA_Node* pNode);
    FX_INT32	GetFormatTest();
    FX_BOOL		SetFormatTest(CFX_WideString wsValue);
    FX_INT32	GetNullTest();
    FX_BOOL		SetNullTest(CFX_WideString wsValue);
    FX_INT32	GetScriptTest();
    void			GetFormatMessageText(CFX_WideString &wsMessage);
    void			SetFormatMessageText(CFX_WideString wsMessage);
    void			GetNullMessageText(CFX_WideString &wsMessage);
    void			SetNullMessageText(CFX_WideString wsMessage);
    void			GetScriptMessageText(CFX_WideString &wsMessage);
    void			SetScriptMessageText(CFX_WideString wsMessage);
    void			GetPicture(CFX_WideString &wsPicture);
    CXFA_Script		GetScript();
protected:
    void		GetMessageText(CFX_WideString &wsMessage, FX_WSTR wsMessageType);
    void		SetMessageText(CFX_WideString &wsMessage, FX_WSTR wsMessageType);
    FX_BOOL		SetTestValue(FX_INT32 iType, CFX_WideString &wsValue, XFA_ATTRIBUTEENUM eName);
};
class CXFA_Variables : public CXFA_Data
{
public:
    CXFA_Variables(CXFA_Node* pNode);

    FX_INT32	CountScripts();
    CXFA_Script	GetScript(FX_INT32 nIndex);
};
class CXFA_Bind : public CXFA_Data
{
public:
    CXFA_Bind(CXFA_Node* pNode);
    FX_INT32	GetMatch();
    void		GetRef(CFX_WideStringC &wsRef);
    void		GetPicture(CFX_WideString &wsPicture);
    FX_BOOL		SetMatch(FX_INT32 iMatch);
    FX_BOOL		SetRef(const CFX_WideString& wsRef);
    FX_BOOL		SetPicture(const CFX_WideString& wsPicture);
};
class CXFA_Assist : public CXFA_Data
{
public:
    CXFA_Assist(CXFA_Node* pNode);

    CXFA_ToolTip	GetToolTip();
};
class CXFA_ToolTip : public CXFA_Data
{
public:
    CXFA_ToolTip(CXFA_Node* pNode);
    FX_BOOL GetTip(CFX_WideString &wsTip);
    FX_BOOL	SetTip(const CFX_WideString& wsTip);
};
class CXFA_BindItems : public CXFA_Data
{
public:
    CXFA_BindItems(CXFA_Node* pNode);
    void GetConnection(CFX_WideStringC &wsConnection);
    void GetLabelRef(CFX_WideStringC &wsLabelRef);
    void GetValueRef(CFX_WideStringC &wsValueRef);
    void GetRef(CFX_WideStringC &wsRef);
    FX_BOOL SetConnection(const CFX_WideString& wsConnection);
    FX_BOOL SetLabelRef(const CFX_WideString& wsLabelRef);
    FX_BOOL SetValueRef(const CFX_WideString& wsValueRef);
    FX_BOOL SetRef(const CFX_WideString& wsRef);
};
#define XFA_STROKE_SAMESTYLE_NoPresence	1
#define XFA_STROKE_SAMESTYLE_Corner		2
class CXFA_Stroke : public CXFA_Data
{
public:

    CXFA_Stroke(CXFA_Node* pNode) : CXFA_Data(pNode) {}

    FX_BOOL			IsCorner() const
    {
        return GetClassID() == XFA_ELEMENT_Corner;
    }

    FX_BOOL			IsEdge() const
    {
        return GetClassID() == XFA_ELEMENT_Edge;
    }

    FX_INT32		GetPresence() const;
    FX_BOOL			IsVisible() const
    {
        return GetPresence() == XFA_ATTRIBUTEENUM_Visible;
    }

    FX_INT32		GetCapType() const;

    FX_INT32		GetStrokeType() const;

    FX_FLOAT		GetThickness() const;
    CXFA_Measurement GetMSThickness() const;

    void			SetThickness(FX_FLOAT fThickness);
    void			SetMSThickness(CXFA_Measurement msThinkness);

    FX_ARGB			GetColor() const;

    void			SetColor(FX_ARGB argb);

    FX_INT32		GetJoinType() const;

    FX_BOOL			IsInverted() const;

    FX_FLOAT		GetRadius() const;

    FX_BOOL			SameStyles(CXFA_Stroke stroke, FX_DWORD dwFlags = 0) const;
};
class CXFA_Corner : public CXFA_Stroke
{
public:
    CXFA_Corner(CXFA_Node* pNode) : CXFA_Stroke(pNode) {}
};
class CXFA_Edge : public CXFA_Stroke
{
public:
    CXFA_Edge(CXFA_Node* pNode) : CXFA_Stroke(pNode) {}
};
typedef CFX_ArrayTemplate<CXFA_Stroke>	CXFA_StrokeArray;
typedef CFX_ArrayTemplate<CXFA_Edge>	CXFA_EdgeArray;
typedef CFX_ArrayTemplate<CXFA_Corner>	CXFA_CornerArray;
class CXFA_Box : public CXFA_Data
{
public:

    CXFA_Box(CXFA_Node *pNode) : CXFA_Data(pNode) {}

    FX_BOOL			IsArc() const
    {
        return GetClassID() == XFA_ELEMENT_Arc;
    }

    FX_BOOL			IsBorder() const
    {
        return GetClassID() == XFA_ELEMENT_Border;
    }

    FX_BOOL			IsRectangle() const
    {
        return GetClassID() == XFA_ELEMENT_Rectangle;
    }

    FX_INT32		GetBreak() const;

    FX_INT32		GetHand() const;

    FX_INT32		GetPresence() const;

    FX_INT32		CountCorners() const;

    CXFA_Corner		GetCorner(FX_INT32 nIndex) const;

    FX_INT32		CountEdges() const;

    CXFA_Edge		GetEdge(FX_INT32 nIndex = 0) const;

    void			GetStrokes(CXFA_StrokeArray &strokes) const;

    FX_BOOL			IsCircular() const;

    FX_BOOL			GetStartAngle(FX_FLOAT &fStartAngle) const;
    FX_FLOAT		GetStartAngle() const
    {
        FX_FLOAT fStartAngle;
        GetStartAngle(fStartAngle);
        return fStartAngle;
    }

    FX_BOOL			GetSweepAngle(FX_FLOAT &fSweepAngle) const;
    FX_FLOAT		GetSweepAngle() const
    {
        FX_FLOAT fSweepAngle;
        GetSweepAngle(fSweepAngle);
        return fSweepAngle;
    }

    CXFA_Fill		GetFill(FX_BOOL bModified = FALSE) const;

    CXFA_Margin		GetMargin() const;

    FX_BOOL			SameStyles() const;

    FX_INT32		Get3DStyle(FX_BOOL &bVisible, FX_FLOAT &fThickness) const;
};
class CXFA_Arc : public CXFA_Box
{
public:
    CXFA_Arc(CXFA_Node *pNode) : CXFA_Box(pNode) {}
};
class CXFA_Border : public CXFA_Box
{
public:
    CXFA_Border(CXFA_Node *pNode) : CXFA_Box(pNode) {}
};
class CXFA_Rectangle : public CXFA_Box
{
public:
    CXFA_Rectangle(CXFA_Node *pNode) : CXFA_Box(pNode) {}
};
enum XFA_CHECKSTATE {
    XFA_CHECKSTATE_On = 0,
    XFA_CHECKSTATE_Off = 1,
    XFA_CHECKSTATE_Neutral = 2,
};
enum XFA_VALUEPICTURE {
    XFA_VALUEPICTURE_Raw = 0,
    XFA_VALUEPICTURE_Display,
    XFA_VALUEPICTURE_Edit,
    XFA_VALUEPICTURE_DataBind,
};
class CXFA_WidgetData : public CXFA_Data
{
public:
    CXFA_WidgetData(CXFA_Node *pNode);
    CXFA_Node*		GetUIChild();

    XFA_ELEMENT		GetUIType();
    CFX_WideString	GetRawValue();

    FX_INT32		GetAccess(FX_BOOL bTemplate = FALSE);

    FX_BOOL			GetAccessKey(CFX_WideStringC &wsAccessKey);

    FX_INT32		GetAnchorType();

    FX_INT32		GetColSpan();

    FX_INT32		GetPresence();

    FX_INT32		GetRotate();

    CXFA_Border		GetBorder(FX_BOOL bModified = FALSE);

    CXFA_Caption	GetCaption(FX_BOOL bModified = FALSE);

    CXFA_Font		GetFont(FX_BOOL bModified = FALSE);

    CXFA_Margin		GetMargin(FX_BOOL bModified = FALSE);

    CXFA_Para		GetPara(FX_BOOL bModified = FALSE);

    CXFA_Keep		GetKeep(FX_BOOL bModified = FALSE);

    void			GetEventList(CXFA_NodeArray &events);
    FX_INT32		GetEventByActivity(FX_INT32 iActivity, CXFA_NodeArray &events, FX_BOOL bIsFormReady = FALSE);

    CXFA_Value		GetDefaultValue(FX_BOOL bModified = FALSE);

    CXFA_Value		GetFormValue(FX_BOOL bModified = FALSE);

    CXFA_Calculate	GetCalculate(FX_BOOL bModified = FALSE);

    CXFA_Validate	GetValidate(FX_BOOL bModified = FALSE);

    CXFA_Variables	GetVariables(FX_BOOL bModified = FALSE);

    CXFA_Bind		GetBind(FX_BOOL bModified = FALSE);

    CXFA_Assist		GetAssist(FX_BOOL bModified = FALSE);

    void			GetRelevant(CFX_WideStringC &wsRelevant);
    FX_DWORD		GetRelevantStatus();

    FX_BOOL			GetWidth(FX_FLOAT &fWidth);
    FX_BOOL			GetHeight(FX_FLOAT &fHeight);

    FX_BOOL			GetMinWidth(FX_FLOAT &fMinWidth);
    FX_BOOL			GetMinHeight(FX_FLOAT &fMinHeight);

    FX_BOOL			GetMaxWidth(FX_FLOAT &fMaxWidth);
    FX_BOOL			GetMaxHeight(FX_FLOAT &fMaxHeight);

    CXFA_BindItems	GetBindItems();
    FX_BOOL			SetAccess(FX_INT32 iAccess, FX_BOOL bNotify = TRUE);
    FX_BOOL			SetAccessKey(const CFX_WideString& wsAccessKey);
    FX_BOOL			SetAnchorType(FX_INT32 iType);
    FX_BOOL			SetColSpan(FX_INT32 iColSpan);
    FX_BOOL			SetPresence(FX_INT32 iPresence);
    FX_BOOL			SetRotate(FX_INT32 iRotate);
    FX_BOOL			SetRelevant(const CFX_WideString& wsRelevant);
    FX_BOOL			SetStatus(FX_DWORD dwStatus);
    FX_BOOL			SetWidth(FX_FLOAT fWidth);
    FX_BOOL			SetHeight(FX_FLOAT fHeight);
    FX_BOOL			SetMinWidth(FX_FLOAT fMinWidth);
    FX_BOOL			SetMinHeight(FX_FLOAT fMinHeight);
    FX_BOOL			SetMaxWidth(FX_FLOAT fMaxWidth);
    FX_BOOL			SetMaxHeight(FX_FLOAT fMaxHeight);
    FX_BOOL			SetPos(FX_FLOAT x, FX_FLOAT y);
    FX_BOOL			SetName(const CFX_WideString& wsName);
    FX_BOOL			SetButtonHighlight(FX_INT32 iButtonHighlight);
    FX_BOOL			SetButtonRollover(const CFX_WideString &wsRollover, FX_BOOL bRichText);
    FX_BOOL			SetButtonDown(const CFX_WideString& wsDown, FX_BOOL bRichText);
    FX_BOOL			SetCheckButtonShape(FX_INT32 iCheckButtonShape);
    FX_BOOL			SetCheckButtonMark(FX_INT32 iCheckButtonMark);
    FX_BOOL			SetCheckButtonSize(FX_FLOAT fCheckButtonMark);

    CXFA_Border		GetUIBorder(FX_BOOL bModified = FALSE);

    CXFA_Margin		GetUIMargin(FX_BOOL bModified = FALSE);
    void			GetUIMargin(CFX_RectF &rtUIMargin);

    FX_INT32		GetButtonHighlight();
    FX_BOOL			GetButtonRollover(CFX_WideString &wsRollover, FX_BOOL &bRichText);
    FX_BOOL			GetButtonDown(CFX_WideString &wsDown, FX_BOOL &bRichText);


    FX_INT32		GetCheckButtonShape();

    FX_INT32		GetCheckButtonMark();

    FX_FLOAT		GetCheckButtonSize();

    FX_BOOL			IsAllowNeutral();
    FX_BOOL			IsRadioButton();
    XFA_CHECKSTATE	GetCheckState();
    void			SetCheckState(XFA_CHECKSTATE eCheckState, FX_BOOL bNotify = TRUE);

    CXFA_Node*		GetExclGroupNode();

    CXFA_Node*		GetSelectedMember();

    CXFA_Node*		SetSelectedMember(FX_WSTR wsName, FX_BOOL bNotify = TRUE);

    void			SetSelectedMemberByValue(FX_WSTR wsValue, FX_BOOL bNotify = TRUE, FX_BOOL bScriptModify = FALSE, FX_BOOL bSyncData = TRUE);
    CXFA_Node*		GetExclGroupFirstMember();
    CXFA_Node*		GetExclGroupNextMember(CXFA_Node* pNode);

    FX_INT32		GetChoiceListCommitOn();

    FX_BOOL			IsChoiceListAllowTextEntry();

    FX_INT32		GetChoiceListOpen();
    FX_BOOL			IsListBox();
    FX_INT32		CountChoiceListItems(FX_BOOL bSaveValue = FALSE);

    FX_BOOL			GetChoiceListItem(CFX_WideString &wsText, FX_INT32 nIndex, FX_BOOL bSaveValue = FALSE);
    void			GetChoiceListItems(CFX_WideStringArray &wsTextArray, FX_BOOL bSaveValue = FALSE);

    FX_INT32		CountSelectedItems();

    FX_INT32		GetSelectedItem(FX_INT32 nIndex = 0);
    void			GetSelectedItems(CFX_Int32Array &iSelArray);
    void			GetSelectedItemsValue(CFX_WideStringArray &wsSelTextArray);

    FX_BOOL			GetItemState(FX_INT32 nIndex);

    void			SetItemState(FX_INT32 nIndex, FX_BOOL bSelected, FX_BOOL bNotify = FALSE, FX_BOOL bScriptModify = FALSE, FX_BOOL bSyncData = TRUE);
    void			SetSelectdItems(CFX_Int32Array &iSelArray, FX_BOOL bNotify = FALSE, FX_BOOL bScriptModify = FALSE, FX_BOOL bSyncData = TRUE);
    void			ClearAllSelections();
    void			InsertItem(const CFX_WideString &wsLabel, const CFX_WideString &wsValue, FX_INT32 nIndex = -1, FX_BOOL bNotify = FALSE);
    void			GetItemLabel(FX_WSTR wsValue, CFX_WideString &wsLabel);
    void			GetItemValue(FX_WSTR wsLabel, CFX_WideString &wsValue);
    FX_BOOL			DeleteItem(FX_INT32 nIndex, FX_BOOL bNotify = FALSE, FX_BOOL bScriptModify = FALSE, FX_BOOL bSyncData = TRUE);

    FX_INT32		GetHorizontalScrollPolicy();

    FX_INT32		GetNumberOfCells();

    FX_BOOL			IsDateTimeEditUsePicker();

    FX_BOOL		SetValue(const CFX_WideString& wsValue, XFA_VALUEPICTURE eValueType);
    FX_BOOL		GetPictureContent(CFX_WideString &wsPicture, XFA_VALUEPICTURE ePicture);
    IFX_Locale* GetLocal();
    FX_BOOL		GetValue(CFX_WideString &wsValue, XFA_VALUEPICTURE eValueType);
    FX_BOOL		GetNormalizeDataValue(FX_WSTR wsValue, CFX_WideString &wsNormalizeValue);
    FX_BOOL		GetFormatDataValue(FX_WSTR wsValue, CFX_WideString &wsFormatedValue);
    void		NormalizeNumStr(const CFX_WideString& wsValue, CFX_WideString& wsOutput);

    CFX_WideString	GetBarcodeType();
    FX_BOOL			GetBarcodeAttribute_CharEncoding(FX_INT32& val);
    FX_BOOL			GetBarcodeAttribute_Checksum(FX_INT32& val);
    FX_BOOL			GetBarcodeAttribute_DataLength(FX_INT32& val);
    FX_BOOL			GetBarcodeAttribute_StartChar(FX_CHAR& val);
    FX_BOOL			GetBarcodeAttribute_EndChar(FX_CHAR& val);
    FX_BOOL			GetBarcodeAttribute_ECLevel(FX_INT32& val);
    FX_BOOL			GetBarcodeAttribute_ModuleWidth(FX_INT32& val);
    FX_BOOL			GetBarcodeAttribute_ModuleHeight(FX_INT32& val);
    FX_BOOL			GetBarcodeAttribute_PrintChecksum(FX_BOOL& val);
    FX_BOOL			GetBarcodeAttribute_TextLocation(FX_INT32& val);
    FX_BOOL			GetBarcodeAttribute_Truncate(FX_BOOL& val);
    FX_BOOL			GetBarcodeAttribute_WideNarrowRatio(FX_FLOAT& val);

    void			GetPasswordChar(CFX_WideString &wsPassWord);

    FX_BOOL			IsAllowRichText();

    FX_BOOL			IsMultiLine();

    FX_INT32		GetVerticalScrollPolicy();

    FX_INT32		GetMaxChars(XFA_ELEMENT& eType);

    FX_BOOL			GetFracDigits(FX_INT32 &iFracDigits);

    FX_BOOL			GetLeadDigits(FX_INT32 &iLeadDigits);

    CXFA_Filter		GetFilter(FX_BOOL bModified = FALSE);
    CXFA_Manifest	GetManifest(FX_BOOL bModified = FALSE);
    FX_BOOL			m_bIsNull;
    FX_BOOL			m_bPreNull;
protected:
    void			SyncValue(const CFX_WideString& wsValue, FX_BOOL bNotify);
    void			InsertListTextItem(CXFA_Node* pItems, FX_WSTR wsText, FX_INT32 nIndex = -1);
    void			FormatNumStr(const CFX_WideString& wsValue, IFX_Locale* pLocale, CFX_WideString& wsOutput);
    CXFA_Node*		m_pUiChildNode;
    XFA_ELEMENT		m_eUIType;
};
class CXFA_Occur : public CXFA_Data
{
public:
    CXFA_Occur(CXFA_Node* pNode);
    FX_INT32	GetMax();
    FX_INT32	GetMin();
    FX_INT32	GetInitial();
    FX_BOOL		GetOccurInfo(FX_INT32& iMin, FX_INT32& iMax, FX_INT32& iInit);
    void		SetMax(FX_INT32 iMax);
    void		SetMin(FX_INT32 iMin);
};
class CXFA_Filter : public CXFA_Data
{
public:
    CXFA_Filter(CXFA_Node* pNode) : CXFA_Data(pNode) {}
    CFX_WideString			GetFilterString(XFA_ATTRIBUTE eAttribute);
    XFA_ATTRIBUTEENUM		GetAppearanceFilterType();
    CFX_WideString			GetAppearanceFilterContent();
    XFA_ATTRIBUTEENUM		GetCertificatesCredentialServerPolicy();
    CFX_WideString			GetCertificatesURL();
    CFX_WideString			GetCertificatesURLPolicy();
    CXFA_WrapCertificate	GetCertificatesEncryption(FX_BOOL bModified = FALSE);
    CXFA_WrapCertificate	GetCertificatesIssuers(FX_BOOL bModified = FALSE);
    CFX_WideString			GetCertificatesKeyUsageString(XFA_ATTRIBUTE eAttribute);
    CXFA_Oids				GetCertificatesOids();
    CXFA_WrapCertificate	GetCertificatesSigning(FX_BOOL bModified = FALSE);
    CXFA_DigestMethods		GetDigestMethods(FX_BOOL bModified = FALSE);
    CXFA_Encodings			GetEncodings(FX_BOOL bModified = FALSE);
    CXFA_EncryptionMethods	GetEncryptionMethods(FX_BOOL bModified = FALSE);
    XFA_ATTRIBUTEENUM		GetHandlerType();
    CFX_WideString			GetHandlerContent();
    XFA_ATTRIBUTEENUM		GetlockDocumentType();
    CFX_WideString			GetlockDocumentContent();
    FX_INT32				GetMDPPermissions();
    XFA_ATTRIBUTEENUM		GetMDPSignatureType();

    CXFA_Reasons			GetReasons(FX_BOOL bModified = FALSE);
    CFX_WideString			GetTimeStampServer();
    XFA_ATTRIBUTEENUM		GetTimeStampType();
};
class CXFA_Certificate : public CXFA_Data
{
public:
    CXFA_Certificate(CXFA_Node* pNode) : CXFA_Data(pNode) {}
    CFX_WideString		GetCertificateName();
    CFX_WideString		GetCertificateContent();
};
class CXFA_WrapCertificate : public CXFA_Data
{
public:
    CXFA_WrapCertificate(CXFA_Node* pNode) : CXFA_Data(pNode) {}
    XFA_ATTRIBUTEENUM	GetType();
    FX_INT32			CountCertificates();
    CXFA_Certificate	GetCertificate(FX_INT32 nIndex);
};
class CXFA_Oids : public CXFA_Data
{
public:
    CXFA_Oids(CXFA_Node* pNode) : CXFA_Data(pNode) {}
    XFA_ATTRIBUTEENUM	GetOidsType();
    FX_INT32			CountOids();
    CFX_WideString		GetOidContent(FX_INT32 nIndex);
};
class CXFA_SubjectDNs : public CXFA_Data
{
public:
    CXFA_SubjectDNs(CXFA_Node* pNode) : CXFA_Data(pNode) {}
    XFA_ATTRIBUTEENUM	GetSubjectDNsType();
    FX_INT32				CountSubjectDNs();
    CFX_WideString			GetSubjectDNString(FX_INT32 nIndex, XFA_ATTRIBUTE eAttribute);
    CFX_WideString			GetSubjectDNContent(FX_INT32 nIndex);
};
class CXFA_DigestMethods : public CXFA_Data
{
public:
    CXFA_DigestMethods(CXFA_Node* pNode) : CXFA_Data(pNode) {}
    XFA_ATTRIBUTEENUM	GetDigestMethodsType();
    FX_INT32				CountDigestMethods();
    CFX_WideString			GetDigestMethodContent(FX_INT32 nIndex);
};
class CXFA_Encodings : public CXFA_Data
{
public:
    CXFA_Encodings(CXFA_Node* pNode) : CXFA_Data(pNode) {}
    XFA_ATTRIBUTEENUM		GetEncodingsType();
    FX_INT32				CountEncodings();
    CFX_WideString			GetEncodingContent(FX_INT32 nIndex);
};
class CXFA_EncryptionMethods : public CXFA_Data
{
public:
    CXFA_EncryptionMethods(CXFA_Node* pNode) : CXFA_Data(pNode) {}
    XFA_ATTRIBUTEENUM		GetEncryptionMethodsType();
    FX_INT32				CountEncryptionMethods();
    CFX_WideString			GetEncryptionMethodContent(FX_INT32 nIndex);
};
class CXFA_Reasons : public CXFA_Data
{
public:
    CXFA_Reasons(CXFA_Node* pNode) : CXFA_Data(pNode) {}
    XFA_ATTRIBUTEENUM		GetReasonsType();
    FX_INT32				CountReasons();
    CFX_WideString			GetReasonContent(FX_INT32 nIndex);
};
class CXFA_Manifest : public CXFA_Data
{
public:
    CXFA_Manifest(CXFA_Node* pNode) : CXFA_Data(pNode) {}
    XFA_ATTRIBUTEENUM	GetAction();
    FX_INT32			CountReives();
    CFX_WideString		GetRefContent(FX_INT32 nIndex);
};
#endif