summaryrefslogtreecommitdiff
path: root/xfa/include/fxfa/fxfa_objectacc.h
blob: f390566c74ab924f2875379e3f7b43f673795908 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
// 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_INCLUDE_FXFA_FXFA_OBJECTACC_H_
#define XFA_INCLUDE_FXFA_FXFA_OBJECTACC_H_

#include "core/include/fxge/fx_dib.h"
#include "xfa/fxfa/parser/xfa_object.h"

class CXFA_Node;
class IFX_Locale;
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_Bind;
class CXFA_Assist;
class CXFA_ToolTip;
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;

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_Object*> CXFA_ObjArray;

class CXFA_Data {
 public:
  explicit CXFA_Data(CXFA_Node* pNode) : m_pNode(pNode) {}

  operator bool() const { return !!m_pNode; }
  CXFA_Node* GetNode() const { return m_pNode; }
  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:
  explicit CXFA_Fill(CXFA_Node* pNode);
  ~CXFA_Fill();

  int32_t GetPresence();
  FX_ARGB GetColor(FX_BOOL bText = FALSE);
  int32_t GetFillType();
  int32_t GetPattern(FX_ARGB& foreColor);
  int32_t GetStipple(FX_ARGB& stippleColor);
  int32_t GetLinear(FX_ARGB& endColor);
  int32_t GetRadial(FX_ARGB& endColor);
  void SetColor(FX_ARGB color);
};

class CXFA_Margin : public CXFA_Data {
 public:
  explicit 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;
};

class CXFA_Font : public CXFA_Data {
 public:
  explicit CXFA_Font(CXFA_Node* pNode);

  FX_FLOAT GetBaselineShift();
  FX_FLOAT GetHorizontalScale();
  FX_FLOAT GetVerticalScale();
  FX_FLOAT GetLetterSpacing();
  int32_t GetLineThrough();
  int32_t GetUnderline();
  int32_t GetUnderlinePeriod();
  FX_FLOAT GetFontSize();
  void GetTypeface(CFX_WideStringC& wsTypeFace);

  FX_BOOL IsBold();
  FX_BOOL IsItalic();

  FX_ARGB GetColor();
  void SetColor(FX_ARGB color);

};

class CXFA_Caption : public CXFA_Data {
 public:
  explicit CXFA_Caption(CXFA_Node* pNode);

  int32_t GetPresence();
  int32_t GetPlacementType();
  FX_FLOAT GetReserve();
  CXFA_Margin GetMargin();
  CXFA_Font GetFont();
  CXFA_Value GetValue();
};

class CXFA_Para : public CXFA_Data {
 public:
  explicit CXFA_Para(CXFA_Node* pNode);

  int32_t GetHorizontalAlign();
  int32_t GetVerticalAlign();
  FX_FLOAT GetLineHeight();
  FX_FLOAT GetMarginLeft();
  FX_FLOAT GetMarginRight();
  FX_FLOAT GetSpaceAbove();
  FX_FLOAT GetSpaceBelow();
  FX_FLOAT GetTextIndent();
};

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:
  explicit CXFA_Event(CXFA_Node* pNode);

  int32_t GetActivity();
  int32_t GetEventType();
  void GetRef(CFX_WideStringC& wsRef);


  CXFA_Script GetScript();
  CXFA_Submit GetSubmit();

  void GetSignDataTarget(CFX_WideString& wsTarget);
};

enum XFA_SCRIPTTYPE {
  XFA_SCRIPTTYPE_Formcalc = 0,
  XFA_SCRIPTTYPE_Javascript,
  XFA_SCRIPTTYPE_Unkown,
};

class CXFA_Script : public CXFA_Data {
 public:
  explicit CXFA_Script(CXFA_Node* pNode);

  XFA_SCRIPTTYPE GetContentType();
  int32_t GetRunAt();
  void GetExpression(CFX_WideString& wsExpression);
};

