OLD | NEW |
| (Empty) |
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 #include "core/include/fxcrt/fx_ext.h" | |
8 #include "xfa/include/fxbarcode/BC_BarCode.h" | |
9 #include "xfa/src/fxfa/fm2js/xfa_fm2jsapi.h" | |
10 #include "xfa/src/fxfa/parser/xfa_docdata.h" | |
11 #include "xfa/src/fxfa/parser/xfa_doclayout.h" | |
12 #include "xfa/src/fxfa/parser/xfa_document.h" | |
13 #include "xfa/src/fxfa/parser/xfa_localemgr.h" | |
14 #include "xfa/src/fxfa/parser/xfa_localevalue.h" | |
15 #include "xfa/src/fxfa/parser/xfa_object.h" | |
16 #include "xfa/src/fxfa/parser/xfa_parser.h" | |
17 #include "xfa/src/fxfa/parser/xfa_script.h" | |
18 #include "xfa/src/fxfa/parser/xfa_utils.h" | |
19 | |
20 static FX_ARGB XFA_WStringToColor(const CFX_WideStringC& wsValue) { | |
21 uint8_t r = 0, g = 0, b = 0; | |
22 if (wsValue.GetLength() == 0) { | |
23 return 0xff000000; | |
24 } | |
25 int cc = 0; | |
26 const FX_WCHAR* str = wsValue.GetPtr(); | |
27 int len = wsValue.GetLength(); | |
28 while (XFA_IsSpace(str[cc]) && cc < len) { | |
29 cc++; | |
30 } | |
31 if (cc >= len) { | |
32 return 0xff000000; | |
33 } | |
34 while (cc < len) { | |
35 if (str[cc] == ',' || !XFA_IsDigit(str[cc])) { | |
36 break; | |
37 } | |
38 r = r * 10 + str[cc] - '0'; | |
39 cc++; | |
40 } | |
41 if (cc < len && str[cc] == ',') { | |
42 cc++; | |
43 while (XFA_IsSpace(str[cc]) && cc < len) { | |
44 cc++; | |
45 } | |
46 while (cc < len) { | |
47 if (str[cc] == ',' || !XFA_IsDigit(str[cc])) { | |
48 break; | |
49 } | |
50 g = g * 10 + str[cc] - '0'; | |
51 cc++; | |
52 } | |
53 if (cc < len && str[cc] == ',') { | |
54 cc++; | |
55 while (XFA_IsSpace(str[cc]) && cc < len) { | |
56 cc++; | |
57 } | |
58 while (cc < len) { | |
59 if (str[cc] == ',' || !XFA_IsDigit(str[cc])) { | |
60 break; | |
61 } | |
62 b = b * 10 + str[cc] - '0'; | |
63 cc++; | |
64 } | |
65 } | |
66 } | |
67 return (0xff << 24) | (r << 16) | (g << 8) | b; | |
68 } | |
69 XFA_ELEMENT CXFA_Data::GetClassID() const { | |
70 return m_pNode ? m_pNode->GetClassID() : XFA_ELEMENT_UNKNOWN; | |
71 } | |
72 FX_BOOL CXFA_Data::TryMeasure(XFA_ATTRIBUTE eAttr, | |
73 FX_FLOAT& fValue, | |
74 FX_BOOL bUseDefault) const { | |
75 CXFA_Measurement ms; | |
76 if (m_pNode->TryMeasure(eAttr, ms, bUseDefault)) { | |
77 fValue = ms.ToUnit(XFA_UNIT_Pt); | |
78 return TRUE; | |
79 } | |
80 return FALSE; | |
81 } | |
82 FX_BOOL CXFA_Data::SetMeasure(XFA_ATTRIBUTE eAttr, FX_FLOAT fValue) { | |
83 CXFA_Measurement ms(fValue, XFA_UNIT_Pt); | |
84 return m_pNode->SetMeasure(eAttr, ms); | |
85 } | |
86 CXFA_Fill::CXFA_Fill(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
87 CXFA_Fill::~CXFA_Fill() {} | |
88 int32_t CXFA_Fill::GetPresence() { | |
89 return m_pNode->GetEnum(XFA_ATTRIBUTE_Presence); | |
90 } | |
91 void CXFA_Fill::SetColor(FX_ARGB color) { | |
92 CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Color); | |
93 CFX_WideString wsColor; | |
94 int a, r, g, b; | |
95 ArgbDecode(color, a, r, g, b); | |
96 wsColor.Format(L"%d,%d,%d", r, g, b); | |
97 pNode->SetCData(XFA_ATTRIBUTE_Value, wsColor); | |
98 } | |
99 FX_ARGB CXFA_Fill::GetColor(FX_BOOL bText) { | |
100 if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_ELEMENT_Color)) { | |
101 CFX_WideStringC wsColor; | |
102 if (pNode->TryCData(XFA_ATTRIBUTE_Value, wsColor, FALSE)) { | |
103 return XFA_WStringToColor(wsColor); | |
104 } | |
105 } | |
106 if (bText) { | |
107 return 0xFF000000; | |
108 } | |
109 return 0xFFFFFFFF; | |
110 } | |
111 int32_t CXFA_Fill::GetFillType() { | |
112 CXFA_Node* pChild = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | |
113 while (pChild) { | |
114 int32_t eType = pChild->GetClassID(); | |
115 if (eType != XFA_ELEMENT_Color && eType != XFA_ELEMENT_Extras) { | |
116 return eType; | |
117 } | |
118 pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling); | |
119 } | |
120 return XFA_ELEMENT_Solid; | |
121 } | |
122 int32_t CXFA_Fill::GetPattern(FX_ARGB& foreColor) { | |
123 CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Pattern); | |
124 if (CXFA_Node* pColor = pNode->GetChild(0, XFA_ELEMENT_Color)) { | |
125 CFX_WideStringC wsColor; | |
126 pColor->TryCData(XFA_ATTRIBUTE_Value, wsColor, FALSE); | |
127 foreColor = XFA_WStringToColor(wsColor); | |
128 } else { | |
129 foreColor = 0xFF000000; | |
130 } | |
131 return pNode->GetEnum(XFA_ATTRIBUTE_Type); | |
132 } | |
133 int32_t CXFA_Fill::GetStipple(FX_ARGB& stippleColor) { | |
134 CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Stipple); | |
135 int32_t eAttr = 50; | |
136 pNode->TryInteger(XFA_ATTRIBUTE_Rate, eAttr); | |
137 if (CXFA_Node* pColor = pNode->GetChild(0, XFA_ELEMENT_Color)) { | |
138 CFX_WideStringC wsColor; | |
139 pColor->TryCData(XFA_ATTRIBUTE_Value, wsColor, FALSE); | |
140 stippleColor = XFA_WStringToColor(wsColor); | |
141 } else { | |
142 stippleColor = 0xFF000000; | |
143 } | |
144 return eAttr; | |
145 } | |
146 int32_t CXFA_Fill::GetLinear(FX_ARGB& endColor) { | |
147 CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Linear); | |
148 XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_ToRight; | |
149 pNode->TryEnum(XFA_ATTRIBUTE_Type, eAttr); | |
150 if (CXFA_Node* pColor = pNode->GetChild(0, XFA_ELEMENT_Color)) { | |
151 CFX_WideStringC wsColor; | |
152 pColor->TryCData(XFA_ATTRIBUTE_Value, wsColor, FALSE); | |
153 endColor = XFA_WStringToColor(wsColor); | |
154 } else { | |
155 endColor = 0xFF000000; | |
156 } | |
157 return eAttr; | |
158 } | |
159 int32_t CXFA_Fill::GetRadial(FX_ARGB& endColor) { | |
160 CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Radial); | |
161 XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_ToEdge; | |
162 pNode->TryEnum(XFA_ATTRIBUTE_Type, eAttr); | |
163 if (CXFA_Node* pColor = pNode->GetChild(0, XFA_ELEMENT_Color)) { | |
164 CFX_WideStringC wsColor; | |
165 pColor->TryCData(XFA_ATTRIBUTE_Value, wsColor, FALSE); | |
166 endColor = XFA_WStringToColor(wsColor); | |
167 } else { | |
168 endColor = 0xFF000000; | |
169 } | |
170 return eAttr; | |
171 } | |
172 FX_BOOL CXFA_Fill::SetPresence(int32_t iPresence) { | |
173 return m_pNode->SetEnum(XFA_ATTRIBUTE_Presence, (XFA_ATTRIBUTEENUM)iPresence); | |
174 } | |
175 FX_BOOL CXFA_Fill::SetFillType(int32_t iType) { | |
176 return FALSE; | |
177 } | |
178 FX_BOOL CXFA_Fill::SetPattern(int32_t iPattern, FX_ARGB foreColor) { | |
179 CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Pattern); | |
180 CXFA_Node* pColor = pNode->GetProperty(0, XFA_ELEMENT_Color); | |
181 CFX_WideString wsColor; | |
182 int a, r, g, b; | |
183 ArgbDecode(foreColor, a, r, g, b); | |
184 wsColor.Format(L"%d,%d,%d", r, g, b); | |
185 pColor->SetCData(XFA_ATTRIBUTE_Value, wsColor); | |
186 return pNode->SetEnum(XFA_ATTRIBUTE_Type, (XFA_ATTRIBUTEENUM)iPattern); | |
187 } | |
188 FX_BOOL CXFA_Fill::SetStipple(int32_t iStipple, FX_ARGB stippleColor) { | |
189 CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Stipple); | |
190 CXFA_Node* pColor = pNode->GetProperty(0, XFA_ELEMENT_Color); | |
191 CFX_WideString wsColor; | |
192 int a, r, g, b; | |
193 ArgbDecode(stippleColor, a, r, g, b); | |
194 wsColor.Format(L"%d,%d,%d", r, g, b); | |
195 pColor->SetCData(XFA_ATTRIBUTE_Value, wsColor); | |
196 return pNode->SetEnum(XFA_ATTRIBUTE_Rate, (XFA_ATTRIBUTEENUM)iStipple); | |
197 } | |
198 FX_BOOL CXFA_Fill::SetLinear(int32_t iLinear, FX_ARGB endColor) { | |
199 CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Linear); | |
200 CXFA_Node* pColor = pNode->GetProperty(0, XFA_ELEMENT_Color); | |
201 CFX_WideString wsColor; | |
202 int a, r, g, b; | |
203 ArgbDecode(endColor, a, r, g, b); | |
204 wsColor.Format(L"%d,%d,%d", r, g, b); | |
205 pColor->SetCData(XFA_ATTRIBUTE_Value, wsColor); | |
206 return pNode->SetEnum(XFA_ATTRIBUTE_Type, (XFA_ATTRIBUTEENUM)iLinear); | |
207 } | |
208 FX_BOOL CXFA_Fill::SetRadial(int32_t iRadial, FX_ARGB endColor) { | |
209 CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Radial); | |
210 CXFA_Node* pColor = pNode->GetProperty(0, XFA_ELEMENT_Color); | |
211 CFX_WideString wsColor; | |
212 int a, r, g, b; | |
213 ArgbDecode(endColor, a, r, g, b); | |
214 wsColor.Format(L"%d,%d,%d", r, g, b); | |
215 pColor->SetCData(XFA_ATTRIBUTE_Value, wsColor); | |
216 return pNode->SetEnum(XFA_ATTRIBUTE_Type, (XFA_ATTRIBUTEENUM)iRadial); | |
217 } | |
218 CXFA_Margin::CXFA_Margin(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
219 FX_BOOL CXFA_Margin::GetLeftInset(FX_FLOAT& fInset, FX_FLOAT fDefInset) const { | |
220 fInset = fDefInset; | |
221 return TryMeasure(XFA_ATTRIBUTE_LeftInset, fInset); | |
222 } | |
223 FX_BOOL CXFA_Margin::GetTopInset(FX_FLOAT& fInset, FX_FLOAT fDefInset) const { | |
224 fInset = fDefInset; | |
225 return TryMeasure(XFA_ATTRIBUTE_TopInset, fInset); | |
226 } | |
227 FX_BOOL CXFA_Margin::GetRightInset(FX_FLOAT& fInset, FX_FLOAT fDefInset) const { | |
228 fInset = fDefInset; | |
229 return TryMeasure(XFA_ATTRIBUTE_RightInset, fInset); | |
230 } | |
231 FX_BOOL CXFA_Margin::GetBottomInset(FX_FLOAT& fInset, | |
232 FX_FLOAT fDefInset) const { | |
233 fInset = fDefInset; | |
234 return TryMeasure(XFA_ATTRIBUTE_BottomInset, fInset); | |
235 } | |
236 FX_BOOL CXFA_Margin::SetLeftInset(FX_FLOAT fInset) { | |
237 return SetMeasure(XFA_ATTRIBUTE_LeftInset, fInset); | |
238 } | |
239 FX_BOOL CXFA_Margin::SetTopInset(FX_FLOAT fInset) { | |
240 return SetMeasure(XFA_ATTRIBUTE_TopInset, fInset); | |
241 } | |
242 FX_BOOL CXFA_Margin::SetRightInset(FX_FLOAT fInset) { | |
243 return SetMeasure(XFA_ATTRIBUTE_RightInset, fInset); | |
244 } | |
245 FX_BOOL CXFA_Margin::SetBottomInset(FX_FLOAT fInset) { | |
246 return SetMeasure(XFA_ATTRIBUTE_BottomInset, fInset); | |
247 } | |
248 CXFA_Font::CXFA_Font(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
249 FX_FLOAT CXFA_Font::GetBaselineShift() { | |
250 return m_pNode->GetMeasure(XFA_ATTRIBUTE_BaselineShift).ToUnit(XFA_UNIT_Pt); | |
251 } | |
252 FX_FLOAT CXFA_Font::GetHorizontalScale() { | |
253 CFX_WideString wsValue; | |
254 m_pNode->TryCData(XFA_ATTRIBUTE_FontHorizontalScale, wsValue); | |
255 int32_t iScale = FXSYS_wtoi((const FX_WCHAR*)wsValue); | |
256 return iScale > 0 ? (FX_FLOAT)iScale : 100.0f; | |
257 } | |
258 FX_FLOAT CXFA_Font::GetVerticalScale() { | |
259 CFX_WideString wsValue; | |
260 m_pNode->TryCData(XFA_ATTRIBUTE_FontVerticalScale, wsValue); | |
261 int32_t iScale = FXSYS_wtoi((const FX_WCHAR*)wsValue); | |
262 return iScale > 0 ? (FX_FLOAT)iScale : 100.0f; | |
263 } | |
264 FX_FLOAT CXFA_Font::GetLetterSpacing() { | |
265 CFX_WideStringC wsValue; | |
266 if (!m_pNode->TryCData(XFA_ATTRIBUTE_LetterSpacing, wsValue)) { | |
267 return 0; | |
268 } | |
269 CXFA_Measurement ms(wsValue); | |
270 if (ms.GetUnit() == XFA_UNIT_Em) { | |
271 return ms.GetValue() * GetFontSize(); | |
272 } | |
273 return ms.ToUnit(XFA_UNIT_Pt); | |
274 } | |
275 int32_t CXFA_Font::GetLineThrough() { | |
276 int32_t iValue = 0; | |
277 m_pNode->TryInteger(XFA_ATTRIBUTE_LineThrough, iValue); | |
278 return iValue; | |
279 } | |
280 int32_t CXFA_Font::GetLineThroughPeriod() { | |
281 XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_All; | |
282 m_pNode->TryEnum(XFA_ATTRIBUTE_LineThroughPeriod, eAttr); | |
283 return eAttr; | |
284 } | |
285 int32_t CXFA_Font::GetOverline() { | |
286 int32_t iValue = 0; | |
287 m_pNode->TryInteger(XFA_ATTRIBUTE_Overline, iValue); | |
288 return iValue; | |
289 } | |
290 int32_t CXFA_Font::GetOverlinePeriod() { | |
291 XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_All; | |
292 m_pNode->TryEnum(XFA_ATTRIBUTE_OverlinePeriod, eAttr); | |
293 return eAttr; | |
294 } | |
295 int32_t CXFA_Font::GetUnderline() { | |
296 int32_t iValue = 0; | |
297 m_pNode->TryInteger(XFA_ATTRIBUTE_Underline, iValue); | |
298 return iValue; | |
299 } | |
300 int32_t CXFA_Font::GetUnderlinePeriod() { | |
301 XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_All; | |
302 m_pNode->TryEnum(XFA_ATTRIBUTE_UnderlinePeriod, eAttr); | |
303 return eAttr; | |
304 } | |
305 FX_FLOAT CXFA_Font::GetFontSize() { | |
306 CXFA_Measurement ms; | |
307 m_pNode->TryMeasure(XFA_ATTRIBUTE_Size, ms); | |
308 return ms.ToUnit(XFA_UNIT_Pt); | |
309 } | |
310 void CXFA_Font::GetTypeface(CFX_WideStringC& wsTypeFace) { | |
311 m_pNode->TryCData(XFA_ATTRIBUTE_Typeface, wsTypeFace); | |
312 } | |
313 FX_BOOL CXFA_Font::IsBold() { | |
314 XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_Normal; | |
315 m_pNode->TryEnum(XFA_ATTRIBUTE_Weight, eAttr); | |
316 return eAttr == XFA_ATTRIBUTEENUM_Bold; | |
317 } | |
318 FX_BOOL CXFA_Font::IsItalic() { | |
319 XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_Normal; | |
320 m_pNode->TryEnum(XFA_ATTRIBUTE_Posture, eAttr); | |
321 return eAttr == XFA_ATTRIBUTEENUM_Italic; | |
322 } | |
323 FX_BOOL CXFA_Font::IsUseKerning() { | |
324 XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_None; | |
325 m_pNode->TryEnum(XFA_ATTRIBUTE_KerningMode, eAttr); | |
326 return eAttr == XFA_ATTRIBUTEENUM_Pair; | |
327 } | |
328 void CXFA_Font::SetColor(FX_ARGB color) { | |
329 CXFA_Fill fill(m_pNode->GetProperty(0, XFA_ELEMENT_Fill)); | |
330 fill.SetColor(color); | |
331 } | |
332 FX_ARGB CXFA_Font::GetColor() { | |
333 CXFA_Fill fill(m_pNode->GetChild(0, XFA_ELEMENT_Fill)); | |
334 return fill ? fill.GetColor(TRUE) : 0xFF000000; | |
335 } | |
336 FX_BOOL CXFA_Font::SetBaselineShift(FX_FLOAT fBaselineShift) { | |
337 CXFA_Measurement ms(fBaselineShift, XFA_UNIT_Pt); | |
338 return m_pNode->SetMeasure(XFA_ATTRIBUTE_BaselineShift, ms); | |
339 } | |
340 FX_BOOL CXFA_Font::SetHorizontalScale(FX_FLOAT fHorizontalScale) { | |
341 CFX_WideString wsValue; | |
342 wsValue.Format(L"%d", (int32_t)fHorizontalScale); | |
343 return m_pNode->SetCData(XFA_ATTRIBUTE_FontHorizontalScale, wsValue); | |
344 } | |
345 FX_BOOL CXFA_Font::SetVerticalScale(FX_FLOAT fVerticalScale) { | |
346 CFX_WideString wsValue; | |
347 wsValue.Format(L"%d", (int32_t)fVerticalScale); | |
348 return m_pNode->SetCData(XFA_ATTRIBUTE_FontVerticalScale, wsValue); | |
349 } | |
350 FX_BOOL CXFA_Font::SetLetterSpacing(FX_FLOAT fLetterSpacing, XFA_UNIT eUnit) { | |
351 return FALSE; | |
352 } | |
353 FX_BOOL CXFA_Font::SetLineThrough(int32_t iLineThrough) { | |
354 return m_pNode->SetInteger(XFA_ATTRIBUTE_LineThrough, iLineThrough); | |
355 } | |
356 FX_BOOL CXFA_Font::SetLineThroughPeriod(int32_t iLineThroughPeriod) { | |
357 return m_pNode->SetEnum(XFA_ATTRIBUTE_LineThroughPeriod, | |
358 (XFA_ATTRIBUTEENUM)iLineThroughPeriod); | |
359 } | |
360 FX_BOOL CXFA_Font::SetOverline(int32_t iOverline) { | |
361 return m_pNode->SetInteger(XFA_ATTRIBUTE_Overline, iOverline); | |
362 } | |
363 FX_BOOL CXFA_Font::SetOverlinePeriod(int32_t iOverlinePeriod) { | |
364 return m_pNode->SetEnum(XFA_ATTRIBUTE_OverlinePeriod, | |
365 (XFA_ATTRIBUTEENUM)iOverlinePeriod); | |
366 } | |
367 FX_BOOL CXFA_Font::SetUnderline(int32_t iUnderline) { | |
368 return m_pNode->SetInteger(XFA_ATTRIBUTE_Underline, iUnderline); | |
369 } | |
370 FX_BOOL CXFA_Font::SetUnderlinePeriod(int32_t iUnderlinePeriod) { | |
371 return m_pNode->SetEnum(XFA_ATTRIBUTE_UnderlinePeriod, | |
372 (XFA_ATTRIBUTEENUM)iUnderlinePeriod); | |
373 } | |
374 CXFA_Caption::CXFA_Caption(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
375 int32_t CXFA_Caption::GetPresence() { | |
376 XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_Visible; | |
377 m_pNode->TryEnum(XFA_ATTRIBUTE_Presence, eAttr); | |
378 return eAttr; | |
379 } | |
380 int32_t CXFA_Caption::GetPlacementType() { | |
381 XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_Left; | |
382 m_pNode->TryEnum(XFA_ATTRIBUTE_Placement, eAttr); | |
383 return eAttr; | |
384 } | |
385 FX_FLOAT CXFA_Caption::GetReserve() { | |
386 CXFA_Measurement ms; | |
387 m_pNode->TryMeasure(XFA_ATTRIBUTE_Reserve, ms); | |
388 return ms.ToUnit(XFA_UNIT_Pt); | |
389 } | |
390 CXFA_Margin CXFA_Caption::GetMargin() { | |
391 return CXFA_Margin(m_pNode ? m_pNode->GetChild(0, XFA_ELEMENT_Margin) : NULL); | |
392 } | |
393 CXFA_Font CXFA_Caption::GetFont() { | |
394 return CXFA_Font(m_pNode ? m_pNode->GetChild(0, XFA_ELEMENT_Font) : NULL); | |
395 } | |
396 CXFA_Value CXFA_Caption::GetValue() { | |
397 return CXFA_Value(m_pNode ? m_pNode->GetChild(0, XFA_ELEMENT_Value) : NULL); | |
398 } | |
399 CXFA_Para CXFA_Caption::GetPara() { | |
400 return CXFA_Para(m_pNode ? m_pNode->GetChild(0, XFA_ELEMENT_Para) : NULL); | |
401 } | |
402 FX_BOOL CXFA_Caption::SetPresence(int32_t iPresence) { | |
403 return m_pNode->SetEnum(XFA_ATTRIBUTE_Presence, (XFA_ATTRIBUTEENUM)iPresence); | |
404 } | |
405 FX_BOOL CXFA_Caption::SetPlacementType(int32_t iType) { | |
406 return m_pNode->SetEnum(XFA_ATTRIBUTE_Placement, (XFA_ATTRIBUTEENUM)iType); | |
407 } | |
408 FX_BOOL CXFA_Caption::SetReserve(FX_FLOAT fReserve) { | |
409 CXFA_Measurement ms(fReserve, XFA_UNIT_Pt); | |
410 return m_pNode->SetMeasure(XFA_ATTRIBUTE_Reserve, ms); | |
411 } | |
412 CXFA_Para::CXFA_Para(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
413 int32_t CXFA_Para::GetHorizontalAlign() { | |
414 XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_Left; | |
415 m_pNode->TryEnum(XFA_ATTRIBUTE_HAlign, eAttr); | |
416 return eAttr; | |
417 } | |
418 int32_t CXFA_Para::GetVerticalAlign() { | |
419 XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_Top; | |
420 m_pNode->TryEnum(XFA_ATTRIBUTE_VAlign, eAttr); | |
421 return eAttr; | |
422 } | |
423 FX_FLOAT CXFA_Para::GetLineHeight() { | |
424 CXFA_Measurement ms; | |
425 m_pNode->TryMeasure(XFA_ATTRIBUTE_LineHeight, ms); | |
426 return ms.ToUnit(XFA_UNIT_Pt); | |
427 } | |
428 FX_FLOAT CXFA_Para::GetMarginLeft() { | |
429 CXFA_Measurement ms; | |
430 m_pNode->TryMeasure(XFA_ATTRIBUTE_MarginLeft, ms); | |
431 return ms.ToUnit(XFA_UNIT_Pt); | |
432 } | |
433 FX_FLOAT CXFA_Para::GetMarginRight() { | |
434 CXFA_Measurement ms; | |
435 m_pNode->TryMeasure(XFA_ATTRIBUTE_MarginRight, ms); | |
436 return ms.ToUnit(XFA_UNIT_Pt); | |
437 } | |
438 int32_t CXFA_Para::GetOrphans() { | |
439 int32_t iValue = 0; | |
440 m_pNode->TryInteger(XFA_ATTRIBUTE_Orphans, iValue); | |
441 return iValue; | |
442 } | |
443 FX_FLOAT CXFA_Para::GetRadixOffset() { | |
444 CXFA_Measurement ms; | |
445 m_pNode->TryMeasure(XFA_ATTRIBUTE_RadixOffset, ms); | |
446 return ms.ToUnit(XFA_UNIT_Pt); | |
447 } | |
448 FX_FLOAT CXFA_Para::GetSpaceAbove() { | |
449 CXFA_Measurement ms; | |
450 m_pNode->TryMeasure(XFA_ATTRIBUTE_SpaceAbove, ms); | |
451 return ms.ToUnit(XFA_UNIT_Pt); | |
452 } | |
453 FX_FLOAT CXFA_Para::GetSpaceBelow() { | |
454 CXFA_Measurement ms; | |
455 m_pNode->TryMeasure(XFA_ATTRIBUTE_SpaceBelow, ms); | |
456 return ms.ToUnit(XFA_UNIT_Pt); | |
457 } | |
458 FX_FLOAT CXFA_Para::GetTextIndent() { | |
459 CXFA_Measurement ms; | |
460 m_pNode->TryMeasure(XFA_ATTRIBUTE_TextIndent, ms); | |
461 return ms.ToUnit(XFA_UNIT_Pt); | |
462 } | |
463 int32_t CXFA_Para::GetWidows() { | |
464 int32_t iValue = 0; | |
465 m_pNode->TryInteger(XFA_ATTRIBUTE_Widows, iValue); | |
466 return iValue; | |
467 } | |
468 FX_BOOL CXFA_Para::SetHorizontalAlign(int32_t iHorizontalAlign) { | |
469 return m_pNode->SetEnum(XFA_ATTRIBUTE_HAlign, | |
470 (XFA_ATTRIBUTEENUM)iHorizontalAlign); | |
471 } | |
472 FX_BOOL CXFA_Para::SetVerticalAlign(int32_t iVerticalAlign) { | |
473 return m_pNode->SetEnum(XFA_ATTRIBUTE_VAlign, | |
474 (XFA_ATTRIBUTEENUM)iVerticalAlign); | |
475 } | |
476 FX_BOOL CXFA_Para::SetLineHeight(FX_FLOAT fLineHeight) { | |
477 CXFA_Measurement ms; | |
478 return m_pNode->SetMeasure(XFA_ATTRIBUTE_LineHeight, ms); | |
479 } | |
480 FX_BOOL CXFA_Para::SetMarginLeft(FX_FLOAT fMarginLeft) { | |
481 CXFA_Measurement ms(fMarginLeft, XFA_UNIT_Pt); | |
482 return m_pNode->SetMeasure(XFA_ATTRIBUTE_MarginLeft, ms); | |
483 } | |
484 FX_BOOL CXFA_Para::SetMarginRight(FX_FLOAT fMarginRight) { | |
485 CXFA_Measurement ms(fMarginRight, XFA_UNIT_Pt); | |
486 return m_pNode->SetMeasure(XFA_ATTRIBUTE_MarginRight, ms); | |
487 } | |
488 FX_BOOL CXFA_Para::SetOrphans(int32_t iOrphans) { | |
489 return m_pNode->SetInteger(XFA_ATTRIBUTE_Orphans, iOrphans); | |
490 } | |
491 FX_BOOL CXFA_Para::SetRadixOffset(FX_FLOAT fRadixOffset) { | |
492 CXFA_Measurement ms(fRadixOffset, XFA_UNIT_Pt); | |
493 return m_pNode->SetMeasure(XFA_ATTRIBUTE_RadixOffset, ms); | |
494 } | |
495 FX_BOOL CXFA_Para::SetSpaceAbove(FX_FLOAT fSpaceAbove) { | |
496 CXFA_Measurement ms(fSpaceAbove, XFA_UNIT_Pt); | |
497 return m_pNode->SetMeasure(XFA_ATTRIBUTE_SpaceAbove, ms); | |
498 } | |
499 FX_BOOL CXFA_Para::SetSpaceBelow(FX_FLOAT fSpaceBelow) { | |
500 CXFA_Measurement ms(fSpaceBelow, XFA_UNIT_Pt); | |
501 return m_pNode->SetMeasure(XFA_ATTRIBUTE_SpaceBelow, ms); | |
502 } | |
503 FX_BOOL CXFA_Para::SetTextIndent(FX_FLOAT fTextIndent) { | |
504 CXFA_Measurement ms(fTextIndent, XFA_UNIT_Pt); | |
505 return m_pNode->SetMeasure(XFA_ATTRIBUTE_TextIndent, ms); | |
506 } | |
507 FX_BOOL CXFA_Para::SetWidows(int32_t iWidows) { | |
508 return m_pNode->SetInteger(XFA_ATTRIBUTE_Widows, iWidows); | |
509 } | |
510 CXFA_Keep::CXFA_Keep(CXFA_Node* pNode, CXFA_Node* pParent) | |
511 : CXFA_Data(pNode), m_pParent(pParent) {} | |
512 int32_t CXFA_Keep::GetIntact() { | |
513 XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_None; | |
514 switch (m_pParent->GetClassID()) { | |
515 case XFA_ELEMENT_Subform: { | |
516 XFA_ATTRIBUTEENUM eAttrSubForm; | |
517 m_pParent->TryEnum(XFA_ATTRIBUTE_Layout, eAttrSubForm); | |
518 if (eAttrSubForm == XFA_ATTRIBUTEENUM_Position || | |
519 eAttrSubForm == XFA_ATTRIBUTEENUM_Row) { | |
520 eAttr = XFA_ATTRIBUTEENUM_ContentArea; | |
521 } | |
522 } break; | |
523 case XFA_ELEMENT_Draw: | |
524 eAttr = XFA_ATTRIBUTEENUM_ContentArea; | |
525 break; | |
526 default: | |
527 break; | |
528 } | |
529 m_pNode->TryEnum(XFA_ATTRIBUTE_Intact, eAttr, FALSE); | |
530 return eAttr; | |
531 } | |
532 int32_t CXFA_Keep::GetNext() { | |
533 XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_None; | |
534 m_pNode->TryEnum(XFA_ATTRIBUTE_Next, eAttr); | |
535 return eAttr; | |
536 } | |
537 int32_t CXFA_Keep::GetPrevious() { | |
538 XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_None; | |
539 m_pNode->TryEnum(XFA_ATTRIBUTE_Previous, eAttr); | |
540 return eAttr; | |
541 } | |
542 FX_BOOL CXFA_Keep::SetIntact(int32_t iIntact) { | |
543 return m_pNode->SetEnum(XFA_ATTRIBUTE_Intact, (XFA_ATTRIBUTEENUM)iIntact); | |
544 } | |
545 FX_BOOL CXFA_Keep::SetNext(int32_t iNext) { | |
546 return m_pNode->SetEnum(XFA_ATTRIBUTE_Next, (XFA_ATTRIBUTEENUM)iNext); | |
547 } | |
548 FX_BOOL CXFA_Keep::SetPrevious(int32_t iPrevious) { | |
549 return m_pNode->SetEnum(XFA_ATTRIBUTE_Previous, (XFA_ATTRIBUTEENUM)iPrevious); | |
550 } | |
551 CXFA_Event::CXFA_Event(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
552 int32_t CXFA_Event::GetActivity() { | |
553 return m_pNode->GetEnum(XFA_ATTRIBUTE_Activity); | |
554 } | |
555 int32_t CXFA_Event::GetEventType() { | |
556 CXFA_Node* pChild = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | |
557 while (pChild) { | |
558 int32_t eType = pChild->GetClassID(); | |
559 if (eType != XFA_ELEMENT_Extras) { | |
560 return eType; | |
561 } | |
562 pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling); | |
563 } | |
564 return XFA_ELEMENT_UNKNOWN; | |
565 } | |
566 void CXFA_Event::GetRef(CFX_WideStringC& wsRef) { | |
567 m_pNode->TryCData(XFA_ATTRIBUTE_Ref, wsRef); | |
568 } | |
569 int32_t CXFA_Event::GetExecuteRunAt() { | |
570 CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Execute); | |
571 return pNode->GetEnum(XFA_ATTRIBUTE_RunAt); | |
572 } | |
573 int32_t CXFA_Event::GetExecuteType() { | |
574 CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Execute); | |
575 return pNode->GetEnum(XFA_ATTRIBUTE_ExecuteType); | |
576 } | |
577 void CXFA_Event::GetExecuteConnection(CFX_WideString& wsConnection) { | |
578 CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Execute); | |
579 CFX_WideStringC cData; | |
580 pNode->TryCData(XFA_ATTRIBUTE_Connection, cData); | |
581 wsConnection = cData; | |
582 } | |
583 CXFA_Script CXFA_Event::GetScript() { | |
584 return CXFA_Script(m_pNode->GetChild(0, XFA_ELEMENT_Script)); | |
585 } | |
586 CXFA_Submit CXFA_Event::GetSubmit() { | |
587 return CXFA_Submit(m_pNode->GetChild(0, XFA_ELEMENT_Submit)); | |
588 } | |
589 int32_t CXFA_Event::GetSignDataOperation() { | |
590 CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_SignData); | |
591 return pNode->GetEnum(XFA_ATTRIBUTE_Operation); | |
592 } | |
593 void CXFA_Event::GetSignDataTarget(CFX_WideString& wsTarget) { | |
594 if (CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_SignData)) { | |
595 CFX_WideStringC wsCData; | |
596 pNode->TryCData(XFA_ATTRIBUTE_Target, wsCData); | |
597 wsTarget = wsCData; | |
598 } | |
599 } | |
600 FX_BOOL CXFA_Event::SetActivity(int32_t iActivity) { | |
601 return m_pNode->SetEnum(XFA_ATTRIBUTE_Activity, (XFA_ATTRIBUTEENUM)iActivity); | |
602 } | |
603 FX_BOOL CXFA_Event::SetEventType(int32_t iEventType) { | |
604 return FALSE; | |
605 } | |
606 FX_BOOL CXFA_Event::SetExecuteRunAt(int32_t iExecuteRunAt) { | |
607 CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Execute); | |
608 return pNode->SetEnum(XFA_ATTRIBUTE_RunAt, (XFA_ATTRIBUTEENUM)iExecuteRunAt); | |
609 } | |
610 FX_BOOL CXFA_Event::SetExecuteType(int32_t iExecuteType) { | |
611 CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Execute); | |
612 return pNode->SetEnum(XFA_ATTRIBUTE_ExecuteType, | |
613 (XFA_ATTRIBUTEENUM)iExecuteType); | |
614 } | |
615 FX_BOOL CXFA_Event::SetExecuteConnection(const CFX_WideString& wsConnection) { | |
616 CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Execute); | |
617 return pNode->SetCData(XFA_ATTRIBUTE_Connection, wsConnection); | |
618 } | |
619 FX_BOOL CXFA_Event::SetSignDataOperation(int32_t iOperation) { | |
620 CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_SignData); | |
621 return pNode->SetEnum(XFA_ATTRIBUTE_Operation, (XFA_ATTRIBUTEENUM)iOperation); | |
622 } | |
623 FX_BOOL CXFA_Event::SetSignDataTarget(const CFX_WideString& wsTarget) { | |
624 if (CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_SignData)) { | |
625 return pNode->SetCData(XFA_ATTRIBUTE_Target, wsTarget); | |
626 } | |
627 return FALSE; | |
628 } | |
629 CXFA_Script::CXFA_Script(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
630 void CXFA_Script::GetBinding(CFX_WideString& wsBinding) { | |
631 CFX_WideStringC cData; | |
632 m_pNode->TryCData(XFA_ATTRIBUTE_Binding, cData); | |
633 wsBinding = cData; | |
634 } | |
635 XFA_SCRIPTTYPE CXFA_Script::GetContentType() { | |
636 CFX_WideStringC cData; | |
637 if (m_pNode->TryCData(XFA_ATTRIBUTE_ContentType, cData, FALSE)) { | |
638 if (cData == FX_WSTRC(L"application/x-javascript")) { | |
639 return XFA_SCRIPTTYPE_Javascript; | |
640 } else if (cData == FX_WSTRC(L"application/x-formcalc")) { | |
641 return XFA_SCRIPTTYPE_Formcalc; | |
642 } else { | |
643 return XFA_SCRIPTTYPE_Unkown; | |
644 } | |
645 } | |
646 return XFA_SCRIPTTYPE_Formcalc; | |
647 } | |
648 int32_t CXFA_Script::GetRunAt() { | |
649 return m_pNode->GetEnum(XFA_ATTRIBUTE_RunAt); | |
650 } | |
651 void CXFA_Script::GetExpression(CFX_WideString& wsExpression) { | |
652 m_pNode->TryContent(wsExpression); | |
653 } | |
654 FX_BOOL CXFA_Script::SetBinding(const CFX_WideString& wsBinding) { | |
655 return m_pNode->SetCData(XFA_ATTRIBUTE_Binding, wsBinding); | |
656 } | |
657 FX_BOOL CXFA_Script::SetContentType(XFA_SCRIPTTYPE eType) { | |
658 CFX_WideString wsType; | |
659 switch (eType) { | |
660 case XFA_SCRIPTTYPE_Javascript: | |
661 wsType = L"application/x-javascript"; | |
662 break; | |
663 case XFA_SCRIPTTYPE_Formcalc: | |
664 wsType = L"application/x-formcalc"; | |
665 break; | |
666 default: | |
667 break; | |
668 } | |
669 return m_pNode->SetCData(XFA_ATTRIBUTE_ContentType, wsType); | |
670 } | |
671 FX_BOOL CXFA_Script::SetRunAt(int32_t iRunAt) { | |
672 return m_pNode->SetEnum(XFA_ATTRIBUTE_RunAt, (XFA_ATTRIBUTEENUM)iRunAt); | |
673 } | |
674 FX_BOOL CXFA_Script::SetExpression(const CFX_WideString& wsExpression) { | |
675 return m_pNode->SetContent(wsExpression, wsExpression); | |
676 } | |
677 CXFA_Submit::CXFA_Submit(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
678 FX_BOOL CXFA_Submit::IsSubmitEmbedPDF() { | |
679 return m_pNode->GetBoolean(XFA_ATTRIBUTE_EmbedPDF); | |
680 } | |
681 int32_t CXFA_Submit::GetSubmitFormat() { | |
682 return m_pNode->GetEnum(XFA_ATTRIBUTE_Format); | |
683 } | |
684 void CXFA_Submit::GetSubmitTarget(CFX_WideStringC& wsTarget) { | |
685 m_pNode->TryCData(XFA_ATTRIBUTE_Target, wsTarget); | |
686 } | |
687 XFA_TEXTENCODING CXFA_Submit::GetSubmitTextEncoding() { | |
688 CFX_WideStringC wsCData; | |
689 if (!m_pNode->TryCData(XFA_ATTRIBUTE_TextEncoding, wsCData)) { | |
690 return XFA_TEXTENCODING_None; | |
691 } | |
692 CFX_WideString wsValue(wsCData); | |
693 if (wsValue == L"Big-Five") { | |
694 return XFA_TEXTENCODING_Big5; | |
695 } else if (wsValue == L"fontSpecific") { | |
696 return XFA_TEXTENCODING_FontSpecific; | |
697 } else if (wsValue == L"GBK") { | |
698 return XFA_TEXTENCODING_GBK; | |
699 } else if (wsValue == L"GB-18030") { | |
700 return XFA_TEXTENCODING_GB18030; | |
701 } else if (wsValue == L"GB-2312") { | |
702 return XFA_TEXTENCODING_GB2312; | |
703 } else if (wsValue == L"ISO-8859-NN") { | |
704 return XFA_TEXTENCODING_ISO8859NN; | |
705 } else if (wsValue == L"KSC-5601") { | |
706 return XFA_TEXTENCODING_KSC5601; | |
707 } else if (wsValue == L"Shift-JIS") { | |
708 return XFA_TEXTENCODING_ShiftJIS; | |
709 } else if (wsValue == L"UCS-2") { | |
710 return XFA_TEXTENCODING_UCS2; | |
711 } else if (wsValue == L"UTF-16") { | |
712 return XFA_TEXTENCODING_UTF16; | |
713 } else if (wsValue == L"UTF-8") { | |
714 return XFA_TEXTENCODING_UTF8; | |
715 } | |
716 return XFA_TEXTENCODING_None; | |
717 } | |
718 void CXFA_Submit::GetSubmitXDPContent(CFX_WideStringC& wsContent) { | |
719 m_pNode->TryCData(XFA_ATTRIBUTE_XdpContent, wsContent); | |
720 } | |
721 FX_BOOL CXFA_Submit::SetSubmitFormat(int32_t iSubmitFormat) { | |
722 return m_pNode->SetEnum(XFA_ATTRIBUTE_Format, | |
723 (XFA_ATTRIBUTEENUM)iSubmitFormat); | |
724 } | |
725 FX_BOOL CXFA_Submit::SetSubmitTarget(const CFX_WideString& wsTarget) { | |
726 return m_pNode->SetCData(XFA_ATTRIBUTE_Target, wsTarget); | |
727 } | |
728 FX_BOOL CXFA_Submit::SetSubmitTextEncoding(XFA_TEXTENCODING eTextEncoding) { | |
729 CFX_WideString wsValue; | |
730 switch (eTextEncoding) { | |
731 case XFA_TEXTENCODING_Big5: | |
732 wsValue = L"Big-Five"; | |
733 break; | |
734 case XFA_TEXTENCODING_FontSpecific: | |
735 wsValue = L"fontSpecific"; | |
736 break; | |
737 case XFA_TEXTENCODING_GBK: | |
738 wsValue = L"GBK"; | |
739 break; | |
740 case XFA_TEXTENCODING_GB18030: | |
741 wsValue = L"GB-18030"; | |
742 break; | |
743 case XFA_TEXTENCODING_GB2312: | |
744 wsValue = L"GB-2312"; | |
745 break; | |
746 case XFA_TEXTENCODING_ISO8859NN: | |
747 wsValue = L"ISO-8859-NN"; | |
748 break; | |
749 case XFA_TEXTENCODING_KSC5601: | |
750 wsValue = L"KSC-5601"; | |
751 break; | |
752 case XFA_TEXTENCODING_ShiftJIS: | |
753 wsValue = L"Shift-JIS"; | |
754 break; | |
755 case XFA_TEXTENCODING_UCS2: | |
756 wsValue = L"UCS-2"; | |
757 break; | |
758 case XFA_TEXTENCODING_UTF16: | |
759 wsValue = L"UTF-16"; | |
760 break; | |
761 case XFA_TEXTENCODING_UTF8: | |
762 wsValue = L"UTF-8"; | |
763 break; | |
764 default: | |
765 break; | |
766 } | |
767 return m_pNode->SetCData(XFA_ATTRIBUTE_TextEncoding, wsValue); | |
768 } | |
769 FX_BOOL CXFA_Submit::SetSubmitXDPContent(const CFX_WideString& wsContent) { | |
770 return m_pNode->SetCData(XFA_ATTRIBUTE_XdpContent, wsContent); | |
771 } | |
772 XFA_ELEMENT CXFA_Value::GetChildValueClassID() { | |
773 if (!m_pNode) { | |
774 return XFA_ELEMENT_UNKNOWN; | |
775 } | |
776 if (CXFA_Node* pNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild)) { | |
777 return pNode->GetClassID(); | |
778 } | |
779 return XFA_ELEMENT_UNKNOWN; | |
780 } | |
781 FX_BOOL CXFA_Value::GetChildValueContent(CFX_WideString& wsContent) { | |
782 if (!m_pNode) { | |
783 return FALSE; | |
784 } | |
785 if (CXFA_Node* pNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild)) { | |
786 return pNode->TryContent(wsContent); | |
787 } | |
788 return FALSE; | |
789 } | |
790 CXFA_Arc CXFA_Value::GetArc() { | |
791 return CXFA_Arc(m_pNode ? m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild) | |
792 : nullptr); | |
793 } | |
794 CXFA_Line CXFA_Value::GetLine() { | |
795 return CXFA_Line(m_pNode ? m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild) | |
796 : nullptr); | |
797 } | |
798 CXFA_Rectangle CXFA_Value::GetRectangle() { | |
799 return CXFA_Rectangle(m_pNode ? m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild) | |
800 : nullptr); | |
801 } | |
802 CXFA_Text CXFA_Value::GetText() { | |
803 return CXFA_Text(m_pNode ? m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild) | |
804 : nullptr); | |
805 } | |
806 CXFA_ExData CXFA_Value::GetExData() { | |
807 return CXFA_ExData(m_pNode ? m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild) | |
808 : nullptr); | |
809 } | |
810 CXFA_Image CXFA_Value::GetImage() { | |
811 return CXFA_Image( | |
812 m_pNode ? (m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild)) : nullptr, | |
813 TRUE); | |
814 } | |
815 FX_BOOL CXFA_Value::SetChildValueContent(const CFX_WideString& wsContent, | |
816 FX_BOOL bNotify, | |
817 XFA_ELEMENT iType) { | |
818 if (!m_pNode) { | |
819 return FALSE; | |
820 } | |
821 CXFA_Node* pNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | |
822 if (!pNode) { | |
823 if (iType == XFA_ELEMENT_UNKNOWN) { | |
824 return FALSE; | |
825 } | |
826 pNode = m_pNode->GetProperty(0, iType); | |
827 } | |
828 CFX_WideString wsFormatContent(wsContent); | |
829 CXFA_WidgetData* pContainerWidgetData = pNode->GetContainerWidgetData(); | |
830 if (pContainerWidgetData) { | |
831 pContainerWidgetData->GetFormatDataValue(wsContent, wsFormatContent); | |
832 } | |
833 return pNode->SetContent(wsContent, wsFormatContent, bNotify); | |
834 } | |
835 int32_t CXFA_Line::GetHand() { | |
836 return m_pNode->GetEnum(XFA_ATTRIBUTE_Hand); | |
837 } | |
838 FX_BOOL CXFA_Line::GetSlop() { | |
839 XFA_ATTRIBUTEENUM eSlop = m_pNode->GetEnum(XFA_ATTRIBUTE_Slope); | |
840 return eSlop == XFA_ATTRIBUTEENUM_Slash; | |
841 } | |
842 CXFA_Edge CXFA_Line::GetEdge() { | |
843 return CXFA_Edge(m_pNode->GetChild(0, XFA_ELEMENT_Edge)); | |
844 } | |
845 FX_BOOL CXFA_Line::SetHand(int32_t iHand) { | |
846 return m_pNode->SetEnum(XFA_ATTRIBUTE_Hand, (XFA_ATTRIBUTEENUM)iHand); | |
847 } | |
848 FX_BOOL CXFA_Line::SetSlop(int32_t iSlop) { | |
849 return m_pNode->SetEnum(XFA_ATTRIBUTE_Slope, (XFA_ATTRIBUTEENUM)iSlop); | |
850 } | |
851 CXFA_Text::CXFA_Text(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
852 void CXFA_Text::GetName(CFX_WideStringC& wsName) { | |
853 m_pNode->TryCData(XFA_ATTRIBUTE_Name, wsName); | |
854 } | |
855 int32_t CXFA_Text::GetMaxChars() { | |
856 return m_pNode->GetInteger(XFA_ATTRIBUTE_MaxChars); | |
857 } | |
858 void CXFA_Text::GetRid(CFX_WideStringC& wsRid) { | |
859 m_pNode->TryCData(XFA_ATTRIBUTE_Rid, wsRid); | |
860 } | |
861 void CXFA_Text::GetContent(CFX_WideString& wsText) { | |
862 m_pNode->TryContent(wsText); | |
863 } | |
864 void CXFA_Text::SetContent(CFX_WideString wsText, FX_BOOL bNotify) { | |
865 CFX_WideString wsFormatValue(wsText); | |
866 CXFA_WidgetData* pContainerWidgetData = m_pNode->GetContainerWidgetData(); | |
867 if (pContainerWidgetData) { | |
868 pContainerWidgetData->GetFormatDataValue(wsText, wsFormatValue); | |
869 } | |
870 m_pNode->SetContent(wsText, wsFormatValue, bNotify); | |
871 } | |
872 FX_BOOL CXFA_Text::SetName(const CFX_WideString& wsName) { | |
873 return m_pNode->SetCData(XFA_ATTRIBUTE_Name, wsName); | |
874 } | |
875 FX_BOOL CXFA_Text::SetMaxChars(int32_t iMaxChars) { | |
876 return m_pNode->SetInteger(XFA_ATTRIBUTE_MaxChars, iMaxChars); | |
877 } | |
878 FX_BOOL CXFA_Text::SetRid(const CFX_WideString& wsRid) { | |
879 return m_pNode->SetCData(XFA_ATTRIBUTE_Rid, wsRid); | |
880 } | |
881 CXFA_ExData::CXFA_ExData(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
882 void CXFA_ExData::GetContentType(CFX_WideStringC& wsContentType) { | |
883 m_pNode->TryCData(XFA_ATTRIBUTE_ContentType, wsContentType); | |
884 } | |
885 void CXFA_ExData::GetHref(CFX_WideStringC& wsHref) { | |
886 m_pNode->TryCData(XFA_ATTRIBUTE_Href, wsHref); | |
887 } | |
888 int32_t CXFA_ExData::GetMaxLength() { | |
889 return m_pNode->GetInteger(XFA_ATTRIBUTE_MaxLength); | |
890 } | |
891 void CXFA_ExData::GetRid(CFX_WideStringC& wsRid) { | |
892 m_pNode->TryCData(XFA_ATTRIBUTE_Rid, wsRid); | |
893 } | |
894 int32_t CXFA_ExData::GetTransferEncoding() { | |
895 return m_pNode->GetEnum(XFA_ATTRIBUTE_TransferEncoding); | |
896 } | |
897 void CXFA_ExData::GetContent(CFX_WideString& wsText) { | |
898 m_pNode->TryContent(wsText); | |
899 } | |
900 FX_BOOL CXFA_ExData::SetContentType(const CFX_WideString& wsContentType) { | |
901 return m_pNode->SetCData(XFA_ATTRIBUTE_ContentType, wsContentType); | |
902 } | |
903 FX_BOOL CXFA_ExData::SetHref(const CFX_WideString& wsHref) { | |
904 return m_pNode->SetCData(XFA_ATTRIBUTE_Href, wsHref); | |
905 } | |
906 FX_BOOL CXFA_ExData::SetMaxLength(int32_t iMaxLength) { | |
907 return m_pNode->SetInteger(XFA_ATTRIBUTE_MaxLength, iMaxLength); | |
908 } | |
909 FX_BOOL CXFA_ExData::SetRid(const CFX_WideString& wsRid) { | |
910 return m_pNode->SetCData(XFA_ATTRIBUTE_Rid, wsRid); | |
911 } | |
912 FX_BOOL CXFA_ExData::SetTransferEncoding(int32_t iTransferEncoding) { | |
913 return m_pNode->SetEnum(XFA_ATTRIBUTE_TransferEncoding, | |
914 (XFA_ATTRIBUTEENUM)iTransferEncoding); | |
915 } | |
916 FX_BOOL CXFA_ExData::SetContent(const CFX_WideString& wsText, | |
917 FX_BOOL bNotify, | |
918 FX_BOOL bScriptModify, | |
919 FX_BOOL bSyncData) { | |
920 CFX_WideString wsFormatValue(wsText); | |
921 CXFA_WidgetData* pContainerWidgetData = m_pNode->GetContainerWidgetData(); | |
922 if (pContainerWidgetData) { | |
923 pContainerWidgetData->GetFormatDataValue(wsText, wsFormatValue); | |
924 } | |
925 return m_pNode->SetContent(wsText, wsFormatValue, bNotify, bScriptModify, | |
926 bSyncData); | |
927 } | |
928 CXFA_Image::CXFA_Image(CXFA_Node* pNode, FX_BOOL bDefValue) | |
929 : CXFA_Data(pNode), m_bDefValue(bDefValue) {} | |
930 int32_t CXFA_Image::GetAspect() { | |
931 return m_pNode->GetEnum(XFA_ATTRIBUTE_Aspect); | |
932 } | |
933 FX_BOOL CXFA_Image::GetContentType(CFX_WideString& wsContentType) { | |
934 return m_pNode->TryCData(XFA_ATTRIBUTE_ContentType, wsContentType); | |
935 } | |
936 FX_BOOL CXFA_Image::GetHref(CFX_WideString& wsHref) { | |
937 if (m_bDefValue) { | |
938 return m_pNode->TryCData(XFA_ATTRIBUTE_Href, wsHref); | |
939 } | |
940 return m_pNode->GetAttribute(FX_WSTRC(L"href"), wsHref); | |
941 } | |
942 int32_t CXFA_Image::GetTransferEncoding() { | |
943 if (m_bDefValue) { | |
944 return m_pNode->GetEnum(XFA_ATTRIBUTE_TransferEncoding); | |
945 } | |
946 return XFA_ATTRIBUTEENUM_Base64; | |
947 } | |
948 FX_BOOL CXFA_Image::GetContent(CFX_WideString& wsText) { | |
949 return m_pNode->TryContent(wsText); | |
950 } | |
951 FX_BOOL CXFA_Image::SetAspect(int32_t iAspect) { | |
952 return m_pNode->SetEnum(XFA_ATTRIBUTE_Aspect, (XFA_ATTRIBUTEENUM)iAspect); | |
953 } | |
954 FX_BOOL CXFA_Image::SetContentType(const CFX_WideString& wsContentType) { | |
955 return m_pNode->SetCData(XFA_ATTRIBUTE_ContentType, wsContentType); | |
956 } | |
957 FX_BOOL CXFA_Image::SetHref(const CFX_WideString& wsHref) { | |
958 if (m_bDefValue) { | |
959 return m_pNode->SetCData(XFA_ATTRIBUTE_Href, wsHref); | |
960 } | |
961 return m_pNode->SetAttribute(XFA_ATTRIBUTE_Href, wsHref); | |
962 } | |
963 FX_BOOL CXFA_Image::SetTransferEncoding(int32_t iTransferEncoding) { | |
964 if (m_bDefValue) { | |
965 return m_pNode->SetEnum(XFA_ATTRIBUTE_TransferEncoding, | |
966 (XFA_ATTRIBUTEENUM)iTransferEncoding); | |
967 } | |
968 return TRUE; | |
969 } | |
970 FX_BOOL CXFA_Image::SetContent(const CFX_WideString& wsText) { | |
971 CFX_WideString wsFormatValue(wsText); | |
972 CXFA_WidgetData* pContainerWidgetData = m_pNode->GetContainerWidgetData(); | |
973 if (pContainerWidgetData) { | |
974 pContainerWidgetData->GetFormatDataValue(wsText, wsFormatValue); | |
975 } | |
976 return m_pNode->SetContent(wsText, wsFormatValue); | |
977 } | |
978 CXFA_Calculate::CXFA_Calculate(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
979 int32_t CXFA_Calculate::GetOverride() { | |
980 XFA_ATTRIBUTEENUM eAtt = XFA_ATTRIBUTEENUM_Error; | |
981 m_pNode->TryEnum(XFA_ATTRIBUTE_Override, eAtt, FALSE); | |
982 return eAtt; | |
983 } | |
984 CXFA_Script CXFA_Calculate::GetScript() { | |
985 return CXFA_Script(m_pNode->GetChild(0, XFA_ELEMENT_Script)); | |
986 } | |
987 void CXFA_Calculate::GetMessageText(CFX_WideString& wsMessage) { | |
988 if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_ELEMENT_Message)) { | |
989 CXFA_Text text(pNode->GetChild(0, XFA_ELEMENT_Text)); | |
990 if (text) { | |
991 text.GetContent(wsMessage); | |
992 } | |
993 } | |
994 } | |
995 FX_BOOL CXFA_Calculate::SetOverride(int32_t iOverride) { | |
996 return m_pNode->SetEnum(XFA_ATTRIBUTE_Override, (XFA_ATTRIBUTEENUM)iOverride); | |
997 } | |
998 FX_BOOL CXFA_Calculate::SetMessageText(const CFX_WideString& wsMessage) { | |
999 if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_ELEMENT_Message)) { | |
1000 CXFA_Node* pChildNode = pNode->GetProperty(0, XFA_ELEMENT_Text); | |
1001 return pChildNode->SetContent(wsMessage, wsMessage); | |
1002 } | |
1003 return FALSE; | |
1004 } | |
1005 CXFA_Validate::CXFA_Validate(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
1006 int32_t CXFA_Validate::GetFormatTest() { | |
1007 return m_pNode->GetEnum(XFA_ATTRIBUTE_FormatTest); | |
1008 } | |
1009 FX_BOOL CXFA_Validate::SetTestValue(int32_t iType, | |
1010 CFX_WideString& wsValue, | |
1011 XFA_ATTRIBUTEENUM eName) { | |
1012 const XFA_ATTRIBUTEENUMINFO* pInfo = XFA_GetAttributeEnumByName(wsValue); | |
1013 if (pInfo) { | |
1014 eName = pInfo->eName; | |
1015 } | |
1016 m_pNode->SetEnum((XFA_ATTRIBUTE)iType, eName, FALSE); | |
1017 return TRUE; | |
1018 } | |
1019 FX_BOOL CXFA_Validate::SetFormatTest(CFX_WideString wsValue) { | |
1020 return SetTestValue(XFA_ATTRIBUTE_FormatTest, wsValue, | |
1021 XFA_ATTRIBUTEENUM_Warning); | |
1022 } | |
1023 FX_BOOL CXFA_Validate::SetNullTest(CFX_WideString wsValue) { | |
1024 return SetTestValue(XFA_ATTRIBUTE_NullTest, wsValue, | |
1025 XFA_ATTRIBUTEENUM_Disabled); | |
1026 } | |
1027 int32_t CXFA_Validate::GetNullTest() { | |
1028 return m_pNode->GetEnum(XFA_ATTRIBUTE_NullTest); | |
1029 } | |
1030 int32_t CXFA_Validate::GetScriptTest() { | |
1031 return m_pNode->GetEnum(XFA_ATTRIBUTE_ScriptTest); | |
1032 } | |
1033 void CXFA_Validate::GetMessageText(CFX_WideString& wsMessage, | |
1034 const CFX_WideStringC& wsMessageType) { | |
1035 if (CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Message, FALSE)) { | |
1036 CXFA_Node* pItemNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | |
1037 for (; pItemNode; | |
1038 pItemNode = pItemNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { | |
1039 if (pItemNode->GetClassID() != XFA_ELEMENT_Text) { | |
1040 continue; | |
1041 } | |
1042 CFX_WideStringC wsName; | |
1043 pItemNode->TryCData(XFA_ATTRIBUTE_Name, wsName); | |
1044 if (wsName.IsEmpty() || wsName == wsMessageType) { | |
1045 pItemNode->TryContent(wsMessage); | |
1046 return; | |
1047 } | |
1048 } | |
1049 } | |
1050 } | |
1051 void CXFA_Validate::SetFormatMessageText(CFX_WideString wsMessage) { | |
1052 SetMessageText(wsMessage, FX_WSTRC(L"formatTest")); | |
1053 } | |
1054 void CXFA_Validate::GetFormatMessageText(CFX_WideString& wsMessage) { | |
1055 GetMessageText(wsMessage, FX_WSTRC(L"formatTest")); | |
1056 } | |
1057 void CXFA_Validate::SetNullMessageText(CFX_WideString wsMessage) { | |
1058 SetMessageText(wsMessage, FX_WSTRC(L"nullTest")); | |
1059 } | |
1060 void CXFA_Validate::GetNullMessageText(CFX_WideString& wsMessage) { | |
1061 GetMessageText(wsMessage, FX_WSTRC(L"nullTest")); | |
1062 } | |
1063 void CXFA_Validate::SetMessageText(CFX_WideString& wsMessage, | |
1064 const CFX_WideStringC& wsMessageType) { | |
1065 if (CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Message, TRUE)) { | |
1066 CXFA_Node* pItemNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | |
1067 for (; pItemNode; | |
1068 pItemNode = pItemNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { | |
1069 if (pItemNode->GetClassID() != XFA_ELEMENT_Text) { | |
1070 continue; | |
1071 } | |
1072 CFX_WideStringC wsName; | |
1073 pItemNode->TryCData(XFA_ATTRIBUTE_Name, wsName); | |
1074 if (wsName.IsEmpty() || wsName == wsMessageType) { | |
1075 pItemNode->SetContent(wsMessage, wsMessage, FALSE); | |
1076 return; | |
1077 } | |
1078 } | |
1079 CXFA_Node* pTextNode = pNode->CreateSamePacketNode(XFA_ELEMENT_Text); | |
1080 pNode->InsertChild(pTextNode); | |
1081 pTextNode->SetCData(XFA_ATTRIBUTE_Name, wsMessageType, FALSE); | |
1082 pTextNode->SetContent(wsMessage, wsMessage, FALSE); | |
1083 } | |
1084 } | |
1085 void CXFA_Validate::GetScriptMessageText(CFX_WideString& wsMessage) { | |
1086 GetMessageText(wsMessage, FX_WSTRC(L"scriptTest")); | |
1087 } | |
1088 void CXFA_Validate::SetScriptMessageText(CFX_WideString wsMessage) { | |
1089 SetMessageText(wsMessage, FX_WSTRC(L"scriptTest")); | |
1090 } | |
1091 void CXFA_Validate::GetPicture(CFX_WideString& wsPicture) { | |
1092 if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_ELEMENT_Picture)) { | |
1093 pNode->TryContent(wsPicture); | |
1094 } | |
1095 } | |
1096 CXFA_Script CXFA_Validate::GetScript() { | |
1097 return CXFA_Script(m_pNode->GetChild(0, XFA_ELEMENT_Script)); | |
1098 } | |
1099 CXFA_Variables::CXFA_Variables(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
1100 int32_t CXFA_Variables::CountScripts() { | |
1101 return m_pNode->CountChildren(XFA_ELEMENT_Script); | |
1102 } | |
1103 CXFA_Script CXFA_Variables::GetScript(int32_t nIndex) { | |
1104 return CXFA_Script(m_pNode->GetChild(nIndex, XFA_ELEMENT_Script)); | |
1105 } | |
1106 CXFA_Bind::CXFA_Bind(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
1107 int32_t CXFA_Bind::GetMatch() { | |
1108 return m_pNode->GetEnum(XFA_ATTRIBUTE_Match); | |
1109 } | |
1110 void CXFA_Bind::GetRef(CFX_WideStringC& wsRef) { | |
1111 m_pNode->TryCData(XFA_ATTRIBUTE_Ref, wsRef); | |
1112 } | |
1113 void CXFA_Bind::GetPicture(CFX_WideString& wsPicture) { | |
1114 if (CXFA_Node* pPicture = m_pNode->GetChild(0, XFA_ELEMENT_Picture)) { | |
1115 pPicture->TryContent(wsPicture); | |
1116 } | |
1117 } | |
1118 FX_BOOL CXFA_Bind::SetMatch(int32_t iMatch) { | |
1119 return m_pNode->SetEnum(XFA_ATTRIBUTE_Match, (XFA_ATTRIBUTEENUM)iMatch); | |
1120 } | |
1121 FX_BOOL CXFA_Bind::SetRef(const CFX_WideString& wsRef) { | |
1122 return m_pNode->SetCData(XFA_ATTRIBUTE_Ref, wsRef); | |
1123 } | |
1124 FX_BOOL CXFA_Bind::SetPicture(const CFX_WideString& wsPicture) { | |
1125 if (CXFA_Node* pPicture = m_pNode->GetChild(0, XFA_ELEMENT_Picture)) { | |
1126 return pPicture->SetContent(wsPicture, wsPicture); | |
1127 } | |
1128 return FALSE; | |
1129 } | |
1130 CXFA_Assist::CXFA_Assist(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
1131 CXFA_ToolTip CXFA_Assist::GetToolTip() { | |
1132 return CXFA_ToolTip(m_pNode->GetChild(0, XFA_ELEMENT_ToolTip)); | |
1133 } | |
1134 CXFA_ToolTip::CXFA_ToolTip(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
1135 FX_BOOL CXFA_ToolTip::GetTip(CFX_WideString& wsTip) { | |
1136 return m_pNode->TryContent(wsTip); | |
1137 } | |
1138 FX_BOOL CXFA_ToolTip::SetTip(const CFX_WideString& wsTip) { | |
1139 return m_pNode->SetContent(wsTip, wsTip); | |
1140 } | |
1141 CXFA_BindItems::CXFA_BindItems(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
1142 void CXFA_BindItems::GetConnection(CFX_WideStringC& wsConnection) { | |
1143 m_pNode->TryCData(XFA_ATTRIBUTE_Connection, wsConnection); | |
1144 } | |
1145 void CXFA_BindItems::GetLabelRef(CFX_WideStringC& wsLabelRef) { | |
1146 m_pNode->TryCData(XFA_ATTRIBUTE_LabelRef, wsLabelRef); | |
1147 } | |
1148 void CXFA_BindItems::GetValueRef(CFX_WideStringC& wsValueRef) { | |
1149 m_pNode->TryCData(XFA_ATTRIBUTE_ValueRef, wsValueRef); | |
1150 } | |
1151 void CXFA_BindItems::GetRef(CFX_WideStringC& wsRef) { | |
1152 m_pNode->TryCData(XFA_ATTRIBUTE_Ref, wsRef); | |
1153 } | |
1154 FX_BOOL CXFA_BindItems::SetConnection(const CFX_WideString& wsConnection) { | |
1155 return m_pNode->SetCData(XFA_ATTRIBUTE_Connection, wsConnection); | |
1156 } | |
1157 FX_BOOL CXFA_BindItems::SetLabelRef(const CFX_WideString& wsLabelRef) { | |
1158 return m_pNode->SetCData(XFA_ATTRIBUTE_LabelRef, wsLabelRef); | |
1159 } | |
1160 FX_BOOL CXFA_BindItems::SetValueRef(const CFX_WideString& wsValueRef) { | |
1161 return m_pNode->SetCData(XFA_ATTRIBUTE_ValueRef, wsValueRef); | |
1162 } | |
1163 FX_BOOL CXFA_BindItems::SetRef(const CFX_WideString& wsRef) { | |
1164 return m_pNode->SetCData(XFA_ATTRIBUTE_Ref, wsRef); | |
1165 } | |
1166 int32_t CXFA_Box::GetBreak() const { | |
1167 if (!m_pNode) { | |
1168 return XFA_ATTRIBUTEENUM_Close; | |
1169 } | |
1170 return m_pNode->GetEnum(XFA_ATTRIBUTE_Break); | |
1171 } | |
1172 int32_t CXFA_Box::GetHand() const { | |
1173 if (!m_pNode) { | |
1174 return XFA_ATTRIBUTEENUM_Even; | |
1175 } | |
1176 return m_pNode->GetEnum(XFA_ATTRIBUTE_Hand); | |
1177 } | |
1178 int32_t CXFA_Box::GetPresence() const { | |
1179 if (!m_pNode) { | |
1180 return XFA_ATTRIBUTEENUM_Hidden; | |
1181 } | |
1182 return m_pNode->GetEnum(XFA_ATTRIBUTE_Presence); | |
1183 } | |
1184 int32_t CXFA_Box::CountCorners() const { | |
1185 if (!m_pNode) { | |
1186 return 0; | |
1187 } | |
1188 return m_pNode->CountChildren(XFA_ELEMENT_Corner); | |
1189 } | |
1190 CXFA_Corner CXFA_Box::GetCorner(int32_t nIndex) const { | |
1191 return CXFA_Corner( | |
1192 m_pNode ? m_pNode->GetProperty(nIndex, XFA_ELEMENT_Corner, nIndex == 0) | |
1193 : nullptr); | |
1194 } | |
1195 int32_t CXFA_Box::CountEdges() const { | |
1196 if (!m_pNode) { | |
1197 return 0; | |
1198 } | |
1199 return m_pNode->CountChildren(XFA_ELEMENT_Edge); | |
1200 } | |
1201 CXFA_Edge CXFA_Box::GetEdge(int32_t nIndex) const { | |
1202 return CXFA_Edge( | |
1203 m_pNode ? m_pNode->GetProperty(nIndex, XFA_ELEMENT_Edge, nIndex == 0) | |
1204 : nullptr); | |
1205 } | |
1206 static void XFA_BOX_GetStrokes(CXFA_Node* pNode, | |
1207 CXFA_StrokeArray& strokes, | |
1208 FX_BOOL bNULL) { | |
1209 strokes.RemoveAll(); | |
1210 if (!pNode) { | |
1211 return; | |
1212 } | |
1213 strokes.SetSize(8); | |
1214 int32_t i, j; | |
1215 for (i = 0, j = 0; i < 4; i++) { | |
1216 CXFA_Corner corner = | |
1217 CXFA_Corner(pNode->GetProperty(i, XFA_ELEMENT_Corner, i == 0)); | |
1218 if (corner || i == 0) { | |
1219 strokes.SetAt(j, corner); | |
1220 } else if (bNULL) { | |
1221 strokes.SetAt(j, CXFA_Stroke(nullptr)); | |
1222 } else if (i == 1) { | |
1223 strokes.SetAt(j, strokes[0]); | |
1224 } else if (i == 2) { | |
1225 strokes.SetAt(j, strokes[0]); | |
1226 } else { | |
1227 strokes.SetAt(j, strokes[2]); | |
1228 } | |
1229 j++; | |
1230 CXFA_Edge edge = CXFA_Edge(pNode->GetProperty(i, XFA_ELEMENT_Edge, i == 0)); | |
1231 if (edge || i == 0) { | |
1232 strokes.SetAt(j, edge); | |
1233 } else if (bNULL) { | |
1234 strokes.SetAt(j, CXFA_Stroke(nullptr)); | |
1235 } else if (i == 1) { | |
1236 strokes.SetAt(j, strokes[1]); | |
1237 } else if (i == 2) { | |
1238 strokes.SetAt(j, strokes[1]); | |
1239 } else { | |
1240 strokes.SetAt(j, strokes[3]); | |
1241 } | |
1242 j++; | |
1243 } | |
1244 } | |
1245 void CXFA_Box::GetStrokes(CXFA_StrokeArray& strokes) const { | |
1246 XFA_BOX_GetStrokes(m_pNode, strokes, FALSE); | |
1247 } | |
1248 FX_BOOL CXFA_Box::IsCircular() const { | |
1249 if (!m_pNode) { | |
1250 return FALSE; | |
1251 } | |
1252 return m_pNode->GetBoolean(XFA_ATTRIBUTE_Circular); | |
1253 } | |
1254 FX_BOOL CXFA_Box::GetStartAngle(FX_FLOAT& fStartAngle) const { | |
1255 fStartAngle = 0; | |
1256 if (!m_pNode) { | |
1257 return FALSE; | |
1258 } | |
1259 CXFA_Measurement ms; | |
1260 FX_BOOL bRet = m_pNode->TryMeasure(XFA_ATTRIBUTE_StartAngle, ms, FALSE); | |
1261 if (bRet) { | |
1262 fStartAngle = ms.GetValue(); | |
1263 } | |
1264 return bRet; | |
1265 } | |
1266 FX_BOOL CXFA_Box::GetSweepAngle(FX_FLOAT& fSweepAngle) const { | |
1267 fSweepAngle = 360; | |
1268 if (!m_pNode) { | |
1269 return FALSE; | |
1270 } | |
1271 CXFA_Measurement ms; | |
1272 FX_BOOL bRet = m_pNode->TryMeasure(XFA_ATTRIBUTE_SweepAngle, ms, FALSE); | |
1273 if (bRet) { | |
1274 fSweepAngle = ms.GetValue(); | |
1275 } | |
1276 return bRet; | |
1277 } | |
1278 CXFA_Fill CXFA_Box::GetFill(FX_BOOL bModified) const { | |
1279 if (!m_pNode) { | |
1280 return CXFA_Fill(nullptr); | |
1281 } | |
1282 CXFA_Node* pFillNode = m_pNode->GetProperty(0, XFA_ELEMENT_Fill, bModified); | |
1283 return CXFA_Fill(pFillNode); | |
1284 } | |
1285 CXFA_Margin CXFA_Box::GetMargin() const { | |
1286 return CXFA_Margin(m_pNode ? m_pNode->GetChild(0, XFA_ELEMENT_Margin) | |
1287 : nullptr); | |
1288 } | |
1289 static FX_BOOL XFA_BOX_SameStyles(const CXFA_StrokeArray& strokes) { | |
1290 int32_t iCount = strokes.GetSize(); | |
1291 if (iCount < 1) { | |
1292 return TRUE; | |
1293 } | |
1294 CXFA_Stroke stroke1 = strokes[0]; | |
1295 for (int32_t i = 1; i < iCount; i++) { | |
1296 CXFA_Stroke stroke2 = strokes[i]; | |
1297 if (!stroke2) { | |
1298 continue; | |
1299 } | |
1300 if (!stroke1) { | |
1301 stroke1 = stroke2; | |
1302 } else if (!stroke1.SameStyles(stroke2)) { | |
1303 return FALSE; | |
1304 } | |
1305 } | |
1306 return TRUE; | |
1307 } | |
1308 FX_BOOL CXFA_Box::SameStyles() const { | |
1309 if (IsArc()) { | |
1310 return TRUE; | |
1311 } | |
1312 CXFA_StrokeArray strokes; | |
1313 XFA_BOX_GetStrokes(m_pNode, strokes, TRUE); | |
1314 return XFA_BOX_SameStyles(strokes); | |
1315 } | |
1316 static int32_t XFA_BOX_3DStyle(const CXFA_StrokeArray& strokes, | |
1317 CXFA_Stroke& stroke) { | |
1318 int32_t iCount = strokes.GetSize(); | |
1319 if (iCount < 1) { | |
1320 return 0; | |
1321 } | |
1322 stroke = strokes[0]; | |
1323 for (int32_t i = 1; i < iCount; i++) { | |
1324 CXFA_Stroke find = strokes[i]; | |
1325 if (!find) { | |
1326 continue; | |
1327 } | |
1328 if (!stroke) { | |
1329 stroke = find; | |
1330 } else if (stroke.GetStrokeType() != find.GetStrokeType()) { | |
1331 stroke = find; | |
1332 break; | |
1333 } | |
1334 } | |
1335 int32_t iType = stroke.GetStrokeType(); | |
1336 if (iType == XFA_ATTRIBUTEENUM_Lowered || iType == XFA_ATTRIBUTEENUM_Raised || | |
1337 iType == XFA_ATTRIBUTEENUM_Etched || | |
1338 iType == XFA_ATTRIBUTEENUM_Embossed) { | |
1339 return iType; | |
1340 } | |
1341 return 0; | |
1342 } | |
1343 int32_t CXFA_Box::Get3DStyle(FX_BOOL& bVisible, FX_FLOAT& fThickness) const { | |
1344 if (IsArc()) { | |
1345 return 0; | |
1346 } | |
1347 CXFA_StrokeArray strokes; | |
1348 XFA_BOX_GetStrokes(m_pNode, strokes, TRUE); | |
1349 CXFA_Stroke stroke(NULL); | |
1350 int32_t iType = XFA_BOX_3DStyle(strokes, stroke); | |
1351 if (iType) { | |
1352 bVisible = stroke.IsVisible(); | |
1353 fThickness = stroke.GetThickness(); | |
1354 } | |
1355 return iType; | |
1356 } | |
1357 int32_t CXFA_Stroke::GetPresence() const { | |
1358 return m_pNode ? m_pNode->GetEnum(XFA_ATTRIBUTE_Presence) | |
1359 : XFA_ATTRIBUTEENUM_Invisible; | |
1360 } | |
1361 int32_t CXFA_Stroke::GetCapType() const { | |
1362 if (!m_pNode) { | |
1363 return XFA_ATTRIBUTEENUM_Square; | |
1364 } | |
1365 return m_pNode->GetEnum(XFA_ATTRIBUTE_Cap); | |
1366 } | |
1367 int32_t CXFA_Stroke::GetStrokeType() const { | |
1368 return m_pNode ? m_pNode->GetEnum(XFA_ATTRIBUTE_Stroke) | |
1369 : XFA_ATTRIBUTEENUM_Solid; | |
1370 } | |
1371 FX_FLOAT CXFA_Stroke::GetThickness() const { | |
1372 return GetMSThickness().ToUnit(XFA_UNIT_Pt); | |
1373 } | |
1374 CXFA_Measurement CXFA_Stroke::GetMSThickness() const { | |
1375 return m_pNode ? m_pNode->GetMeasure(XFA_ATTRIBUTE_Thickness) | |
1376 : XFA_GetAttributeDefaultValue_Measure(XFA_ELEMENT_Edge, | |
1377 XFA_ATTRIBUTE_Thickness, | |
1378 XFA_XDPPACKET_Form); | |
1379 } | |
1380 void CXFA_Stroke::SetThickness(FX_FLOAT fThickness) { | |
1381 if (!m_pNode) { | |
1382 return; | |
1383 } | |
1384 CXFA_Measurement thickness(fThickness, XFA_UNIT_Pt); | |
1385 m_pNode->SetMeasure(XFA_ATTRIBUTE_Thickness, thickness); | |
1386 } | |
1387 void CXFA_Stroke::SetMSThickness(CXFA_Measurement msThinkness) { | |
1388 if (!m_pNode) { | |
1389 return; | |
1390 } | |
1391 m_pNode->SetMeasure(XFA_ATTRIBUTE_Thickness, msThinkness); | |
1392 } | |
1393 FX_ARGB CXFA_Stroke::GetColor() const { | |
1394 if (!m_pNode) { | |
1395 return 0xFF000000; | |
1396 } | |
1397 CXFA_Node* pNode = m_pNode->GetChild(0, XFA_ELEMENT_Color); | |
1398 if (!pNode) { | |
1399 return 0xFF000000; | |
1400 } | |
1401 CFX_WideStringC wsColor; | |
1402 pNode->TryCData(XFA_ATTRIBUTE_Value, wsColor); | |
1403 return XFA_WStringToColor(wsColor); | |
1404 } | |
1405 void CXFA_Stroke::SetColor(FX_ARGB argb) { | |
1406 if (!m_pNode) { | |
1407 return; | |
1408 } | |
1409 CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Color); | |
1410 CFX_WideString wsColor; | |
1411 int a, r, g, b; | |
1412 ArgbDecode(argb, a, r, g, b); | |
1413 wsColor.Format(L"%d,%d,%d", r, g, b); | |
1414 pNode->SetCData(XFA_ATTRIBUTE_Value, wsColor); | |
1415 } | |
1416 int32_t CXFA_Stroke::GetJoinType() const { | |
1417 return m_pNode ? m_pNode->GetEnum(XFA_ATTRIBUTE_Join) | |
1418 : XFA_ATTRIBUTEENUM_Square; | |
1419 } | |
1420 FX_BOOL CXFA_Stroke::IsInverted() const { | |
1421 return m_pNode ? m_pNode->GetBoolean(XFA_ATTRIBUTE_Inverted) : FALSE; | |
1422 } | |
1423 FX_FLOAT CXFA_Stroke::GetRadius() const { | |
1424 return m_pNode ? m_pNode->GetMeasure(XFA_ATTRIBUTE_Radius).ToUnit(XFA_UNIT_Pt) | |
1425 : 0; | |
1426 } | |
1427 FX_BOOL CXFA_Stroke::SameStyles(CXFA_Stroke stroke, FX_DWORD dwFlags) const { | |
1428 if (m_pNode == stroke.GetNode()) { | |
1429 return TRUE; | |
1430 } | |
1431 if (FXSYS_fabs(GetThickness() - stroke.GetThickness()) >= 0.01f) { | |
1432 return FALSE; | |
1433 } | |
1434 if ((dwFlags & XFA_STROKE_SAMESTYLE_NoPresence) == 0 && | |
1435 IsVisible() != stroke.IsVisible()) { | |
1436 return FALSE; | |
1437 } | |
1438 if (GetStrokeType() != stroke.GetStrokeType()) { | |
1439 return FALSE; | |
1440 } | |
1441 if (GetColor() != stroke.GetColor()) { | |
1442 return FALSE; | |
1443 } | |
1444 if ((dwFlags & XFA_STROKE_SAMESTYLE_Corner) != 0 && | |
1445 FXSYS_fabs(GetRadius() - stroke.GetRadius()) >= 0.01f) { | |
1446 return FALSE; | |
1447 } | |
1448 return TRUE; | |
1449 } | |
1450 FX_FLOAT XFA_GetEdgeThickness(const CXFA_StrokeArray& strokes, | |
1451 FX_BOOL b3DStyle, | |
1452 int32_t nIndex) { | |
1453 FX_FLOAT fThickness = 0; | |
1454 { | |
1455 if (strokes[nIndex * 2 + 1].GetPresence() == XFA_ATTRIBUTEENUM_Visible) { | |
1456 if (nIndex == 0) { | |
1457 fThickness += 2.5f; | |
1458 } | |
1459 fThickness += strokes[nIndex * 2 + 1].GetThickness() * (b3DStyle ? 4 : 2); | |
1460 } | |
1461 } | |
1462 return fThickness; | |
1463 } | |
1464 CXFA_WidgetData::CXFA_WidgetData(CXFA_Node* pNode) | |
1465 : CXFA_Data(pNode), | |
1466 m_bIsNull(TRUE), | |
1467 m_bPreNull(TRUE), | |
1468 m_pUiChildNode(NULL), | |
1469 m_eUIType(XFA_ELEMENT_UNKNOWN) {} | |
1470 CXFA_Node* CXFA_WidgetData::GetUIChild() { | |
1471 if (m_eUIType == XFA_ELEMENT_UNKNOWN) { | |
1472 m_pUiChildNode = XFA_CreateUIChild(m_pNode, m_eUIType); | |
1473 } | |
1474 return m_pUiChildNode; | |
1475 } | |
1476 XFA_ELEMENT CXFA_WidgetData::GetUIType() { | |
1477 GetUIChild(); | |
1478 return m_eUIType; | |
1479 } | |
1480 CFX_WideString CXFA_WidgetData::GetRawValue() { | |
1481 return m_pNode->GetContent(); | |
1482 } | |
1483 int32_t CXFA_WidgetData::GetAccess(FX_BOOL bTemplate) { | |
1484 if (bTemplate) { | |
1485 CXFA_Node* pNode = m_pNode->GetTemplateNode(); | |
1486 if (pNode) { | |
1487 return pNode->GetEnum(XFA_ATTRIBUTE_Access); | |
1488 } | |
1489 return XFA_ATTRIBUTEENUM_Open; | |
1490 } | |
1491 CXFA_Node* pNode = m_pNode; | |
1492 while (pNode) { | |
1493 int32_t iAcc = pNode->GetEnum(XFA_ATTRIBUTE_Access); | |
1494 if (iAcc != XFA_ATTRIBUTEENUM_Open) { | |
1495 return iAcc; | |
1496 } | |
1497 pNode = | |
1498 pNode->GetNodeItem(XFA_NODEITEM_Parent, XFA_OBJECTTYPE_ContainerNode); | |
1499 } | |
1500 return XFA_ATTRIBUTEENUM_Open; | |
1501 } | |
1502 FX_BOOL CXFA_WidgetData::GetAccessKey(CFX_WideStringC& wsAccessKey) { | |
1503 return m_pNode->TryCData(XFA_ATTRIBUTE_AccessKey, wsAccessKey); | |
1504 } | |
1505 int32_t CXFA_WidgetData::GetAnchorType() { | |
1506 return m_pNode->GetEnum(XFA_ATTRIBUTE_AnchorType); | |
1507 } | |
1508 int32_t CXFA_WidgetData::GetColSpan() { | |
1509 return m_pNode->GetInteger(XFA_ATTRIBUTE_ColSpan); | |
1510 } | |
1511 int32_t CXFA_WidgetData::GetPresence() { | |
1512 return m_pNode->GetEnum(XFA_ATTRIBUTE_Presence); | |
1513 CXFA_Node* pNode = m_pNode; | |
1514 while (pNode && pNode->GetObjectType() == XFA_OBJECTTYPE_ContainerNode) { | |
1515 int32_t iAcc = pNode->GetEnum(XFA_ATTRIBUTE_Presence); | |
1516 if (iAcc != XFA_ATTRIBUTEENUM_Visible) { | |
1517 return iAcc; | |
1518 } | |
1519 pNode = pNode->GetNodeItem(XFA_NODEITEM_Parent); | |
1520 } | |
1521 return XFA_ATTRIBUTEENUM_Visible; | |
1522 } | |
1523 int32_t CXFA_WidgetData::GetRotate() { | |
1524 CXFA_Measurement ms; | |
1525 if (!m_pNode->TryMeasure(XFA_ATTRIBUTE_Rotate, ms, FALSE)) { | |
1526 return 0; | |
1527 } | |
1528 int32_t iRotate = FXSYS_round(ms.GetValue()); | |
1529 iRotate = XFA_MapRotation(iRotate); | |
1530 return iRotate / 90 * 90; | |
1531 } | |
1532 CXFA_Border CXFA_WidgetData::GetBorder(FX_BOOL bModified) { | |
1533 return CXFA_Border(m_pNode->GetProperty(0, XFA_ELEMENT_Border, bModified)); | |
1534 } | |
1535 CXFA_Caption CXFA_WidgetData::GetCaption(FX_BOOL bModified) { | |
1536 return CXFA_Caption(m_pNode->GetProperty(0, XFA_ELEMENT_Caption, bModified)); | |
1537 } | |
1538 CXFA_Font CXFA_WidgetData::GetFont(FX_BOOL bModified) { | |
1539 return CXFA_Font(m_pNode->GetProperty(0, XFA_ELEMENT_Font, bModified)); | |
1540 } | |
1541 CXFA_Margin CXFA_WidgetData::GetMargin(FX_BOOL bModified) { | |
1542 return CXFA_Margin(m_pNode->GetProperty(0, XFA_ELEMENT_Margin, bModified)); | |
1543 } | |
1544 CXFA_Para CXFA_WidgetData::GetPara(FX_BOOL bModified) { | |
1545 return CXFA_Para(m_pNode->GetProperty(0, XFA_ELEMENT_Para, bModified)); | |
1546 } | |
1547 CXFA_Keep CXFA_WidgetData::GetKeep(FX_BOOL bModified) { | |
1548 return CXFA_Keep(m_pNode->GetProperty(0, XFA_ELEMENT_Keep, bModified), | |
1549 m_pNode); | |
1550 } | |
1551 void CXFA_WidgetData::GetEventList(CXFA_NodeArray& events) { | |
1552 m_pNode->GetNodeList(events, 0, XFA_ELEMENT_Event); | |
1553 } | |
1554 int32_t CXFA_WidgetData::GetEventByActivity(int32_t iActivity, | |
1555 CXFA_NodeArray& events, | |
1556 FX_BOOL bIsFormReady) { | |
1557 CXFA_NodeArray allEvents; | |
1558 GetEventList(allEvents); | |
1559 int32_t iCount = allEvents.GetSize(); | |
1560 for (int32_t i = 0; i < iCount; i++) { | |
1561 CXFA_Event event(allEvents[i]); | |
1562 if (event.GetActivity() == iActivity) { | |
1563 if (iActivity == XFA_ATTRIBUTEENUM_Ready) { | |
1564 CFX_WideStringC wsRef; | |
1565 event.GetRef(wsRef); | |
1566 if (bIsFormReady) { | |
1567 if (wsRef == CFX_WideStringC(L"$form")) { | |
1568 events.Add(allEvents[i]); | |
1569 } | |
1570 } else { | |
1571 if (wsRef == CFX_WideStringC(L"$layout")) { | |
1572 events.Add(allEvents[i]); | |
1573 } | |
1574 } | |
1575 } else { | |
1576 events.Add(allEvents[i]); | |
1577 } | |
1578 } | |
1579 } | |
1580 return events.GetSize(); | |
1581 } | |
1582 CXFA_Value CXFA_WidgetData::GetDefaultValue(FX_BOOL bModified) { | |
1583 CXFA_Node* pTemNode = m_pNode->GetTemplateNode(); | |
1584 return CXFA_Value(pTemNode | |
1585 ? pTemNode->GetProperty(0, XFA_ELEMENT_Value, bModified) | |
1586 : nullptr); | |
1587 } | |
1588 CXFA_Value CXFA_WidgetData::GetFormValue(FX_BOOL bModified) { | |
1589 return CXFA_Value(m_pNode->GetProperty(0, XFA_ELEMENT_Value, bModified)); | |
1590 } | |
1591 CXFA_Calculate CXFA_WidgetData::GetCalculate(FX_BOOL bModified) { | |
1592 return CXFA_Calculate( | |
1593 m_pNode->GetProperty(0, XFA_ELEMENT_Calculate, bModified)); | |
1594 } | |
1595 CXFA_Validate CXFA_WidgetData::GetValidate(FX_BOOL bModified) { | |
1596 return CXFA_Validate( | |
1597 m_pNode->GetProperty(0, XFA_ELEMENT_Validate, bModified)); | |
1598 } | |
1599 CXFA_Variables CXFA_WidgetData::GetVariables(FX_BOOL bModified) { | |
1600 return CXFA_Variables( | |
1601 m_pNode->GetProperty(0, XFA_ELEMENT_Variables, bModified)); | |
1602 } | |
1603 CXFA_Bind CXFA_WidgetData::GetBind(FX_BOOL bModified) { | |
1604 return CXFA_Bind(m_pNode->GetProperty(0, XFA_ELEMENT_Bind, bModified)); | |
1605 } | |
1606 CXFA_Assist CXFA_WidgetData::GetAssist(FX_BOOL bModified) { | |
1607 return CXFA_Assist(m_pNode->GetProperty(0, XFA_ELEMENT_Assist, bModified)); | |
1608 } | |
1609 void CXFA_WidgetData::GetRelevant(CFX_WideStringC& wsRelevant) { | |
1610 m_pNode->TryCData(XFA_ATTRIBUTE_Relevant, wsRelevant); | |
1611 } | |
1612 FX_BOOL CXFA_WidgetData::GetWidth(FX_FLOAT& fWidth) { | |
1613 return TryMeasure(XFA_ATTRIBUTE_W, fWidth); | |
1614 } | |
1615 FX_BOOL CXFA_WidgetData::GetHeight(FX_FLOAT& fHeight) { | |
1616 return TryMeasure(XFA_ATTRIBUTE_H, fHeight); | |
1617 } | |
1618 FX_BOOL CXFA_WidgetData::GetMinWidth(FX_FLOAT& fMinWidth) { | |
1619 return TryMeasure(XFA_ATTRIBUTE_MinW, fMinWidth); | |
1620 } | |
1621 FX_BOOL CXFA_WidgetData::GetMinHeight(FX_FLOAT& fMinHeight) { | |
1622 return TryMeasure(XFA_ATTRIBUTE_MinH, fMinHeight); | |
1623 } | |
1624 FX_BOOL CXFA_WidgetData::GetMaxWidth(FX_FLOAT& fMaxWidth) { | |
1625 return TryMeasure(XFA_ATTRIBUTE_MaxW, fMaxWidth); | |
1626 } | |
1627 FX_BOOL CXFA_WidgetData::GetMaxHeight(FX_FLOAT& fMaxHeight) { | |
1628 return TryMeasure(XFA_ATTRIBUTE_MaxH, fMaxHeight); | |
1629 } | |
1630 CXFA_BindItems CXFA_WidgetData::GetBindItems() { | |
1631 return CXFA_BindItems(m_pNode->GetChild(0, XFA_ELEMENT_BindItems)); | |
1632 } | |
1633 FX_BOOL CXFA_WidgetData::SetAccess(int32_t iAccess, FX_BOOL bNotify) { | |
1634 return m_pNode->SetEnum(XFA_ATTRIBUTE_Access, (XFA_ATTRIBUTEENUM)iAccess, | |
1635 bNotify); | |
1636 } | |
1637 FX_BOOL CXFA_WidgetData::SetAccessKey(const CFX_WideString& wsAccessKey) { | |
1638 return m_pNode->SetCData(XFA_ATTRIBUTE_AccessKey, wsAccessKey); | |
1639 } | |
1640 FX_BOOL CXFA_WidgetData::SetAnchorType(int32_t iType) { | |
1641 return m_pNode->SetEnum(XFA_ATTRIBUTE_AnchorType, (XFA_ATTRIBUTEENUM)iType); | |
1642 } | |
1643 FX_BOOL CXFA_WidgetData::SetColSpan(int32_t iColSpan) { | |
1644 return m_pNode->SetInteger(XFA_ATTRIBUTE_ColSpan, | |
1645 (XFA_ATTRIBUTEENUM)iColSpan); | |
1646 } | |
1647 FX_BOOL CXFA_WidgetData::SetPresence(int32_t iPresence) { | |
1648 return m_pNode->SetEnum(XFA_ATTRIBUTE_Presence, (XFA_ATTRIBUTEENUM)iPresence); | |
1649 } | |
1650 FX_BOOL CXFA_WidgetData::SetRotate(int32_t iRotate) { | |
1651 iRotate = XFA_MapRotation(iRotate); | |
1652 CXFA_Measurement ms((FX_FLOAT)iRotate, XFA_UNIT_Angle); | |
1653 return m_pNode->SetMeasure(XFA_ATTRIBUTE_Rotate, ms); | |
1654 } | |
1655 FX_BOOL CXFA_WidgetData::SetRelevant(const CFX_WideString& wsRelevant) { | |
1656 return m_pNode->SetCData(XFA_ATTRIBUTE_Relevant, wsRelevant); | |
1657 } | |
1658 FX_BOOL CXFA_WidgetData::SetStatus(FX_DWORD dwStatus) { | |
1659 return FALSE; | |
1660 } | |
1661 FX_BOOL CXFA_WidgetData::SetWidth(FX_FLOAT fWidth) { | |
1662 return SetMeasure(XFA_ATTRIBUTE_W, fWidth); | |
1663 } | |
1664 FX_BOOL CXFA_WidgetData::SetHeight(FX_FLOAT fHeight) { | |
1665 return SetMeasure(XFA_ATTRIBUTE_H, fHeight); | |
1666 } | |
1667 FX_BOOL CXFA_WidgetData::SetMinWidth(FX_FLOAT fMinWidth) { | |
1668 return SetMeasure(XFA_ATTRIBUTE_MinW, fMinWidth); | |
1669 } | |
1670 FX_BOOL CXFA_WidgetData::SetMinHeight(FX_FLOAT fMinHeight) { | |
1671 return SetMeasure(XFA_ATTRIBUTE_MinH, fMinHeight); | |
1672 } | |
1673 FX_BOOL CXFA_WidgetData::SetMaxWidth(FX_FLOAT fMaxWidth) { | |
1674 return SetMeasure(XFA_ATTRIBUTE_MaxW, fMaxWidth); | |
1675 } | |
1676 FX_BOOL CXFA_WidgetData::SetMaxHeight(FX_FLOAT fMaxHeight) { | |
1677 return SetMeasure(XFA_ATTRIBUTE_MaxH, fMaxHeight); | |
1678 } | |
1679 FX_BOOL CXFA_WidgetData::SetPos(FX_FLOAT x, FX_FLOAT y) { | |
1680 return SetMeasure(XFA_ATTRIBUTE_X, x) && SetMeasure(XFA_ATTRIBUTE_Y, y); | |
1681 } | |
1682 FX_BOOL CXFA_WidgetData::SetName(const CFX_WideString& wsName) { | |
1683 return m_pNode->SetCData(XFA_ATTRIBUTE_Name, wsName); | |
1684 } | |
1685 FX_BOOL CXFA_WidgetData::SetButtonHighlight(int32_t iButtonHighlight) { | |
1686 CXFA_Node* pUiChildNode = GetUIChild(); | |
1687 return pUiChildNode->SetEnum(XFA_ATTRIBUTE_Highlight, | |
1688 (XFA_ATTRIBUTEENUM)iButtonHighlight); | |
1689 } | |
1690 FX_BOOL CXFA_WidgetData::SetButtonRollover(const CFX_WideString& wsRollover, | |
1691 FX_BOOL bRichText) { | |
1692 return FALSE; | |
1693 } | |
1694 FX_BOOL CXFA_WidgetData::SetButtonDown(const CFX_WideString& wsDown, | |
1695 FX_BOOL bRichText) { | |
1696 return FALSE; | |
1697 } | |
1698 FX_BOOL CXFA_WidgetData::SetCheckButtonShape(int32_t iCheckButtonShape) { | |
1699 CXFA_Node* pUiChildNode = GetUIChild(); | |
1700 return pUiChildNode->SetEnum(XFA_ATTRIBUTE_Shape, | |
1701 (XFA_ATTRIBUTEENUM)iCheckButtonShape); | |
1702 } | |
1703 FX_BOOL CXFA_WidgetData::SetCheckButtonMark(int32_t iCheckButtonMark) { | |
1704 CXFA_Node* pUiChildNode = GetUIChild(); | |
1705 return pUiChildNode->SetEnum(XFA_ATTRIBUTE_Mark, | |
1706 (XFA_ATTRIBUTEENUM)iCheckButtonMark); | |
1707 } | |
1708 FX_BOOL CXFA_WidgetData::SetCheckButtonSize(FX_FLOAT fCheckButtonMark) { | |
1709 CXFA_Node* pUiChildNode = GetUIChild(); | |
1710 if (pUiChildNode) { | |
1711 CXFA_Measurement ms(fCheckButtonMark, XFA_UNIT_Pt); | |
1712 return pUiChildNode->SetMeasure(XFA_ATTRIBUTE_Size, ms); | |
1713 } | |
1714 return FALSE; | |
1715 } | |
1716 CXFA_Border CXFA_WidgetData::GetUIBorder(FX_BOOL bModified) { | |
1717 CXFA_Node* pUIChild = GetUIChild(); | |
1718 return CXFA_Border( | |
1719 pUIChild ? pUIChild->GetProperty(0, XFA_ELEMENT_Border, bModified) | |
1720 : nullptr); | |
1721 } | |
1722 CXFA_Margin CXFA_WidgetData::GetUIMargin(FX_BOOL bModified) { | |
1723 CXFA_Node* pUIChild = GetUIChild(); | |
1724 return CXFA_Margin( | |
1725 pUIChild ? pUIChild->GetProperty(0, XFA_ELEMENT_Margin, bModified) | |
1726 : nullptr); | |
1727 } | |
1728 void CXFA_WidgetData::GetUIMargin(CFX_RectF& rtUIMargin) { | |
1729 rtUIMargin.Reset(); | |
1730 CXFA_Margin mgUI = GetUIMargin(); | |
1731 if (!mgUI) { | |
1732 return; | |
1733 } | |
1734 CXFA_Border border = GetUIBorder(); | |
1735 if (border && border.GetPresence() != XFA_ATTRIBUTEENUM_Visible) { | |
1736 return; | |
1737 } | |
1738 FX_FLOAT fLeftInset, fTopInset, fRightInset, fBottomInset; | |
1739 FX_BOOL bLeft = mgUI.GetLeftInset(fLeftInset); | |
1740 FX_BOOL bTop = mgUI.GetTopInset(fTopInset); | |
1741 FX_BOOL bRight = mgUI.GetRightInset(fRightInset); | |
1742 FX_BOOL bBottom = mgUI.GetBottomInset(fBottomInset); | |
1743 if (border) { | |
1744 FX_BOOL bVisible = FALSE; | |
1745 FX_FLOAT fThickness = 0; | |
1746 border.Get3DStyle(bVisible, fThickness); | |
1747 if (!bLeft || !bTop || !bRight || !bBottom) { | |
1748 CXFA_StrokeArray strokes; | |
1749 border.GetStrokes(strokes); | |
1750 if (!bTop) { | |
1751 fTopInset = XFA_GetEdgeThickness(strokes, bVisible, 0); | |
1752 } | |
1753 if (!bRight) { | |
1754 fRightInset = XFA_GetEdgeThickness(strokes, bVisible, 1); | |
1755 } | |
1756 if (!bBottom) { | |
1757 fBottomInset = XFA_GetEdgeThickness(strokes, bVisible, 2); | |
1758 } | |
1759 if (!bLeft) { | |
1760 fLeftInset = XFA_GetEdgeThickness(strokes, bVisible, 3); | |
1761 } | |
1762 } | |
1763 } | |
1764 rtUIMargin.Set(fLeftInset, fTopInset, fRightInset, fBottomInset); | |
1765 } | |
1766 int32_t CXFA_WidgetData::GetButtonHighlight() { | |
1767 CXFA_Node* pUIChild = GetUIChild(); | |
1768 if (pUIChild) { | |
1769 return pUIChild->GetEnum(XFA_ATTRIBUTE_Highlight); | |
1770 } | |
1771 return XFA_GetAttributeDefaultValue_Enum( | |
1772 XFA_ELEMENT_Button, XFA_ATTRIBUTE_Highlight, XFA_XDPPACKET_Form); | |
1773 } | |
1774 FX_BOOL CXFA_WidgetData::GetButtonRollover(CFX_WideString& wsRollover, | |
1775 FX_BOOL& bRichText) { | |
1776 if (CXFA_Node* pItems = m_pNode->GetChild(0, XFA_ELEMENT_Items)) { | |
1777 CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild); | |
1778 while (pText) { | |
1779 CFX_WideStringC wsName; | |
1780 pText->TryCData(XFA_ATTRIBUTE_Name, wsName); | |
1781 if (wsName == FX_WSTRC(L"rollover")) { | |
1782 pText->TryContent(wsRollover); | |
1783 bRichText = pText->GetClassID() == XFA_ELEMENT_ExData; | |
1784 return !wsRollover.IsEmpty(); | |
1785 } | |
1786 pText = pText->GetNodeItem(XFA_NODEITEM_NextSibling); | |
1787 } | |
1788 } | |
1789 return FALSE; | |
1790 } | |
1791 FX_BOOL CXFA_WidgetData::GetButtonDown(CFX_WideString& wsDown, | |
1792 FX_BOOL& bRichText) { | |
1793 if (CXFA_Node* pItems = m_pNode->GetChild(0, XFA_ELEMENT_Items)) { | |
1794 CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild); | |
1795 while (pText) { | |
1796 CFX_WideStringC wsName; | |
1797 pText->TryCData(XFA_ATTRIBUTE_Name, wsName); | |
1798 if (wsName == FX_WSTRC(L"down")) { | |
1799 pText->TryContent(wsDown); | |
1800 bRichText = pText->GetClassID() == XFA_ELEMENT_ExData; | |
1801 return !wsDown.IsEmpty(); | |
1802 } | |
1803 pText = pText->GetNodeItem(XFA_NODEITEM_NextSibling); | |
1804 } | |
1805 } | |
1806 return FALSE; | |
1807 } | |
1808 int32_t CXFA_WidgetData::GetCheckButtonShape() { | |
1809 CXFA_Node* pUIChild = GetUIChild(); | |
1810 if (pUIChild) { | |
1811 return pUIChild->GetEnum(XFA_ATTRIBUTE_Shape); | |
1812 } | |
1813 return XFA_GetAttributeDefaultValue_Enum( | |
1814 XFA_ELEMENT_CheckButton, XFA_ATTRIBUTE_Shape, XFA_XDPPACKET_Form); | |
1815 } | |
1816 int32_t CXFA_WidgetData::GetCheckButtonMark() { | |
1817 CXFA_Node* pUIChild = GetUIChild(); | |
1818 if (pUIChild) { | |
1819 return pUIChild->GetEnum(XFA_ATTRIBUTE_Mark); | |
1820 } | |
1821 return XFA_GetAttributeDefaultValue_Enum( | |
1822 XFA_ELEMENT_CheckButton, XFA_ATTRIBUTE_Mark, XFA_XDPPACKET_Form); | |
1823 } | |
1824 FX_BOOL CXFA_WidgetData::IsRadioButton() { | |
1825 if (CXFA_Node* pParent = m_pNode->GetNodeItem(XFA_NODEITEM_Parent)) { | |
1826 return pParent->GetClassID() == XFA_ELEMENT_ExclGroup; | |
1827 } | |
1828 return FALSE; | |
1829 } | |
1830 FX_FLOAT CXFA_WidgetData::GetCheckButtonSize() { | |
1831 CXFA_Node* pUIChild = GetUIChild(); | |
1832 if (pUIChild) { | |
1833 return pUIChild->GetMeasure(XFA_ATTRIBUTE_Size).ToUnit(XFA_UNIT_Pt); | |
1834 } | |
1835 return XFA_GetAttributeDefaultValue_Measure( | |
1836 XFA_ELEMENT_CheckButton, XFA_ATTRIBUTE_Size, XFA_XDPPACKET_Form) | |
1837 .ToUnit(XFA_UNIT_Pt); | |
1838 } | |
1839 FX_BOOL CXFA_WidgetData::IsAllowNeutral() { | |
1840 CXFA_Node* pUIChild = GetUIChild(); | |
1841 if (pUIChild) { | |
1842 return pUIChild->GetBoolean(XFA_ATTRIBUTE_AllowNeutral); | |
1843 } | |
1844 return XFA_GetAttributeDefaultValue_Boolean( | |
1845 XFA_ELEMENT_CheckButton, XFA_ATTRIBUTE_AllowNeutral, XFA_XDPPACKET_Form); | |
1846 } | |
1847 XFA_CHECKSTATE CXFA_WidgetData::GetCheckState() { | |
1848 CFX_WideString wsValue = GetRawValue(); | |
1849 if (wsValue.IsEmpty()) { | |
1850 return XFA_CHECKSTATE_Off; | |
1851 } | |
1852 if (CXFA_Node* pItems = m_pNode->GetChild(0, XFA_ELEMENT_Items)) { | |
1853 CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild); | |
1854 int32_t i = 0; | |
1855 while (pText) { | |
1856 CFX_WideString wsContent; | |
1857 if (pText->TryContent(wsContent) && (wsContent == wsValue)) { | |
1858 return (XFA_CHECKSTATE)i; | |
1859 } | |
1860 i++; | |
1861 pText = pText->GetNodeItem(XFA_NODEITEM_NextSibling); | |
1862 } | |
1863 } | |
1864 return XFA_CHECKSTATE_Off; | |
1865 } | |
1866 void CXFA_WidgetData::SetCheckState(XFA_CHECKSTATE eCheckState, | |
1867 FX_BOOL bNotify) { | |
1868 CXFA_WidgetData exclGroup(GetExclGroupNode()); | |
1869 if (exclGroup) { | |
1870 CFX_WideString wsValue; | |
1871 if (eCheckState != XFA_CHECKSTATE_Off) { | |
1872 if (CXFA_Node* pItems = m_pNode->GetChild(0, XFA_ELEMENT_Items)) { | |
1873 CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild); | |
1874 if (pText) { | |
1875 pText->TryContent(wsValue); | |
1876 } | |
1877 } | |
1878 } | |
1879 CXFA_Node* pChild = | |
1880 exclGroup.GetNode()->GetNodeItem(XFA_NODEITEM_FirstChild); | |
1881 for (; pChild; pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { | |
1882 if (pChild->GetClassID() != XFA_ELEMENT_Field) { | |
1883 continue; | |
1884 } | |
1885 CXFA_Node* pItem = pChild->GetChild(0, XFA_ELEMENT_Items); | |
1886 if (!pItem) { | |
1887 continue; | |
1888 } | |
1889 CXFA_Node* pItemchild = pItem->GetNodeItem(XFA_NODEITEM_FirstChild); | |
1890 if (!pItemchild) { | |
1891 continue; | |
1892 } | |
1893 CFX_WideString text = pItemchild->GetContent(); | |
1894 CFX_WideString wsChildValue = text; | |
1895 if (wsValue != text) { | |
1896 pItemchild = pItemchild->GetNodeItem(XFA_NODEITEM_NextSibling); | |
1897 if (pItemchild) { | |
1898 wsChildValue = pItemchild->GetContent(); | |
1899 } else { | |
1900 wsChildValue.Empty(); | |
1901 } | |
1902 } | |
1903 CXFA_WidgetData ch(pChild); | |
1904 ch.SyncValue(wsChildValue, bNotify); | |
1905 } | |
1906 exclGroup.SyncValue(wsValue, bNotify); | |
1907 } else { | |
1908 CXFA_Node* pItems = m_pNode->GetChild(0, XFA_ELEMENT_Items); | |
1909 if (!pItems) { | |
1910 return; | |
1911 } | |
1912 int32_t i = -1; | |
1913 CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild); | |
1914 CFX_WideString wsContent; | |
1915 while (pText) { | |
1916 i++; | |
1917 if (i == eCheckState) { | |
1918 pText->TryContent(wsContent); | |
1919 break; | |
1920 } | |
1921 pText = pText->GetNodeItem(XFA_NODEITEM_NextSibling); | |
1922 } | |
1923 SyncValue(wsContent, bNotify); | |
1924 } | |
1925 } | |
1926 CXFA_Node* CXFA_WidgetData::GetExclGroupNode() { | |
1927 CXFA_Node* pExcl = ToNode(m_pNode->GetNodeItem(XFA_NODEITEM_Parent)); | |
1928 if (!pExcl || pExcl->GetClassID() != XFA_ELEMENT_ExclGroup) { | |
1929 return NULL; | |
1930 } | |
1931 return pExcl; | |
1932 } | |
1933 CXFA_Node* CXFA_WidgetData::GetSelectedMember() { | |
1934 CXFA_Node* pSelectedMember = NULL; | |
1935 CFX_WideString wsState = GetRawValue(); | |
1936 if (wsState.IsEmpty()) { | |
1937 return pSelectedMember; | |
1938 } | |
1939 for (CXFA_Node* pNode = ToNode(m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild)); | |
1940 pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { | |
1941 CXFA_WidgetData widgetData(pNode); | |
1942 if (widgetData.GetCheckState() == XFA_CHECKSTATE_On) { | |
1943 pSelectedMember = pNode; | |
1944 break; | |
1945 } | |
1946 } | |
1947 return pSelectedMember; | |
1948 } | |
1949 CXFA_Node* CXFA_WidgetData::SetSelectedMember(const CFX_WideStringC& wsName, | |
1950 FX_BOOL bNotify) { | |
1951 CXFA_Node* pSelectedMember = NULL; | |
1952 FX_DWORD nameHash = | |
1953 FX_HashCode_String_GetW(wsName.GetPtr(), wsName.GetLength()); | |
1954 for (CXFA_Node* pNode = ToNode(m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild)); | |
1955 pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { | |
1956 if (pNode->GetNameHash() == nameHash) { | |
1957 CXFA_WidgetData widgetData(pNode); | |
1958 widgetData.SetCheckState(XFA_CHECKSTATE_On, bNotify); | |
1959 pSelectedMember = pNode; | |
1960 break; | |
1961 } | |
1962 } | |
1963 return pSelectedMember; | |
1964 } | |
1965 void CXFA_WidgetData::SetSelectedMemberByValue(const CFX_WideStringC& wsValue, | |
1966 FX_BOOL bNotify, | |
1967 FX_BOOL bScriptModify, | |
1968 FX_BOOL bSyncData) { | |
1969 CFX_WideString wsExclGroup; | |
1970 for (CXFA_Node* pNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); pNode; | |
1971 pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { | |
1972 if (pNode->GetClassID() != XFA_ELEMENT_Field) { | |
1973 continue; | |
1974 } | |
1975 CXFA_Node* pItem = pNode->GetChild(0, XFA_ELEMENT_Items); | |
1976 if (!pItem) { | |
1977 continue; | |
1978 } | |
1979 CXFA_Node* pItemchild = pItem->GetNodeItem(XFA_NODEITEM_FirstChild); | |
1980 if (!pItemchild) { | |
1981 continue; | |
1982 } | |
1983 CFX_WideString wsChildValue = pItemchild->GetContent(); | |
1984 if (wsValue != wsChildValue) { | |
1985 pItemchild = pItemchild->GetNodeItem(XFA_NODEITEM_NextSibling); | |
1986 if (pItemchild) { | |
1987 wsChildValue = pItemchild->GetContent(); | |
1988 } else { | |
1989 wsChildValue.Empty(); | |
1990 } | |
1991 } else { | |
1992 wsExclGroup = wsValue; | |
1993 } | |
1994 pNode->SetContent(wsChildValue, wsChildValue, bNotify, bScriptModify, | |
1995 FALSE); | |
1996 } | |
1997 if (m_pNode) { | |
1998 m_pNode->SetContent(wsExclGroup, wsExclGroup, bNotify, bScriptModify, | |
1999 bSyncData); | |
2000 } | |
2001 } | |
2002 CXFA_Node* CXFA_WidgetData::GetExclGroupFirstMember() { | |
2003 CXFA_Node* pExcl = GetNode(); | |
2004 if (!pExcl) { | |
2005 return NULL; | |
2006 } | |
2007 CXFA_Node* pNode = pExcl->GetNodeItem(XFA_NODEITEM_FirstChild); | |
2008 while (pNode) { | |
2009 if (pNode->GetClassID() == XFA_ELEMENT_Field) { | |
2010 return pNode; | |
2011 } | |
2012 pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling); | |
2013 } | |
2014 return NULL; | |
2015 } | |
2016 CXFA_Node* CXFA_WidgetData::GetExclGroupNextMember(CXFA_Node* pNode) { | |
2017 if (!pNode) { | |
2018 return NULL; | |
2019 } | |
2020 CXFA_Node* pNodeField = pNode->GetNodeItem(XFA_NODEITEM_NextSibling); | |
2021 while (pNodeField) { | |
2022 if (pNodeField->GetClassID() == XFA_ELEMENT_Field) { | |
2023 return pNodeField; | |
2024 } | |
2025 pNodeField = pNodeField->GetNodeItem(XFA_NODEITEM_NextSibling); | |
2026 } | |
2027 return NULL; | |
2028 } | |
2029 int32_t CXFA_WidgetData::GetChoiceListCommitOn() { | |
2030 CXFA_Node* pUIChild = GetUIChild(); | |
2031 if (pUIChild) { | |
2032 return pUIChild->GetEnum(XFA_ATTRIBUTE_CommitOn); | |
2033 } | |
2034 return XFA_GetAttributeDefaultValue_Enum( | |
2035 XFA_ELEMENT_ChoiceList, XFA_ATTRIBUTE_CommitOn, XFA_XDPPACKET_Form); | |
2036 } | |
2037 FX_BOOL CXFA_WidgetData::IsChoiceListAllowTextEntry() { | |
2038 CXFA_Node* pUIChild = GetUIChild(); | |
2039 if (pUIChild) { | |
2040 return pUIChild->GetBoolean(XFA_ATTRIBUTE_TextEntry); | |
2041 } | |
2042 return XFA_GetAttributeDefaultValue_Boolean( | |
2043 XFA_ELEMENT_ChoiceList, XFA_ATTRIBUTE_TextEntry, XFA_XDPPACKET_Form); | |
2044 } | |
2045 int32_t CXFA_WidgetData::GetChoiceListOpen() { | |
2046 CXFA_Node* pUIChild = GetUIChild(); | |
2047 if (pUIChild) { | |
2048 return pUIChild->GetEnum(XFA_ATTRIBUTE_Open); | |
2049 } | |
2050 return XFA_GetAttributeDefaultValue_Enum( | |
2051 XFA_ELEMENT_ChoiceList, XFA_ATTRIBUTE_Open, XFA_XDPPACKET_Form); | |
2052 } | |
2053 FX_BOOL CXFA_WidgetData::IsListBox() { | |
2054 int32_t iOpenMode = GetChoiceListOpen(); | |
2055 return (iOpenMode == XFA_ATTRIBUTEENUM_Always || | |
2056 iOpenMode == XFA_ATTRIBUTEENUM_MultiSelect); | |
2057 } | |
2058 int32_t CXFA_WidgetData::CountChoiceListItems(FX_BOOL bSaveValue) { | |
2059 CXFA_NodeArray pItems; | |
2060 CXFA_Node* pItem = NULL; | |
2061 int32_t iCount = 0; | |
2062 CXFA_Node* pNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | |
2063 for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { | |
2064 if (pNode->GetClassID() != XFA_ELEMENT_Items) { | |
2065 continue; | |
2066 } | |
2067 iCount++; | |
2068 pItems.Add(pNode); | |
2069 if (iCount == 2) { | |
2070 break; | |
2071 } | |
2072 } | |
2073 if (iCount == 0) { | |
2074 return 0; | |
2075 } | |
2076 pItem = pItems[0]; | |
2077 if (iCount > 1) { | |
2078 FX_BOOL bItemOneHasSave = pItems[0]->GetBoolean(XFA_ATTRIBUTE_Save); | |
2079 FX_BOOL bItemTwoHasSave = pItems[1]->GetBoolean(XFA_ATTRIBUTE_Save); | |
2080 if (bItemOneHasSave != bItemTwoHasSave && bSaveValue == bItemTwoHasSave) { | |
2081 pItem = pItems[1]; | |
2082 } | |
2083 } | |
2084 pItems.RemoveAll(); | |
2085 return pItem->CountChildren(XFA_ELEMENT_UNKNOWN); | |
2086 } | |
2087 FX_BOOL CXFA_WidgetData::GetChoiceListItem(CFX_WideString& wsText, | |
2088 int32_t nIndex, | |
2089 FX_BOOL bSaveValue) { | |
2090 wsText.Empty(); | |
2091 CXFA_NodeArray pItemsArray; | |
2092 CXFA_Node* pItems = NULL; | |
2093 int32_t iCount = 0; | |
2094 CXFA_Node* pNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | |
2095 for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { | |
2096 if (pNode->GetClassID() != XFA_ELEMENT_Items) { | |
2097 continue; | |
2098 } | |
2099 iCount++; | |
2100 pItemsArray.Add(pNode); | |
2101 if (iCount == 2) { | |
2102 break; | |
2103 } | |
2104 } | |
2105 if (iCount == 0) { | |
2106 return FALSE; | |
2107 } | |
2108 pItems = pItemsArray[0]; | |
2109 if (iCount > 1) { | |
2110 FX_BOOL bItemOneHasSave = pItemsArray[0]->GetBoolean(XFA_ATTRIBUTE_Save); | |
2111 FX_BOOL bItemTwoHasSave = pItemsArray[1]->GetBoolean(XFA_ATTRIBUTE_Save); | |
2112 if (bItemOneHasSave != bItemTwoHasSave && bSaveValue == bItemTwoHasSave) { | |
2113 pItems = pItemsArray[1]; | |
2114 } | |
2115 } | |
2116 if (pItems) { | |
2117 CXFA_Node* pItem = pItems->GetChild(nIndex, XFA_ELEMENT_UNKNOWN); | |
2118 if (pItem) { | |
2119 pItem->TryContent(wsText); | |
2120 return TRUE; | |
2121 } | |
2122 } | |
2123 return FALSE; | |
2124 } | |
2125 void CXFA_WidgetData::GetChoiceListItems(CFX_WideStringArray& wsTextArray, | |
2126 FX_BOOL bSaveValue) { | |
2127 CXFA_NodeArray pItems; | |
2128 CXFA_Node* pItem = NULL; | |
2129 int32_t iCount = 0; | |
2130 CXFA_Node* pNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | |
2131 for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { | |
2132 if (pNode->GetClassID() != XFA_ELEMENT_Items) { | |
2133 continue; | |
2134 } | |
2135 iCount++; | |
2136 pItems.Add(pNode); | |
2137 if (iCount == 2) { | |
2138 break; | |
2139 } | |
2140 } | |
2141 if (iCount == 0) { | |
2142 return; | |
2143 } | |
2144 pItem = pItems[0]; | |
2145 if (iCount > 1) { | |
2146 FX_BOOL bItemOneHasSave = pItems[0]->GetBoolean(XFA_ATTRIBUTE_Save); | |
2147 FX_BOOL bItemTwoHasSave = pItems[1]->GetBoolean(XFA_ATTRIBUTE_Save); | |
2148 if (bItemOneHasSave != bItemTwoHasSave && bSaveValue == bItemTwoHasSave) { | |
2149 pItem = pItems[1]; | |
2150 } | |
2151 } | |
2152 pItems.RemoveAll(); | |
2153 pNode = pItem->GetNodeItem(XFA_NODEITEM_FirstChild); | |
2154 for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { | |
2155 pNode->TryContent(wsTextArray.Add()); | |
2156 } | |
2157 } | |
2158 int32_t CXFA_WidgetData::CountSelectedItems() { | |
2159 CFX_WideStringArray wsValueArray; | |
2160 GetSelectedItemsValue(wsValueArray); | |
2161 if (IsListBox() || !IsChoiceListAllowTextEntry()) { | |
2162 return wsValueArray.GetSize(); | |
2163 } | |
2164 int32_t iSelected = 0; | |
2165 CFX_WideStringArray wsSaveTextArray; | |
2166 GetChoiceListItems(wsSaveTextArray, TRUE); | |
2167 int32_t iValues = wsValueArray.GetSize(); | |
2168 for (int32_t i = 0; i < iValues; i++) { | |
2169 int32_t iSaves = wsSaveTextArray.GetSize(); | |
2170 for (int32_t j = 0; j < iSaves; j++) { | |
2171 if (wsValueArray[i] == wsSaveTextArray[j]) { | |
2172 iSelected++; | |
2173 break; | |
2174 } | |
2175 } | |
2176 } | |
2177 return iSelected; | |
2178 } | |
2179 int32_t CXFA_WidgetData::GetSelectedItem(int32_t nIndex) { | |
2180 CFX_WideStringArray wsValueArray; | |
2181 GetSelectedItemsValue(wsValueArray); | |
2182 CFX_WideStringArray wsSaveTextArray; | |
2183 GetChoiceListItems(wsSaveTextArray, TRUE); | |
2184 int32_t iSaves = wsSaveTextArray.GetSize(); | |
2185 for (int32_t j = 0; j < iSaves; j++) { | |
2186 if (wsValueArray[nIndex] == wsSaveTextArray[j]) { | |
2187 return j; | |
2188 } | |
2189 } | |
2190 return -1; | |
2191 } | |
2192 void CXFA_WidgetData::GetSelectedItems(CFX_Int32Array& iSelArray) { | |
2193 CFX_WideStringArray wsValueArray; | |
2194 GetSelectedItemsValue(wsValueArray); | |
2195 int32_t iValues = wsValueArray.GetSize(); | |
2196 if (iValues < 1) { | |
2197 return; | |
2198 } | |
2199 CFX_WideStringArray wsSaveTextArray; | |
2200 GetChoiceListItems(wsSaveTextArray, TRUE); | |
2201 int32_t iSaves = wsSaveTextArray.GetSize(); | |
2202 for (int32_t i = 0; i < iValues; i++) { | |
2203 for (int32_t j = 0; j < iSaves; j++) { | |
2204 if (wsValueArray[i] == wsSaveTextArray[j]) { | |
2205 iSelArray.Add(j); | |
2206 break; | |
2207 } | |
2208 } | |
2209 } | |
2210 } | |
2211 void CXFA_WidgetData::GetSelectedItemsValue( | |
2212 CFX_WideStringArray& wsSelTextArray) { | |
2213 CFX_WideString wsValue = GetRawValue(); | |
2214 if (GetChoiceListOpen() == XFA_ATTRIBUTEENUM_MultiSelect) { | |
2215 if (!wsValue.IsEmpty()) { | |
2216 int32_t iStart = 0; | |
2217 int32_t iLength = wsValue.GetLength(); | |
2218 int32_t iEnd = wsValue.Find(L'\n', iStart); | |
2219 iEnd = (iEnd == -1) ? iLength : iEnd; | |
2220 while (iEnd >= iStart) { | |
2221 wsSelTextArray.Add(wsValue.Mid(iStart, iEnd - iStart)); | |
2222 iStart = iEnd + 1; | |
2223 if (iStart >= iLength) { | |
2224 break; | |
2225 } | |
2226 iEnd = wsValue.Find(L'\n', iStart); | |
2227 if (iEnd < 0) { | |
2228 wsSelTextArray.Add(wsValue.Mid(iStart, iLength - iStart)); | |
2229 } | |
2230 } | |
2231 } | |
2232 } else { | |
2233 wsSelTextArray.Add(wsValue); | |
2234 } | |
2235 } | |
2236 FX_BOOL CXFA_WidgetData::GetItemState(int32_t nIndex) { | |
2237 if (nIndex < 0) { | |
2238 return FALSE; | |
2239 } | |
2240 CFX_WideStringArray wsSaveTextArray; | |
2241 GetChoiceListItems(wsSaveTextArray, TRUE); | |
2242 if (wsSaveTextArray.GetSize() <= nIndex) { | |
2243 return FALSE; | |
2244 } | |
2245 CFX_WideStringArray wsValueArray; | |
2246 GetSelectedItemsValue(wsValueArray); | |
2247 int32_t iValues = wsValueArray.GetSize(); | |
2248 for (int32_t j = 0; j < iValues; j++) { | |
2249 if (wsValueArray[j] == wsSaveTextArray[nIndex]) { | |
2250 return TRUE; | |
2251 } | |
2252 } | |
2253 return FALSE; | |
2254 } | |
2255 void CXFA_WidgetData::SetItemState(int32_t nIndex, | |
2256 FX_BOOL bSelected, | |
2257 FX_BOOL bNotify, | |
2258 FX_BOOL bScriptModify, | |
2259 FX_BOOL bSyncData) { | |
2260 if (nIndex < 0) { | |
2261 return; | |
2262 } | |
2263 CFX_WideStringArray wsSaveTextArray; | |
2264 GetChoiceListItems(wsSaveTextArray, TRUE); | |
2265 if (wsSaveTextArray.GetSize() <= nIndex) { | |
2266 return; | |
2267 } | |
2268 int32_t iSel = -1; | |
2269 CFX_WideStringArray wsValueArray; | |
2270 GetSelectedItemsValue(wsValueArray); | |
2271 int32_t iValues = wsValueArray.GetSize(); | |
2272 for (int32_t j = 0; j < iValues; j++) { | |
2273 if (wsValueArray[j] == wsSaveTextArray[nIndex]) { | |
2274 iSel = j; | |
2275 break; | |
2276 } | |
2277 } | |
2278 if (GetChoiceListOpen() == XFA_ATTRIBUTEENUM_MultiSelect) { | |
2279 if (bSelected) { | |
2280 if (iSel < 0) { | |
2281 CFX_WideString wsValue = GetRawValue(); | |
2282 if (!wsValue.IsEmpty()) { | |
2283 wsValue += L"\n"; | |
2284 } | |
2285 wsValue += wsSaveTextArray[nIndex]; | |
2286 m_pNode->SetContent(wsValue, wsValue, bNotify, bScriptModify, | |
2287 bSyncData); | |
2288 } | |
2289 } else if (iSel >= 0) { | |
2290 CFX_Int32Array iSelArray; | |
2291 GetSelectedItems(iSelArray); | |
2292 for (int32_t i = 0; i < iSelArray.GetSize(); i++) { | |
2293 if (iSelArray[i] == nIndex) { | |
2294 iSelArray.RemoveAt(i); | |
2295 break; | |
2296 } | |
2297 } | |
2298 SetSelectdItems(iSelArray, bNotify, bScriptModify, bSyncData); | |
2299 } | |
2300 } else { | |
2301 if (bSelected) { | |
2302 if (iSel < 0) { | |
2303 CFX_WideString wsSaveText = wsSaveTextArray[nIndex]; | |
2304 CFX_WideString wsFormatText(wsSaveText); | |
2305 GetFormatDataValue(wsSaveText, wsFormatText); | |
2306 m_pNode->SetContent(wsSaveText, wsFormatText, bNotify, bScriptModify, | |
2307 bSyncData); | |
2308 } | |
2309 } else if (iSel >= 0) { | |
2310 m_pNode->SetContent(CFX_WideString(), CFX_WideString(), bNotify, | |
2311 bScriptModify, bSyncData); | |
2312 } | |
2313 } | |
2314 } | |
2315 void CXFA_WidgetData::SetSelectdItems(CFX_Int32Array& iSelArray, | |
2316 FX_BOOL bNotify, | |
2317 FX_BOOL bScriptModify, | |
2318 FX_BOOL bSyncData) { | |
2319 CFX_WideString wsValue; | |
2320 int32_t iSize = iSelArray.GetSize(); | |
2321 if (iSize >= 1) { | |
2322 CFX_WideStringArray wsSaveTextArray; | |
2323 GetChoiceListItems(wsSaveTextArray, TRUE); | |
2324 CFX_WideString wsItemValue; | |
2325 for (int32_t i = 0; i < iSize; i++) { | |
2326 wsItemValue = (iSize == 1) | |
2327 ? wsSaveTextArray[iSelArray[i]] | |
2328 : wsSaveTextArray[iSelArray[i]] + FX_WSTRC(L"\n"); | |
2329 wsValue += wsItemValue; | |
2330 } | |
2331 } | |
2332 CFX_WideString wsFormat(wsValue); | |
2333 if (GetChoiceListOpen() != XFA_ATTRIBUTEENUM_MultiSelect) { | |
2334 GetFormatDataValue(wsValue, wsFormat); | |
2335 } | |
2336 m_pNode->SetContent(wsValue, wsFormat, bNotify, bScriptModify, bSyncData); | |
2337 } | |
2338 void CXFA_WidgetData::ClearAllSelections() { | |
2339 CXFA_Node* pBind = m_pNode->GetBindData(); | |
2340 if (pBind && GetChoiceListOpen() == XFA_ATTRIBUTEENUM_MultiSelect) { | |
2341 while (CXFA_Node* pChildNode = | |
2342 pBind->GetNodeItem(XFA_NODEITEM_FirstChild)) { | |
2343 pBind->RemoveChild(pChildNode); | |
2344 } | |
2345 } else { | |
2346 SyncValue(CFX_WideString(), FALSE); | |
2347 } | |
2348 } | |
2349 void CXFA_WidgetData::InsertItem(const CFX_WideString& wsLabel, | |
2350 const CFX_WideString& wsValue, | |
2351 int32_t nIndex, | |
2352 FX_BOOL bNotify) { | |
2353 CFX_WideString wsNewValue(wsValue); | |
2354 if (wsNewValue.IsEmpty()) { | |
2355 wsNewValue = wsLabel; | |
2356 } | |
2357 CXFA_NodeArray listitems; | |
2358 int32_t iCount = 0; | |
2359 CXFA_Node* pItemNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | |
2360 for (; pItemNode; | |
2361 pItemNode = pItemNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { | |
2362 if (pItemNode->GetClassID() != XFA_ELEMENT_Items) { | |
2363 continue; | |
2364 } | |
2365 listitems.Add(pItemNode); | |
2366 iCount++; | |
2367 } | |
2368 if (iCount < 1) { | |
2369 CXFA_Node* pItems = m_pNode->CreateSamePacketNode(XFA_ELEMENT_Items); | |
2370 m_pNode->InsertChild(-1, pItems); | |
2371 InsertListTextItem(pItems, wsLabel, nIndex); | |
2372 CXFA_Node* pSaveItems = m_pNode->CreateSamePacketNode(XFA_ELEMENT_Items); | |
2373 m_pNode->InsertChild(-1, pSaveItems); | |
2374 pSaveItems->SetBoolean(XFA_ATTRIBUTE_Save, TRUE); | |
2375 InsertListTextItem(pSaveItems, wsNewValue, nIndex); | |
2376 } else if (iCount > 1) { | |
2377 for (int32_t i = 0; i < 2; i++) { | |
2378 CXFA_Node* pNode = listitems[i]; | |
2379 FX_BOOL bHasSave = pNode->GetBoolean(XFA_ATTRIBUTE_Save); | |
2380 if (bHasSave) { | |
2381 InsertListTextItem(pNode, wsNewValue, nIndex); | |
2382 } else { | |
2383 InsertListTextItem(pNode, wsLabel, nIndex); | |
2384 } | |
2385 } | |
2386 } else { | |
2387 CXFA_Node* pNode = listitems[0]; | |
2388 pNode->SetBoolean(XFA_ATTRIBUTE_Save, FALSE); | |
2389 pNode->SetEnum(XFA_ATTRIBUTE_Presence, XFA_ATTRIBUTEENUM_Visible); | |
2390 CXFA_Node* pSaveItems = m_pNode->CreateSamePacketNode(XFA_ELEMENT_Items); | |
2391 m_pNode->InsertChild(-1, pSaveItems); | |
2392 pSaveItems->SetBoolean(XFA_ATTRIBUTE_Save, TRUE); | |
2393 pSaveItems->SetEnum(XFA_ATTRIBUTE_Presence, XFA_ATTRIBUTEENUM_Hidden); | |
2394 listitems.RemoveAll(); | |
2395 CXFA_Node* pListNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | |
2396 int32_t i = 0; | |
2397 while (pListNode) { | |
2398 CFX_WideString wsOldValue; | |
2399 pListNode->TryContent(wsOldValue); | |
2400 InsertListTextItem(pSaveItems, wsOldValue, i); | |
2401 i++; | |
2402 pListNode = pListNode->GetNodeItem(XFA_NODEITEM_NextSibling); | |
2403 } | |
2404 InsertListTextItem(pNode, wsLabel, nIndex); | |
2405 InsertListTextItem(pSaveItems, wsNewValue, nIndex); | |
2406 } | |
2407 if (!bNotify) { | |
2408 return; | |
2409 } | |
2410 m_pNode->GetDocument()->GetNotify()->OnWidgetDataEvent( | |
2411 this, XFA_WIDGETEVENT_ListItemAdded, (void*)(const FX_WCHAR*)wsLabel, | |
2412 (void*)(const FX_WCHAR*)wsValue, (void*)(uintptr_t)nIndex); | |
2413 } | |
2414 void CXFA_WidgetData::GetItemLabel(const CFX_WideStringC& wsValue, | |
2415 CFX_WideString& wsLabel) { | |
2416 int32_t iCount = 0; | |
2417 CXFA_NodeArray listitems; | |
2418 CXFA_Node* pItems = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | |
2419 for (; pItems; pItems = pItems->GetNodeItem(XFA_NODEITEM_NextSibling)) { | |
2420 if (pItems->GetClassID() != XFA_ELEMENT_Items) { | |
2421 continue; | |
2422 } | |
2423 iCount++; | |
2424 listitems.Add(pItems); | |
2425 } | |
2426 if (iCount <= 1) { | |
2427 wsLabel = wsValue; | |
2428 } else { | |
2429 CXFA_Node* pLabelItems = listitems[0]; | |
2430 FX_BOOL bSave = pLabelItems->GetBoolean(XFA_ATTRIBUTE_Save); | |
2431 CXFA_Node* pSaveItems = NULL; | |
2432 if (bSave) { | |
2433 pSaveItems = pLabelItems; | |
2434 pLabelItems = listitems[1]; | |
2435 } else { | |
2436 pSaveItems = listitems[1]; | |
2437 } | |
2438 iCount = 0; | |
2439 int32_t iSearch = -1; | |
2440 CFX_WideString wsContent; | |
2441 CXFA_Node* pChildItem = pSaveItems->GetNodeItem(XFA_NODEITEM_FirstChild); | |
2442 for (; pChildItem; | |
2443 pChildItem = pChildItem->GetNodeItem(XFA_NODEITEM_NextSibling)) { | |
2444 pChildItem->TryContent(wsContent); | |
2445 if (wsContent == wsValue) { | |
2446 iSearch = iCount; | |
2447 break; | |
2448 } | |
2449 iCount++; | |
2450 } | |
2451 if (iSearch < 0) { | |
2452 return; | |
2453 } | |
2454 if (CXFA_Node* pText = | |
2455 pLabelItems->GetChild(iSearch, XFA_ELEMENT_UNKNOWN)) { | |
2456 pText->TryContent(wsLabel); | |
2457 } | |
2458 } | |
2459 } | |
2460 void CXFA_WidgetData::GetItemValue(const CFX_WideStringC& wsLabel, | |
2461 CFX_WideString& wsValue) { | |
2462 int32_t iCount = 0; | |
2463 CXFA_NodeArray listitems; | |
2464 CXFA_Node* pItems = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | |
2465 for (; pItems; pItems = pItems->GetNodeItem(XFA_NODEITEM_NextSibling)) { | |
2466 if (pItems->GetClassID() != XFA_ELEMENT_Items) { | |
2467 continue; | |
2468 } | |
2469 iCount++; | |
2470 listitems.Add(pItems); | |
2471 } | |
2472 if (iCount <= 1) { | |
2473 wsValue = wsLabel; | |
2474 } else { | |
2475 CXFA_Node* pLabelItems = listitems[0]; | |
2476 FX_BOOL bSave = pLabelItems->GetBoolean(XFA_ATTRIBUTE_Save); | |
2477 CXFA_Node* pSaveItems = NULL; | |
2478 if (bSave) { | |
2479 pSaveItems = pLabelItems; | |
2480 pLabelItems = listitems[1]; | |
2481 } else { | |
2482 pSaveItems = listitems[1]; | |
2483 } | |
2484 iCount = 0; | |
2485 int32_t iSearch = -1; | |
2486 CFX_WideString wsContent; | |
2487 CXFA_Node* pChildItem = pLabelItems->GetNodeItem(XFA_NODEITEM_FirstChild); | |
2488 for (; pChildItem; | |
2489 pChildItem = pChildItem->GetNodeItem(XFA_NODEITEM_NextSibling)) { | |
2490 pChildItem->TryContent(wsContent); | |
2491 if (wsContent == wsLabel) { | |
2492 iSearch = iCount; | |
2493 break; | |
2494 } | |
2495 iCount++; | |
2496 } | |
2497 if (iSearch < 0) { | |
2498 return; | |
2499 } | |
2500 if (CXFA_Node* pText = pSaveItems->GetChild(iSearch, XFA_ELEMENT_UNKNOWN)) { | |
2501 pText->TryContent(wsValue); | |
2502 } | |
2503 } | |
2504 } | |
2505 FX_BOOL CXFA_WidgetData::DeleteItem(int32_t nIndex, | |
2506 FX_BOOL bNotify, | |
2507 FX_BOOL bScriptModify, | |
2508 FX_BOOL bSyncData) { | |
2509 FX_BOOL bSetValue = FALSE; | |
2510 CXFA_Node* pItems = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | |
2511 for (; pItems; pItems = pItems->GetNodeItem(XFA_NODEITEM_NextSibling)) { | |
2512 if (pItems->GetClassID() != XFA_ELEMENT_Items) { | |
2513 continue; | |
2514 } | |
2515 if (nIndex < 0) { | |
2516 while (CXFA_Node* pNode = pItems->GetNodeItem(XFA_NODEITEM_FirstChild)) { | |
2517 pItems->RemoveChild(pNode); | |
2518 } | |
2519 } else { | |
2520 if (!bSetValue && pItems->GetBoolean(XFA_ATTRIBUTE_Save)) { | |
2521 SetItemState(nIndex, FALSE, TRUE, bScriptModify, bSyncData); | |
2522 bSetValue = TRUE; | |
2523 } | |
2524 int32_t i = 0; | |
2525 CXFA_Node* pNode = pItems->GetNodeItem(XFA_NODEITEM_FirstChild); | |
2526 while (pNode) { | |
2527 if (i == nIndex) { | |
2528 pItems->RemoveChild(pNode); | |
2529 break; | |
2530 } | |
2531 i++; | |
2532 pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling); | |
2533 } | |
2534 } | |
2535 } | |
2536 if (!bNotify) { | |
2537 return TRUE; | |
2538 } | |
2539 m_pNode->GetDocument()->GetNotify()->OnWidgetDataEvent( | |
2540 this, XFA_WIDGETEVENT_ListItemRemoved, (void*)(uintptr_t)nIndex); | |
2541 return TRUE; | |
2542 } | |
2543 int32_t CXFA_WidgetData::GetHorizontalScrollPolicy() { | |
2544 CXFA_Node* pUIChild = GetUIChild(); | |
2545 if (pUIChild) { | |
2546 return pUIChild->GetEnum(XFA_ATTRIBUTE_HScrollPolicy); | |
2547 } | |
2548 return XFA_ATTRIBUTEENUM_Auto; | |
2549 } | |
2550 int32_t CXFA_WidgetData::GetNumberOfCells() { | |
2551 CXFA_Node* pUIChild = GetUIChild(); | |
2552 if (!pUIChild) { | |
2553 return -1; | |
2554 } | |
2555 if (CXFA_Node* pNode = pUIChild->GetChild(0, XFA_ELEMENT_Comb)) { | |
2556 return pNode->GetInteger(XFA_ATTRIBUTE_NumberOfCells); | |
2557 } | |
2558 return -1; | |
2559 } | |
2560 FX_BOOL CXFA_WidgetData::IsDateTimeEditUsePicker() { | |
2561 return TRUE; | |
2562 } | |
2563 CFX_WideString CXFA_WidgetData::GetBarcodeType() { | |
2564 CXFA_Node* pUIChild = GetUIChild(); | |
2565 return pUIChild ? pUIChild->GetCData(XFA_ATTRIBUTE_Type) : NULL; | |
2566 } | |
2567 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_CharEncoding(int32_t& val) { | |
2568 CXFA_Node* pUIChild = GetUIChild(); | |
2569 CFX_WideString wsCharEncoding; | |
2570 if (pUIChild->TryCData(XFA_ATTRIBUTE_CharEncoding, wsCharEncoding)) { | |
2571 if (wsCharEncoding.CompareNoCase(L"UTF-16")) { | |
2572 val = CHAR_ENCODING_UNICODE; | |
2573 return TRUE; | |
2574 } else if (wsCharEncoding.CompareNoCase(L"UTF-8")) { | |
2575 val = CHAR_ENCODING_UTF8; | |
2576 return TRUE; | |
2577 } | |
2578 } | |
2579 return FALSE; | |
2580 } | |
2581 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_Checksum(int32_t& val) { | |
2582 CXFA_Node* pUIChild = GetUIChild(); | |
2583 XFA_ATTRIBUTEENUM eChecksum; | |
2584 if (pUIChild->TryEnum(XFA_ATTRIBUTE_Checksum, eChecksum)) { | |
2585 switch (eChecksum) { | |
2586 case XFA_ATTRIBUTEENUM_None: | |
2587 val = 0; | |
2588 return TRUE; | |
2589 case XFA_ATTRIBUTEENUM_Auto: | |
2590 val = 1; | |
2591 return TRUE; | |
2592 case XFA_ATTRIBUTEENUM_1mod10: | |
2593 break; | |
2594 case XFA_ATTRIBUTEENUM_1mod10_1mod11: | |
2595 break; | |
2596 case XFA_ATTRIBUTEENUM_2mod10: | |
2597 break; | |
2598 default: | |
2599 break; | |
2600 } | |
2601 } | |
2602 return FALSE; | |
2603 } | |
2604 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_DataLength(int32_t& val) { | |
2605 CXFA_Node* pUIChild = GetUIChild(); | |
2606 CFX_WideString wsDataLength; | |
2607 if (pUIChild->TryCData(XFA_ATTRIBUTE_DataLength, wsDataLength)) { | |
2608 val = FXSYS_wtoi(wsDataLength); | |
2609 return TRUE; | |
2610 } | |
2611 return FALSE; | |
2612 } | |
2613 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_StartChar(FX_CHAR& val) { | |
2614 CXFA_Node* pUIChild = GetUIChild(); | |
2615 CFX_WideStringC wsStartEndChar; | |
2616 if (pUIChild->TryCData(XFA_ATTRIBUTE_StartChar, wsStartEndChar)) { | |
2617 if (wsStartEndChar.GetLength()) { | |
2618 val = (FX_CHAR)wsStartEndChar.GetAt(0); | |
2619 return TRUE; | |
2620 } | |
2621 } | |
2622 return FALSE; | |
2623 } | |
2624 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_EndChar(FX_CHAR& val) { | |
2625 CXFA_Node* pUIChild = GetUIChild(); | |
2626 CFX_WideStringC wsStartEndChar; | |
2627 if (pUIChild->TryCData(XFA_ATTRIBUTE_EndChar, wsStartEndChar)) { | |
2628 if (wsStartEndChar.GetLength()) { | |
2629 val = (FX_CHAR)wsStartEndChar.GetAt(0); | |
2630 return TRUE; | |
2631 } | |
2632 } | |
2633 return FALSE; | |
2634 } | |
2635 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_ECLevel(int32_t& val) { | |
2636 CXFA_Node* pUIChild = GetUIChild(); | |
2637 CFX_WideString wsECLevel; | |
2638 if (pUIChild->TryCData(XFA_ATTRIBUTE_ErrorCorrectionLevel, wsECLevel)) { | |
2639 val = FXSYS_wtoi(wsECLevel); | |
2640 return TRUE; | |
2641 } | |
2642 return FALSE; | |
2643 } | |
2644 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_ModuleWidth(int32_t& val) { | |
2645 CXFA_Node* pUIChild = GetUIChild(); | |
2646 CXFA_Measurement mModuleWidthHeight; | |
2647 if (pUIChild->TryMeasure(XFA_ATTRIBUTE_ModuleWidth, mModuleWidthHeight)) { | |
2648 val = (int32_t)mModuleWidthHeight.ToUnit(XFA_UNIT_Pt); | |
2649 return TRUE; | |
2650 } | |
2651 return FALSE; | |
2652 } | |
2653 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_ModuleHeight(int32_t& val) { | |
2654 CXFA_Node* pUIChild = GetUIChild(); | |
2655 CXFA_Measurement mModuleWidthHeight; | |
2656 if (pUIChild->TryMeasure(XFA_ATTRIBUTE_ModuleHeight, mModuleWidthHeight)) { | |
2657 val = (int32_t)mModuleWidthHeight.ToUnit(XFA_UNIT_Pt); | |
2658 return TRUE; | |
2659 } | |
2660 return FALSE; | |
2661 } | |
2662 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_PrintChecksum(FX_BOOL& val) { | |
2663 CXFA_Node* pUIChild = GetUIChild(); | |
2664 FX_BOOL bPrintCheckDigit; | |
2665 if (pUIChild->TryBoolean(XFA_ATTRIBUTE_PrintCheckDigit, bPrintCheckDigit)) { | |
2666 val = bPrintCheckDigit; | |
2667 return TRUE; | |
2668 } | |
2669 return FALSE; | |
2670 } | |
2671 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_TextLocation(int32_t& val) { | |
2672 CXFA_Node* pUIChild = GetUIChild(); | |
2673 XFA_ATTRIBUTEENUM eTextLocation; | |
2674 if (pUIChild->TryEnum(XFA_ATTRIBUTE_TextLocation, eTextLocation)) { | |
2675 switch (eTextLocation) { | |
2676 case XFA_ATTRIBUTEENUM_None: | |
2677 val = BC_TEXT_LOC_NONE; | |
2678 return TRUE; | |
2679 case XFA_ATTRIBUTEENUM_Above: | |
2680 val = BC_TEXT_LOC_ABOVE; | |
2681 return TRUE; | |
2682 case XFA_ATTRIBUTEENUM_Below: | |
2683 val = BC_TEXT_LOC_BELOW; | |
2684 return TRUE; | |
2685 case XFA_ATTRIBUTEENUM_AboveEmbedded: | |
2686 val = BC_TEXT_LOC_ABOVEEMBED; | |
2687 return TRUE; | |
2688 case XFA_ATTRIBUTEENUM_BelowEmbedded: | |
2689 val = BC_TEXT_LOC_BELOWEMBED; | |
2690 return TRUE; | |
2691 default: | |
2692 break; | |
2693 } | |
2694 } | |
2695 return FALSE; | |
2696 } | |
2697 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_Truncate(FX_BOOL& val) { | |
2698 CXFA_Node* pUIChild = GetUIChild(); | |
2699 FX_BOOL bTruncate; | |
2700 if (pUIChild->TryBoolean(XFA_ATTRIBUTE_Truncate, bTruncate)) { | |
2701 val = bTruncate; | |
2702 return TRUE; | |
2703 } | |
2704 return FALSE; | |
2705 } | |
2706 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_WideNarrowRatio(FX_FLOAT& val) { | |
2707 CXFA_Node* pUIChild = GetUIChild(); | |
2708 CFX_WideString wsWideNarrowRatio; | |
2709 if (pUIChild->TryCData(XFA_ATTRIBUTE_WideNarrowRatio, wsWideNarrowRatio)) { | |
2710 FX_STRSIZE ptPos = wsWideNarrowRatio.Find(':'); | |
2711 FX_FLOAT fRatio = 0; | |
2712 if (ptPos >= 0) { | |
2713 fRatio = (FX_FLOAT)FXSYS_wtoi(wsWideNarrowRatio); | |
2714 } else { | |
2715 int32_t fA, fB; | |
2716 fA = FXSYS_wtoi(wsWideNarrowRatio.Left(ptPos)); | |
2717 fB = FXSYS_wtoi(wsWideNarrowRatio.Mid(ptPos + 1)); | |
2718 if (fB) { | |
2719 fRatio = (FX_FLOAT)fA / fB; | |
2720 } | |
2721 } | |
2722 val = fRatio; | |
2723 return TRUE; | |
2724 } | |
2725 return FALSE; | |
2726 } | |
2727 void CXFA_WidgetData::GetPasswordChar(CFX_WideString& wsPassWord) { | |
2728 CXFA_Node* pUIChild = GetUIChild(); | |
2729 if (pUIChild) { | |
2730 pUIChild->TryCData(XFA_ATTRIBUTE_PasswordChar, wsPassWord); | |
2731 } else { | |
2732 wsPassWord = XFA_GetAttributeDefaultValue_Cdata(XFA_ELEMENT_PasswordEdit, | |
2733 XFA_ATTRIBUTE_PasswordChar, | |
2734 XFA_XDPPACKET_Form); | |
2735 } | |
2736 } | |
2737 FX_BOOL CXFA_WidgetData::IsAllowRichText() { | |
2738 CXFA_Node* pUIChild = GetUIChild(); | |
2739 FX_BOOL bValue = FALSE; | |
2740 if (pUIChild && | |
2741 pUIChild->TryBoolean(XFA_ATTRIBUTE_AllowRichText, bValue, FALSE)) { | |
2742 return bValue; | |
2743 } | |
2744 if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_ELEMENT_Value)) { | |
2745 if (CXFA_Node* pChild = pNode->GetNodeItem(XFA_NODEITEM_FirstChild)) { | |
2746 return pChild->GetClassID() == XFA_ELEMENT_ExData; | |
2747 } | |
2748 } | |
2749 return FALSE; | |
2750 } | |
2751 FX_BOOL CXFA_WidgetData::IsMultiLine() { | |
2752 CXFA_Node* pUIChild = GetUIChild(); | |
2753 if (pUIChild) { | |
2754 return pUIChild->GetBoolean(XFA_ATTRIBUTE_MultiLine); | |
2755 } | |
2756 return XFA_GetAttributeDefaultValue_Boolean( | |
2757 XFA_ELEMENT_TextEdit, XFA_ATTRIBUTE_MultiLine, XFA_XDPPACKET_Form); | |
2758 } | |
2759 int32_t CXFA_WidgetData::GetVerticalScrollPolicy() { | |
2760 CXFA_Node* pUIChild = GetUIChild(); | |
2761 if (pUIChild) { | |
2762 return pUIChild->GetEnum(XFA_ATTRIBUTE_VScrollPolicy); | |
2763 } | |
2764 return XFA_GetAttributeDefaultValue_Enum( | |
2765 XFA_ELEMENT_TextEdit, XFA_ATTRIBUTE_VScrollPolicy, XFA_XDPPACKET_Form); | |
2766 } | |
2767 int32_t CXFA_WidgetData::GetMaxChars(XFA_ELEMENT& eType) { | |
2768 if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_ELEMENT_Value)) { | |
2769 if (CXFA_Node* pChild = pNode->GetNodeItem(XFA_NODEITEM_FirstChild)) { | |
2770 switch (pChild->GetClassID()) { | |
2771 case XFA_ELEMENT_Text: | |
2772 eType = XFA_ELEMENT_Text; | |
2773 return pChild->GetInteger(XFA_ATTRIBUTE_MaxChars); | |
2774 case XFA_ELEMENT_ExData: { | |
2775 eType = XFA_ELEMENT_ExData; | |
2776 int32_t iMax = pChild->GetInteger(XFA_ATTRIBUTE_MaxLength); | |
2777 return iMax < 0 ? 0 : iMax; | |
2778 } | |
2779 default: | |
2780 break; | |
2781 } | |
2782 } | |
2783 } | |
2784 return 0; | |
2785 } | |
2786 FX_BOOL CXFA_WidgetData::GetFracDigits(int32_t& iFracDigits) { | |
2787 if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_ELEMENT_Value)) { | |
2788 if (CXFA_Node* pChild = pNode->GetChild(0, XFA_ELEMENT_Decimal)) { | |
2789 return pChild->TryInteger(XFA_ATTRIBUTE_FracDigits, iFracDigits); | |
2790 } | |
2791 } | |
2792 iFracDigits = -1; | |
2793 return FALSE; | |
2794 } | |
2795 FX_BOOL CXFA_WidgetData::GetLeadDigits(int32_t& iLeadDigits) { | |
2796 if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_ELEMENT_Value)) { | |
2797 if (CXFA_Node* pChild = pNode->GetChild(0, XFA_ELEMENT_Decimal)) { | |
2798 return pChild->TryInteger(XFA_ATTRIBUTE_LeadDigits, iLeadDigits); | |
2799 } | |
2800 } | |
2801 iLeadDigits = -1; | |
2802 return FALSE; | |
2803 } | |
2804 CFX_WideString XFA_NumericLimit(const CFX_WideString& wsValue, | |
2805 int32_t iLead, | |
2806 int32_t iTread) { | |
2807 if ((iLead == -1) && (iTread == -1)) { | |
2808 return wsValue; | |
2809 } | |
2810 CFX_WideString wsRet; | |
2811 int32_t iLead_ = 0, iTread_ = -1; | |
2812 int32_t iCount = wsValue.GetLength(); | |
2813 if (iCount == 0) { | |
2814 return wsValue; | |
2815 } | |
2816 int32_t i = 0; | |
2817 if (wsValue[i] == L'-') { | |
2818 wsRet += L'-'; | |
2819 i++; | |
2820 } | |
2821 for (; i < iCount; i++) { | |
2822 FX_WCHAR wc = wsValue[i]; | |
2823 if (XFA_IsDigit(wc)) { | |
2824 if (iLead >= 0) { | |
2825 iLead_++; | |
2826 if (iLead_ > iLead) { | |
2827 return L"0"; | |
2828 } | |
2829 } else if (iTread_ >= 0) { | |
2830 iTread_++; | |
2831 if (iTread_ > iTread) { | |
2832 if (iTread != -1) { | |
2833 CFX_Decimal wsDeci = CFX_Decimal(wsValue); | |
2834 wsDeci.SetScale(iTread); | |
2835 wsRet = wsDeci; | |
2836 } | |
2837 return wsRet; | |
2838 } | |
2839 } | |
2840 } else if (wc == L'.') { | |
2841 iTread_ = 0; | |
2842 iLead = -1; | |
2843 } | |
2844 wsRet += wc; | |
2845 } | |
2846 return wsRet; | |
2847 } | |
2848 FX_BOOL CXFA_WidgetData::SetValue(const CFX_WideString& wsValue, | |
2849 XFA_VALUEPICTURE eValueType) { | |
2850 if (wsValue.IsEmpty()) { | |
2851 SyncValue(wsValue, TRUE); | |
2852 return TRUE; | |
2853 } | |
2854 m_bPreNull = m_bIsNull; | |
2855 m_bIsNull = FALSE; | |
2856 CFX_WideString wsNewText(wsValue); | |
2857 CFX_WideString wsPicture; | |
2858 GetPictureContent(wsPicture, eValueType); | |
2859 FX_BOOL bValidate = TRUE; | |
2860 FX_BOOL bSyncData = FALSE; | |
2861 CXFA_Node* pNode = GetUIChild(); | |
2862 if (!pNode) { | |
2863 return TRUE; | |
2864 } | |
2865 XFA_ELEMENT uiType = pNode->GetClassID(); | |
2866 if (!wsPicture.IsEmpty()) { | |
2867 CXFA_LocaleMgr* pLocalMgr = m_pNode->GetDocument()->GetLocalMgr(); | |
2868 IFX_Locale* pLocale = GetLocal(); | |
2869 CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(this); | |
2870 bValidate = | |
2871 widgetValue.ValidateValue(wsValue, wsPicture, pLocale, &wsPicture); | |
2872 if (bValidate) { | |
2873 widgetValue = CXFA_LocaleValue(widgetValue.GetType(), wsNewText, | |
2874 wsPicture, pLocale, pLocalMgr); | |
2875 wsNewText = widgetValue.GetValue(); | |
2876 if (uiType == XFA_ELEMENT_NumericEdit) { | |
2877 int32_t iLeadDigits = 0; | |
2878 int32_t iFracDigits = 0; | |
2879 GetLeadDigits(iLeadDigits); | |
2880 GetFracDigits(iFracDigits); | |
2881 wsNewText = XFA_NumericLimit(wsNewText, iLeadDigits, iFracDigits); | |
2882 } | |
2883 bSyncData = TRUE; | |
2884 } | |
2885 } else { | |
2886 if (uiType == XFA_ELEMENT_NumericEdit) { | |
2887 if (wsNewText != FX_WSTRC(L"0")) { | |
2888 int32_t iLeadDigits = 0; | |
2889 int32_t iFracDigits = 0; | |
2890 GetLeadDigits(iLeadDigits); | |
2891 GetFracDigits(iFracDigits); | |
2892 wsNewText = XFA_NumericLimit(wsNewText, iLeadDigits, iFracDigits); | |
2893 } | |
2894 bSyncData = TRUE; | |
2895 } | |
2896 } | |
2897 if (uiType != XFA_ELEMENT_NumericEdit || bSyncData) { | |
2898 SyncValue(wsNewText, TRUE); | |
2899 } | |
2900 return bValidate; | |
2901 } | |
2902 FX_BOOL CXFA_WidgetData::GetPictureContent(CFX_WideString& wsPicture, | |
2903 XFA_VALUEPICTURE ePicture) { | |
2904 if (ePicture == XFA_VALUEPICTURE_Raw) { | |
2905 return FALSE; | |
2906 } | |
2907 CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(this); | |
2908 switch (ePicture) { | |
2909 case XFA_VALUEPICTURE_Display: { | |
2910 if (CXFA_Node* pFormat = m_pNode->GetChild(0, XFA_ELEMENT_Format)) { | |
2911 if (CXFA_Node* pPicture = pFormat->GetChild(0, XFA_ELEMENT_Picture)) { | |
2912 if (pPicture->TryContent(wsPicture)) { | |
2913 return TRUE; | |
2914 } | |
2915 } | |
2916 } | |
2917 CFX_WideString wsDataPicture, wsTimePicture; | |
2918 IFX_Locale* pLocale = GetLocal(); | |
2919 if (!pLocale) { | |
2920 return FALSE; | |
2921 } | |
2922 FX_DWORD dwType = widgetValue.GetType(); | |
2923 switch (dwType) { | |
2924 case XFA_VT_DATE: | |
2925 pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Medium, | |
2926 wsPicture); | |
2927 break; | |
2928 case XFA_VT_TIME: | |
2929 pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Medium, | |
2930 wsPicture); | |
2931 break; | |
2932 case XFA_VT_DATETIME: | |
2933 pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Medium, | |
2934 wsDataPicture); | |
2935 pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Medium, | |
2936 wsTimePicture); | |
2937 wsPicture = wsDataPicture + FX_WSTRC(L"T") + wsTimePicture; | |
2938 break; | |
2939 case XFA_VT_DECIMAL: | |
2940 case XFA_VT_FLOAT: | |
2941 break; | |
2942 default: | |
2943 break; | |
2944 } | |
2945 } | |
2946 return TRUE; | |
2947 case XFA_VALUEPICTURE_Edit: { | |
2948 CXFA_Node* pUI = m_pNode->GetChild(0, XFA_ELEMENT_Ui); | |
2949 if (pUI) { | |
2950 if (CXFA_Node* pPicture = pUI->GetChild(0, XFA_ELEMENT_Picture)) { | |
2951 if (pPicture->TryContent(wsPicture)) { | |
2952 return TRUE; | |
2953 } | |
2954 } | |
2955 } | |
2956 { | |
2957 CFX_WideString wsDataPicture, wsTimePicture; | |
2958 IFX_Locale* pLocale = GetLocal(); | |
2959 if (!pLocale) { | |
2960 return FALSE; | |
2961 } | |
2962 FX_DWORD dwType = widgetValue.GetType(); | |
2963 switch (dwType) { | |
2964 case XFA_VT_DATE: | |
2965 pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Short, | |
2966 wsPicture); | |
2967 break; | |
2968 case XFA_VT_TIME: | |
2969 pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Short, | |
2970 wsPicture); | |
2971 break; | |
2972 case XFA_VT_DATETIME: | |
2973 pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Short, | |
2974 wsDataPicture); | |
2975 pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Short, | |
2976 wsTimePicture); | |
2977 wsPicture = wsDataPicture + L"T" + wsTimePicture; | |
2978 break; | |
2979 default: | |
2980 break; | |
2981 } | |
2982 } | |
2983 } | |
2984 return TRUE; | |
2985 case XFA_VALUEPICTURE_DataBind: { | |
2986 if (CXFA_Bind bind = GetBind()) { | |
2987 bind.GetPicture(wsPicture); | |
2988 return TRUE; | |
2989 } | |
2990 } break; | |
2991 default: | |
2992 break; | |
2993 } | |
2994 return FALSE; | |
2995 } | |
2996 IFX_Locale* CXFA_WidgetData::GetLocal() { | |
2997 IFX_Locale* pLocale = NULL; | |
2998 if (!m_pNode) { | |
2999 return pLocale; | |
3000 } | |
3001 FX_BOOL bLocale = FALSE; | |
3002 CFX_WideString wsLocaleName; | |
3003 bLocale = m_pNode->GetLocaleName(wsLocaleName); | |
3004 if (bLocale) { | |
3005 if (wsLocaleName.Equal(FX_WSTRC(L"ambient"))) { | |
3006 pLocale = m_pNode->GetDocument()->GetLocalMgr()->GetDefLocale(); | |
3007 } else { | |
3008 pLocale = | |
3009 m_pNode->GetDocument()->GetLocalMgr()->GetLocaleByName(wsLocaleName); | |
3010 } | |
3011 } | |
3012 return pLocale; | |
3013 } | |
3014 static FX_BOOL XFA_SplitDateTime(const CFX_WideString& wsDateTime, | |
3015 CFX_WideString& wsDate, | |
3016 CFX_WideString& wsTime) { | |
3017 wsDate = L""; | |
3018 wsTime = L""; | |
3019 if (wsDateTime.IsEmpty()) { | |
3020 return FALSE; | |
3021 } | |
3022 int nSplitIndex = -1; | |
3023 nSplitIndex = wsDateTime.Find('T'); | |
3024 if (nSplitIndex < 0) { | |
3025 nSplitIndex = wsDateTime.Find(' '); | |
3026 } | |
3027 if (nSplitIndex < 0) { | |
3028 return FALSE; | |
3029 } | |
3030 wsDate = wsDateTime.Left(nSplitIndex); | |
3031 if (!wsDate.IsEmpty()) { | |
3032 int32_t iCount = wsDate.GetLength(); | |
3033 int32_t i = 0; | |
3034 for (i = 0; i < iCount; i++) { | |
3035 if (wsDate[i] >= '0' && wsDate[i] <= '9') { | |
3036 break; | |
3037 } | |
3038 } | |
3039 if (i == iCount) { | |
3040 return FALSE; | |
3041 } | |
3042 } | |
3043 wsTime = wsDateTime.Right(wsDateTime.GetLength() - nSplitIndex - 1); | |
3044 if (!wsTime.IsEmpty()) { | |
3045 int32_t iCount = wsTime.GetLength(); | |
3046 int32_t i = 0; | |
3047 for (i = 0; i < iCount; i++) { | |
3048 if (wsTime[i] >= '0' && wsTime[i] <= '9') { | |
3049 break; | |
3050 } | |
3051 } | |
3052 if (i == iCount) { | |
3053 return FALSE; | |
3054 } | |
3055 } | |
3056 return TRUE; | |
3057 } | |
3058 | |
3059 FX_BOOL CXFA_WidgetData::GetValue(CFX_WideString& wsValue, | |
3060 XFA_VALUEPICTURE eValueType) { | |
3061 wsValue = m_pNode->GetContent(); | |
3062 | |
3063 if (eValueType == XFA_VALUEPICTURE_Display) | |
3064 GetItemLabel(wsValue, wsValue); | |
3065 | |
3066 CFX_WideString wsPicture; | |
3067 GetPictureContent(wsPicture, eValueType); | |
3068 CXFA_Node* pNode = GetUIChild(); | |
3069 if (!pNode) | |
3070 return TRUE; | |
3071 | |
3072 XFA_ELEMENT uiType = GetUIChild()->GetClassID(); | |
3073 switch (uiType) { | |
3074 case XFA_ELEMENT_ChoiceList: { | |
3075 if (eValueType == XFA_VALUEPICTURE_Display) { | |
3076 int32_t iSelItemIndex = GetSelectedItem(0); | |
3077 if (iSelItemIndex >= 0) { | |
3078 GetChoiceListItem(wsValue, iSelItemIndex); | |
3079 wsPicture.Empty(); | |
3080 } | |
3081 } | |
3082 } break; | |
3083 case XFA_ELEMENT_NumericEdit: | |
3084 if (eValueType != XFA_VALUEPICTURE_Raw && wsPicture.IsEmpty()) { | |
3085 IFX_Locale* pLocale = GetLocal(); | |
3086 if (eValueType == XFA_VALUEPICTURE_Display && pLocale) { | |
3087 CFX_WideString wsOutput; | |
3088 NormalizeNumStr(wsValue, wsOutput); | |
3089 FormatNumStr(wsOutput, pLocale, wsOutput); | |
3090 wsValue = wsOutput; | |
3091 } | |
3092 } | |
3093 break; | |
3094 default: | |
3095 break; | |
3096 } | |
3097 if (wsPicture.IsEmpty()) | |
3098 return TRUE; | |
3099 | |
3100 if (IFX_Locale* pLocale = GetLocal()) { | |
3101 CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(this); | |
3102 CXFA_LocaleMgr* pLocalMgr = m_pNode->GetDocument()->GetLocalMgr(); | |
3103 switch (widgetValue.GetType()) { | |
3104 case XFA_VT_DATE: { | |
3105 CFX_WideString wsDate, wsTime; | |
3106 if (XFA_SplitDateTime(wsValue, wsDate, wsTime)) { | |
3107 CXFA_LocaleValue date(XFA_VT_DATE, wsDate, pLocalMgr); | |
3108 if (date.FormatPatterns(wsValue, wsPicture, pLocale, eValueType)) | |
3109 return TRUE; | |
3110 } | |
3111 break; | |
3112 } | |
3113 case XFA_VT_TIME: { | |
3114 CFX_WideString wsDate, wsTime; | |
3115 if (XFA_SplitDateTime(wsValue, wsDate, wsTime)) { | |
3116 CXFA_LocaleValue time(XFA_VT_TIME, wsTime, pLocalMgr); | |
3117 if (time.FormatPatterns(wsValue, wsPicture, pLocale, eValueType)) | |
3118 return TRUE; | |
3119 } | |
3120 break; | |
3121 } | |
3122 default: | |
3123 break; | |
3124 } | |
3125 widgetValue.FormatPatterns(wsValue, wsPicture, pLocale, eValueType); | |
3126 } | |
3127 return TRUE; | |
3128 } | |
3129 | |
3130 FX_BOOL CXFA_WidgetData::GetNormalizeDataValue( | |
3131 const CFX_WideStringC& wsValue, | |
3132 CFX_WideString& wsNormalizeValue) { | |
3133 wsNormalizeValue = wsValue; | |
3134 if (wsValue.IsEmpty()) { | |
3135 return TRUE; | |
3136 } | |
3137 CFX_WideString wsPicture; | |
3138 GetPictureContent(wsPicture, XFA_VALUEPICTURE_DataBind); | |
3139 if (wsPicture.IsEmpty()) { | |
3140 return TRUE; | |
3141 } | |
3142 FXSYS_assert(GetNode()); | |
3143 CXFA_LocaleMgr* pLocalMgr = GetNode()->GetDocument()->GetLocalMgr(); | |
3144 IFX_Locale* pLocale = GetLocal(); | |
3145 CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(this); | |
3146 if (widgetValue.ValidateValue(wsValue, wsPicture, pLocale, &wsPicture)) { | |
3147 widgetValue = CXFA_LocaleValue(widgetValue.GetType(), wsNormalizeValue, | |
3148 wsPicture, pLocale, pLocalMgr); | |
3149 wsNormalizeValue = widgetValue.GetValue(); | |
3150 return TRUE; | |
3151 } | |
3152 return FALSE; | |
3153 } | |
3154 FX_BOOL CXFA_WidgetData::GetFormatDataValue(const CFX_WideStringC& wsValue, | |
3155 CFX_WideString& wsFormatedValue) { | |
3156 wsFormatedValue = wsValue; | |
3157 if (wsValue.IsEmpty()) { | |
3158 return TRUE; | |
3159 } | |
3160 CFX_WideString wsPicture; | |
3161 GetPictureContent(wsPicture, XFA_VALUEPICTURE_DataBind); | |
3162 if (wsPicture.IsEmpty()) { | |
3163 return TRUE; | |
3164 } | |
3165 if (IFX_Locale* pLocale = GetLocal()) { | |
3166 FXSYS_assert(GetNode()); | |
3167 CXFA_Node* pNodeValue = GetNode()->GetChild(0, XFA_ELEMENT_Value); | |
3168 if (!pNodeValue) { | |
3169 return FALSE; | |
3170 } | |
3171 CXFA_Node* pValueChild = pNodeValue->GetNodeItem(XFA_NODEITEM_FirstChild); | |
3172 if (!pValueChild) { | |
3173 return FALSE; | |
3174 } | |
3175 int32_t iVTType = XFA_VT_NULL; | |
3176 XFA_ELEMENT eType = pValueChild->GetClassID(); | |
3177 switch (eType) { | |
3178 case XFA_ELEMENT_Decimal: | |
3179 iVTType = XFA_VT_DECIMAL; | |
3180 break; | |
3181 case XFA_ELEMENT_Float: | |
3182 iVTType = XFA_VT_FLOAT; | |
3183 break; | |
3184 case XFA_ELEMENT_Date: | |
3185 iVTType = XFA_VT_DATE; | |
3186 break; | |
3187 case XFA_ELEMENT_Time: | |
3188 iVTType = XFA_VT_TIME; | |
3189 break; | |
3190 case XFA_ELEMENT_DateTime: | |
3191 iVTType = XFA_VT_DATETIME; | |
3192 break; | |
3193 case XFA_ELEMENT_Boolean: | |
3194 iVTType = XFA_VT_BOOLEAN; | |
3195 break; | |
3196 case XFA_ELEMENT_Integer: | |
3197 iVTType = XFA_VT_INTEGER; | |
3198 break; | |
3199 case XFA_ELEMENT_Text: | |
3200 iVTType = XFA_VT_TEXT; | |
3201 break; | |
3202 default: | |
3203 iVTType = XFA_VT_NULL; | |
3204 break; | |
3205 } | |
3206 CXFA_LocaleMgr* pLocalMgr = GetNode()->GetDocument()->GetLocalMgr(); | |
3207 CXFA_LocaleValue widgetValue(iVTType, wsValue, pLocalMgr); | |
3208 switch (widgetValue.GetType()) { | |
3209 case XFA_VT_DATE: { | |
3210 CFX_WideString wsDate, wsTime; | |
3211 if (XFA_SplitDateTime(wsValue, wsDate, wsTime)) { | |
3212 CXFA_LocaleValue date(XFA_VT_DATE, wsDate, pLocalMgr); | |
3213 if (date.FormatPatterns(wsFormatedValue, wsPicture, pLocale, | |
3214 XFA_VALUEPICTURE_DataBind)) { | |
3215 return TRUE; | |
3216 } | |
3217 } | |
3218 break; | |
3219 } | |
3220 case XFA_VT_TIME: { | |
3221 CFX_WideString wsDate, wsTime; | |
3222 if (XFA_SplitDateTime(wsValue, wsDate, wsTime)) { | |
3223 CXFA_LocaleValue time(XFA_VT_TIME, wsTime, pLocalMgr); | |
3224 if (time.FormatPatterns(wsFormatedValue, wsPicture, pLocale, | |
3225 XFA_VALUEPICTURE_DataBind)) { | |
3226 return TRUE; | |
3227 } | |
3228 } | |
3229 break; | |
3230 } | |
3231 default: | |
3232 break; | |
3233 } | |
3234 widgetValue.FormatPatterns(wsFormatedValue, wsPicture, pLocale, | |
3235 XFA_VALUEPICTURE_DataBind); | |
3236 } | |
3237 return FALSE; | |
3238 } | |
3239 void CXFA_WidgetData::NormalizeNumStr(const CFX_WideString& wsValue, | |
3240 CFX_WideString& wsOutput) { | |
3241 if (wsValue.IsEmpty()) { | |
3242 return; | |
3243 } | |
3244 wsOutput = wsValue; | |
3245 wsOutput.TrimLeft('0'); | |
3246 int32_t dot_index = wsOutput.Find('.'); | |
3247 int32_t iFracDigits = 0; | |
3248 if (!wsOutput.IsEmpty() && dot_index >= 0 && | |
3249 (!GetFracDigits(iFracDigits) || iFracDigits != -1)) { | |
3250 wsOutput.TrimRight(L"0"); | |
3251 wsOutput.TrimRight(L"."); | |
3252 } | |
3253 if (wsOutput.IsEmpty() || wsOutput[0] == '.') { | |
3254 wsOutput.Insert(0, '0'); | |
3255 } | |
3256 } | |
3257 void CXFA_WidgetData::FormatNumStr(const CFX_WideString& wsValue, | |
3258 IFX_Locale* pLocale, | |
3259 CFX_WideString& wsOutput) { | |
3260 if (wsValue.IsEmpty()) { | |
3261 return; | |
3262 } | |
3263 CFX_WideString wsSrcNum = wsValue; | |
3264 CFX_WideString wsGroupSymbol; | |
3265 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Grouping, wsGroupSymbol); | |
3266 FX_BOOL bNeg = FALSE; | |
3267 if (wsSrcNum[0] == '-') { | |
3268 bNeg = TRUE; | |
3269 wsSrcNum.Delete(0, 1); | |
3270 } | |
3271 int32_t len = wsSrcNum.GetLength(); | |
3272 int32_t dot_index = wsSrcNum.Find('.'); | |
3273 if (dot_index == -1) { | |
3274 dot_index = len; | |
3275 } | |
3276 int32_t cc = dot_index - 1; | |
3277 if (cc >= 0) { | |
3278 int nPos = dot_index % 3; | |
3279 wsOutput.Empty(); | |
3280 for (int32_t i = 0; i < dot_index; i++) { | |
3281 if (i % 3 == nPos && i != 0) { | |
3282 wsOutput += wsGroupSymbol; | |
3283 } | |
3284 wsOutput += wsSrcNum[i]; | |
3285 } | |
3286 if (dot_index < len) { | |
3287 CFX_WideString wsSymbol; | |
3288 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal, wsSymbol); | |
3289 wsOutput += wsSymbol; | |
3290 wsOutput += wsSrcNum.Right(len - dot_index - 1); | |
3291 } | |
3292 if (bNeg) { | |
3293 CFX_WideString wsMinusymbol; | |
3294 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus, wsMinusymbol); | |
3295 wsOutput = wsMinusymbol + wsOutput; | |
3296 } | |
3297 } | |
3298 } | |
3299 void CXFA_WidgetData::SyncValue(const CFX_WideString& wsValue, | |
3300 FX_BOOL bNotify) { | |
3301 if (!m_pNode) { | |
3302 return; | |
3303 } | |
3304 CFX_WideString wsFormatValue(wsValue); | |
3305 CXFA_WidgetData* pContainerWidgetData = m_pNode->GetContainerWidgetData(); | |
3306 if (pContainerWidgetData) { | |
3307 pContainerWidgetData->GetFormatDataValue(wsValue, wsFormatValue); | |
3308 } | |
3309 m_pNode->SetContent(wsValue, wsFormatValue, bNotify); | |
3310 } | |
3311 void CXFA_WidgetData::InsertListTextItem(CXFA_Node* pItems, | |
3312 const CFX_WideStringC& wsText, | |
3313 int32_t nIndex) { | |
3314 CXFA_Node* pText = pItems->CreateSamePacketNode(XFA_ELEMENT_Text); | |
3315 pItems->InsertChild(nIndex, pText); | |
3316 pText->SetContent(wsText, wsText, FALSE, FALSE, FALSE); | |
3317 } | |
3318 CXFA_Filter CXFA_WidgetData::GetFilter(FX_BOOL bModified) { | |
3319 if (!m_pUiChildNode) { | |
3320 return CXFA_Filter(nullptr); | |
3321 } | |
3322 return CXFA_Filter( | |
3323 m_pUiChildNode->GetProperty(0, XFA_ELEMENT_Filter, bModified)); | |
3324 } | |
3325 CXFA_Manifest CXFA_WidgetData::GetManifest(FX_BOOL bModified) { | |
3326 if (!m_pUiChildNode) { | |
3327 return CXFA_Manifest(nullptr); | |
3328 } | |
3329 return CXFA_Manifest( | |
3330 m_pUiChildNode->GetProperty(0, XFA_ELEMENT_Manifest, bModified)); | |
3331 } | |
3332 CXFA_Occur::CXFA_Occur(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
3333 int32_t CXFA_Occur::GetMax() { | |
3334 int32_t iMax = 1; | |
3335 if (m_pNode) { | |
3336 if (!m_pNode->TryInteger(XFA_ATTRIBUTE_Max, iMax, TRUE)) { | |
3337 iMax = GetMin(); | |
3338 } | |
3339 } | |
3340 return iMax; | |
3341 } | |
3342 int32_t CXFA_Occur::GetMin() { | |
3343 int32_t iMin = 1; | |
3344 if (m_pNode) { | |
3345 if (!m_pNode->TryInteger(XFA_ATTRIBUTE_Min, iMin, TRUE) || iMin < 0) { | |
3346 iMin = 1; | |
3347 } | |
3348 } | |
3349 return iMin; | |
3350 } | |
3351 int32_t CXFA_Occur::GetInitial() { | |
3352 int32_t iInit = 1; | |
3353 if (m_pNode) { | |
3354 int32_t iMin = GetMin(); | |
3355 if (!m_pNode->TryInteger(XFA_ATTRIBUTE_Initial, iInit, TRUE) || | |
3356 iInit < iMin) { | |
3357 iInit = iMin; | |
3358 } | |
3359 } | |
3360 return iInit; | |
3361 } | |
3362 FX_BOOL CXFA_Occur::GetOccurInfo(int32_t& iMin, int32_t& iMax, int32_t& iInit) { | |
3363 if (!m_pNode) { | |
3364 return FALSE; | |
3365 } | |
3366 if (!m_pNode->TryInteger(XFA_ATTRIBUTE_Min, iMin, FALSE) || iMin < 0) { | |
3367 iMin = 1; | |
3368 } | |
3369 if (!m_pNode->TryInteger(XFA_ATTRIBUTE_Max, iMax, FALSE)) { | |
3370 if (iMin == 0) { | |
3371 iMax = 1; | |
3372 } else { | |
3373 iMax = iMin; | |
3374 } | |
3375 } | |
3376 if (!m_pNode->TryInteger(XFA_ATTRIBUTE_Initial, iInit, FALSE) || | |
3377 iInit < iMin) { | |
3378 iInit = iMin; | |
3379 } | |
3380 return TRUE; | |
3381 } | |
3382 void CXFA_Occur::SetMax(int32_t iMax) { | |
3383 iMax = (iMax != -1 && iMax < 1) ? 1 : iMax; | |
3384 m_pNode->SetInteger(XFA_ATTRIBUTE_Max, iMax, FALSE); | |
3385 int32_t iMin = GetMin(); | |
3386 if (iMax != -1 && iMax < iMin) { | |
3387 iMin = iMax; | |
3388 m_pNode->SetInteger(XFA_ATTRIBUTE_Min, iMin, FALSE); | |
3389 } | |
3390 } | |
3391 void CXFA_Occur::SetMin(int32_t iMin) { | |
3392 iMin = (iMin < 0) ? 1 : iMin; | |
3393 m_pNode->SetInteger(XFA_ATTRIBUTE_Min, iMin, FALSE); | |
3394 int32_t iMax = GetMax(); | |
3395 if (iMax > 0 && iMax < iMin) { | |
3396 iMax = iMin; | |
3397 m_pNode->SetInteger(XFA_ATTRIBUTE_Max, iMax, FALSE); | |
3398 } | |
3399 } | |
3400 XFA_ATTRIBUTEENUM XFA_GetEnumTypeAttribute( | |
3401 CXFA_Node* pNode, | |
3402 XFA_ATTRIBUTE attributeValue = XFA_ATTRIBUTE_Type, | |
3403 XFA_ATTRIBUTEENUM eDefaultValue = XFA_ATTRIBUTEENUM_Optional) { | |
3404 XFA_ATTRIBUTEENUM eType = eDefaultValue; | |
3405 if (pNode) { | |
3406 if (!pNode->TryEnum(attributeValue, eType, TRUE)) { | |
3407 eType = eDefaultValue; | |
3408 } | |
3409 } | |
3410 return eType; | |
3411 } | |
3412 CFX_WideString CXFA_Filter::GetFilterString(XFA_ATTRIBUTE eAttribute) { | |
3413 CFX_WideString wsStringValue; | |
3414 if (m_pNode) { | |
3415 m_pNode->GetAttribute(eAttribute, wsStringValue, FALSE); | |
3416 } | |
3417 return wsStringValue; | |
3418 } | |
3419 XFA_ATTRIBUTEENUM CXFA_Filter::GetAppearanceFilterType() { | |
3420 if (!m_pNode) { | |
3421 return XFA_ATTRIBUTEENUM_Optional; | |
3422 } | |
3423 CXFA_Node* pAppearanceFilterNode = | |
3424 m_pNode->GetProperty(0, XFA_ELEMENT_AppearanceFilter); | |
3425 return XFA_GetEnumTypeAttribute(pAppearanceFilterNode); | |
3426 } | |
3427 CFX_WideString CXFA_Filter::GetAppearanceFilterContent() { | |
3428 CFX_WideString wsContent; | |
3429 if (m_pNode) { | |
3430 CXFA_Node* pAppearanceFilterNode = | |
3431 m_pNode->GetProperty(0, XFA_ELEMENT_AppearanceFilter); | |
3432 pAppearanceFilterNode->TryContent(wsContent); | |
3433 } | |
3434 return wsContent; | |
3435 } | |
3436 XFA_ATTRIBUTEENUM CXFA_Filter::GetCertificatesCredentialServerPolicy() { | |
3437 if (!m_pNode) { | |
3438 return XFA_ATTRIBUTEENUM_Optional; | |
3439 } | |
3440 CXFA_Node* pCertsNode = m_pNode->GetProperty(0, XFA_ELEMENT_Certificates); | |
3441 return XFA_GetEnumTypeAttribute(pCertsNode, | |
3442 XFA_ATTRIBUTE_CredentialServerPolicy); | |
3443 } | |
3444 CFX_WideString CXFA_Filter::GetCertificatesURL() { | |
3445 CFX_WideString wsURL; | |
3446 if (m_pNode) { | |
3447 CXFA_Node* pCertsNode = m_pNode->GetProperty(0, XFA_ELEMENT_Certificates); | |
3448 pCertsNode->GetAttribute(XFA_ATTRIBUTE_Url, wsURL, FALSE); | |
3449 } | |
3450 return wsURL; | |
3451 } | |
3452 CFX_WideString CXFA_Filter::GetCertificatesURLPolicy() { | |
3453 CFX_WideString wsURLPolicy; | |
3454 if (m_pNode) { | |
3455 CXFA_Node* pCertsNode = m_pNode->GetProperty(0, XFA_ELEMENT_Certificates); | |
3456 pCertsNode->GetAttribute(XFA_ATTRIBUTE_UrlPolicy, wsURLPolicy, FALSE); | |
3457 } | |
3458 return wsURLPolicy; | |
3459 } | |
3460 CXFA_WrapCertificate CXFA_Filter::GetCertificatesEncryption(FX_BOOL bModified) { | |
3461 if (!m_pNode) { | |
3462 return CXFA_WrapCertificate(NULL); | |
3463 } | |
3464 CXFA_Node* pCertsNode = | |
3465 m_pNode->GetProperty(0, XFA_ELEMENT_Certificates, bModified); | |
3466 return CXFA_WrapCertificate( | |
3467 pCertsNode ? pCertsNode->GetProperty(0, XFA_ELEMENT_Encryption, bModified) | |
3468 : NULL); | |
3469 } | |
3470 CXFA_WrapCertificate CXFA_Filter::GetCertificatesIssuers(FX_BOOL bModified) { | |
3471 if (!m_pNode) { | |
3472 return CXFA_WrapCertificate(NULL); | |
3473 } | |
3474 CXFA_Node* pCertsNode = | |
3475 m_pNode->GetProperty(0, XFA_ELEMENT_Certificates, bModified); | |
3476 return CXFA_WrapCertificate( | |
3477 pCertsNode ? pCertsNode->GetProperty(0, XFA_ELEMENT_Issuers, bModified) | |
3478 : NULL); | |
3479 } | |
3480 CFX_WideString CXFA_Filter::GetCertificatesKeyUsageString( | |
3481 XFA_ATTRIBUTE eAttribute) { | |
3482 if (!m_pNode) { | |
3483 return FX_WSTRC(L""); | |
3484 } | |
3485 CXFA_Node* pCertsNode = m_pNode->GetProperty(0, XFA_ELEMENT_Certificates); | |
3486 CXFA_Node* pKeyUsageNode = pCertsNode->GetProperty(0, XFA_ELEMENT_KeyUsage); | |
3487 CFX_WideString wsAttributeValue; | |
3488 pKeyUsageNode->GetAttribute(eAttribute, wsAttributeValue, FALSE); | |
3489 return wsAttributeValue; | |
3490 } | |
3491 CXFA_Oids CXFA_Filter::GetCertificatesOids() { | |
3492 if (!m_pNode) { | |
3493 return CXFA_Oids(NULL); | |
3494 } | |
3495 CXFA_Node* pCertsNode = m_pNode->GetProperty(0, XFA_ELEMENT_Certificates); | |
3496 return CXFA_Oids(pCertsNode ? pCertsNode->GetProperty(0, XFA_ELEMENT_Oids) | |
3497 : NULL); | |
3498 } | |
3499 CXFA_WrapCertificate CXFA_Filter::GetCertificatesSigning(FX_BOOL bModified) { | |
3500 if (!m_pNode) { | |
3501 return CXFA_WrapCertificate(NULL); | |
3502 } | |
3503 CXFA_Node* pCertsNode = | |
3504 m_pNode->GetProperty(0, XFA_ELEMENT_Certificates, bModified); | |
3505 return CXFA_WrapCertificate( | |
3506 pCertsNode ? pCertsNode->GetProperty(0, XFA_ELEMENT_Signing, bModified) | |
3507 : NULL); | |
3508 } | |
3509 CXFA_DigestMethods CXFA_Filter::GetDigestMethods(FX_BOOL bModified) { | |
3510 return CXFA_DigestMethods( | |
3511 m_pNode ? m_pNode->GetProperty(0, XFA_ELEMENT_DigestMethods, bModified) | |
3512 : NULL); | |
3513 } | |
3514 CXFA_Encodings CXFA_Filter::GetEncodings(FX_BOOL bModified) { | |
3515 return CXFA_Encodings( | |
3516 m_pNode ? m_pNode->GetProperty(0, XFA_ELEMENT_Encodings, bModified) | |
3517 : NULL); | |
3518 } | |
3519 CXFA_EncryptionMethods CXFA_Filter::GetEncryptionMethods(FX_BOOL bModified) { | |
3520 return CXFA_EncryptionMethods( | |
3521 m_pNode | |
3522 ? m_pNode->GetProperty(0, XFA_ELEMENT_EncryptionMethods, bModified) | |
3523 : NULL); | |
3524 } | |
3525 XFA_ATTRIBUTEENUM CXFA_Filter::GetHandlerType() { | |
3526 if (!m_pNode) { | |
3527 return XFA_ATTRIBUTEENUM_Optional; | |
3528 } | |
3529 CXFA_Node* pHandlerNode = m_pNode->GetProperty(0, XFA_ELEMENT_Handler); | |
3530 return XFA_GetEnumTypeAttribute(pHandlerNode); | |
3531 } | |
3532 CFX_WideString CXFA_Filter::GetHandlerContent() { | |
3533 CFX_WideString wsContent; | |
3534 if (m_pNode) { | |
3535 CXFA_Node* pHandlerNode = m_pNode->GetProperty(0, XFA_ELEMENT_Handler); | |
3536 pHandlerNode->TryContent(wsContent); | |
3537 } | |
3538 return wsContent; | |
3539 } | |
3540 XFA_ATTRIBUTEENUM CXFA_Filter::GetlockDocumentType() { | |
3541 if (!m_pNode) { | |
3542 return XFA_ATTRIBUTEENUM_Optional; | |
3543 } | |
3544 CXFA_Node* pLockDocNode = m_pNode->GetProperty(0, XFA_ELEMENT_LockDocument); | |
3545 return XFA_GetEnumTypeAttribute(pLockDocNode); | |
3546 } | |
3547 CFX_WideString CXFA_Filter::GetlockDocumentContent() { | |
3548 CFX_WideString wsContent = FX_WSTRC(L"auto"); | |
3549 if (m_pNode) { | |
3550 CXFA_Node* pLockDocNode = m_pNode->GetProperty(0, XFA_ELEMENT_LockDocument); | |
3551 pLockDocNode->TryContent(wsContent); | |
3552 } | |
3553 return wsContent; | |
3554 } | |
3555 int32_t CXFA_Filter::GetMDPPermissions() { | |
3556 int32_t iPermissions = 2; | |
3557 if (m_pNode) { | |
3558 CXFA_Node* pMDPNode = m_pNode->GetProperty(0, XFA_ELEMENT_Mdp); | |
3559 if (!pMDPNode->TryInteger(XFA_ATTRIBUTE_Permissions, iPermissions, TRUE)) { | |
3560 iPermissions = 2; | |
3561 } | |
3562 } | |
3563 return iPermissions; | |
3564 } | |
3565 XFA_ATTRIBUTEENUM CXFA_Filter::GetMDPSignatureType() { | |
3566 if (!m_pNode) { | |
3567 return XFA_ATTRIBUTEENUM_Filter; | |
3568 } | |
3569 CXFA_Node* pMDPNode = m_pNode->GetProperty(0, XFA_ELEMENT_Mdp); | |
3570 return XFA_GetEnumTypeAttribute(pMDPNode, XFA_ATTRIBUTE_SignatureType, | |
3571 XFA_ATTRIBUTEENUM_Filter); | |
3572 } | |
3573 CXFA_Reasons CXFA_Filter::GetReasons(FX_BOOL bModified) { | |
3574 return CXFA_Reasons(m_pNode ? m_pNode->GetProperty(0, XFA_ELEMENT_Reasons) | |
3575 : NULL); | |
3576 } | |
3577 CFX_WideString CXFA_Filter::GetTimeStampServer() { | |
3578 CFX_WideString wsServerURI; | |
3579 if (m_pNode) { | |
3580 CXFA_Node* pTimeStampNode = m_pNode->GetProperty(0, XFA_ELEMENT_TimeStamp); | |
3581 pTimeStampNode->GetAttribute(XFA_ATTRIBUTE_Server, wsServerURI, FALSE); | |
3582 } | |
3583 return wsServerURI; | |
3584 } | |
3585 XFA_ATTRIBUTEENUM CXFA_Filter::GetTimeStampType() { | |
3586 if (!m_pNode) { | |
3587 return XFA_ATTRIBUTEENUM_Optional; | |
3588 } | |
3589 CXFA_Node* pTimeStampNode = m_pNode->GetProperty(0, XFA_ELEMENT_TimeStamp); | |
3590 return XFA_GetEnumTypeAttribute(pTimeStampNode); | |
3591 } | |
3592 CFX_WideString CXFA_Certificate::GetCertificateName() { | |
3593 CFX_WideString wsName; | |
3594 if (m_pNode) { | |
3595 m_pNode->GetAttribute(XFA_ATTRIBUTE_Name, wsName, FALSE); | |
3596 } | |
3597 return wsName; | |
3598 } | |
3599 CFX_WideString CXFA_Certificate::GetCertificateContent() { | |
3600 CFX_WideString wsContent; | |
3601 if (m_pNode) { | |
3602 m_pNode->TryContent(wsContent); | |
3603 } | |
3604 return wsContent; | |
3605 } | |
3606 XFA_ATTRIBUTEENUM CXFA_WrapCertificate::GetType() { | |
3607 return XFA_GetEnumTypeAttribute(m_pNode); | |
3608 } | |
3609 int32_t CXFA_WrapCertificate::CountCertificates() { | |
3610 return m_pNode ? m_pNode->CountChildren(XFA_ELEMENT_Certificate) : 0; | |
3611 } | |
3612 CXFA_Certificate CXFA_WrapCertificate::GetCertificate(int32_t nIndex) { | |
3613 return CXFA_Certificate( | |
3614 (nIndex > -1 && m_pNode) | |
3615 ? m_pNode->GetChild(nIndex, XFA_ELEMENT_Certificate) | |
3616 : NULL); | |
3617 } | |
3618 XFA_ATTRIBUTEENUM CXFA_Oids::GetOidsType() { | |
3619 return XFA_GetEnumTypeAttribute(m_pNode); | |
3620 } | |
3621 int32_t CXFA_Oids::CountOids() { | |
3622 return m_pNode ? m_pNode->CountChildren(XFA_ELEMENT_Oid) : 0; | |
3623 } | |
3624 CFX_WideString CXFA_Oids::GetOidContent(int32_t nIndex) { | |
3625 if (nIndex <= -1 || !m_pNode) { | |
3626 return FX_WSTRC(L""); | |
3627 } | |
3628 CXFA_Node* pOidNode = m_pNode->GetChild(nIndex, XFA_ELEMENT_Oid); | |
3629 if (!pOidNode) { | |
3630 return FX_WSTRC(L""); | |
3631 } | |
3632 CFX_WideString wsContent; | |
3633 pOidNode->TryContent(wsContent); | |
3634 return wsContent; | |
3635 } | |
3636 XFA_ATTRIBUTEENUM CXFA_SubjectDNs::GetSubjectDNsType() { | |
3637 return XFA_GetEnumTypeAttribute(m_pNode); | |
3638 } | |
3639 int32_t CXFA_SubjectDNs::CountSubjectDNs() { | |
3640 return m_pNode ? m_pNode->CountChildren(XFA_ELEMENT_SubjectDN) : 0; | |
3641 } | |
3642 CFX_WideString CXFA_SubjectDNs::GetSubjectDNString(int32_t nIndex, | |
3643 XFA_ATTRIBUTE eAttribute) { | |
3644 if (nIndex <= -1 || !m_pNode) { | |
3645 return FX_WSTRC(L""); | |
3646 } | |
3647 CXFA_Node* pSubjectDNNode = m_pNode->GetChild(nIndex, XFA_ELEMENT_SubjectDN); | |
3648 if (!pSubjectDNNode) { | |
3649 return FX_WSTRC(L""); | |
3650 } | |
3651 CFX_WideString wsAttributeValue; | |
3652 pSubjectDNNode->GetAttribute(eAttribute, wsAttributeValue, FALSE); | |
3653 return wsAttributeValue; | |
3654 } | |
3655 CFX_WideString CXFA_SubjectDNs::GetSubjectDNContent(int32_t nIndex) { | |
3656 if (nIndex <= -1 || !m_pNode) { | |
3657 return FX_WSTRC(L""); | |
3658 } | |
3659 CXFA_Node* pSubjectDNNode = m_pNode->GetChild(nIndex, XFA_ELEMENT_SubjectDN); | |
3660 if (!pSubjectDNNode) { | |
3661 return FX_WSTRC(L""); | |
3662 } | |
3663 CFX_WideString wsContent; | |
3664 pSubjectDNNode->TryContent(wsContent); | |
3665 return wsContent; | |
3666 } | |
3667 XFA_ATTRIBUTEENUM CXFA_DigestMethods::GetDigestMethodsType() { | |
3668 return XFA_GetEnumTypeAttribute(m_pNode); | |
3669 } | |
3670 int32_t CXFA_DigestMethods::CountDigestMethods() { | |
3671 return m_pNode ? m_pNode->CountChildren(XFA_ELEMENT_DigestMethod) : 0; | |
3672 } | |
3673 CFX_WideString CXFA_DigestMethods::GetDigestMethodContent(int32_t nIndex) { | |
3674 if (nIndex <= -1 || !m_pNode) { | |
3675 return FX_WSTRC(L""); | |
3676 } | |
3677 CXFA_Node* pDigestMethodNode = | |
3678 m_pNode->GetChild(nIndex, XFA_ELEMENT_DigestMethod); | |
3679 if (!pDigestMethodNode) { | |
3680 return FX_WSTRC(L""); | |
3681 } | |
3682 CFX_WideString wsContent; | |
3683 pDigestMethodNode->TryContent(wsContent); | |
3684 return wsContent; | |
3685 } | |
3686 XFA_ATTRIBUTEENUM CXFA_Encodings::GetEncodingsType() { | |
3687 return XFA_GetEnumTypeAttribute(m_pNode); | |
3688 } | |
3689 int32_t CXFA_Encodings::CountEncodings() { | |
3690 return m_pNode ? m_pNode->CountChildren(XFA_ELEMENT_Encoding) : 0; | |
3691 } | |
3692 CFX_WideString CXFA_Encodings::GetEncodingContent(int32_t nIndex) { | |
3693 if (nIndex <= -1 || !m_pNode) { | |
3694 return FX_WSTRC(L""); | |
3695 } | |
3696 CXFA_Node* pEncodingNode = m_pNode->GetChild(nIndex, XFA_ELEMENT_Encoding); | |
3697 if (!pEncodingNode) { | |
3698 return FX_WSTRC(L""); | |
3699 } | |
3700 CFX_WideString wsContent; | |
3701 pEncodingNode->TryContent(wsContent); | |
3702 return wsContent; | |
3703 } | |
3704 XFA_ATTRIBUTEENUM CXFA_EncryptionMethods::GetEncryptionMethodsType() { | |
3705 return XFA_GetEnumTypeAttribute(m_pNode); | |
3706 } | |
3707 int32_t CXFA_EncryptionMethods::CountEncryptionMethods() { | |
3708 return m_pNode ? m_pNode->CountChildren(XFA_ELEMENT_EncryptionMethod) : 0; | |
3709 } | |
3710 CFX_WideString CXFA_EncryptionMethods::GetEncryptionMethodContent( | |
3711 int32_t nIndex) { | |
3712 if (nIndex <= -1 || !m_pNode) { | |
3713 return FX_WSTRC(L""); | |
3714 } | |
3715 CXFA_Node* pEncryMethodNode = | |
3716 m_pNode->GetChild(nIndex, XFA_ELEMENT_EncryptionMethod); | |
3717 if (!pEncryMethodNode) { | |
3718 return FX_WSTRC(L""); | |
3719 } | |
3720 CFX_WideString wsContent; | |
3721 pEncryMethodNode->TryContent(wsContent); | |
3722 return wsContent; | |
3723 } | |
3724 XFA_ATTRIBUTEENUM CXFA_Reasons::GetReasonsType() { | |
3725 return XFA_GetEnumTypeAttribute(m_pNode); | |
3726 } | |
3727 int32_t CXFA_Reasons::CountReasons() { | |
3728 return m_pNode ? m_pNode->CountChildren(XFA_ELEMENT_Reason) : 0; | |
3729 } | |
3730 CFX_WideString CXFA_Reasons::GetReasonContent(int32_t nIndex) { | |
3731 if (nIndex <= -1 || !m_pNode) { | |
3732 return FX_WSTRC(L""); | |
3733 } | |
3734 CXFA_Node* pReasonNode = m_pNode->GetChild(nIndex, XFA_ELEMENT_Reason); | |
3735 if (!pReasonNode) { | |
3736 return FX_WSTRC(L""); | |
3737 } | |
3738 CFX_WideString wsContent; | |
3739 pReasonNode->TryContent(wsContent); | |
3740 return wsContent; | |
3741 } | |
3742 XFA_ATTRIBUTEENUM CXFA_Manifest::GetAction() { | |
3743 return XFA_GetEnumTypeAttribute(m_pNode, XFA_ATTRIBUTE_Action, | |
3744 XFA_ATTRIBUTEENUM_Include); | |
3745 } | |
3746 int32_t CXFA_Manifest::CountReives() { | |
3747 return m_pNode ? m_pNode->CountChildren(XFA_ELEMENT_Ref) : 0; | |
3748 } | |
3749 CFX_WideString CXFA_Manifest::GetRefContent(int32_t nIndex) { | |
3750 if (nIndex <= -1 || !m_pNode) { | |
3751 return FX_WSTRC(L""); | |
3752 } | |
3753 CXFA_Node* pRefNode = m_pNode->GetChild(nIndex, XFA_ELEMENT_Ref); | |
3754 if (!pRefNode) { | |
3755 return FX_WSTRC(L""); | |
3756 } | |
3757 CFX_WideString wsContent; | |
3758 pRefNode->TryContent(wsContent); | |
3759 return wsContent; | |
3760 } | |
OLD | NEW |