Home | History | Annotate | Download | only in fxfa
      1 // Copyright 2014 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 #ifndef FXFA_OBJECTACC_H_
      8 #define FXFA_OBJECTACC_H_
      9 
     10 #include "core/include/fxge/fx_dib.h"  // For FX_ARGB.
     11 
     12 class CXFA_Node;
     13 class IFX_Locale;
     14 class CXFA_Data;
     15 class CXFA_Font;
     16 class CXFA_Fill;
     17 class CXFA_Margin;
     18 class CXFA_Caption;
     19 class CXFA_Para;
     20 class CXFA_Event;
     21 class CXFA_Script;
     22 class CXFA_Value;
     23 class CXFA_Calculate;
     24 class CXFA_Line;
     25 class CXFA_Text;
     26 class CXFA_ExData;
     27 class CXFA_Image;
     28 class CXFA_Validate;
     29 class CXFA_Variables;
     30 class CXFA_Bind;
     31 class CXFA_Assist;
     32 class CXFA_ToolTip;
     33 class CXFA_Keep;
     34 class CXFA_Submit;
     35 class CXFA_BindItems;
     36 class CXFA_Stroke;
     37 class CXFA_Corner;
     38 class CXFA_Edge;
     39 class CXFA_Box;
     40 class CXFA_Arc;
     41 class CXFA_Border;
     42 class CXFA_Rectangle;
     43 class CXFA_WidgetData;
     44 class CXFA_Occur;
     45 class CXFA_Filter;
     46 class CXFA_Certificate;
     47 class CXFA_WrapCertificate;
     48 class CXFA_Oids;
     49 class CXFA_SubjectDNs;
     50 class CXFA_DigestMethods;
     51 class CXFA_Encodings;
     52 class CXFA_EncryptionMethods;
     53 class CXFA_Reasons;
     54 class CXFA_Manifest;
     55 inline FX_BOOL XFA_IsSpace(FX_WCHAR c) {
     56   return (c == 0x20) || (c == 0x0d) || (c == 0x0a) || (c == 0x09);
     57 }
     58 inline FX_BOOL XFA_IsDigit(FX_WCHAR c) {
     59   return c >= '0' && c <= '9';
     60 }
     61 typedef CFX_ArrayTemplate<CXFA_Node*> CXFA_NodeArray;
     62 typedef CFX_ArrayTemplate<CXFA_Object*> CXFA_ObjArray;
     63 class CXFA_Data {
     64  public:
     65   CXFA_Data(CXFA_Node* pNode) : m_pNode(pNode) {}
     66   operator CXFA_Node*() const { return m_pNode; }
     67   CXFA_Node* GetNode() { return m_pNode; }
     68 
     69   FX_BOOL IsExistInXML() const { return m_pNode != NULL; }
     70 
     71   XFA_ELEMENT GetClassID() const;
     72 
     73  protected:
     74   FX_BOOL TryMeasure(XFA_ATTRIBUTE eAttr,
     75                      FX_FLOAT& fValue,
     76                      FX_BOOL bUseDefault = FALSE) const;
     77   FX_BOOL SetMeasure(XFA_ATTRIBUTE eAttr, FX_FLOAT fValue);
     78   CXFA_Node* m_pNode;
     79 };
     80 class CXFA_Fill : public CXFA_Data {
     81  public:
     82   CXFA_Fill(CXFA_Node* pNode);
     83   ~CXFA_Fill();
     84 
     85   int32_t GetPresence();
     86 
     87   FX_ARGB GetColor(FX_BOOL bText = FALSE);
     88 
     89   void SetColor(FX_ARGB color);
     90 
     91   int32_t GetFillType();
     92 
     93   int32_t GetPattern(FX_ARGB& foreColor);
     94 
     95   int32_t GetStipple(FX_ARGB& stippleColor);
     96 
     97   int32_t GetLinear(FX_ARGB& endColor);
     98 
     99   int32_t GetRadial(FX_ARGB& endColor);
    100   FX_BOOL SetPresence(int32_t iPresence);
    101   FX_BOOL SetFillType(int32_t iType);
    102   FX_BOOL SetPattern(int32_t iPattern, FX_ARGB foreColor);
    103   FX_BOOL SetStipple(int32_t iStipple, FX_ARGB stippleColor);
    104   FX_BOOL SetLinear(int32_t iLinear, FX_ARGB endColor);
    105   FX_BOOL SetRadial(int32_t iRadial, FX_ARGB endColor);
    106 };
    107 class CXFA_Margin : public CXFA_Data {
    108  public:
    109   CXFA_Margin(CXFA_Node* pNode);
    110   FX_BOOL GetLeftInset(FX_FLOAT& fInset, FX_FLOAT fDefInset = 0) const;
    111   FX_BOOL GetTopInset(FX_FLOAT& fInset, FX_FLOAT fDefInset = 0) const;
    112   FX_BOOL GetRightInset(FX_FLOAT& fInset, FX_FLOAT fDefInset = 0) const;
    113   FX_BOOL GetBottomInset(FX_FLOAT& fInset, FX_FLOAT fDefInset = 0) const;
    114   FX_BOOL SetLeftInset(FX_FLOAT fInset);
    115   FX_BOOL SetTopInset(FX_FLOAT fInset);
    116   FX_BOOL SetRightInset(FX_FLOAT fInset);
    117   FX_BOOL SetBottomInset(FX_FLOAT fInset);
    118 };
    119 class CXFA_Font : public CXFA_Data {
    120  public:
    121   CXFA_Font(CXFA_Node* pNode);
    122 
    123   FX_FLOAT GetBaselineShift();
    124 
    125   FX_FLOAT GetHorizontalScale();
    126 
    127   FX_FLOAT GetVerticalScale();
    128 
    129   FX_FLOAT GetLetterSpacing();
    130 
    131   int32_t GetLineThrough();
    132 
    133   int32_t GetLineThroughPeriod();
    134 
    135   int32_t GetOverline();
    136 
    137   int32_t GetOverlinePeriod();
    138 
    139   int32_t GetUnderline();
    140 
    141   int32_t GetUnderlinePeriod();
    142 
    143   FX_FLOAT GetFontSize();
    144 
    145   void GetTypeface(CFX_WideStringC& wsTypeFace);
    146 
    147   FX_BOOL IsBold();
    148 
    149   FX_BOOL IsItalic();
    150 
    151   FX_BOOL IsUseKerning();
    152 
    153   FX_ARGB GetColor();
    154 
    155   void SetColor(FX_ARGB color);
    156   FX_BOOL SetBaselineShift(FX_FLOAT fBaselineShift);
    157   FX_BOOL SetHorizontalScale(FX_FLOAT fHorizontalScale);
    158   FX_BOOL SetVerticalScale(FX_FLOAT fVerticalScale);
    159   FX_BOOL SetLetterSpacing(FX_FLOAT fLetterSpacing, XFA_UNIT eUnit);
    160   FX_BOOL SetLineThrough(int32_t iLineThrough);
    161   FX_BOOL SetLineThroughPeriod(int32_t iLineThroughPeriod);
    162   FX_BOOL SetOverline(int32_t iOverline);
    163   FX_BOOL SetOverlinePeriod(int32_t iOverlinePeriod);
    164   FX_BOOL SetUnderline(int32_t iUnderline);
    165   FX_BOOL SetUnderlinePeriod(int32_t iUnderlinePeriod);
    166 };
    167 class CXFA_Caption : public CXFA_Data {
    168  public:
    169   CXFA_Caption(CXFA_Node* pNode);
    170 
    171   int32_t GetPresence();
    172 
    173   int32_t GetPlacementType();
    174 
    175   FX_FLOAT GetReserve();
    176 
    177   CXFA_Margin GetMargin();
    178 
    179   CXFA_Font GetFont();
    180 
    181   CXFA_Value GetValue();
    182 
    183   CXFA_Para GetPara();
    184   FX_BOOL SetPresence(int32_t iPresence);
    185   FX_BOOL SetPlacementType(int32_t iType);
    186   FX_BOOL SetReserve(FX_FLOAT fReserve);
    187 };
    188 class CXFA_Para : public CXFA_Data {
    189  public:
    190   CXFA_Para(CXFA_Node* pNode);
    191 
    192   int32_t GetHorizontalAlign();
    193 
    194   int32_t GetVerticalAlign();
    195 
    196   FX_FLOAT GetLineHeight();
    197   FX_FLOAT GetMarginLeft();
    198   FX_FLOAT GetMarginRight();
    199   int32_t GetOrphans();
    200   FX_FLOAT GetRadixOffset();
    201   FX_FLOAT GetSpaceAbove();
    202   FX_FLOAT GetSpaceBelow();
    203   FX_FLOAT GetTextIndent();
    204   int32_t GetWidows();
    205   FX_BOOL SetHorizontalAlign(int32_t iHorizontalAlign);
    206   FX_BOOL SetVerticalAlign(int32_t iVerticalAlign);
    207   FX_BOOL SetLineHeight(FX_FLOAT fLineHeight);
    208   FX_BOOL SetMarginLeft(FX_FLOAT fMarginLeft);
    209   FX_BOOL SetMarginRight(FX_FLOAT fMarginRight);
    210   FX_BOOL SetOrphans(int32_t iOrphans);
    211   FX_BOOL SetRadixOffset(FX_FLOAT fRadixOffset);
    212   FX_BOOL SetSpaceAbove(FX_FLOAT fSpaceAbove);
    213   FX_BOOL SetSpaceBelow(FX_FLOAT fSpaceBelow);
    214   FX_BOOL SetTextIndent(FX_FLOAT fTextIndent);
    215   FX_BOOL SetWidows(int32_t iWidows);
    216 };
    217 class CXFA_Keep : public CXFA_Data {
    218  public:
    219   CXFA_Keep(CXFA_Node* pNode, CXFA_Node* pParent);
    220 
    221   int32_t GetIntact();
    222   int32_t GetNext();
    223   int32_t GetPrevious();
    224   FX_BOOL SetIntact(int32_t iIntact);
    225   FX_BOOL SetNext(int32_t iNext);
    226   FX_BOOL SetPrevious(int32_t iPrevious);
    227 
    228  private:
    229   CXFA_Node* m_pParent;
    230 };
    231 enum XFA_TEXTENCODING {
    232   XFA_TEXTENCODING_None,
    233   XFA_TEXTENCODING_Big5,
    234   XFA_TEXTENCODING_FontSpecific,
    235   XFA_TEXTENCODING_GBK,
    236   XFA_TEXTENCODING_GB18030,
    237   XFA_TEXTENCODING_GB2312,
    238   XFA_TEXTENCODING_ISO8859NN,
    239   XFA_TEXTENCODING_KSC5601,
    240   XFA_TEXTENCODING_ShiftJIS,
    241   XFA_TEXTENCODING_UCS2,
    242   XFA_TEXTENCODING_UTF16,
    243   XFA_TEXTENCODING_UTF8
    244 };
    245 class CXFA_Event : public CXFA_Data {
    246  public:
    247   CXFA_Event(CXFA_Node* pNode);
    248 
    249   int32_t GetActivity();
    250 
    251   int32_t GetEventType();
    252   void GetRef(CFX_WideStringC& wsRef);
    253 
    254   int32_t GetExecuteRunAt();
    255   int32_t GetExecuteType();
    256   void GetExecuteConnection(CFX_WideString& wsConnection);
    257 
    258   CXFA_Script GetScript();
    259 
    260   CXFA_Submit GetSubmit();
    261 
    262   int32_t GetSignDataOperation();
    263   void GetSignDataTarget(CFX_WideString& wsTarget);
    264   FX_BOOL SetActivity(int32_t iActivity);
    265   FX_BOOL SetEventType(int32_t iEventType);
    266   FX_BOOL SetExecuteRunAt(int32_t iExecuteRunAt);
    267   FX_BOOL SetExecuteType(int32_t iExecuteType);
    268   FX_BOOL SetExecuteConnection(const CFX_WideString& wsConnection);
    269   FX_BOOL SetSignDataOperation(int32_t iOperation);
    270   FX_BOOL SetSignDataTarget(const CFX_WideString& wsTarget);
    271 };
    272 enum XFA_SCRIPTTYPE {
    273   XFA_SCRIPTTYPE_Formcalc = 0,
    274   XFA_SCRIPTTYPE_Javascript,
    275   XFA_SCRIPTTYPE_Unkown,
    276 };
    277 class CXFA_Script : public CXFA_Data {
    278  public:
    279   CXFA_Script(CXFA_Node* pNode);
    280   void GetBinding(CFX_WideString& wsBinding);
    281 
    282   XFA_SCRIPTTYPE GetContentType();
    283   int32_t GetRunAt();
    284   void GetExpression(CFX_WideString& wsExpression);
    285   FX_BOOL SetBinding(const CFX_WideString& wsBinding);
    286   FX_BOOL SetContentType(XFA_SCRIPTTYPE eType);
    287   FX_BOOL SetRunAt(int32_t iRunAt);
    288   FX_BOOL SetExpression(const CFX_WideString& wsExpression);
    289 };
    290 class CXFA_Submit : public CXFA_Data {
    291  public:
    292   CXFA_Submit(CXFA_Node* pNode);
    293   FX_BOOL IsSubmitEmbedPDF();
    294   int32_t GetSubmitFormat();
    295   void GetSubmitTarget(CFX_WideStringC& wsTarget);
    296   XFA_TEXTENCODING GetSubmitTextEncoding();
    297   void GetSubmitXDPContent(CFX_WideStringC& wsContent);
    298   FX_BOOL SetSubmitFormat(int32_t iSubmitFormat);
    299   FX_BOOL SetSubmitTarget(const CFX_WideString& wsTarget);
    300   FX_BOOL SetSubmitTextEncoding(XFA_TEXTENCODING eTextEncoding);
    301   FX_BOOL SetSubmitXDPContent(const CFX_WideString& wsContent);
    302 };
    303 class CXFA_Value : public CXFA_Data {
    304  public:
    305   CXFA_Value(CXFA_Node* pNode) : CXFA_Data(pNode) {}
    306 
    307   XFA_ELEMENT GetChildValueClassID();
    308 
    309   FX_BOOL GetChildValueContent(CFX_WideString& wsContent);
    310   CXFA_Arc GetArc();
    311   CXFA_Line GetLine();
    312   CXFA_Rectangle GetRectangle();
    313   CXFA_Text GetText();
    314   CXFA_ExData GetExData();
    315   CXFA_Image GetImage();
    316   FX_BOOL SetChildValueContent(const CFX_WideString& wsContent,
    317                                FX_BOOL bNotify = FALSE,
    318                                XFA_ELEMENT iType = XFA_ELEMENT_UNKNOWN);
    319 };
    320 class CXFA_Line : public CXFA_Data {
    321  public:
    322   CXFA_Line(CXFA_Node* pNode) : CXFA_Data(pNode) {}
    323   int32_t GetHand();
    324   FX_BOOL GetSlop();
    325   CXFA_Edge GetEdge();
    326   FX_BOOL SetHand(int32_t iHand);
    327   FX_BOOL SetSlop(int32_t iSlop);
    328 };
    329 class CXFA_Text : public CXFA_Data {
    330  public:
    331   CXFA_Text(CXFA_Node* pNode);
    332   void GetName(CFX_WideStringC& wsName);
    333   int32_t GetMaxChars();
    334   void GetRid(CFX_WideStringC& wsRid);
    335   void GetContent(CFX_WideString& wsText);
    336   void SetContent(CFX_WideString wsText, FX_BOOL bNotify = TRUE);
    337   FX_BOOL SetName(const CFX_WideString& wsName);
    338   FX_BOOL SetMaxChars(int32_t iMaxChars);
    339   FX_BOOL SetRid(const CFX_WideString& wsRid);
    340 };
    341 class CXFA_ExData : public CXFA_Data {
    342  public:
    343   CXFA_ExData(CXFA_Node* pNode);
    344   void GetContentType(CFX_WideStringC& wsContentType);
    345   void GetHref(CFX_WideStringC& wsHref);
    346   int32_t GetMaxLength();
    347   void GetRid(CFX_WideStringC& wsRid);
    348   int32_t GetTransferEncoding();
    349   void GetContent(CFX_WideString& wsText);
    350   FX_BOOL SetContentType(const CFX_WideString& wsContentType);
    351   FX_BOOL SetHref(const CFX_WideString& wsHref);
    352   FX_BOOL SetMaxLength(int32_t iMaxLength);
    353   FX_BOOL SetRid(const CFX_WideString& wsRid);
    354   FX_BOOL SetTransferEncoding(int32_t iTransferEncoding);
    355   FX_BOOL SetContent(const CFX_WideString& wsText,
    356                      FX_BOOL bNotify = FALSE,
    357                      FX_BOOL bScriptModify = FALSE,
    358                      FX_BOOL bSyncData = TRUE);
    359 };
    360 class CXFA_Image : public CXFA_Data {
    361  public:
    362   CXFA_Image(CXFA_Node* pNode, FX_BOOL bDefValue);
    363   int32_t GetAspect();
    364   FX_BOOL GetContentType(CFX_WideString& wsContentType);
    365   FX_BOOL GetHref(CFX_WideString& wsHref);
    366   int32_t GetTransferEncoding();
    367   FX_BOOL GetContent(CFX_WideString& wsText);
    368   FX_BOOL SetAspect(int32_t iAspect);
    369   FX_BOOL SetContentType(const CFX_WideString& wsContentType);
    370   FX_BOOL SetHref(const CFX_WideString& wsHref);
    371   FX_BOOL SetTransferEncoding(int32_t iTransferEncoding);
    372   FX_BOOL SetContent(const CFX_WideString& wsText);
    373 
    374  protected:
    375   FX_BOOL m_bDefValue;
    376 };
    377 class CXFA_Calculate : public CXFA_Data {
    378  public:
    379   CXFA_Calculate(CXFA_Node* pNode);
    380 
    381   int32_t GetOverride();
    382   CXFA_Script GetScript();
    383   void GetMessageText(CFX_WideString& wsMessage);
    384   FX_BOOL SetOverride(int32_t iOverride);
    385   FX_BOOL SetMessageText(const CFX_WideString& wsMessage);
    386 };
    387 class CXFA_Validate : public CXFA_Data {
    388  public:
    389   CXFA_Validate(CXFA_Node* pNode);
    390   int32_t GetFormatTest();
    391   FX_BOOL SetFormatTest(CFX_WideString wsValue);
    392   int32_t GetNullTest();
    393   FX_BOOL SetNullTest(CFX_WideString wsValue);
    394   int32_t GetScriptTest();
    395   void GetFormatMessageText(CFX_WideString& wsMessage);
    396   void SetFormatMessageText(CFX_WideString wsMessage);
    397   void GetNullMessageText(CFX_WideString& wsMessage);
    398   void SetNullMessageText(CFX_WideString wsMessage);
    399   void GetScriptMessageText(CFX_WideString& wsMessage);
    400   void SetScriptMessageText(CFX_WideString wsMessage);
    401   void GetPicture(CFX_WideString& wsPicture);
    402   CXFA_Script GetScript();
    403 
    404  protected:
    405   void GetMessageText(CFX_WideString& wsMessage,
    406                       const CFX_WideStringC& wsMessageType);
    407   void SetMessageText(CFX_WideString& wsMessage,
    408                       const CFX_WideStringC& wsMessageType);
    409   FX_BOOL SetTestValue(int32_t iType,
    410                        CFX_WideString& wsValue,
    411                        XFA_ATTRIBUTEENUM eName);
    412 };
    413 class CXFA_Variables : public CXFA_Data {
    414  public:
    415   CXFA_Variables(CXFA_Node* pNode);
    416 
    417   int32_t CountScripts();
    418   CXFA_Script GetScript(int32_t nIndex);
    419 };
    420 class CXFA_Bind : public CXFA_Data {
    421  public:
    422   CXFA_Bind(CXFA_Node* pNode);
    423   int32_t GetMatch();
    424   void GetRef(CFX_WideStringC& wsRef);
    425   void GetPicture(CFX_WideString& wsPicture);
    426   FX_BOOL SetMatch(int32_t iMatch);
    427   FX_BOOL SetRef(const CFX_WideString& wsRef);
    428   FX_BOOL SetPicture(const CFX_WideString& wsPicture);
    429 };
    430 class CXFA_Assist : public CXFA_Data {
    431  public:
    432   CXFA_Assist(CXFA_Node* pNode);
    433 
    434   CXFA_ToolTip GetToolTip();
    435 };
    436 class CXFA_ToolTip : public CXFA_Data {
    437  public:
    438   CXFA_ToolTip(CXFA_Node* pNode);
    439   FX_BOOL GetTip(CFX_WideString& wsTip);
    440   FX_BOOL SetTip(const CFX_WideString& wsTip);
    441 };
    442 class CXFA_BindItems : public CXFA_Data {
    443  public:
    444   CXFA_BindItems(CXFA_Node* pNode);
    445   void GetConnection(CFX_WideStringC& wsConnection);
    446   void GetLabelRef(CFX_WideStringC& wsLabelRef);
    447   void GetValueRef(CFX_WideStringC& wsValueRef);
    448   void GetRef(CFX_WideStringC& wsRef);
    449   FX_BOOL SetConnection(const CFX_WideString& wsConnection);
    450   FX_BOOL SetLabelRef(const CFX_WideString& wsLabelRef);
    451   FX_BOOL SetValueRef(const CFX_WideString& wsValueRef);
    452   FX_BOOL SetRef(const CFX_WideString& wsRef);
    453 };
    454 #define XFA_STROKE_SAMESTYLE_NoPresence 1
    455 #define XFA_STROKE_SAMESTYLE_Corner 2
    456 class CXFA_Stroke : public CXFA_Data {
    457  public:
    458   CXFA_Stroke(CXFA_Node* pNode) : CXFA_Data(pNode) {}
    459 
    460   FX_BOOL IsCorner() const { return GetClassID() == XFA_ELEMENT_Corner; }
    461 
    462   FX_BOOL IsEdge() const { return GetClassID() == XFA_ELEMENT_Edge; }
    463 
    464   int32_t GetPresence() const;
    465   FX_BOOL IsVisible() const {
    466     return GetPresence() == XFA_ATTRIBUTEENUM_Visible;
    467   }
    468 
    469   int32_t GetCapType() const;
    470 
    471   int32_t GetStrokeType() const;
    472 
    473   FX_FLOAT GetThickness() const;
    474   CXFA_Measurement GetMSThickness() const;
    475 
    476   void SetThickness(FX_FLOAT fThickness);
    477   void SetMSThickness(CXFA_Measurement msThinkness);
    478 
    479   FX_ARGB GetColor() const;
    480 
    481   void SetColor(FX_ARGB argb);
    482 
    483   int32_t GetJoinType() const;
    484 
    485   FX_BOOL IsInverted() const;
    486 
    487   FX_FLOAT GetRadius() const;
    488 
    489   FX_BOOL SameStyles(CXFA_Stroke stroke, FX_DWORD dwFlags = 0) const;
    490 };
    491 class CXFA_Corner : public CXFA_Stroke {
    492  public:
    493   CXFA_Corner(CXFA_Node* pNode) : CXFA_Stroke(pNode) {}
    494 };
    495 class CXFA_Edge : public CXFA_Stroke {
    496  public:
    497   CXFA_Edge(CXFA_Node* pNode) : CXFA_Stroke(pNode) {}
    498 };
    499 typedef CFX_ArrayTemplate<CXFA_Stroke> CXFA_StrokeArray;
    500 typedef CFX_ArrayTemplate<CXFA_Edge> CXFA_EdgeArray;
    501 typedef CFX_ArrayTemplate<CXFA_Corner> CXFA_CornerArray;
    502 class CXFA_Box : public CXFA_Data {
    503  public:
    504   CXFA_Box(CXFA_Node* pNode) : CXFA_Data(pNode) {}
    505 
    506   FX_BOOL IsArc() const { return GetClassID() == XFA_ELEMENT_Arc; }
    507 
    508   FX_BOOL IsBorder() const { return GetClassID() == XFA_ELEMENT_Border; }
    509 
    510   FX_BOOL IsRectangle() const { return GetClassID() == XFA_ELEMENT_Rectangle; }
    511 
    512   int32_t GetBreak() const;
    513 
    514   int32_t GetHand() const;
    515 
    516   int32_t GetPresence() const;
    517 
    518   int32_t CountCorners() const;
    519 
    520   CXFA_Corner GetCorner(int32_t nIndex) const;
    521 
    522   int32_t CountEdges() const;
    523 
    524   CXFA_Edge GetEdge(int32_t nIndex = 0) const;
    525 
    526   void GetStrokes(CXFA_StrokeArray& strokes) const;
    527 
    528   FX_BOOL IsCircular() const;
    529 
    530   FX_BOOL GetStartAngle(FX_FLOAT& fStartAngle) const;
    531   FX_FLOAT GetStartAngle() const {
    532     FX_FLOAT fStartAngle;
    533     GetStartAngle(fStartAngle);
    534     return fStartAngle;
    535   }
    536 
    537   FX_BOOL GetSweepAngle(FX_FLOAT& fSweepAngle) const;
    538   FX_FLOAT GetSweepAngle() const {
    539     FX_FLOAT fSweepAngle;
    540     GetSweepAngle(fSweepAngle);
    541     return fSweepAngle;
    542   }
    543 
    544   CXFA_Fill GetFill(FX_BOOL bModified = FALSE) const;
    545 
    546   CXFA_Margin GetMargin() const;
    547 
    548   FX_BOOL SameStyles() const;
    549 
    550   int32_t Get3DStyle(FX_BOOL& bVisible, FX_FLOAT& fThickness) const;
    551 };
    552 class CXFA_Arc : public CXFA_Box {
    553  public:
    554   CXFA_Arc(CXFA_Node* pNode) : CXFA_Box(pNode) {}
    555 };
    556 class CXFA_Border : public CXFA_Box {
    557  public:
    558   CXFA_Border(CXFA_Node* pNode) : CXFA_Box(pNode) {}
    559 };
    560 class CXFA_Rectangle : public CXFA_Box {
    561  public:
    562   CXFA_Rectangle(CXFA_Node* pNode) : CXFA_Box(pNode) {}
    563 };
    564 enum XFA_CHECKSTATE {
    565   XFA_CHECKSTATE_On = 0,
    566   XFA_CHECKSTATE_Off = 1,
    567   XFA_CHECKSTATE_Neutral = 2,
    568 };
    569 enum XFA_VALUEPICTURE {
    570   XFA_VALUEPICTURE_Raw = 0,
    571   XFA_VALUEPICTURE_Display,
    572   XFA_VALUEPICTURE_Edit,
    573   XFA_VALUEPICTURE_DataBind,
    574 };
    575 class CXFA_WidgetData : public CXFA_Data {
    576  public:
    577   CXFA_WidgetData(CXFA_Node* pNode);
    578   CXFA_Node* GetUIChild();
    579 
    580   XFA_ELEMENT GetUIType();
    581   CFX_WideString GetRawValue();
    582   int32_t GetAccess(FX_BOOL bTemplate = FALSE);
    583   FX_BOOL GetAccessKey(CFX_WideStringC& wsAccessKey);
    584   int32_t GetAnchorType();
    585   int32_t GetColSpan();
    586   int32_t GetPresence();
    587   int32_t GetRotate();
    588   CXFA_Border GetBorder(FX_BOOL bModified = FALSE);
    589   CXFA_Caption GetCaption(FX_BOOL bModified = FALSE);
    590   CXFA_Font GetFont(FX_BOOL bModified = FALSE);
    591   CXFA_Margin GetMargin(FX_BOOL bModified = FALSE);
    592   CXFA_Para GetPara(FX_BOOL bModified = FALSE);
    593   CXFA_Keep GetKeep(FX_BOOL bModified = FALSE);
    594   void GetEventList(CXFA_NodeArray& events);
    595   int32_t GetEventByActivity(int32_t iActivity,
    596                              CXFA_NodeArray& events,
    597                              FX_BOOL bIsFormReady = FALSE);
    598   CXFA_Value GetDefaultValue(FX_BOOL bModified = FALSE);
    599   CXFA_Value GetFormValue(FX_BOOL bModified = FALSE);
    600   CXFA_Calculate GetCalculate(FX_BOOL bModified = FALSE);
    601   CXFA_Validate GetValidate(FX_BOOL bModified = FALSE);
    602   CXFA_Variables GetVariables(FX_BOOL bModified = FALSE);
    603   CXFA_Bind GetBind(FX_BOOL bModified = FALSE);
    604   CXFA_Assist GetAssist(FX_BOOL bModified = FALSE);
    605   void GetRelevant(CFX_WideStringC& wsRelevant);
    606   FX_DWORD GetRelevantStatus();
    607   FX_BOOL GetWidth(FX_FLOAT& fWidth);
    608   FX_BOOL GetHeight(FX_FLOAT& fHeight);
    609   FX_BOOL GetMinWidth(FX_FLOAT& fMinWidth);
    610   FX_BOOL GetMinHeight(FX_FLOAT& fMinHeight);
    611   FX_BOOL GetMaxWidth(FX_FLOAT& fMaxWidth);
    612   FX_BOOL GetMaxHeight(FX_FLOAT& fMaxHeight);
    613   CXFA_BindItems GetBindItems();
    614   FX_BOOL SetAccess(int32_t iAccess, FX_BOOL bNotify = TRUE);
    615   FX_BOOL SetAccessKey(const CFX_WideString& wsAccessKey);
    616   FX_BOOL SetAnchorType(int32_t iType);
    617   FX_BOOL SetColSpan(int32_t iColSpan);
    618   FX_BOOL SetPresence(int32_t iPresence);
    619   FX_BOOL SetRotate(int32_t iRotate);
    620   FX_BOOL SetRelevant(const CFX_WideString& wsRelevant);
    621   FX_BOOL SetStatus(FX_DWORD dwStatus);
    622   FX_BOOL SetWidth(FX_FLOAT fWidth);
    623   FX_BOOL SetHeight(FX_FLOAT fHeight);
    624   FX_BOOL SetMinWidth(FX_FLOAT fMinWidth);
    625   FX_BOOL SetMinHeight(FX_FLOAT fMinHeight);
    626   FX_BOOL SetMaxWidth(FX_FLOAT fMaxWidth);
    627   FX_BOOL SetMaxHeight(FX_FLOAT fMaxHeight);
    628   FX_BOOL SetPos(FX_FLOAT x, FX_FLOAT y);
    629   FX_BOOL SetName(const CFX_WideString& wsName);
    630   FX_BOOL SetButtonHighlight(int32_t iButtonHighlight);
    631   FX_BOOL SetButtonRollover(const CFX_WideString& wsRollover,
    632                             FX_BOOL bRichText);
    633   FX_BOOL SetButtonDown(const CFX_WideString& wsDown, FX_BOOL bRichText);
    634   FX_BOOL SetCheckButtonShape(int32_t iCheckButtonShape);
    635   FX_BOOL SetCheckButtonMark(int32_t iCheckButtonMark);
    636   FX_BOOL SetCheckButtonSize(FX_FLOAT fCheckButtonMark);
    637   CXFA_Border GetUIBorder(FX_BOOL bModified = FALSE);
    638   CXFA_Margin GetUIMargin(FX_BOOL bModified = FALSE);
    639   void GetUIMargin(CFX_RectF& rtUIMargin);
    640   int32_t GetButtonHighlight();
    641   FX_BOOL GetButtonRollover(CFX_WideString& wsRollover, FX_BOOL& bRichText);
    642   FX_BOOL GetButtonDown(CFX_WideString& wsDown, FX_BOOL& bRichText);
    643   int32_t GetCheckButtonShape();
    644   int32_t GetCheckButtonMark();
    645   FX_FLOAT GetCheckButtonSize();
    646   FX_BOOL IsAllowNeutral();
    647   FX_BOOL IsRadioButton();
    648   XFA_CHECKSTATE GetCheckState();
    649   void SetCheckState(XFA_CHECKSTATE eCheckState, FX_BOOL bNotify = TRUE);
    650   CXFA_Node* GetExclGroupNode();
    651   CXFA_Node* GetSelectedMember();
    652   CXFA_Node* SetSelectedMember(const CFX_WideStringC& wsName,
    653                                FX_BOOL bNotify = TRUE);
    654   void SetSelectedMemberByValue(const CFX_WideStringC& wsValue,
    655                                 FX_BOOL bNotify = TRUE,
    656                                 FX_BOOL bScriptModify = FALSE,
    657                                 FX_BOOL bSyncData = TRUE);
    658   CXFA_Node* GetExclGroupFirstMember();
    659   CXFA_Node* GetExclGroupNextMember(CXFA_Node* pNode);
    660   int32_t GetChoiceListCommitOn();
    661   FX_BOOL IsChoiceListAllowTextEntry();
    662   int32_t GetChoiceListOpen();
    663   FX_BOOL IsListBox();
    664   int32_t CountChoiceListItems(FX_BOOL bSaveValue = FALSE);
    665   FX_BOOL GetChoiceListItem(CFX_WideString& wsText,
    666                             int32_t nIndex,
    667                             FX_BOOL bSaveValue = FALSE);
    668   void GetChoiceListItems(CFX_WideStringArray& wsTextArray,
    669                           FX_BOOL bSaveValue = FALSE);
    670   int32_t CountSelectedItems();
    671   int32_t GetSelectedItem(int32_t nIndex = 0);
    672   void GetSelectedItems(CFX_Int32Array& iSelArray);
    673   void GetSelectedItemsValue(CFX_WideStringArray& wsSelTextArray);
    674   FX_BOOL GetItemState(int32_t nIndex);
    675   void SetItemState(int32_t nIndex,
    676                     FX_BOOL bSelected,
    677                     FX_BOOL bNotify = FALSE,
    678                     FX_BOOL bScriptModify = FALSE,
    679                     FX_BOOL bSyncData = TRUE);
    680   void SetSelectdItems(CFX_Int32Array& iSelArray,
    681                        FX_BOOL bNotify = FALSE,
    682                        FX_BOOL bScriptModify = FALSE,
    683                        FX_BOOL bSyncData = TRUE);
    684   void ClearAllSelections();
    685   void InsertItem(const CFX_WideString& wsLabel,
    686                   const CFX_WideString& wsValue,
    687                   int32_t nIndex = -1,
    688                   FX_BOOL bNotify = FALSE);
    689   void GetItemLabel(const CFX_WideStringC& wsValue, CFX_WideString& wsLabel);
    690   void GetItemValue(const CFX_WideStringC& wsLabel, CFX_WideString& wsValue);
    691   FX_BOOL DeleteItem(int32_t nIndex,
    692                      FX_BOOL bNotify = FALSE,
    693                      FX_BOOL bScriptModify = FALSE,
    694                      FX_BOOL bSyncData = TRUE);
    695   int32_t GetHorizontalScrollPolicy();
    696   int32_t GetNumberOfCells();
    697   FX_BOOL IsDateTimeEditUsePicker();
    698   FX_BOOL SetValue(const CFX_WideString& wsValue, XFA_VALUEPICTURE eValueType);
    699   FX_BOOL GetPictureContent(CFX_WideString& wsPicture,
    700                             XFA_VALUEPICTURE ePicture);
    701   IFX_Locale* GetLocal();
    702   FX_BOOL GetValue(CFX_WideString& wsValue, XFA_VALUEPICTURE eValueType);
    703   FX_BOOL GetNormalizeDataValue(const CFX_WideStringC& wsValue,
    704                                 CFX_WideString& wsNormalizeValue);
    705   FX_BOOL GetFormatDataValue(const CFX_WideStringC& wsValue,
    706                              CFX_WideString& wsFormatedValue);
    707   void NormalizeNumStr(const CFX_WideString& wsValue, CFX_WideString& wsOutput);
    708   CFX_WideString GetBarcodeType();
    709   FX_BOOL GetBarcodeAttribute_CharEncoding(int32_t& val);
    710   FX_BOOL GetBarcodeAttribute_Checksum(int32_t& val);
    711   FX_BOOL GetBarcodeAttribute_DataLength(int32_t& val);
    712   FX_BOOL GetBarcodeAttribute_StartChar(FX_CHAR& val);
    713   FX_BOOL GetBarcodeAttribute_EndChar(FX_CHAR& val);
    714   FX_BOOL GetBarcodeAttribute_ECLevel(int32_t& val);
    715   FX_BOOL GetBarcodeAttribute_ModuleWidth(int32_t& val);
    716   FX_BOOL GetBarcodeAttribute_ModuleHeight(int32_t& val);
    717   FX_BOOL GetBarcodeAttribute_PrintChecksum(FX_BOOL& val);
    718   FX_BOOL GetBarcodeAttribute_TextLocation(int32_t& val);
    719   FX_BOOL GetBarcodeAttribute_Truncate(FX_BOOL& val);
    720   FX_BOOL GetBarcodeAttribute_WideNarrowRatio(FX_FLOAT& val);
    721   void GetPasswordChar(CFX_WideString& wsPassWord);
    722   FX_BOOL IsAllowRichText();
    723   FX_BOOL IsMultiLine();
    724   int32_t GetVerticalScrollPolicy();
    725   int32_t GetMaxChars(XFA_ELEMENT& eType);
    726   FX_BOOL GetFracDigits(int32_t& iFracDigits);
    727   FX_BOOL GetLeadDigits(int32_t& iLeadDigits);
    728   CXFA_Filter GetFilter(FX_BOOL bModified = FALSE);
    729   CXFA_Manifest GetManifest(FX_BOOL bModified = FALSE);
    730 
    731   FX_BOOL m_bIsNull;
    732   FX_BOOL m_bPreNull;
    733 
    734  protected:
    735   void SyncValue(const CFX_WideString& wsValue, FX_BOOL bNotify);
    736   void InsertListTextItem(CXFA_Node* pItems,
    737                           const CFX_WideStringC& wsText,
    738                           int32_t nIndex = -1);
    739   void FormatNumStr(const CFX_WideString& wsValue,
    740                     IFX_Locale* pLocale,
    741                     CFX_WideString& wsOutput);
    742 
    743   CXFA_Node* m_pUiChildNode;
    744   XFA_ELEMENT m_eUIType;
    745 };
    746 class CXFA_Occur : public CXFA_Data {
    747  public:
    748   CXFA_Occur(CXFA_Node* pNode);
    749   int32_t GetMax();
    750   int32_t GetMin();
    751   int32_t GetInitial();
    752   FX_BOOL GetOccurInfo(int32_t& iMin, int32_t& iMax, int32_t& iInit);
    753   void SetMax(int32_t iMax);
    754   void SetMin(int32_t iMin);
    755 };
    756 class CXFA_Filter : public CXFA_Data {
    757  public:
    758   CXFA_Filter(CXFA_Node* pNode) : CXFA_Data(pNode) {}
    759   CFX_WideString GetFilterString(XFA_ATTRIBUTE eAttribute);
    760   XFA_ATTRIBUTEENUM GetAppearanceFilterType();
    761   CFX_WideString GetAppearanceFilterContent();
    762   XFA_ATTRIBUTEENUM GetCertificatesCredentialServerPolicy();
    763   CFX_WideString GetCertificatesURL();
    764   CFX_WideString GetCertificatesURLPolicy();
    765   CXFA_WrapCertificate GetCertificatesEncryption(FX_BOOL bModified = FALSE);
    766   CXFA_WrapCertificate GetCertificatesIssuers(FX_BOOL bModified = FALSE);
    767   CFX_WideString GetCertificatesKeyUsageString(XFA_ATTRIBUTE eAttribute);
    768   CXFA_Oids GetCertificatesOids();
    769   CXFA_WrapCertificate GetCertificatesSigning(FX_BOOL bModified = FALSE);
    770   CXFA_DigestMethods GetDigestMethods(FX_BOOL bModified = FALSE);
    771   CXFA_Encodings GetEncodings(FX_BOOL bModified = FALSE);
    772   CXFA_EncryptionMethods GetEncryptionMethods(FX_BOOL bModified = FALSE);
    773   XFA_ATTRIBUTEENUM GetHandlerType();
    774   CFX_WideString GetHandlerContent();
    775   XFA_ATTRIBUTEENUM GetlockDocumentType();
    776   CFX_WideString GetlockDocumentContent();
    777   int32_t GetMDPPermissions();
    778   XFA_ATTRIBUTEENUM GetMDPSignatureType();
    779 
    780   CXFA_Reasons GetReasons(FX_BOOL bModified = FALSE);
    781   CFX_WideString GetTimeStampServer();
    782   XFA_ATTRIBUTEENUM GetTimeStampType();
    783 };
    784 class CXFA_Certificate : public CXFA_Data {
    785  public:
    786   CXFA_Certificate(CXFA_Node* pNode) : CXFA_Data(pNode) {}
    787   CFX_WideString GetCertificateName();
    788   CFX_WideString GetCertificateContent();
    789 };
    790 class CXFA_WrapCertificate : public CXFA_Data {
    791  public:
    792   CXFA_WrapCertificate(CXFA_Node* pNode) : CXFA_Data(pNode) {}
    793   XFA_ATTRIBUTEENUM GetType();
    794   int32_t CountCertificates();
    795   CXFA_Certificate GetCertificate(int32_t nIndex);
    796 };
    797 class CXFA_Oids : public CXFA_Data {
    798  public:
    799   CXFA_Oids(CXFA_Node* pNode) : CXFA_Data(pNode) {}
    800   XFA_ATTRIBUTEENUM GetOidsType();
    801   int32_t CountOids();
    802   CFX_WideString GetOidContent(int32_t nIndex);
    803 };
    804 class CXFA_SubjectDNs : public CXFA_Data {
    805  public:
    806   CXFA_SubjectDNs(CXFA_Node* pNode) : CXFA_Data(pNode) {}
    807   XFA_ATTRIBUTEENUM GetSubjectDNsType();
    808   int32_t CountSubjectDNs();
    809   CFX_WideString GetSubjectDNString(int32_t nIndex, XFA_ATTRIBUTE eAttribute);
    810   CFX_WideString GetSubjectDNContent(int32_t nIndex);
    811 };
    812 class CXFA_DigestMethods : public CXFA_Data {
    813  public:
    814   CXFA_DigestMethods(CXFA_Node* pNode) : CXFA_Data(pNode) {}
    815   XFA_ATTRIBUTEENUM GetDigestMethodsType();
    816   int32_t CountDigestMethods();
    817   CFX_WideString GetDigestMethodContent(int32_t nIndex);
    818 };
    819 class CXFA_Encodings : public CXFA_Data {
    820  public:
    821   CXFA_Encodings(CXFA_Node* pNode) : CXFA_Data(pNode) {}
    822   XFA_ATTRIBUTEENUM GetEncodingsType();
    823   int32_t CountEncodings();
    824   CFX_WideString GetEncodingContent(int32_t nIndex);
    825 };
    826 class CXFA_EncryptionMethods : public CXFA_Data {
    827  public:
    828   CXFA_EncryptionMethods(CXFA_Node* pNode) : CXFA_Data(pNode) {}
    829   XFA_ATTRIBUTEENUM GetEncryptionMethodsType();
    830   int32_t CountEncryptionMethods();
    831   CFX_WideString GetEncryptionMethodContent(int32_t nIndex);
    832 };
    833 class CXFA_Reasons : public CXFA_Data {
    834  public:
    835   CXFA_Reasons(CXFA_Node* pNode) : CXFA_Data(pNode) {}
    836   XFA_ATTRIBUTEENUM GetReasonsType();
    837   int32_t CountReasons();
    838   CFX_WideString GetReasonContent(int32_t nIndex);
    839 };
    840 class CXFA_Manifest : public CXFA_Data {
    841  public:
    842   CXFA_Manifest(CXFA_Node* pNode) : CXFA_Data(pNode) {}
    843   XFA_ATTRIBUTEENUM GetAction();
    844   int32_t CountReives();
    845   CFX_WideString GetRefContent(int32_t nIndex);
    846 };
    847 
    848 #endif  // FXFA_OBJECTACC_H_
    849