class CXFA_Submit : public CXFA_Data {
 public:
  explicit CXFA_Submit(CXFA_Node* pNode);

  FX_BOOL IsSubmitEmbedPDF();
  int32_t GetSubmitFormat();
  void GetSubmitTarget(CFX_WideStringC& wsTarget);
  void GetSubmitXDPContent(CFX_WideStringC& wsContent);
};

class CXFA_Value : public CXFA_Data {
 public:
  explicit 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();
};

class CXFA_Line : public CXFA_Data {
 public:
  explicit CXFA_Line(CXFA_Node* pNode) : CXFA_Data(pNode) {}

  int32_t GetHand();
  FX_BOOL GetSlop();
  CXFA_Edge GetEdge();
};

class CXFA_Text : public CXFA_Data {
 public:
  explicit CXFA_Text(CXFA_Node* pNode);

  void GetContent(CFX_WideString& wsText);
};

class CXFA_ExData : public CXFA_Data {
 public:
  explicit CXFA_ExData(CXFA_Node* pNode);

  FX_BOOL SetContentType(const CFX_WideString& wsContentType);
};

class CXFA_Image : public CXFA_Data {
 public:
  CXFA_Image(CXFA_Node* pNode, FX_BOOL bDefValue);

  int32_t GetAspect();
  FX_BOOL GetContentType(CFX_WideString& wsContentType);
  FX_BOOL GetHref(CFX_WideString& wsHref);
  int32_t GetTransferEncoding();
  FX_BOOL GetContent(CFX_WideString& wsText);
  FX_BOOL SetContentType(const CFX_WideString& wsContentType);
  FX_BOOL SetHref(const CFX_WideString& wsHref);
  FX_BOOL SetTransferEncoding(int32_t iTransferEncoding);

 protected:
  FX_BOOL m_bDefValue;
};

class CXFA_Calculate : public CXFA_Data {
 public:
  explicit CXFA_Calculate(CXFA_Node* pNode);

  int32_t GetOverride();
  CXFA_Script GetScript();
  void GetMessageText(CFX_WideString& wsMessage);
};

class CXFA_Validate : public CXFA_Data {
 public:
  explicit CXFA_Validate(CXFA_Node* pNode);

  int32_t GetFormatTest();
  int32_t GetNullTest();
  FX_BOOL SetNullTest(CFX_WideString wsValue);
  int32_t 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,
                      const CFX_WideStringC& wsMessageType);
  void SetMessageText(CFX_WideString& wsMessage,
                      const CFX_WideStringC& wsMessageType);
  FX_BOOL SetTestValue(int32_t iType,
                       CFX_WideString& wsValue,
                       XFA_ATTRIBUTEENUM eName);
};

class CXFA_Bind : public CXFA_Data {
 public:
  explicit CXFA_Bind(CXFA_Node* pNode);

  void GetPicture(CFX_WideString& wsPicture);
};

class CXFA_Assist : public CXFA_Data {
 public:
  explicit CXFA_Assist(CXFA_Node* pNode);

  CXFA_ToolTip GetToolTip();
};

class CXFA_ToolTip : public CXFA_Data {
 public:
  explicit CXFA_ToolTip(CXFA_Node* pNode);

  FX_BOOL GetTip(CFX_WideString& wsTip);
};

class CXFA_BindItems : public CXFA_Data {
 public:
  explicit CXFA_BindItems(CXFA_Node* pNode);

  void GetLabelRef(CFX_WideStringC& wsLabelRef);
  void GetValueRef(CFX_WideStringC& wsValueRef);
  void GetRef(CFX_WideStringC& wsRef);
  FX_BOOL SetConnection(const CFX_WideString& wsConnection);
};

#define XFA_STROKE_SAMESTYLE_NoPresence 1
#define XFA_STROKE_SAMESTYLE_Corner 2

class CXFA_Stroke : public CXFA_Data {
 public:
  explicit CXFA_Stroke(CXFA_Node* pNode) : CXFA_Data(pNode) {}

  bool IsCorner() const { return GetClassID() == XFA_ELEMENT_Corner; }
  bool IsEdge() const { return GetClassID() == XFA_ELEMENT_Edge; }
  bool IsVisible() const { return GetPresence() == XFA_ATTRIBUTEENUM_Visible; }
  int32_t GetPresence() const;
  int32_t GetCapType() const;
  int32_t GetStrokeType() const;
  FX_FLOAT GetThickness() const;
  CXFA_Measurement GetMSThickness() const;
  void SetMSThickness(CXFA_Measurement msThinkness);
  FX_ARGB GetColor() const;
  void SetColor(FX_ARGB argb);
  int32_t 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:
  explicit CXFA_Corner(CXFA_Node* pNode) : CXFA_Stroke(pNode) {}
};

class CXFA_Edge : public CXFA_Stroke {
 public:
  explicit 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:
  explicit CXFA_Box(CXFA_Node* pNode) : CXFA_Data(pNode) {}

  bool IsArc() const { return GetClassID() == XFA_ELEMENT_Arc; }
  bool IsBorder() const { return GetClassID() == XFA_ELEMENT_Border; }
  bool IsRectangle() const { return GetClassID() == XFA_ELEMENT_Rectangle; }
  int32_t GetHand() const;
  int32_t GetPresence() const;
  int32_t CountEdges() const;
  CXFA_Edge GetEdge(int32_t 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;
  int32_t Get3DStyle(FX_BOOL& bVisible, FX_FLOAT& fThickness) const;
};

class CXFA_Arc : public CXFA_Box {
 public:
  explicit CXFA_Arc(CXFA_Node* pNode) : CXFA_Box(pNode) {}
};

class CXFA_Border : public CXFA_Box {
 public:
  explicit CXFA_Border(CXFA_Node* pNode) : CXFA_Box(pNode) {}
};

class CXFA_Rectangle : public CXFA_Box {
 public:
  explicit 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:
  explicit CXFA_WidgetData(CXFA_Node* pNode);

  CXFA_Node* GetUIChild();
  XFA_ELEMENT GetUIType();
  CFX_WideString GetRawValue();
  int32_t GetAccess(FX_BOOL bTemplate = FALSE);
  int32_t 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);
  void GetEventList(CXFA_NodeArray& events);
  int32_t GetEventByActivity(int32_t 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_Bind GetBind(FX_BOOL bModified = FALSE);
  CXFA_Assist GetAssist(FX_BOOL bModified = FALSE);
  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_Border GetUIBorder(FX_BOOL bModified = FALSE);
  CXFA_Margin GetUIMargin(FX_BOOL bModified = FALSE);
  void GetUIMargin(CFX_RectF& rtUIMargin);
  int32_t GetButtonHighlight();
  FX_BOOL GetButtonRollover(CFX_WideString& wsRollover, FX_BOOL& bRichText);
  FX_BOOL GetButtonDown(CFX_WideString& wsDown, FX_BOOL& bRichText);
  int32_t GetCheckButtonShape();
  int32_t 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(const CFX_WideStringC& wsName,
                               FX_BOOL bNotify = TRUE);
  void SetSelectedMemberByValue(const CFX_WideStringC& wsValue,
                                FX_BOOL bNotify = TRUE,
                                FX_BOOL bScriptModify = FALSE,
                                FX_BOOL bSyncData = TRUE);
  CXFA_Node* GetExclGroupFirstMember();
  CXFA_Node* GetExclGroupNextMember(CXFA_Node* pNode);
  int32_t GetChoiceListCommitOn();
  FX_BOOL IsChoiceListAllowTextEntry();
  int32_t GetChoiceListOpen();
  FX_BOOL IsListBox();
  int32_t CountChoiceListItems(FX_BOOL bSaveValue = FALSE);
  FX_BOOL GetChoiceListItem(CFX_WideString& wsText,
                            int32_t nIndex,
                            FX_BOOL bSaveValue = FALSE);
  void GetChoiceListItems(CFX_WideStringArray& wsTextArray,
                          FX_BOOL bSaveValue = FALSE);
  int32_t CountSelectedItems();
  int32_t GetSelectedItem(int32_t nIndex = 0);
  void GetSelectedItems(CFX_Int32Array& iSelArray);
  void GetSelectedItemsValue(CFX_WideStringArray& wsSelTextArray);
  FX_BOOL GetItemState(int32_t nIndex);
  void SetItemState(int32_t 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,
                  int32_t nIndex = -1,
                  FX_BOOL bNotify = FALSE);
  void GetItemLabel(const CFX_WideStringC& wsValue, CFX_WideString& wsLabel);
  void GetItemValue(const CFX_WideStringC& wsLabel, CFX_WideString& wsValue);
  FX_BOOL DeleteItem(int32_t nIndex,
                     FX_BOOL bNotify = FALSE,
                     FX_BOOL bScriptModify = FALSE,
                     FX_BOOL bSyncData = TRUE);
  int32_t GetHorizontalScrollPolicy();
  int32_t GetNumberOfCells();
  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(const CFX_WideStringC& wsValue,
                                CFX_WideString& wsNormalizeValue);
  FX_BOOL GetFormatDataValue(const CFX_WideStringC& wsValue,
                             CFX_WideString& wsFormatedValue);
  void NormalizeNumStr(const CFX_WideString& wsValue, CFX_WideString& wsOutput);
  CFX_WideString GetBarcodeType();
  FX_BOOL GetBarcodeAttribute_CharEncoding(int32_t& val);
  FX_BOOL GetBarcodeAttribute_Checksum(int32_t& val);
  FX_BOOL GetBarcodeAttribute_DataLength(int32_t& val);
  FX_BOOL GetBarcodeAttribute_StartChar(FX_CHAR& val);
  FX_BOOL GetBarcodeAttribute_EndChar(FX_CHAR& val);
  FX_BOOL GetBarcodeAttribute_ECLevel(int32_t& val);
  FX_BOOL GetBarcodeAttribute_ModuleWidth(int32_t& val);
  FX_BOOL GetBarcodeAttribute_ModuleHeight(int32_t& val);
  FX_BOOL GetBarcodeAttribute_PrintChecksum(FX_BOOL& val);
  FX_BOOL GetBarcodeAttribute_TextLocation(int32_t& val);
  FX_BOOL GetBarcodeAttribute_Truncate(FX_BOOL& val);
  FX_BOOL GetBarcodeAttribute_WideNarrowRatio(FX_FLOAT& val);
  void GetPasswordChar(CFX_WideString& wsPassWord);
  FX_BOOL IsMultiLine();
  int32_t GetVerticalScrollPolicy();
  int32_t GetMaxChars(XFA_ELEMENT& eType);
  FX_BOOL GetFracDigits(int32_t& iFracDigits);
  FX_BOOL GetLeadDigits(int32_t& iLeadDigits);

  FX_BOOL m_bIsNull;
  FX_BOOL m_bPreNull;

 protected:
  void SyncValue(const CFX_WideString& wsValue, FX_BOOL bNotify);
  void InsertListTextItem(CXFA_Node* pItems,
                          const CFX_WideStringC& wsText,
                          int32_t 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:
  explicit CXFA_Occur(CXFA_Node* pNode);

  int32_t GetMax();
  int32_t GetMin();
  FX_BOOL GetOccurInfo(int32_t& iMin, int32_t& iMax, int32_t& iInit);
  void SetMax(int32_t iMax);
  void SetMin(int32_t iMin);
};

#endif  // XFA_INCLUDE_FXFA_FXFA_OBJECTACC_H_