OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2016 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
| 7 #include "xfa/fxfa/parser/cxfa_widgetdata.h" |
| 8 |
| 9 #include "xfa/fxfa/parser/xfa_object.h" |
| 10 #include "xfa/fxfa/parser/cxfa_event.h" |
| 11 #include "xfa/fxfa/parser/xfa_document.h" |
7 #include "core/fxcrt/include/fx_ext.h" | 12 #include "core/fxcrt/include/fx_ext.h" |
| 13 #include "xfa/fxfa/app/xfa_ffnotify.h" |
8 #include "xfa/fxbarcode/include/BC_Library.h" | 14 #include "xfa/fxbarcode/include/BC_Library.h" |
9 #include "xfa/fxfa/app/xfa_ffnotify.h" | |
10 #include "xfa/fxfa/fm2js/xfa_fm2jsapi.h" | |
11 #include "xfa/fxfa/parser/xfa_docdata.h" | |
12 #include "xfa/fxfa/parser/xfa_doclayout.h" | |
13 #include "xfa/fxfa/parser/xfa_document.h" | |
14 #include "xfa/fxfa/parser/xfa_localemgr.h" | |
15 #include "xfa/fxfa/parser/xfa_localevalue.h" | 15 #include "xfa/fxfa/parser/xfa_localevalue.h" |
16 #include "xfa/fxfa/parser/xfa_object.h" | |
17 #include "xfa/fxfa/parser/xfa_parser.h" | |
18 #include "xfa/fxfa/parser/xfa_script.h" | |
19 #include "xfa/fxfa/parser/xfa_utils.h" | |
20 | 16 |
21 static FX_ARGB XFA_WStringToColor(const CFX_WideStringC& wsValue) { | 17 namespace { |
22 uint8_t r = 0, g = 0, b = 0; | 18 |
23 if (wsValue.GetLength() == 0) { | 19 FX_FLOAT GetEdgeThickness(const CXFA_StrokeArray& strokes, |
24 return 0xff000000; | 20 FX_BOOL b3DStyle, |
| 21 int32_t nIndex) { |
| 22 FX_FLOAT fThickness = 0; |
| 23 |
| 24 if (strokes[nIndex * 2 + 1].GetPresence() == XFA_ATTRIBUTEENUM_Visible) { |
| 25 if (nIndex == 0) |
| 26 fThickness += 2.5f; |
| 27 |
| 28 fThickness += strokes[nIndex * 2 + 1].GetThickness() * (b3DStyle ? 4 : 2); |
25 } | 29 } |
26 int cc = 0; | 30 return fThickness; |
27 const FX_WCHAR* str = wsValue.c_str(); | 31 } |
28 int len = wsValue.GetLength(); | 32 |
29 while (XFA_IsSpace(str[cc]) && cc < len) { | 33 FX_BOOL SplitDateTime(const CFX_WideString& wsDateTime, |
30 cc++; | 34 CFX_WideString& wsDate, |
| 35 CFX_WideString& wsTime) { |
| 36 wsDate = L""; |
| 37 wsTime = L""; |
| 38 if (wsDateTime.IsEmpty()) |
| 39 return FALSE; |
| 40 |
| 41 int nSplitIndex = -1; |
| 42 nSplitIndex = wsDateTime.Find('T'); |
| 43 if (nSplitIndex < 0) |
| 44 nSplitIndex = wsDateTime.Find(' '); |
| 45 if (nSplitIndex < 0) |
| 46 return FALSE; |
| 47 |
| 48 wsDate = wsDateTime.Left(nSplitIndex); |
| 49 if (!wsDate.IsEmpty()) { |
| 50 int32_t iCount = wsDate.GetLength(); |
| 51 int32_t i = 0; |
| 52 for (i = 0; i < iCount; i++) { |
| 53 if (wsDate[i] >= '0' && wsDate[i] <= '9') |
| 54 break; |
| 55 } |
| 56 if (i == iCount) |
| 57 return FALSE; |
31 } | 58 } |
32 if (cc >= len) { | 59 wsTime = wsDateTime.Right(wsDateTime.GetLength() - nSplitIndex - 1); |
33 return 0xff000000; | 60 if (!wsTime.IsEmpty()) { |
34 } | 61 int32_t iCount = wsTime.GetLength(); |
35 while (cc < len) { | 62 int32_t i = 0; |
36 if (str[cc] == ',' || !XFA_IsDigit(str[cc])) { | 63 for (i = 0; i < iCount; i++) { |
37 break; | 64 if (wsTime[i] >= '0' && wsTime[i] <= '9') |
| 65 break; |
38 } | 66 } |
39 r = r * 10 + str[cc] - '0'; | 67 if (i == iCount) |
40 cc++; | 68 return FALSE; |
41 } | |
42 if (cc < len && str[cc] == ',') { | |
43 cc++; | |
44 while (XFA_IsSpace(str[cc]) && cc < len) { | |
45 cc++; | |
46 } | |
47 while (cc < len) { | |
48 if (str[cc] == ',' || !XFA_IsDigit(str[cc])) { | |
49 break; | |
50 } | |
51 g = g * 10 + str[cc] - '0'; | |
52 cc++; | |
53 } | |
54 if (cc < len && str[cc] == ',') { | |
55 cc++; | |
56 while (XFA_IsSpace(str[cc]) && cc < len) { | |
57 cc++; | |
58 } | |
59 while (cc < len) { | |
60 if (str[cc] == ',' || !XFA_IsDigit(str[cc])) { | |
61 break; | |
62 } | |
63 b = b * 10 + str[cc] - '0'; | |
64 cc++; | |
65 } | |
66 } | |
67 } | |
68 return (0xff << 24) | (r << 16) | (g << 8) | b; | |
69 } | |
70 XFA_ELEMENT CXFA_Data::GetClassID() const { | |
71 return m_pNode ? m_pNode->GetClassID() : XFA_ELEMENT_UNKNOWN; | |
72 } | |
73 FX_BOOL CXFA_Data::TryMeasure(XFA_ATTRIBUTE eAttr, | |
74 FX_FLOAT& fValue, | |
75 FX_BOOL bUseDefault) const { | |
76 CXFA_Measurement ms; | |
77 if (m_pNode->TryMeasure(eAttr, ms, bUseDefault)) { | |
78 fValue = ms.ToUnit(XFA_UNIT_Pt); | |
79 return TRUE; | |
80 } | |
81 return FALSE; | |
82 } | |
83 FX_BOOL CXFA_Data::SetMeasure(XFA_ATTRIBUTE eAttr, FX_FLOAT fValue) { | |
84 CXFA_Measurement ms(fValue, XFA_UNIT_Pt); | |
85 return m_pNode->SetMeasure(eAttr, ms); | |
86 } | |
87 CXFA_Fill::CXFA_Fill(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
88 CXFA_Fill::~CXFA_Fill() {} | |
89 int32_t CXFA_Fill::GetPresence() { | |
90 return m_pNode->GetEnum(XFA_ATTRIBUTE_Presence); | |
91 } | |
92 void CXFA_Fill::SetColor(FX_ARGB color) { | |
93 CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Color); | |
94 CFX_WideString wsColor; | |
95 int a, r, g, b; | |
96 ArgbDecode(color, a, r, g, b); | |
97 wsColor.Format(L"%d,%d,%d", r, g, b); | |
98 pNode->SetCData(XFA_ATTRIBUTE_Value, wsColor); | |
99 } | |
100 FX_ARGB CXFA_Fill::GetColor(FX_BOOL bText) { | |
101 if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_ELEMENT_Color)) { | |
102 CFX_WideStringC wsColor; | |
103 if (pNode->TryCData(XFA_ATTRIBUTE_Value, wsColor, FALSE)) { | |
104 return XFA_WStringToColor(wsColor); | |
105 } | |
106 } | |
107 if (bText) { | |
108 return 0xFF000000; | |
109 } | |
110 return 0xFFFFFFFF; | |
111 } | |
112 int32_t CXFA_Fill::GetFillType() { | |
113 CXFA_Node* pChild = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | |
114 while (pChild) { | |
115 int32_t eType = pChild->GetClassID(); | |
116 if (eType != XFA_ELEMENT_Color && eType != XFA_ELEMENT_Extras) { | |
117 return eType; | |
118 } | |
119 pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling); | |
120 } | |
121 return XFA_ELEMENT_Solid; | |
122 } | |
123 int32_t CXFA_Fill::GetPattern(FX_ARGB& foreColor) { | |
124 CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Pattern); | |
125 if (CXFA_Node* pColor = pNode->GetChild(0, XFA_ELEMENT_Color)) { | |
126 CFX_WideStringC wsColor; | |
127 pColor->TryCData(XFA_ATTRIBUTE_Value, wsColor, FALSE); | |
128 foreColor = XFA_WStringToColor(wsColor); | |
129 } else { | |
130 foreColor = 0xFF000000; | |
131 } | |
132 return pNode->GetEnum(XFA_ATTRIBUTE_Type); | |
133 } | |
134 int32_t CXFA_Fill::GetStipple(FX_ARGB& stippleColor) { | |
135 CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Stipple); | |
136 int32_t eAttr = 50; | |
137 pNode->TryInteger(XFA_ATTRIBUTE_Rate, eAttr); | |
138 if (CXFA_Node* pColor = pNode->GetChild(0, XFA_ELEMENT_Color)) { | |
139 CFX_WideStringC wsColor; | |
140 pColor->TryCData(XFA_ATTRIBUTE_Value, wsColor, FALSE); | |
141 stippleColor = XFA_WStringToColor(wsColor); | |
142 } else { | |
143 stippleColor = 0xFF000000; | |
144 } | |
145 return eAttr; | |
146 } | |
147 int32_t CXFA_Fill::GetLinear(FX_ARGB& endColor) { | |
148 CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Linear); | |
149 XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_ToRight; | |
150 pNode->TryEnum(XFA_ATTRIBUTE_Type, eAttr); | |
151 if (CXFA_Node* pColor = pNode->GetChild(0, XFA_ELEMENT_Color)) { | |
152 CFX_WideStringC wsColor; | |
153 pColor->TryCData(XFA_ATTRIBUTE_Value, wsColor, FALSE); | |
154 endColor = XFA_WStringToColor(wsColor); | |
155 } else { | |
156 endColor = 0xFF000000; | |
157 } | |
158 return eAttr; | |
159 } | |
160 int32_t CXFA_Fill::GetRadial(FX_ARGB& endColor) { | |
161 CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Radial); | |
162 XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_ToEdge; | |
163 pNode->TryEnum(XFA_ATTRIBUTE_Type, eAttr); | |
164 if (CXFA_Node* pColor = pNode->GetChild(0, XFA_ELEMENT_Color)) { | |
165 CFX_WideStringC wsColor; | |
166 pColor->TryCData(XFA_ATTRIBUTE_Value, wsColor, FALSE); | |
167 endColor = XFA_WStringToColor(wsColor); | |
168 } else { | |
169 endColor = 0xFF000000; | |
170 } | |
171 return eAttr; | |
172 } | |
173 CXFA_Margin::CXFA_Margin(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
174 FX_BOOL CXFA_Margin::GetLeftInset(FX_FLOAT& fInset, FX_FLOAT fDefInset) const { | |
175 fInset = fDefInset; | |
176 return TryMeasure(XFA_ATTRIBUTE_LeftInset, fInset); | |
177 } | |
178 FX_BOOL CXFA_Margin::GetTopInset(FX_FLOAT& fInset, FX_FLOAT fDefInset) const { | |
179 fInset = fDefInset; | |
180 return TryMeasure(XFA_ATTRIBUTE_TopInset, fInset); | |
181 } | |
182 FX_BOOL CXFA_Margin::GetRightInset(FX_FLOAT& fInset, FX_FLOAT fDefInset) const { | |
183 fInset = fDefInset; | |
184 return TryMeasure(XFA_ATTRIBUTE_RightInset, fInset); | |
185 } | |
186 FX_BOOL CXFA_Margin::GetBottomInset(FX_FLOAT& fInset, | |
187 FX_FLOAT fDefInset) const { | |
188 fInset = fDefInset; | |
189 return TryMeasure(XFA_ATTRIBUTE_BottomInset, fInset); | |
190 } | |
191 CXFA_Font::CXFA_Font(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
192 FX_FLOAT CXFA_Font::GetBaselineShift() { | |
193 return m_pNode->GetMeasure(XFA_ATTRIBUTE_BaselineShift).ToUnit(XFA_UNIT_Pt); | |
194 } | |
195 FX_FLOAT CXFA_Font::GetHorizontalScale() { | |
196 CFX_WideString wsValue; | |
197 m_pNode->TryCData(XFA_ATTRIBUTE_FontHorizontalScale, wsValue); | |
198 int32_t iScale = FXSYS_wtoi((const FX_WCHAR*)wsValue); | |
199 return iScale > 0 ? (FX_FLOAT)iScale : 100.0f; | |
200 } | |
201 FX_FLOAT CXFA_Font::GetVerticalScale() { | |
202 CFX_WideString wsValue; | |
203 m_pNode->TryCData(XFA_ATTRIBUTE_FontVerticalScale, wsValue); | |
204 int32_t iScale = FXSYS_wtoi((const FX_WCHAR*)wsValue); | |
205 return iScale > 0 ? (FX_FLOAT)iScale : 100.0f; | |
206 } | |
207 FX_FLOAT CXFA_Font::GetLetterSpacing() { | |
208 CFX_WideStringC wsValue; | |
209 if (!m_pNode->TryCData(XFA_ATTRIBUTE_LetterSpacing, wsValue)) { | |
210 return 0; | |
211 } | |
212 CXFA_Measurement ms(wsValue); | |
213 if (ms.GetUnit() == XFA_UNIT_Em) { | |
214 return ms.GetValue() * GetFontSize(); | |
215 } | |
216 return ms.ToUnit(XFA_UNIT_Pt); | |
217 } | |
218 int32_t CXFA_Font::GetLineThrough() { | |
219 int32_t iValue = 0; | |
220 m_pNode->TryInteger(XFA_ATTRIBUTE_LineThrough, iValue); | |
221 return iValue; | |
222 } | |
223 int32_t CXFA_Font::GetUnderline() { | |
224 int32_t iValue = 0; | |
225 m_pNode->TryInteger(XFA_ATTRIBUTE_Underline, iValue); | |
226 return iValue; | |
227 } | |
228 int32_t CXFA_Font::GetUnderlinePeriod() { | |
229 XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_All; | |
230 m_pNode->TryEnum(XFA_ATTRIBUTE_UnderlinePeriod, eAttr); | |
231 return eAttr; | |
232 } | |
233 FX_FLOAT CXFA_Font::GetFontSize() { | |
234 CXFA_Measurement ms; | |
235 m_pNode->TryMeasure(XFA_ATTRIBUTE_Size, ms); | |
236 return ms.ToUnit(XFA_UNIT_Pt); | |
237 } | |
238 void CXFA_Font::GetTypeface(CFX_WideStringC& wsTypeFace) { | |
239 m_pNode->TryCData(XFA_ATTRIBUTE_Typeface, wsTypeFace); | |
240 } | |
241 FX_BOOL CXFA_Font::IsBold() { | |
242 XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_Normal; | |
243 m_pNode->TryEnum(XFA_ATTRIBUTE_Weight, eAttr); | |
244 return eAttr == XFA_ATTRIBUTEENUM_Bold; | |
245 } | |
246 FX_BOOL CXFA_Font::IsItalic() { | |
247 XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_Normal; | |
248 m_pNode->TryEnum(XFA_ATTRIBUTE_Posture, eAttr); | |
249 return eAttr == XFA_ATTRIBUTEENUM_Italic; | |
250 } | |
251 void CXFA_Font::SetColor(FX_ARGB color) { | |
252 CXFA_Fill fill(m_pNode->GetProperty(0, XFA_ELEMENT_Fill)); | |
253 fill.SetColor(color); | |
254 } | |
255 FX_ARGB CXFA_Font::GetColor() { | |
256 CXFA_Fill fill(m_pNode->GetChild(0, XFA_ELEMENT_Fill)); | |
257 return fill ? fill.GetColor(TRUE) : 0xFF000000; | |
258 } | |
259 CXFA_Caption::CXFA_Caption(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
260 int32_t CXFA_Caption::GetPresence() { | |
261 XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_Visible; | |
262 m_pNode->TryEnum(XFA_ATTRIBUTE_Presence, eAttr); | |
263 return eAttr; | |
264 } | |
265 int32_t CXFA_Caption::GetPlacementType() { | |
266 XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_Left; | |
267 m_pNode->TryEnum(XFA_ATTRIBUTE_Placement, eAttr); | |
268 return eAttr; | |
269 } | |
270 FX_FLOAT CXFA_Caption::GetReserve() { | |
271 CXFA_Measurement ms; | |
272 m_pNode->TryMeasure(XFA_ATTRIBUTE_Reserve, ms); | |
273 return ms.ToUnit(XFA_UNIT_Pt); | |
274 } | |
275 CXFA_Margin CXFA_Caption::GetMargin() { | |
276 return CXFA_Margin(m_pNode ? m_pNode->GetChild(0, XFA_ELEMENT_Margin) : NULL); | |
277 } | |
278 CXFA_Font CXFA_Caption::GetFont() { | |
279 return CXFA_Font(m_pNode ? m_pNode->GetChild(0, XFA_ELEMENT_Font) : NULL); | |
280 } | |
281 CXFA_Value CXFA_Caption::GetValue() { | |
282 return CXFA_Value(m_pNode ? m_pNode->GetChild(0, XFA_ELEMENT_Value) : NULL); | |
283 } | |
284 CXFA_Para::CXFA_Para(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
285 int32_t CXFA_Para::GetHorizontalAlign() { | |
286 XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_Left; | |
287 m_pNode->TryEnum(XFA_ATTRIBUTE_HAlign, eAttr); | |
288 return eAttr; | |
289 } | |
290 int32_t CXFA_Para::GetVerticalAlign() { | |
291 XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_Top; | |
292 m_pNode->TryEnum(XFA_ATTRIBUTE_VAlign, eAttr); | |
293 return eAttr; | |
294 } | |
295 FX_FLOAT CXFA_Para::GetLineHeight() { | |
296 CXFA_Measurement ms; | |
297 m_pNode->TryMeasure(XFA_ATTRIBUTE_LineHeight, ms); | |
298 return ms.ToUnit(XFA_UNIT_Pt); | |
299 } | |
300 FX_FLOAT CXFA_Para::GetMarginLeft() { | |
301 CXFA_Measurement ms; | |
302 m_pNode->TryMeasure(XFA_ATTRIBUTE_MarginLeft, ms); | |
303 return ms.ToUnit(XFA_UNIT_Pt); | |
304 } | |
305 FX_FLOAT CXFA_Para::GetMarginRight() { | |
306 CXFA_Measurement ms; | |
307 m_pNode->TryMeasure(XFA_ATTRIBUTE_MarginRight, ms); | |
308 return ms.ToUnit(XFA_UNIT_Pt); | |
309 } | |
310 FX_FLOAT CXFA_Para::GetSpaceAbove() { | |
311 CXFA_Measurement ms; | |
312 m_pNode->TryMeasure(XFA_ATTRIBUTE_SpaceAbove, ms); | |
313 return ms.ToUnit(XFA_UNIT_Pt); | |
314 } | |
315 FX_FLOAT CXFA_Para::GetSpaceBelow() { | |
316 CXFA_Measurement ms; | |
317 m_pNode->TryMeasure(XFA_ATTRIBUTE_SpaceBelow, ms); | |
318 return ms.ToUnit(XFA_UNIT_Pt); | |
319 } | |
320 FX_FLOAT CXFA_Para::GetTextIndent() { | |
321 CXFA_Measurement ms; | |
322 m_pNode->TryMeasure(XFA_ATTRIBUTE_TextIndent, ms); | |
323 return ms.ToUnit(XFA_UNIT_Pt); | |
324 } | |
325 CXFA_Event::CXFA_Event(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
326 int32_t CXFA_Event::GetActivity() { | |
327 return m_pNode->GetEnum(XFA_ATTRIBUTE_Activity); | |
328 } | |
329 int32_t CXFA_Event::GetEventType() { | |
330 CXFA_Node* pChild = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | |
331 while (pChild) { | |
332 int32_t eType = pChild->GetClassID(); | |
333 if (eType != XFA_ELEMENT_Extras) { | |
334 return eType; | |
335 } | |
336 pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling); | |
337 } | |
338 return XFA_ELEMENT_UNKNOWN; | |
339 } | |
340 void CXFA_Event::GetRef(CFX_WideStringC& wsRef) { | |
341 m_pNode->TryCData(XFA_ATTRIBUTE_Ref, wsRef); | |
342 } | |
343 CXFA_Script CXFA_Event::GetScript() { | |
344 return CXFA_Script(m_pNode->GetChild(0, XFA_ELEMENT_Script)); | |
345 } | |
346 CXFA_Submit CXFA_Event::GetSubmit() { | |
347 return CXFA_Submit(m_pNode->GetChild(0, XFA_ELEMENT_Submit)); | |
348 } | |
349 void CXFA_Event::GetSignDataTarget(CFX_WideString& wsTarget) { | |
350 if (CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_SignData)) { | |
351 CFX_WideStringC wsCData; | |
352 pNode->TryCData(XFA_ATTRIBUTE_Target, wsCData); | |
353 wsTarget = wsCData; | |
354 } | |
355 } | |
356 CXFA_Script::CXFA_Script(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
357 XFA_SCRIPTTYPE CXFA_Script::GetContentType() { | |
358 CFX_WideStringC cData; | |
359 if (m_pNode->TryCData(XFA_ATTRIBUTE_ContentType, cData, FALSE)) { | |
360 if (cData == FX_WSTRC(L"application/x-javascript")) { | |
361 return XFA_SCRIPTTYPE_Javascript; | |
362 } else if (cData == FX_WSTRC(L"application/x-formcalc")) { | |
363 return XFA_SCRIPTTYPE_Formcalc; | |
364 } else { | |
365 return XFA_SCRIPTTYPE_Unkown; | |
366 } | |
367 } | |
368 return XFA_SCRIPTTYPE_Formcalc; | |
369 } | |
370 int32_t CXFA_Script::GetRunAt() { | |
371 return m_pNode->GetEnum(XFA_ATTRIBUTE_RunAt); | |
372 } | |
373 void CXFA_Script::GetExpression(CFX_WideString& wsExpression) { | |
374 m_pNode->TryContent(wsExpression); | |
375 } | |
376 CXFA_Submit::CXFA_Submit(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
377 FX_BOOL CXFA_Submit::IsSubmitEmbedPDF() { | |
378 return m_pNode->GetBoolean(XFA_ATTRIBUTE_EmbedPDF); | |
379 } | |
380 int32_t CXFA_Submit::GetSubmitFormat() { | |
381 return m_pNode->GetEnum(XFA_ATTRIBUTE_Format); | |
382 } | |
383 void CXFA_Submit::GetSubmitTarget(CFX_WideStringC& wsTarget) { | |
384 m_pNode->TryCData(XFA_ATTRIBUTE_Target, wsTarget); | |
385 } | |
386 void CXFA_Submit::GetSubmitXDPContent(CFX_WideStringC& wsContent) { | |
387 m_pNode->TryCData(XFA_ATTRIBUTE_XdpContent, wsContent); | |
388 } | |
389 XFA_ELEMENT CXFA_Value::GetChildValueClassID() { | |
390 if (!m_pNode) { | |
391 return XFA_ELEMENT_UNKNOWN; | |
392 } | |
393 if (CXFA_Node* pNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild)) { | |
394 return pNode->GetClassID(); | |
395 } | |
396 return XFA_ELEMENT_UNKNOWN; | |
397 } | |
398 FX_BOOL CXFA_Value::GetChildValueContent(CFX_WideString& wsContent) { | |
399 if (!m_pNode) { | |
400 return FALSE; | |
401 } | |
402 if (CXFA_Node* pNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild)) { | |
403 return pNode->TryContent(wsContent); | |
404 } | |
405 return FALSE; | |
406 } | |
407 CXFA_Arc CXFA_Value::GetArc() { | |
408 return CXFA_Arc(m_pNode ? m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild) | |
409 : nullptr); | |
410 } | |
411 CXFA_Line CXFA_Value::GetLine() { | |
412 return CXFA_Line(m_pNode ? m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild) | |
413 : nullptr); | |
414 } | |
415 CXFA_Rectangle CXFA_Value::GetRectangle() { | |
416 return CXFA_Rectangle(m_pNode ? m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild) | |
417 : nullptr); | |
418 } | |
419 CXFA_Text CXFA_Value::GetText() { | |
420 return CXFA_Text(m_pNode ? m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild) | |
421 : nullptr); | |
422 } | |
423 CXFA_ExData CXFA_Value::GetExData() { | |
424 return CXFA_ExData(m_pNode ? m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild) | |
425 : nullptr); | |
426 } | |
427 CXFA_Image CXFA_Value::GetImage() { | |
428 return CXFA_Image( | |
429 m_pNode ? (m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild)) : nullptr, | |
430 TRUE); | |
431 } | |
432 int32_t CXFA_Line::GetHand() { | |
433 return m_pNode->GetEnum(XFA_ATTRIBUTE_Hand); | |
434 } | |
435 FX_BOOL CXFA_Line::GetSlop() { | |
436 XFA_ATTRIBUTEENUM eSlop = m_pNode->GetEnum(XFA_ATTRIBUTE_Slope); | |
437 return eSlop == XFA_ATTRIBUTEENUM_Slash; | |
438 } | |
439 CXFA_Edge CXFA_Line::GetEdge() { | |
440 return CXFA_Edge(m_pNode->GetChild(0, XFA_ELEMENT_Edge)); | |
441 } | |
442 CXFA_Text::CXFA_Text(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
443 void CXFA_Text::GetContent(CFX_WideString& wsText) { | |
444 m_pNode->TryContent(wsText); | |
445 } | |
446 CXFA_ExData::CXFA_ExData(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
447 FX_BOOL CXFA_ExData::SetContentType(const CFX_WideString& wsContentType) { | |
448 return m_pNode->SetCData(XFA_ATTRIBUTE_ContentType, wsContentType); | |
449 } | |
450 CXFA_Image::CXFA_Image(CXFA_Node* pNode, FX_BOOL bDefValue) | |
451 : CXFA_Data(pNode), m_bDefValue(bDefValue) {} | |
452 int32_t CXFA_Image::GetAspect() { | |
453 return m_pNode->GetEnum(XFA_ATTRIBUTE_Aspect); | |
454 } | |
455 FX_BOOL CXFA_Image::GetContentType(CFX_WideString& wsContentType) { | |
456 return m_pNode->TryCData(XFA_ATTRIBUTE_ContentType, wsContentType); | |
457 } | |
458 FX_BOOL CXFA_Image::GetHref(CFX_WideString& wsHref) { | |
459 if (m_bDefValue) { | |
460 return m_pNode->TryCData(XFA_ATTRIBUTE_Href, wsHref); | |
461 } | |
462 return m_pNode->GetAttribute(FX_WSTRC(L"href"), wsHref); | |
463 } | |
464 int32_t CXFA_Image::GetTransferEncoding() { | |
465 if (m_bDefValue) { | |
466 return m_pNode->GetEnum(XFA_ATTRIBUTE_TransferEncoding); | |
467 } | |
468 return XFA_ATTRIBUTEENUM_Base64; | |
469 } | |
470 FX_BOOL CXFA_Image::GetContent(CFX_WideString& wsText) { | |
471 return m_pNode->TryContent(wsText); | |
472 } | |
473 FX_BOOL CXFA_Image::SetContentType(const CFX_WideString& wsContentType) { | |
474 return m_pNode->SetCData(XFA_ATTRIBUTE_ContentType, wsContentType); | |
475 } | |
476 FX_BOOL CXFA_Image::SetHref(const CFX_WideString& wsHref) { | |
477 if (m_bDefValue) { | |
478 return m_pNode->SetCData(XFA_ATTRIBUTE_Href, wsHref); | |
479 } | |
480 return m_pNode->SetAttribute(XFA_ATTRIBUTE_Href, wsHref.AsWideStringC()); | |
481 } | |
482 FX_BOOL CXFA_Image::SetTransferEncoding(int32_t iTransferEncoding) { | |
483 if (m_bDefValue) { | |
484 return m_pNode->SetEnum(XFA_ATTRIBUTE_TransferEncoding, | |
485 (XFA_ATTRIBUTEENUM)iTransferEncoding); | |
486 } | 69 } |
487 return TRUE; | 70 return TRUE; |
488 } | 71 } |
489 CXFA_Calculate::CXFA_Calculate(CXFA_Node* pNode) : CXFA_Data(pNode) {} | 72 |
490 int32_t CXFA_Calculate::GetOverride() { | 73 } // namespace |
491 XFA_ATTRIBUTEENUM eAtt = XFA_ATTRIBUTEENUM_Error; | 74 |
492 m_pNode->TryEnum(XFA_ATTRIBUTE_Override, eAtt, FALSE); | |
493 return eAtt; | |
494 } | |
495 CXFA_Script CXFA_Calculate::GetScript() { | |
496 return CXFA_Script(m_pNode->GetChild(0, XFA_ELEMENT_Script)); | |
497 } | |
498 void CXFA_Calculate::GetMessageText(CFX_WideString& wsMessage) { | |
499 if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_ELEMENT_Message)) { | |
500 CXFA_Text text(pNode->GetChild(0, XFA_ELEMENT_Text)); | |
501 if (text) { | |
502 text.GetContent(wsMessage); | |
503 } | |
504 } | |
505 } | |
506 CXFA_Validate::CXFA_Validate(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
507 int32_t CXFA_Validate::GetFormatTest() { | |
508 return m_pNode->GetEnum(XFA_ATTRIBUTE_FormatTest); | |
509 } | |
510 FX_BOOL CXFA_Validate::SetTestValue(int32_t iType, | |
511 CFX_WideString& wsValue, | |
512 XFA_ATTRIBUTEENUM eName) { | |
513 const XFA_ATTRIBUTEENUMINFO* pInfo = | |
514 XFA_GetAttributeEnumByName(wsValue.AsWideStringC()); | |
515 if (pInfo) { | |
516 eName = pInfo->eName; | |
517 } | |
518 m_pNode->SetEnum((XFA_ATTRIBUTE)iType, eName, FALSE); | |
519 return TRUE; | |
520 } | |
521 FX_BOOL CXFA_Validate::SetNullTest(CFX_WideString wsValue) { | |
522 return SetTestValue(XFA_ATTRIBUTE_NullTest, wsValue, | |
523 XFA_ATTRIBUTEENUM_Disabled); | |
524 } | |
525 int32_t CXFA_Validate::GetNullTest() { | |
526 return m_pNode->GetEnum(XFA_ATTRIBUTE_NullTest); | |
527 } | |
528 int32_t CXFA_Validate::GetScriptTest() { | |
529 return m_pNode->GetEnum(XFA_ATTRIBUTE_ScriptTest); | |
530 } | |
531 void CXFA_Validate::GetMessageText(CFX_WideString& wsMessage, | |
532 const CFX_WideStringC& wsMessageType) { | |
533 if (CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Message, FALSE)) { | |
534 CXFA_Node* pItemNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | |
535 for (; pItemNode; | |
536 pItemNode = pItemNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { | |
537 if (pItemNode->GetClassID() != XFA_ELEMENT_Text) { | |
538 continue; | |
539 } | |
540 CFX_WideStringC wsName; | |
541 pItemNode->TryCData(XFA_ATTRIBUTE_Name, wsName); | |
542 if (wsName.IsEmpty() || wsName == wsMessageType) { | |
543 pItemNode->TryContent(wsMessage); | |
544 return; | |
545 } | |
546 } | |
547 } | |
548 } | |
549 void CXFA_Validate::SetFormatMessageText(CFX_WideString wsMessage) { | |
550 SetMessageText(wsMessage, FX_WSTRC(L"formatTest")); | |
551 } | |
552 void CXFA_Validate::GetFormatMessageText(CFX_WideString& wsMessage) { | |
553 GetMessageText(wsMessage, FX_WSTRC(L"formatTest")); | |
554 } | |
555 void CXFA_Validate::SetNullMessageText(CFX_WideString wsMessage) { | |
556 SetMessageText(wsMessage, FX_WSTRC(L"nullTest")); | |
557 } | |
558 void CXFA_Validate::GetNullMessageText(CFX_WideString& wsMessage) { | |
559 GetMessageText(wsMessage, FX_WSTRC(L"nullTest")); | |
560 } | |
561 void CXFA_Validate::SetMessageText(CFX_WideString& wsMessage, | |
562 const CFX_WideStringC& wsMessageType) { | |
563 if (CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Message, TRUE)) { | |
564 CXFA_Node* pItemNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | |
565 for (; pItemNode; | |
566 pItemNode = pItemNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { | |
567 if (pItemNode->GetClassID() != XFA_ELEMENT_Text) { | |
568 continue; | |
569 } | |
570 CFX_WideStringC wsName; | |
571 pItemNode->TryCData(XFA_ATTRIBUTE_Name, wsName); | |
572 if (wsName.IsEmpty() || wsName == wsMessageType) { | |
573 pItemNode->SetContent(wsMessage, wsMessage, FALSE); | |
574 return; | |
575 } | |
576 } | |
577 CXFA_Node* pTextNode = pNode->CreateSamePacketNode(XFA_ELEMENT_Text); | |
578 pNode->InsertChild(pTextNode); | |
579 pTextNode->SetCData(XFA_ATTRIBUTE_Name, wsMessageType, FALSE); | |
580 pTextNode->SetContent(wsMessage, wsMessage, FALSE); | |
581 } | |
582 } | |
583 void CXFA_Validate::GetScriptMessageText(CFX_WideString& wsMessage) { | |
584 GetMessageText(wsMessage, FX_WSTRC(L"scriptTest")); | |
585 } | |
586 void CXFA_Validate::SetScriptMessageText(CFX_WideString wsMessage) { | |
587 SetMessageText(wsMessage, FX_WSTRC(L"scriptTest")); | |
588 } | |
589 void CXFA_Validate::GetPicture(CFX_WideString& wsPicture) { | |
590 if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_ELEMENT_Picture)) { | |
591 pNode->TryContent(wsPicture); | |
592 } | |
593 } | |
594 CXFA_Script CXFA_Validate::GetScript() { | |
595 return CXFA_Script(m_pNode->GetChild(0, XFA_ELEMENT_Script)); | |
596 } | |
597 CXFA_Bind::CXFA_Bind(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
598 void CXFA_Bind::GetPicture(CFX_WideString& wsPicture) { | |
599 if (CXFA_Node* pPicture = m_pNode->GetChild(0, XFA_ELEMENT_Picture)) { | |
600 pPicture->TryContent(wsPicture); | |
601 } | |
602 } | |
603 CXFA_Assist::CXFA_Assist(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
604 CXFA_ToolTip CXFA_Assist::GetToolTip() { | |
605 return CXFA_ToolTip(m_pNode->GetChild(0, XFA_ELEMENT_ToolTip)); | |
606 } | |
607 CXFA_ToolTip::CXFA_ToolTip(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
608 FX_BOOL CXFA_ToolTip::GetTip(CFX_WideString& wsTip) { | |
609 return m_pNode->TryContent(wsTip); | |
610 } | |
611 CXFA_BindItems::CXFA_BindItems(CXFA_Node* pNode) : CXFA_Data(pNode) {} | |
612 void CXFA_BindItems::GetLabelRef(CFX_WideStringC& wsLabelRef) { | |
613 m_pNode->TryCData(XFA_ATTRIBUTE_LabelRef, wsLabelRef); | |
614 } | |
615 void CXFA_BindItems::GetValueRef(CFX_WideStringC& wsValueRef) { | |
616 m_pNode->TryCData(XFA_ATTRIBUTE_ValueRef, wsValueRef); | |
617 } | |
618 void CXFA_BindItems::GetRef(CFX_WideStringC& wsRef) { | |
619 m_pNode->TryCData(XFA_ATTRIBUTE_Ref, wsRef); | |
620 } | |
621 FX_BOOL CXFA_BindItems::SetConnection(const CFX_WideString& wsConnection) { | |
622 return m_pNode->SetCData(XFA_ATTRIBUTE_Connection, wsConnection); | |
623 } | |
624 int32_t CXFA_Box::GetHand() const { | |
625 if (!m_pNode) { | |
626 return XFA_ATTRIBUTEENUM_Even; | |
627 } | |
628 return m_pNode->GetEnum(XFA_ATTRIBUTE_Hand); | |
629 } | |
630 int32_t CXFA_Box::GetPresence() const { | |
631 if (!m_pNode) { | |
632 return XFA_ATTRIBUTEENUM_Hidden; | |
633 } | |
634 return m_pNode->GetEnum(XFA_ATTRIBUTE_Presence); | |
635 } | |
636 int32_t CXFA_Box::CountEdges() const { | |
637 if (!m_pNode) { | |
638 return 0; | |
639 } | |
640 return m_pNode->CountChildren(XFA_ELEMENT_Edge); | |
641 } | |
642 CXFA_Edge CXFA_Box::GetEdge(int32_t nIndex) const { | |
643 return CXFA_Edge( | |
644 m_pNode ? m_pNode->GetProperty(nIndex, XFA_ELEMENT_Edge, nIndex == 0) | |
645 : nullptr); | |
646 } | |
647 static void XFA_BOX_GetStrokes(CXFA_Node* pNode, | |
648 CXFA_StrokeArray& strokes, | |
649 FX_BOOL bNULL) { | |
650 strokes.RemoveAll(); | |
651 if (!pNode) { | |
652 return; | |
653 } | |
654 strokes.SetSize(8); | |
655 int32_t i, j; | |
656 for (i = 0, j = 0; i < 4; i++) { | |
657 CXFA_Corner corner = | |
658 CXFA_Corner(pNode->GetProperty(i, XFA_ELEMENT_Corner, i == 0)); | |
659 if (corner || i == 0) { | |
660 strokes.SetAt(j, corner); | |
661 } else if (bNULL) { | |
662 strokes.SetAt(j, CXFA_Stroke(nullptr)); | |
663 } else if (i == 1) { | |
664 strokes.SetAt(j, strokes[0]); | |
665 } else if (i == 2) { | |
666 strokes.SetAt(j, strokes[0]); | |
667 } else { | |
668 strokes.SetAt(j, strokes[2]); | |
669 } | |
670 j++; | |
671 CXFA_Edge edge = CXFA_Edge(pNode->GetProperty(i, XFA_ELEMENT_Edge, i == 0)); | |
672 if (edge || i == 0) { | |
673 strokes.SetAt(j, edge); | |
674 } else if (bNULL) { | |
675 strokes.SetAt(j, CXFA_Stroke(nullptr)); | |
676 } else if (i == 1) { | |
677 strokes.SetAt(j, strokes[1]); | |
678 } else if (i == 2) { | |
679 strokes.SetAt(j, strokes[1]); | |
680 } else { | |
681 strokes.SetAt(j, strokes[3]); | |
682 } | |
683 j++; | |
684 } | |
685 } | |
686 void CXFA_Box::GetStrokes(CXFA_StrokeArray& strokes) const { | |
687 XFA_BOX_GetStrokes(m_pNode, strokes, FALSE); | |
688 } | |
689 FX_BOOL CXFA_Box::IsCircular() const { | |
690 if (!m_pNode) { | |
691 return FALSE; | |
692 } | |
693 return m_pNode->GetBoolean(XFA_ATTRIBUTE_Circular); | |
694 } | |
695 FX_BOOL CXFA_Box::GetStartAngle(FX_FLOAT& fStartAngle) const { | |
696 fStartAngle = 0; | |
697 if (!m_pNode) { | |
698 return FALSE; | |
699 } | |
700 CXFA_Measurement ms; | |
701 FX_BOOL bRet = m_pNode->TryMeasure(XFA_ATTRIBUTE_StartAngle, ms, FALSE); | |
702 if (bRet) { | |
703 fStartAngle = ms.GetValue(); | |
704 } | |
705 return bRet; | |
706 } | |
707 FX_BOOL CXFA_Box::GetSweepAngle(FX_FLOAT& fSweepAngle) const { | |
708 fSweepAngle = 360; | |
709 if (!m_pNode) { | |
710 return FALSE; | |
711 } | |
712 CXFA_Measurement ms; | |
713 FX_BOOL bRet = m_pNode->TryMeasure(XFA_ATTRIBUTE_SweepAngle, ms, FALSE); | |
714 if (bRet) { | |
715 fSweepAngle = ms.GetValue(); | |
716 } | |
717 return bRet; | |
718 } | |
719 CXFA_Fill CXFA_Box::GetFill(FX_BOOL bModified) const { | |
720 if (!m_pNode) { | |
721 return CXFA_Fill(nullptr); | |
722 } | |
723 CXFA_Node* pFillNode = m_pNode->GetProperty(0, XFA_ELEMENT_Fill, bModified); | |
724 return CXFA_Fill(pFillNode); | |
725 } | |
726 CXFA_Margin CXFA_Box::GetMargin() const { | |
727 return CXFA_Margin(m_pNode ? m_pNode->GetChild(0, XFA_ELEMENT_Margin) | |
728 : nullptr); | |
729 } | |
730 static int32_t XFA_BOX_3DStyle(const CXFA_StrokeArray& strokes, | |
731 CXFA_Stroke& stroke) { | |
732 int32_t iCount = strokes.GetSize(); | |
733 if (iCount < 1) { | |
734 return 0; | |
735 } | |
736 stroke = strokes[0]; | |
737 for (int32_t i = 1; i < iCount; i++) { | |
738 CXFA_Stroke find = strokes[i]; | |
739 if (!find) { | |
740 continue; | |
741 } | |
742 if (!stroke) { | |
743 stroke = find; | |
744 } else if (stroke.GetStrokeType() != find.GetStrokeType()) { | |
745 stroke = find; | |
746 break; | |
747 } | |
748 } | |
749 int32_t iType = stroke.GetStrokeType(); | |
750 if (iType == XFA_ATTRIBUTEENUM_Lowered || iType == XFA_ATTRIBUTEENUM_Raised || | |
751 iType == XFA_ATTRIBUTEENUM_Etched || | |
752 iType == XFA_ATTRIBUTEENUM_Embossed) { | |
753 return iType; | |
754 } | |
755 return 0; | |
756 } | |
757 int32_t CXFA_Box::Get3DStyle(FX_BOOL& bVisible, FX_FLOAT& fThickness) const { | |
758 if (IsArc()) { | |
759 return 0; | |
760 } | |
761 CXFA_StrokeArray strokes; | |
762 XFA_BOX_GetStrokes(m_pNode, strokes, TRUE); | |
763 CXFA_Stroke stroke(NULL); | |
764 int32_t iType = XFA_BOX_3DStyle(strokes, stroke); | |
765 if (iType) { | |
766 bVisible = stroke.IsVisible(); | |
767 fThickness = stroke.GetThickness(); | |
768 } | |
769 return iType; | |
770 } | |
771 int32_t CXFA_Stroke::GetPresence() const { | |
772 return m_pNode ? m_pNode->GetEnum(XFA_ATTRIBUTE_Presence) | |
773 : XFA_ATTRIBUTEENUM_Invisible; | |
774 } | |
775 int32_t CXFA_Stroke::GetCapType() const { | |
776 if (!m_pNode) { | |
777 return XFA_ATTRIBUTEENUM_Square; | |
778 } | |
779 return m_pNode->GetEnum(XFA_ATTRIBUTE_Cap); | |
780 } | |
781 int32_t CXFA_Stroke::GetStrokeType() const { | |
782 return m_pNode ? m_pNode->GetEnum(XFA_ATTRIBUTE_Stroke) | |
783 : XFA_ATTRIBUTEENUM_Solid; | |
784 } | |
785 FX_FLOAT CXFA_Stroke::GetThickness() const { | |
786 return GetMSThickness().ToUnit(XFA_UNIT_Pt); | |
787 } | |
788 CXFA_Measurement CXFA_Stroke::GetMSThickness() const { | |
789 return m_pNode ? m_pNode->GetMeasure(XFA_ATTRIBUTE_Thickness) | |
790 : XFA_GetAttributeDefaultValue_Measure(XFA_ELEMENT_Edge, | |
791 XFA_ATTRIBUTE_Thickness, | |
792 XFA_XDPPACKET_Form); | |
793 } | |
794 void CXFA_Stroke::SetMSThickness(CXFA_Measurement msThinkness) { | |
795 if (!m_pNode) { | |
796 return; | |
797 } | |
798 m_pNode->SetMeasure(XFA_ATTRIBUTE_Thickness, msThinkness); | |
799 } | |
800 FX_ARGB CXFA_Stroke::GetColor() const { | |
801 if (!m_pNode) { | |
802 return 0xFF000000; | |
803 } | |
804 CXFA_Node* pNode = m_pNode->GetChild(0, XFA_ELEMENT_Color); | |
805 if (!pNode) { | |
806 return 0xFF000000; | |
807 } | |
808 CFX_WideStringC wsColor; | |
809 pNode->TryCData(XFA_ATTRIBUTE_Value, wsColor); | |
810 return XFA_WStringToColor(wsColor); | |
811 } | |
812 void CXFA_Stroke::SetColor(FX_ARGB argb) { | |
813 if (!m_pNode) { | |
814 return; | |
815 } | |
816 CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_ELEMENT_Color); | |
817 CFX_WideString wsColor; | |
818 int a, r, g, b; | |
819 ArgbDecode(argb, a, r, g, b); | |
820 wsColor.Format(L"%d,%d,%d", r, g, b); | |
821 pNode->SetCData(XFA_ATTRIBUTE_Value, wsColor); | |
822 } | |
823 int32_t CXFA_Stroke::GetJoinType() const { | |
824 return m_pNode ? m_pNode->GetEnum(XFA_ATTRIBUTE_Join) | |
825 : XFA_ATTRIBUTEENUM_Square; | |
826 } | |
827 FX_BOOL CXFA_Stroke::IsInverted() const { | |
828 return m_pNode ? m_pNode->GetBoolean(XFA_ATTRIBUTE_Inverted) : FALSE; | |
829 } | |
830 FX_FLOAT CXFA_Stroke::GetRadius() const { | |
831 return m_pNode ? m_pNode->GetMeasure(XFA_ATTRIBUTE_Radius).ToUnit(XFA_UNIT_Pt) | |
832 : 0; | |
833 } | |
834 FX_BOOL CXFA_Stroke::SameStyles(CXFA_Stroke stroke, uint32_t dwFlags) const { | |
835 if (m_pNode == stroke.GetNode()) { | |
836 return TRUE; | |
837 } | |
838 if (FXSYS_fabs(GetThickness() - stroke.GetThickness()) >= 0.01f) { | |
839 return FALSE; | |
840 } | |
841 if ((dwFlags & XFA_STROKE_SAMESTYLE_NoPresence) == 0 && | |
842 IsVisible() != stroke.IsVisible()) { | |
843 return FALSE; | |
844 } | |
845 if (GetStrokeType() != stroke.GetStrokeType()) { | |
846 return FALSE; | |
847 } | |
848 if (GetColor() != stroke.GetColor()) { | |
849 return FALSE; | |
850 } | |
851 if ((dwFlags & XFA_STROKE_SAMESTYLE_Corner) != 0 && | |
852 FXSYS_fabs(GetRadius() - stroke.GetRadius()) >= 0.01f) { | |
853 return FALSE; | |
854 } | |
855 return TRUE; | |
856 } | |
857 FX_FLOAT XFA_GetEdgeThickness(const CXFA_StrokeArray& strokes, | |
858 FX_BOOL b3DStyle, | |
859 int32_t nIndex) { | |
860 FX_FLOAT fThickness = 0; | |
861 { | |
862 if (strokes[nIndex * 2 + 1].GetPresence() == XFA_ATTRIBUTEENUM_Visible) { | |
863 if (nIndex == 0) { | |
864 fThickness += 2.5f; | |
865 } | |
866 fThickness += strokes[nIndex * 2 + 1].GetThickness() * (b3DStyle ? 4 : 2); | |
867 } | |
868 } | |
869 return fThickness; | |
870 } | |
871 CXFA_WidgetData::CXFA_WidgetData(CXFA_Node* pNode) | 75 CXFA_WidgetData::CXFA_WidgetData(CXFA_Node* pNode) |
872 : CXFA_Data(pNode), | 76 : CXFA_Data(pNode), |
873 m_bIsNull(TRUE), | 77 m_bIsNull(TRUE), |
874 m_bPreNull(TRUE), | 78 m_bPreNull(TRUE), |
875 m_pUiChildNode(NULL), | 79 m_pUiChildNode(NULL), |
876 m_eUIType(XFA_ELEMENT_UNKNOWN) {} | 80 m_eUIType(XFA_ELEMENT_UNKNOWN) {} |
| 81 |
877 CXFA_Node* CXFA_WidgetData::GetUIChild() { | 82 CXFA_Node* CXFA_WidgetData::GetUIChild() { |
878 if (m_eUIType == XFA_ELEMENT_UNKNOWN) { | 83 if (m_eUIType == XFA_ELEMENT_UNKNOWN) |
879 m_pUiChildNode = XFA_CreateUIChild(m_pNode, m_eUIType); | 84 m_pUiChildNode = XFA_CreateUIChild(m_pNode, m_eUIType); |
880 } | 85 |
881 return m_pUiChildNode; | 86 return m_pUiChildNode; |
882 } | 87 } |
| 88 |
883 XFA_ELEMENT CXFA_WidgetData::GetUIType() { | 89 XFA_ELEMENT CXFA_WidgetData::GetUIType() { |
884 GetUIChild(); | 90 GetUIChild(); |
885 return m_eUIType; | 91 return m_eUIType; |
886 } | 92 } |
| 93 |
887 CFX_WideString CXFA_WidgetData::GetRawValue() { | 94 CFX_WideString CXFA_WidgetData::GetRawValue() { |
888 return m_pNode->GetContent(); | 95 return m_pNode->GetContent(); |
889 } | 96 } |
| 97 |
890 int32_t CXFA_WidgetData::GetAccess(FX_BOOL bTemplate) { | 98 int32_t CXFA_WidgetData::GetAccess(FX_BOOL bTemplate) { |
891 if (bTemplate) { | 99 if (bTemplate) { |
892 CXFA_Node* pNode = m_pNode->GetTemplateNode(); | 100 CXFA_Node* pNode = m_pNode->GetTemplateNode(); |
893 if (pNode) { | 101 if (pNode) |
894 return pNode->GetEnum(XFA_ATTRIBUTE_Access); | 102 return pNode->GetEnum(XFA_ATTRIBUTE_Access); |
895 } | |
896 return XFA_ATTRIBUTEENUM_Open; | 103 return XFA_ATTRIBUTEENUM_Open; |
897 } | 104 } |
898 CXFA_Node* pNode = m_pNode; | 105 CXFA_Node* pNode = m_pNode; |
899 while (pNode) { | 106 while (pNode) { |
900 int32_t iAcc = pNode->GetEnum(XFA_ATTRIBUTE_Access); | 107 int32_t iAcc = pNode->GetEnum(XFA_ATTRIBUTE_Access); |
901 if (iAcc != XFA_ATTRIBUTEENUM_Open) { | 108 if (iAcc != XFA_ATTRIBUTEENUM_Open) |
902 return iAcc; | 109 return iAcc; |
903 } | 110 |
904 pNode = | 111 pNode = |
905 pNode->GetNodeItem(XFA_NODEITEM_Parent, XFA_OBJECTTYPE_ContainerNode); | 112 pNode->GetNodeItem(XFA_NODEITEM_Parent, XFA_OBJECTTYPE_ContainerNode); |
906 } | 113 } |
907 return XFA_ATTRIBUTEENUM_Open; | 114 return XFA_ATTRIBUTEENUM_Open; |
908 } | 115 } |
| 116 |
909 int32_t CXFA_WidgetData::GetRotate() { | 117 int32_t CXFA_WidgetData::GetRotate() { |
910 CXFA_Measurement ms; | 118 CXFA_Measurement ms; |
911 if (!m_pNode->TryMeasure(XFA_ATTRIBUTE_Rotate, ms, FALSE)) { | 119 if (!m_pNode->TryMeasure(XFA_ATTRIBUTE_Rotate, ms, FALSE)) |
912 return 0; | 120 return 0; |
913 } | 121 |
914 int32_t iRotate = FXSYS_round(ms.GetValue()); | 122 int32_t iRotate = FXSYS_round(ms.GetValue()); |
915 iRotate = XFA_MapRotation(iRotate); | 123 iRotate = XFA_MapRotation(iRotate); |
916 return iRotate / 90 * 90; | 124 return iRotate / 90 * 90; |
917 } | 125 } |
| 126 |
918 CXFA_Border CXFA_WidgetData::GetBorder(FX_BOOL bModified) { | 127 CXFA_Border CXFA_WidgetData::GetBorder(FX_BOOL bModified) { |
919 return CXFA_Border(m_pNode->GetProperty(0, XFA_ELEMENT_Border, bModified)); | 128 return CXFA_Border(m_pNode->GetProperty(0, XFA_ELEMENT_Border, bModified)); |
920 } | 129 } |
| 130 |
921 CXFA_Caption CXFA_WidgetData::GetCaption(FX_BOOL bModified) { | 131 CXFA_Caption CXFA_WidgetData::GetCaption(FX_BOOL bModified) { |
922 return CXFA_Caption(m_pNode->GetProperty(0, XFA_ELEMENT_Caption, bModified)); | 132 return CXFA_Caption(m_pNode->GetProperty(0, XFA_ELEMENT_Caption, bModified)); |
923 } | 133 } |
| 134 |
924 CXFA_Font CXFA_WidgetData::GetFont(FX_BOOL bModified) { | 135 CXFA_Font CXFA_WidgetData::GetFont(FX_BOOL bModified) { |
925 return CXFA_Font(m_pNode->GetProperty(0, XFA_ELEMENT_Font, bModified)); | 136 return CXFA_Font(m_pNode->GetProperty(0, XFA_ELEMENT_Font, bModified)); |
926 } | 137 } |
| 138 |
927 CXFA_Margin CXFA_WidgetData::GetMargin(FX_BOOL bModified) { | 139 CXFA_Margin CXFA_WidgetData::GetMargin(FX_BOOL bModified) { |
928 return CXFA_Margin(m_pNode->GetProperty(0, XFA_ELEMENT_Margin, bModified)); | 140 return CXFA_Margin(m_pNode->GetProperty(0, XFA_ELEMENT_Margin, bModified)); |
929 } | 141 } |
| 142 |
930 CXFA_Para CXFA_WidgetData::GetPara(FX_BOOL bModified) { | 143 CXFA_Para CXFA_WidgetData::GetPara(FX_BOOL bModified) { |
931 return CXFA_Para(m_pNode->GetProperty(0, XFA_ELEMENT_Para, bModified)); | 144 return CXFA_Para(m_pNode->GetProperty(0, XFA_ELEMENT_Para, bModified)); |
932 } | 145 } |
| 146 |
933 void CXFA_WidgetData::GetEventList(CXFA_NodeArray& events) { | 147 void CXFA_WidgetData::GetEventList(CXFA_NodeArray& events) { |
934 m_pNode->GetNodeList(events, 0, XFA_ELEMENT_Event); | 148 m_pNode->GetNodeList(events, 0, XFA_ELEMENT_Event); |
935 } | 149 } |
| 150 |
936 int32_t CXFA_WidgetData::GetEventByActivity(int32_t iActivity, | 151 int32_t CXFA_WidgetData::GetEventByActivity(int32_t iActivity, |
937 CXFA_NodeArray& events, | 152 CXFA_NodeArray& events, |
938 FX_BOOL bIsFormReady) { | 153 FX_BOOL bIsFormReady) { |
939 CXFA_NodeArray allEvents; | 154 CXFA_NodeArray allEvents; |
940 GetEventList(allEvents); | 155 GetEventList(allEvents); |
941 int32_t iCount = allEvents.GetSize(); | 156 int32_t iCount = allEvents.GetSize(); |
942 for (int32_t i = 0; i < iCount; i++) { | 157 for (int32_t i = 0; i < iCount; i++) { |
943 CXFA_Event event(allEvents[i]); | 158 CXFA_Event event(allEvents[i]); |
944 if (event.GetActivity() == iActivity) { | 159 if (event.GetActivity() == iActivity) { |
945 if (iActivity == XFA_ATTRIBUTEENUM_Ready) { | 160 if (iActivity == XFA_ATTRIBUTEENUM_Ready) { |
946 CFX_WideStringC wsRef; | 161 CFX_WideStringC wsRef; |
947 event.GetRef(wsRef); | 162 event.GetRef(wsRef); |
948 if (bIsFormReady) { | 163 if (bIsFormReady) { |
949 if (wsRef == CFX_WideStringC(L"$form")) { | 164 if (wsRef == CFX_WideStringC(L"$form")) |
950 events.Add(allEvents[i]); | 165 events.Add(allEvents[i]); |
951 } | |
952 } else { | 166 } else { |
953 if (wsRef == CFX_WideStringC(L"$layout")) { | 167 if (wsRef == CFX_WideStringC(L"$layout")) |
954 events.Add(allEvents[i]); | 168 events.Add(allEvents[i]); |
955 } | |
956 } | 169 } |
957 } else { | 170 } else { |
958 events.Add(allEvents[i]); | 171 events.Add(allEvents[i]); |
959 } | 172 } |
960 } | 173 } |
961 } | 174 } |
962 return events.GetSize(); | 175 return events.GetSize(); |
963 } | 176 } |
| 177 |
964 CXFA_Value CXFA_WidgetData::GetDefaultValue(FX_BOOL bModified) { | 178 CXFA_Value CXFA_WidgetData::GetDefaultValue(FX_BOOL bModified) { |
965 CXFA_Node* pTemNode = m_pNode->GetTemplateNode(); | 179 CXFA_Node* pTemNode = m_pNode->GetTemplateNode(); |
966 return CXFA_Value(pTemNode | 180 return CXFA_Value(pTemNode |
967 ? pTemNode->GetProperty(0, XFA_ELEMENT_Value, bModified) | 181 ? pTemNode->GetProperty(0, XFA_ELEMENT_Value, bModified) |
968 : nullptr); | 182 : nullptr); |
969 } | 183 } |
| 184 |
970 CXFA_Value CXFA_WidgetData::GetFormValue(FX_BOOL bModified) { | 185 CXFA_Value CXFA_WidgetData::GetFormValue(FX_BOOL bModified) { |
971 return CXFA_Value(m_pNode->GetProperty(0, XFA_ELEMENT_Value, bModified)); | 186 return CXFA_Value(m_pNode->GetProperty(0, XFA_ELEMENT_Value, bModified)); |
972 } | 187 } |
| 188 |
973 CXFA_Calculate CXFA_WidgetData::GetCalculate(FX_BOOL bModified) { | 189 CXFA_Calculate CXFA_WidgetData::GetCalculate(FX_BOOL bModified) { |
974 return CXFA_Calculate( | 190 return CXFA_Calculate( |
975 m_pNode->GetProperty(0, XFA_ELEMENT_Calculate, bModified)); | 191 m_pNode->GetProperty(0, XFA_ELEMENT_Calculate, bModified)); |
976 } | 192 } |
| 193 |
977 CXFA_Validate CXFA_WidgetData::GetValidate(FX_BOOL bModified) { | 194 CXFA_Validate CXFA_WidgetData::GetValidate(FX_BOOL bModified) { |
978 return CXFA_Validate( | 195 return CXFA_Validate( |
979 m_pNode->GetProperty(0, XFA_ELEMENT_Validate, bModified)); | 196 m_pNode->GetProperty(0, XFA_ELEMENT_Validate, bModified)); |
980 } | 197 } |
| 198 |
981 CXFA_Bind CXFA_WidgetData::GetBind(FX_BOOL bModified) { | 199 CXFA_Bind CXFA_WidgetData::GetBind(FX_BOOL bModified) { |
982 return CXFA_Bind(m_pNode->GetProperty(0, XFA_ELEMENT_Bind, bModified)); | 200 return CXFA_Bind(m_pNode->GetProperty(0, XFA_ELEMENT_Bind, bModified)); |
983 } | 201 } |
| 202 |
984 CXFA_Assist CXFA_WidgetData::GetAssist(FX_BOOL bModified) { | 203 CXFA_Assist CXFA_WidgetData::GetAssist(FX_BOOL bModified) { |
985 return CXFA_Assist(m_pNode->GetProperty(0, XFA_ELEMENT_Assist, bModified)); | 204 return CXFA_Assist(m_pNode->GetProperty(0, XFA_ELEMENT_Assist, bModified)); |
986 } | 205 } |
| 206 |
987 FX_BOOL CXFA_WidgetData::GetWidth(FX_FLOAT& fWidth) { | 207 FX_BOOL CXFA_WidgetData::GetWidth(FX_FLOAT& fWidth) { |
988 return TryMeasure(XFA_ATTRIBUTE_W, fWidth); | 208 return TryMeasure(XFA_ATTRIBUTE_W, fWidth); |
989 } | 209 } |
| 210 |
990 FX_BOOL CXFA_WidgetData::GetHeight(FX_FLOAT& fHeight) { | 211 FX_BOOL CXFA_WidgetData::GetHeight(FX_FLOAT& fHeight) { |
991 return TryMeasure(XFA_ATTRIBUTE_H, fHeight); | 212 return TryMeasure(XFA_ATTRIBUTE_H, fHeight); |
992 } | 213 } |
| 214 |
993 FX_BOOL CXFA_WidgetData::GetMinWidth(FX_FLOAT& fMinWidth) { | 215 FX_BOOL CXFA_WidgetData::GetMinWidth(FX_FLOAT& fMinWidth) { |
994 return TryMeasure(XFA_ATTRIBUTE_MinW, fMinWidth); | 216 return TryMeasure(XFA_ATTRIBUTE_MinW, fMinWidth); |
995 } | 217 } |
| 218 |
996 FX_BOOL CXFA_WidgetData::GetMinHeight(FX_FLOAT& fMinHeight) { | 219 FX_BOOL CXFA_WidgetData::GetMinHeight(FX_FLOAT& fMinHeight) { |
997 return TryMeasure(XFA_ATTRIBUTE_MinH, fMinHeight); | 220 return TryMeasure(XFA_ATTRIBUTE_MinH, fMinHeight); |
998 } | 221 } |
| 222 |
999 FX_BOOL CXFA_WidgetData::GetMaxWidth(FX_FLOAT& fMaxWidth) { | 223 FX_BOOL CXFA_WidgetData::GetMaxWidth(FX_FLOAT& fMaxWidth) { |
1000 return TryMeasure(XFA_ATTRIBUTE_MaxW, fMaxWidth); | 224 return TryMeasure(XFA_ATTRIBUTE_MaxW, fMaxWidth); |
1001 } | 225 } |
| 226 |
1002 FX_BOOL CXFA_WidgetData::GetMaxHeight(FX_FLOAT& fMaxHeight) { | 227 FX_BOOL CXFA_WidgetData::GetMaxHeight(FX_FLOAT& fMaxHeight) { |
1003 return TryMeasure(XFA_ATTRIBUTE_MaxH, fMaxHeight); | 228 return TryMeasure(XFA_ATTRIBUTE_MaxH, fMaxHeight); |
1004 } | 229 } |
| 230 |
1005 CXFA_Border CXFA_WidgetData::GetUIBorder(FX_BOOL bModified) { | 231 CXFA_Border CXFA_WidgetData::GetUIBorder(FX_BOOL bModified) { |
1006 CXFA_Node* pUIChild = GetUIChild(); | 232 CXFA_Node* pUIChild = GetUIChild(); |
1007 return CXFA_Border( | 233 return CXFA_Border( |
1008 pUIChild ? pUIChild->GetProperty(0, XFA_ELEMENT_Border, bModified) | 234 pUIChild ? pUIChild->GetProperty(0, XFA_ELEMENT_Border, bModified) |
1009 : nullptr); | 235 : nullptr); |
1010 } | 236 } |
| 237 |
1011 CXFA_Margin CXFA_WidgetData::GetUIMargin(FX_BOOL bModified) { | 238 CXFA_Margin CXFA_WidgetData::GetUIMargin(FX_BOOL bModified) { |
1012 CXFA_Node* pUIChild = GetUIChild(); | 239 CXFA_Node* pUIChild = GetUIChild(); |
1013 return CXFA_Margin( | 240 return CXFA_Margin( |
1014 pUIChild ? pUIChild->GetProperty(0, XFA_ELEMENT_Margin, bModified) | 241 pUIChild ? pUIChild->GetProperty(0, XFA_ELEMENT_Margin, bModified) |
1015 : nullptr); | 242 : nullptr); |
1016 } | 243 } |
| 244 |
1017 void CXFA_WidgetData::GetUIMargin(CFX_RectF& rtUIMargin) { | 245 void CXFA_WidgetData::GetUIMargin(CFX_RectF& rtUIMargin) { |
1018 rtUIMargin.Reset(); | 246 rtUIMargin.Reset(); |
1019 CXFA_Margin mgUI = GetUIMargin(); | 247 CXFA_Margin mgUI = GetUIMargin(); |
1020 if (!mgUI) { | 248 if (!mgUI) |
1021 return; | 249 return; |
1022 } | 250 |
1023 CXFA_Border border = GetUIBorder(); | 251 CXFA_Border border = GetUIBorder(); |
1024 if (border && border.GetPresence() != XFA_ATTRIBUTEENUM_Visible) { | 252 if (border && border.GetPresence() != XFA_ATTRIBUTEENUM_Visible) |
1025 return; | 253 return; |
1026 } | 254 |
1027 FX_FLOAT fLeftInset, fTopInset, fRightInset, fBottomInset; | 255 FX_FLOAT fLeftInset, fTopInset, fRightInset, fBottomInset; |
1028 FX_BOOL bLeft = mgUI.GetLeftInset(fLeftInset); | 256 FX_BOOL bLeft = mgUI.GetLeftInset(fLeftInset); |
1029 FX_BOOL bTop = mgUI.GetTopInset(fTopInset); | 257 FX_BOOL bTop = mgUI.GetTopInset(fTopInset); |
1030 FX_BOOL bRight = mgUI.GetRightInset(fRightInset); | 258 FX_BOOL bRight = mgUI.GetRightInset(fRightInset); |
1031 FX_BOOL bBottom = mgUI.GetBottomInset(fBottomInset); | 259 FX_BOOL bBottom = mgUI.GetBottomInset(fBottomInset); |
1032 if (border) { | 260 if (border) { |
1033 FX_BOOL bVisible = FALSE; | 261 FX_BOOL bVisible = FALSE; |
1034 FX_FLOAT fThickness = 0; | 262 FX_FLOAT fThickness = 0; |
1035 border.Get3DStyle(bVisible, fThickness); | 263 border.Get3DStyle(bVisible, fThickness); |
1036 if (!bLeft || !bTop || !bRight || !bBottom) { | 264 if (!bLeft || !bTop || !bRight || !bBottom) { |
1037 CXFA_StrokeArray strokes; | 265 CXFA_StrokeArray strokes; |
1038 border.GetStrokes(strokes); | 266 border.GetStrokes(strokes); |
1039 if (!bTop) { | 267 if (!bTop) |
1040 fTopInset = XFA_GetEdgeThickness(strokes, bVisible, 0); | 268 fTopInset = GetEdgeThickness(strokes, bVisible, 0); |
1041 } | 269 if (!bRight) |
1042 if (!bRight) { | 270 fRightInset = GetEdgeThickness(strokes, bVisible, 1); |
1043 fRightInset = XFA_GetEdgeThickness(strokes, bVisible, 1); | 271 if (!bBottom) |
1044 } | 272 fBottomInset = GetEdgeThickness(strokes, bVisible, 2); |
1045 if (!bBottom) { | 273 if (!bLeft) |
1046 fBottomInset = XFA_GetEdgeThickness(strokes, bVisible, 2); | 274 fLeftInset = GetEdgeThickness(strokes, bVisible, 3); |
1047 } | |
1048 if (!bLeft) { | |
1049 fLeftInset = XFA_GetEdgeThickness(strokes, bVisible, 3); | |
1050 } | |
1051 } | 275 } |
1052 } | 276 } |
1053 rtUIMargin.Set(fLeftInset, fTopInset, fRightInset, fBottomInset); | 277 rtUIMargin.Set(fLeftInset, fTopInset, fRightInset, fBottomInset); |
1054 } | 278 } |
| 279 |
1055 int32_t CXFA_WidgetData::GetButtonHighlight() { | 280 int32_t CXFA_WidgetData::GetButtonHighlight() { |
1056 CXFA_Node* pUIChild = GetUIChild(); | 281 CXFA_Node* pUIChild = GetUIChild(); |
1057 if (pUIChild) { | 282 if (pUIChild) |
1058 return pUIChild->GetEnum(XFA_ATTRIBUTE_Highlight); | 283 return pUIChild->GetEnum(XFA_ATTRIBUTE_Highlight); |
1059 } | |
1060 return XFA_GetAttributeDefaultValue_Enum( | 284 return XFA_GetAttributeDefaultValue_Enum( |
1061 XFA_ELEMENT_Button, XFA_ATTRIBUTE_Highlight, XFA_XDPPACKET_Form); | 285 XFA_ELEMENT_Button, XFA_ATTRIBUTE_Highlight, XFA_XDPPACKET_Form); |
1062 } | 286 } |
| 287 |
1063 FX_BOOL CXFA_WidgetData::GetButtonRollover(CFX_WideString& wsRollover, | 288 FX_BOOL CXFA_WidgetData::GetButtonRollover(CFX_WideString& wsRollover, |
1064 FX_BOOL& bRichText) { | 289 FX_BOOL& bRichText) { |
1065 if (CXFA_Node* pItems = m_pNode->GetChild(0, XFA_ELEMENT_Items)) { | 290 if (CXFA_Node* pItems = m_pNode->GetChild(0, XFA_ELEMENT_Items)) { |
1066 CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild); | 291 CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild); |
1067 while (pText) { | 292 while (pText) { |
1068 CFX_WideStringC wsName; | 293 CFX_WideStringC wsName; |
1069 pText->TryCData(XFA_ATTRIBUTE_Name, wsName); | 294 pText->TryCData(XFA_ATTRIBUTE_Name, wsName); |
1070 if (wsName == FX_WSTRC(L"rollover")) { | 295 if (wsName == FX_WSTRC(L"rollover")) { |
1071 pText->TryContent(wsRollover); | 296 pText->TryContent(wsRollover); |
1072 bRichText = pText->GetClassID() == XFA_ELEMENT_ExData; | 297 bRichText = pText->GetClassID() == XFA_ELEMENT_ExData; |
1073 return !wsRollover.IsEmpty(); | 298 return !wsRollover.IsEmpty(); |
1074 } | 299 } |
1075 pText = pText->GetNodeItem(XFA_NODEITEM_NextSibling); | 300 pText = pText->GetNodeItem(XFA_NODEITEM_NextSibling); |
1076 } | 301 } |
1077 } | 302 } |
1078 return FALSE; | 303 return FALSE; |
1079 } | 304 } |
| 305 |
1080 FX_BOOL CXFA_WidgetData::GetButtonDown(CFX_WideString& wsDown, | 306 FX_BOOL CXFA_WidgetData::GetButtonDown(CFX_WideString& wsDown, |
1081 FX_BOOL& bRichText) { | 307 FX_BOOL& bRichText) { |
1082 if (CXFA_Node* pItems = m_pNode->GetChild(0, XFA_ELEMENT_Items)) { | 308 if (CXFA_Node* pItems = m_pNode->GetChild(0, XFA_ELEMENT_Items)) { |
1083 CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild); | 309 CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild); |
1084 while (pText) { | 310 while (pText) { |
1085 CFX_WideStringC wsName; | 311 CFX_WideStringC wsName; |
1086 pText->TryCData(XFA_ATTRIBUTE_Name, wsName); | 312 pText->TryCData(XFA_ATTRIBUTE_Name, wsName); |
1087 if (wsName == FX_WSTRC(L"down")) { | 313 if (wsName == FX_WSTRC(L"down")) { |
1088 pText->TryContent(wsDown); | 314 pText->TryContent(wsDown); |
1089 bRichText = pText->GetClassID() == XFA_ELEMENT_ExData; | 315 bRichText = pText->GetClassID() == XFA_ELEMENT_ExData; |
1090 return !wsDown.IsEmpty(); | 316 return !wsDown.IsEmpty(); |
1091 } | 317 } |
1092 pText = pText->GetNodeItem(XFA_NODEITEM_NextSibling); | 318 pText = pText->GetNodeItem(XFA_NODEITEM_NextSibling); |
1093 } | 319 } |
1094 } | 320 } |
1095 return FALSE; | 321 return FALSE; |
1096 } | 322 } |
| 323 |
1097 int32_t CXFA_WidgetData::GetCheckButtonShape() { | 324 int32_t CXFA_WidgetData::GetCheckButtonShape() { |
1098 CXFA_Node* pUIChild = GetUIChild(); | 325 CXFA_Node* pUIChild = GetUIChild(); |
1099 if (pUIChild) { | 326 if (pUIChild) |
1100 return pUIChild->GetEnum(XFA_ATTRIBUTE_Shape); | 327 return pUIChild->GetEnum(XFA_ATTRIBUTE_Shape); |
1101 } | |
1102 return XFA_GetAttributeDefaultValue_Enum( | 328 return XFA_GetAttributeDefaultValue_Enum( |
1103 XFA_ELEMENT_CheckButton, XFA_ATTRIBUTE_Shape, XFA_XDPPACKET_Form); | 329 XFA_ELEMENT_CheckButton, XFA_ATTRIBUTE_Shape, XFA_XDPPACKET_Form); |
1104 } | 330 } |
| 331 |
1105 int32_t CXFA_WidgetData::GetCheckButtonMark() { | 332 int32_t CXFA_WidgetData::GetCheckButtonMark() { |
1106 CXFA_Node* pUIChild = GetUIChild(); | 333 CXFA_Node* pUIChild = GetUIChild(); |
1107 if (pUIChild) { | 334 if (pUIChild) |
1108 return pUIChild->GetEnum(XFA_ATTRIBUTE_Mark); | 335 return pUIChild->GetEnum(XFA_ATTRIBUTE_Mark); |
1109 } | |
1110 return XFA_GetAttributeDefaultValue_Enum( | 336 return XFA_GetAttributeDefaultValue_Enum( |
1111 XFA_ELEMENT_CheckButton, XFA_ATTRIBUTE_Mark, XFA_XDPPACKET_Form); | 337 XFA_ELEMENT_CheckButton, XFA_ATTRIBUTE_Mark, XFA_XDPPACKET_Form); |
1112 } | 338 } |
| 339 |
1113 FX_BOOL CXFA_WidgetData::IsRadioButton() { | 340 FX_BOOL CXFA_WidgetData::IsRadioButton() { |
1114 if (CXFA_Node* pParent = m_pNode->GetNodeItem(XFA_NODEITEM_Parent)) { | 341 if (CXFA_Node* pParent = m_pNode->GetNodeItem(XFA_NODEITEM_Parent)) |
1115 return pParent->GetClassID() == XFA_ELEMENT_ExclGroup; | 342 return pParent->GetClassID() == XFA_ELEMENT_ExclGroup; |
1116 } | |
1117 return FALSE; | 343 return FALSE; |
1118 } | 344 } |
| 345 |
1119 FX_FLOAT CXFA_WidgetData::GetCheckButtonSize() { | 346 FX_FLOAT CXFA_WidgetData::GetCheckButtonSize() { |
1120 CXFA_Node* pUIChild = GetUIChild(); | 347 CXFA_Node* pUIChild = GetUIChild(); |
1121 if (pUIChild) { | 348 if (pUIChild) |
1122 return pUIChild->GetMeasure(XFA_ATTRIBUTE_Size).ToUnit(XFA_UNIT_Pt); | 349 return pUIChild->GetMeasure(XFA_ATTRIBUTE_Size).ToUnit(XFA_UNIT_Pt); |
1123 } | |
1124 return XFA_GetAttributeDefaultValue_Measure( | 350 return XFA_GetAttributeDefaultValue_Measure( |
1125 XFA_ELEMENT_CheckButton, XFA_ATTRIBUTE_Size, XFA_XDPPACKET_Form) | 351 XFA_ELEMENT_CheckButton, XFA_ATTRIBUTE_Size, XFA_XDPPACKET_Form) |
1126 .ToUnit(XFA_UNIT_Pt); | 352 .ToUnit(XFA_UNIT_Pt); |
1127 } | 353 } |
| 354 |
1128 FX_BOOL CXFA_WidgetData::IsAllowNeutral() { | 355 FX_BOOL CXFA_WidgetData::IsAllowNeutral() { |
1129 CXFA_Node* pUIChild = GetUIChild(); | 356 CXFA_Node* pUIChild = GetUIChild(); |
1130 if (pUIChild) { | 357 if (pUIChild) |
1131 return pUIChild->GetBoolean(XFA_ATTRIBUTE_AllowNeutral); | 358 return pUIChild->GetBoolean(XFA_ATTRIBUTE_AllowNeutral); |
1132 } | |
1133 return XFA_GetAttributeDefaultValue_Boolean( | 359 return XFA_GetAttributeDefaultValue_Boolean( |
1134 XFA_ELEMENT_CheckButton, XFA_ATTRIBUTE_AllowNeutral, XFA_XDPPACKET_Form); | 360 XFA_ELEMENT_CheckButton, XFA_ATTRIBUTE_AllowNeutral, XFA_XDPPACKET_Form); |
1135 } | 361 } |
| 362 |
1136 XFA_CHECKSTATE CXFA_WidgetData::GetCheckState() { | 363 XFA_CHECKSTATE CXFA_WidgetData::GetCheckState() { |
1137 CFX_WideString wsValue = GetRawValue(); | 364 CFX_WideString wsValue = GetRawValue(); |
1138 if (wsValue.IsEmpty()) { | 365 if (wsValue.IsEmpty()) |
1139 return XFA_CHECKSTATE_Off; | 366 return XFA_CHECKSTATE_Off; |
1140 } | 367 |
1141 if (CXFA_Node* pItems = m_pNode->GetChild(0, XFA_ELEMENT_Items)) { | 368 if (CXFA_Node* pItems = m_pNode->GetChild(0, XFA_ELEMENT_Items)) { |
1142 CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild); | 369 CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild); |
1143 int32_t i = 0; | 370 int32_t i = 0; |
1144 while (pText) { | 371 while (pText) { |
1145 CFX_WideString wsContent; | 372 CFX_WideString wsContent; |
1146 if (pText->TryContent(wsContent) && (wsContent == wsValue)) { | 373 if (pText->TryContent(wsContent) && (wsContent == wsValue)) |
1147 return (XFA_CHECKSTATE)i; | 374 return (XFA_CHECKSTATE)i; |
1148 } | 375 |
1149 i++; | 376 i++; |
1150 pText = pText->GetNodeItem(XFA_NODEITEM_NextSibling); | 377 pText = pText->GetNodeItem(XFA_NODEITEM_NextSibling); |
1151 } | 378 } |
1152 } | 379 } |
1153 return XFA_CHECKSTATE_Off; | 380 return XFA_CHECKSTATE_Off; |
1154 } | 381 } |
| 382 |
1155 void CXFA_WidgetData::SetCheckState(XFA_CHECKSTATE eCheckState, | 383 void CXFA_WidgetData::SetCheckState(XFA_CHECKSTATE eCheckState, |
1156 FX_BOOL bNotify) { | 384 FX_BOOL bNotify) { |
1157 CXFA_WidgetData exclGroup(GetExclGroupNode()); | 385 CXFA_WidgetData exclGroup(GetExclGroupNode()); |
1158 if (exclGroup) { | 386 if (exclGroup) { |
1159 CFX_WideString wsValue; | 387 CFX_WideString wsValue; |
1160 if (eCheckState != XFA_CHECKSTATE_Off) { | 388 if (eCheckState != XFA_CHECKSTATE_Off) { |
1161 if (CXFA_Node* pItems = m_pNode->GetChild(0, XFA_ELEMENT_Items)) { | 389 if (CXFA_Node* pItems = m_pNode->GetChild(0, XFA_ELEMENT_Items)) { |
1162 CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild); | 390 CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild); |
1163 if (pText) { | 391 if (pText) |
1164 pText->TryContent(wsValue); | 392 pText->TryContent(wsValue); |
1165 } | |
1166 } | 393 } |
1167 } | 394 } |
1168 CXFA_Node* pChild = | 395 CXFA_Node* pChild = |
1169 exclGroup.GetNode()->GetNodeItem(XFA_NODEITEM_FirstChild); | 396 exclGroup.GetNode()->GetNodeItem(XFA_NODEITEM_FirstChild); |
1170 for (; pChild; pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 397 for (; pChild; pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
1171 if (pChild->GetClassID() != XFA_ELEMENT_Field) { | 398 if (pChild->GetClassID() != XFA_ELEMENT_Field) |
1172 continue; | 399 continue; |
1173 } | 400 |
1174 CXFA_Node* pItem = pChild->GetChild(0, XFA_ELEMENT_Items); | 401 CXFA_Node* pItem = pChild->GetChild(0, XFA_ELEMENT_Items); |
1175 if (!pItem) { | 402 if (!pItem) |
1176 continue; | 403 continue; |
1177 } | 404 |
1178 CXFA_Node* pItemchild = pItem->GetNodeItem(XFA_NODEITEM_FirstChild); | 405 CXFA_Node* pItemchild = pItem->GetNodeItem(XFA_NODEITEM_FirstChild); |
1179 if (!pItemchild) { | 406 if (!pItemchild) |
1180 continue; | 407 continue; |
1181 } | 408 |
1182 CFX_WideString text = pItemchild->GetContent(); | 409 CFX_WideString text = pItemchild->GetContent(); |
1183 CFX_WideString wsChildValue = text; | 410 CFX_WideString wsChildValue = text; |
1184 if (wsValue != text) { | 411 if (wsValue != text) { |
1185 pItemchild = pItemchild->GetNodeItem(XFA_NODEITEM_NextSibling); | 412 pItemchild = pItemchild->GetNodeItem(XFA_NODEITEM_NextSibling); |
1186 if (pItemchild) { | 413 if (pItemchild) |
1187 wsChildValue = pItemchild->GetContent(); | 414 wsChildValue = pItemchild->GetContent(); |
1188 } else { | 415 else |
1189 wsChildValue.Empty(); | 416 wsChildValue.Empty(); |
1190 } | |
1191 } | 417 } |
1192 CXFA_WidgetData ch(pChild); | 418 CXFA_WidgetData ch(pChild); |
1193 ch.SyncValue(wsChildValue, bNotify); | 419 ch.SyncValue(wsChildValue, bNotify); |
1194 } | 420 } |
1195 exclGroup.SyncValue(wsValue, bNotify); | 421 exclGroup.SyncValue(wsValue, bNotify); |
1196 } else { | 422 } else { |
1197 CXFA_Node* pItems = m_pNode->GetChild(0, XFA_ELEMENT_Items); | 423 CXFA_Node* pItems = m_pNode->GetChild(0, XFA_ELEMENT_Items); |
1198 if (!pItems) { | 424 if (!pItems) |
1199 return; | 425 return; |
1200 } | 426 |
1201 int32_t i = -1; | 427 int32_t i = -1; |
1202 CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild); | 428 CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild); |
1203 CFX_WideString wsContent; | 429 CFX_WideString wsContent; |
1204 while (pText) { | 430 while (pText) { |
1205 i++; | 431 i++; |
1206 if (i == eCheckState) { | 432 if (i == eCheckState) { |
1207 pText->TryContent(wsContent); | 433 pText->TryContent(wsContent); |
1208 break; | 434 break; |
1209 } | 435 } |
1210 pText = pText->GetNodeItem(XFA_NODEITEM_NextSibling); | 436 pText = pText->GetNodeItem(XFA_NODEITEM_NextSibling); |
1211 } | 437 } |
1212 SyncValue(wsContent, bNotify); | 438 SyncValue(wsContent, bNotify); |
1213 } | 439 } |
1214 } | 440 } |
| 441 |
1215 CXFA_Node* CXFA_WidgetData::GetExclGroupNode() { | 442 CXFA_Node* CXFA_WidgetData::GetExclGroupNode() { |
1216 CXFA_Node* pExcl = ToNode(m_pNode->GetNodeItem(XFA_NODEITEM_Parent)); | 443 CXFA_Node* pExcl = ToNode(m_pNode->GetNodeItem(XFA_NODEITEM_Parent)); |
1217 if (!pExcl || pExcl->GetClassID() != XFA_ELEMENT_ExclGroup) { | 444 if (!pExcl || pExcl->GetClassID() != XFA_ELEMENT_ExclGroup) |
1218 return NULL; | 445 return NULL; |
1219 } | |
1220 return pExcl; | 446 return pExcl; |
1221 } | 447 } |
| 448 |
1222 CXFA_Node* CXFA_WidgetData::GetSelectedMember() { | 449 CXFA_Node* CXFA_WidgetData::GetSelectedMember() { |
1223 CXFA_Node* pSelectedMember = NULL; | 450 CXFA_Node* pSelectedMember = NULL; |
1224 CFX_WideString wsState = GetRawValue(); | 451 CFX_WideString wsState = GetRawValue(); |
1225 if (wsState.IsEmpty()) { | 452 if (wsState.IsEmpty()) |
1226 return pSelectedMember; | 453 return pSelectedMember; |
1227 } | 454 |
1228 for (CXFA_Node* pNode = ToNode(m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild)); | 455 for (CXFA_Node* pNode = ToNode(m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild)); |
1229 pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 456 pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
1230 CXFA_WidgetData widgetData(pNode); | 457 CXFA_WidgetData widgetData(pNode); |
1231 if (widgetData.GetCheckState() == XFA_CHECKSTATE_On) { | 458 if (widgetData.GetCheckState() == XFA_CHECKSTATE_On) { |
1232 pSelectedMember = pNode; | 459 pSelectedMember = pNode; |
1233 break; | 460 break; |
1234 } | 461 } |
1235 } | 462 } |
1236 return pSelectedMember; | 463 return pSelectedMember; |
1237 } | 464 } |
| 465 |
1238 CXFA_Node* CXFA_WidgetData::SetSelectedMember(const CFX_WideStringC& wsName, | 466 CXFA_Node* CXFA_WidgetData::SetSelectedMember(const CFX_WideStringC& wsName, |
1239 FX_BOOL bNotify) { | 467 FX_BOOL bNotify) { |
1240 CXFA_Node* pSelectedMember = NULL; | 468 CXFA_Node* pSelectedMember = NULL; |
1241 uint32_t nameHash = | 469 uint32_t nameHash = |
1242 FX_HashCode_String_GetW(wsName.c_str(), wsName.GetLength()); | 470 FX_HashCode_String_GetW(wsName.c_str(), wsName.GetLength()); |
1243 for (CXFA_Node* pNode = ToNode(m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild)); | 471 for (CXFA_Node* pNode = ToNode(m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild)); |
1244 pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 472 pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
1245 if (pNode->GetNameHash() == nameHash) { | 473 if (pNode->GetNameHash() == nameHash) { |
1246 CXFA_WidgetData widgetData(pNode); | 474 CXFA_WidgetData widgetData(pNode); |
1247 widgetData.SetCheckState(XFA_CHECKSTATE_On, bNotify); | 475 widgetData.SetCheckState(XFA_CHECKSTATE_On, bNotify); |
1248 pSelectedMember = pNode; | 476 pSelectedMember = pNode; |
1249 break; | 477 break; |
1250 } | 478 } |
1251 } | 479 } |
1252 return pSelectedMember; | 480 return pSelectedMember; |
1253 } | 481 } |
| 482 |
1254 void CXFA_WidgetData::SetSelectedMemberByValue(const CFX_WideStringC& wsValue, | 483 void CXFA_WidgetData::SetSelectedMemberByValue(const CFX_WideStringC& wsValue, |
1255 FX_BOOL bNotify, | 484 FX_BOOL bNotify, |
1256 FX_BOOL bScriptModify, | 485 FX_BOOL bScriptModify, |
1257 FX_BOOL bSyncData) { | 486 FX_BOOL bSyncData) { |
1258 CFX_WideString wsExclGroup; | 487 CFX_WideString wsExclGroup; |
1259 for (CXFA_Node* pNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); pNode; | 488 for (CXFA_Node* pNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); pNode; |
1260 pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 489 pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
1261 if (pNode->GetClassID() != XFA_ELEMENT_Field) { | 490 if (pNode->GetClassID() != XFA_ELEMENT_Field) |
1262 continue; | 491 continue; |
1263 } | 492 |
1264 CXFA_Node* pItem = pNode->GetChild(0, XFA_ELEMENT_Items); | 493 CXFA_Node* pItem = pNode->GetChild(0, XFA_ELEMENT_Items); |
1265 if (!pItem) { | 494 if (!pItem) |
1266 continue; | 495 continue; |
1267 } | 496 |
1268 CXFA_Node* pItemchild = pItem->GetNodeItem(XFA_NODEITEM_FirstChild); | 497 CXFA_Node* pItemchild = pItem->GetNodeItem(XFA_NODEITEM_FirstChild); |
1269 if (!pItemchild) { | 498 if (!pItemchild) |
1270 continue; | 499 continue; |
1271 } | 500 |
1272 CFX_WideString wsChildValue = pItemchild->GetContent(); | 501 CFX_WideString wsChildValue = pItemchild->GetContent(); |
1273 if (wsValue != wsChildValue) { | 502 if (wsValue != wsChildValue) { |
1274 pItemchild = pItemchild->GetNodeItem(XFA_NODEITEM_NextSibling); | 503 pItemchild = pItemchild->GetNodeItem(XFA_NODEITEM_NextSibling); |
1275 if (pItemchild) { | 504 if (pItemchild) |
1276 wsChildValue = pItemchild->GetContent(); | 505 wsChildValue = pItemchild->GetContent(); |
1277 } else { | 506 else |
1278 wsChildValue.Empty(); | 507 wsChildValue.Empty(); |
1279 } | |
1280 } else { | 508 } else { |
1281 wsExclGroup = wsValue; | 509 wsExclGroup = wsValue; |
1282 } | 510 } |
1283 pNode->SetContent(wsChildValue, wsChildValue, bNotify, bScriptModify, | 511 pNode->SetContent(wsChildValue, wsChildValue, bNotify, bScriptModify, |
1284 FALSE); | 512 FALSE); |
1285 } | 513 } |
1286 if (m_pNode) { | 514 if (m_pNode) { |
1287 m_pNode->SetContent(wsExclGroup, wsExclGroup, bNotify, bScriptModify, | 515 m_pNode->SetContent(wsExclGroup, wsExclGroup, bNotify, bScriptModify, |
1288 bSyncData); | 516 bSyncData); |
1289 } | 517 } |
1290 } | 518 } |
| 519 |
1291 CXFA_Node* CXFA_WidgetData::GetExclGroupFirstMember() { | 520 CXFA_Node* CXFA_WidgetData::GetExclGroupFirstMember() { |
1292 CXFA_Node* pExcl = GetNode(); | 521 CXFA_Node* pExcl = GetNode(); |
1293 if (!pExcl) { | 522 if (!pExcl) |
1294 return NULL; | 523 return NULL; |
1295 } | 524 |
1296 CXFA_Node* pNode = pExcl->GetNodeItem(XFA_NODEITEM_FirstChild); | 525 CXFA_Node* pNode = pExcl->GetNodeItem(XFA_NODEITEM_FirstChild); |
1297 while (pNode) { | 526 while (pNode) { |
1298 if (pNode->GetClassID() == XFA_ELEMENT_Field) { | 527 if (pNode->GetClassID() == XFA_ELEMENT_Field) |
1299 return pNode; | 528 return pNode; |
1300 } | 529 |
1301 pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling); | 530 pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling); |
1302 } | 531 } |
1303 return NULL; | 532 return NULL; |
1304 } | 533 } |
1305 CXFA_Node* CXFA_WidgetData::GetExclGroupNextMember(CXFA_Node* pNode) { | 534 CXFA_Node* CXFA_WidgetData::GetExclGroupNextMember(CXFA_Node* pNode) { |
1306 if (!pNode) { | 535 if (!pNode) |
1307 return NULL; | 536 return NULL; |
1308 } | 537 |
1309 CXFA_Node* pNodeField = pNode->GetNodeItem(XFA_NODEITEM_NextSibling); | 538 CXFA_Node* pNodeField = pNode->GetNodeItem(XFA_NODEITEM_NextSibling); |
1310 while (pNodeField) { | 539 while (pNodeField) { |
1311 if (pNodeField->GetClassID() == XFA_ELEMENT_Field) { | 540 if (pNodeField->GetClassID() == XFA_ELEMENT_Field) |
1312 return pNodeField; | 541 return pNodeField; |
1313 } | 542 |
1314 pNodeField = pNodeField->GetNodeItem(XFA_NODEITEM_NextSibling); | 543 pNodeField = pNodeField->GetNodeItem(XFA_NODEITEM_NextSibling); |
1315 } | 544 } |
1316 return NULL; | 545 return NULL; |
1317 } | 546 } |
| 547 |
1318 int32_t CXFA_WidgetData::GetChoiceListCommitOn() { | 548 int32_t CXFA_WidgetData::GetChoiceListCommitOn() { |
1319 CXFA_Node* pUIChild = GetUIChild(); | 549 CXFA_Node* pUIChild = GetUIChild(); |
1320 if (pUIChild) { | 550 if (pUIChild) |
1321 return pUIChild->GetEnum(XFA_ATTRIBUTE_CommitOn); | 551 return pUIChild->GetEnum(XFA_ATTRIBUTE_CommitOn); |
1322 } | |
1323 return XFA_GetAttributeDefaultValue_Enum( | 552 return XFA_GetAttributeDefaultValue_Enum( |
1324 XFA_ELEMENT_ChoiceList, XFA_ATTRIBUTE_CommitOn, XFA_XDPPACKET_Form); | 553 XFA_ELEMENT_ChoiceList, XFA_ATTRIBUTE_CommitOn, XFA_XDPPACKET_Form); |
1325 } | 554 } |
| 555 |
1326 FX_BOOL CXFA_WidgetData::IsChoiceListAllowTextEntry() { | 556 FX_BOOL CXFA_WidgetData::IsChoiceListAllowTextEntry() { |
1327 CXFA_Node* pUIChild = GetUIChild(); | 557 CXFA_Node* pUIChild = GetUIChild(); |
1328 if (pUIChild) { | 558 if (pUIChild) |
1329 return pUIChild->GetBoolean(XFA_ATTRIBUTE_TextEntry); | 559 return pUIChild->GetBoolean(XFA_ATTRIBUTE_TextEntry); |
1330 } | |
1331 return XFA_GetAttributeDefaultValue_Boolean( | 560 return XFA_GetAttributeDefaultValue_Boolean( |
1332 XFA_ELEMENT_ChoiceList, XFA_ATTRIBUTE_TextEntry, XFA_XDPPACKET_Form); | 561 XFA_ELEMENT_ChoiceList, XFA_ATTRIBUTE_TextEntry, XFA_XDPPACKET_Form); |
1333 } | 562 } |
| 563 |
1334 int32_t CXFA_WidgetData::GetChoiceListOpen() { | 564 int32_t CXFA_WidgetData::GetChoiceListOpen() { |
1335 CXFA_Node* pUIChild = GetUIChild(); | 565 CXFA_Node* pUIChild = GetUIChild(); |
1336 if (pUIChild) { | 566 if (pUIChild) |
1337 return pUIChild->GetEnum(XFA_ATTRIBUTE_Open); | 567 return pUIChild->GetEnum(XFA_ATTRIBUTE_Open); |
1338 } | |
1339 return XFA_GetAttributeDefaultValue_Enum( | 568 return XFA_GetAttributeDefaultValue_Enum( |
1340 XFA_ELEMENT_ChoiceList, XFA_ATTRIBUTE_Open, XFA_XDPPACKET_Form); | 569 XFA_ELEMENT_ChoiceList, XFA_ATTRIBUTE_Open, XFA_XDPPACKET_Form); |
1341 } | 570 } |
| 571 |
1342 FX_BOOL CXFA_WidgetData::IsListBox() { | 572 FX_BOOL CXFA_WidgetData::IsListBox() { |
1343 int32_t iOpenMode = GetChoiceListOpen(); | 573 int32_t iOpenMode = GetChoiceListOpen(); |
1344 return (iOpenMode == XFA_ATTRIBUTEENUM_Always || | 574 return (iOpenMode == XFA_ATTRIBUTEENUM_Always || |
1345 iOpenMode == XFA_ATTRIBUTEENUM_MultiSelect); | 575 iOpenMode == XFA_ATTRIBUTEENUM_MultiSelect); |
1346 } | 576 } |
| 577 |
1347 int32_t CXFA_WidgetData::CountChoiceListItems(FX_BOOL bSaveValue) { | 578 int32_t CXFA_WidgetData::CountChoiceListItems(FX_BOOL bSaveValue) { |
1348 CXFA_NodeArray pItems; | 579 CXFA_NodeArray pItems; |
1349 CXFA_Node* pItem = NULL; | 580 CXFA_Node* pItem = NULL; |
1350 int32_t iCount = 0; | 581 int32_t iCount = 0; |
1351 CXFA_Node* pNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 582 CXFA_Node* pNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
1352 for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 583 for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
1353 if (pNode->GetClassID() != XFA_ELEMENT_Items) { | 584 if (pNode->GetClassID() != XFA_ELEMENT_Items) |
1354 continue; | 585 continue; |
1355 } | 586 |
1356 iCount++; | 587 iCount++; |
1357 pItems.Add(pNode); | 588 pItems.Add(pNode); |
1358 if (iCount == 2) { | 589 if (iCount == 2) |
1359 break; | 590 break; |
1360 } | |
1361 } | 591 } |
1362 if (iCount == 0) { | 592 if (iCount == 0) |
1363 return 0; | 593 return 0; |
1364 } | 594 |
1365 pItem = pItems[0]; | 595 pItem = pItems[0]; |
1366 if (iCount > 1) { | 596 if (iCount > 1) { |
1367 FX_BOOL bItemOneHasSave = pItems[0]->GetBoolean(XFA_ATTRIBUTE_Save); | 597 FX_BOOL bItemOneHasSave = pItems[0]->GetBoolean(XFA_ATTRIBUTE_Save); |
1368 FX_BOOL bItemTwoHasSave = pItems[1]->GetBoolean(XFA_ATTRIBUTE_Save); | 598 FX_BOOL bItemTwoHasSave = pItems[1]->GetBoolean(XFA_ATTRIBUTE_Save); |
1369 if (bItemOneHasSave != bItemTwoHasSave && bSaveValue == bItemTwoHasSave) { | 599 if (bItemOneHasSave != bItemTwoHasSave && bSaveValue == bItemTwoHasSave) |
1370 pItem = pItems[1]; | 600 pItem = pItems[1]; |
1371 } | |
1372 } | 601 } |
1373 pItems.RemoveAll(); | 602 pItems.RemoveAll(); |
1374 return pItem->CountChildren(XFA_ELEMENT_UNKNOWN); | 603 return pItem->CountChildren(XFA_ELEMENT_UNKNOWN); |
1375 } | 604 } |
| 605 |
1376 FX_BOOL CXFA_WidgetData::GetChoiceListItem(CFX_WideString& wsText, | 606 FX_BOOL CXFA_WidgetData::GetChoiceListItem(CFX_WideString& wsText, |
1377 int32_t nIndex, | 607 int32_t nIndex, |
1378 FX_BOOL bSaveValue) { | 608 FX_BOOL bSaveValue) { |
1379 wsText.Empty(); | 609 wsText.Empty(); |
1380 CXFA_NodeArray pItemsArray; | 610 CXFA_NodeArray pItemsArray; |
1381 CXFA_Node* pItems = NULL; | 611 CXFA_Node* pItems = NULL; |
1382 int32_t iCount = 0; | 612 int32_t iCount = 0; |
1383 CXFA_Node* pNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 613 CXFA_Node* pNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
1384 for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 614 for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
1385 if (pNode->GetClassID() != XFA_ELEMENT_Items) { | 615 if (pNode->GetClassID() != XFA_ELEMENT_Items) |
1386 continue; | 616 continue; |
1387 } | 617 |
1388 iCount++; | 618 iCount++; |
1389 pItemsArray.Add(pNode); | 619 pItemsArray.Add(pNode); |
1390 if (iCount == 2) { | 620 if (iCount == 2) |
1391 break; | 621 break; |
1392 } | |
1393 } | 622 } |
1394 if (iCount == 0) { | 623 if (iCount == 0) |
1395 return FALSE; | 624 return FALSE; |
1396 } | 625 |
1397 pItems = pItemsArray[0]; | 626 pItems = pItemsArray[0]; |
1398 if (iCount > 1) { | 627 if (iCount > 1) { |
1399 FX_BOOL bItemOneHasSave = pItemsArray[0]->GetBoolean(XFA_ATTRIBUTE_Save); | 628 FX_BOOL bItemOneHasSave = pItemsArray[0]->GetBoolean(XFA_ATTRIBUTE_Save); |
1400 FX_BOOL bItemTwoHasSave = pItemsArray[1]->GetBoolean(XFA_ATTRIBUTE_Save); | 629 FX_BOOL bItemTwoHasSave = pItemsArray[1]->GetBoolean(XFA_ATTRIBUTE_Save); |
1401 if (bItemOneHasSave != bItemTwoHasSave && bSaveValue == bItemTwoHasSave) { | 630 if (bItemOneHasSave != bItemTwoHasSave && bSaveValue == bItemTwoHasSave) |
1402 pItems = pItemsArray[1]; | 631 pItems = pItemsArray[1]; |
1403 } | |
1404 } | 632 } |
1405 if (pItems) { | 633 if (pItems) { |
1406 CXFA_Node* pItem = pItems->GetChild(nIndex, XFA_ELEMENT_UNKNOWN); | 634 CXFA_Node* pItem = pItems->GetChild(nIndex, XFA_ELEMENT_UNKNOWN); |
1407 if (pItem) { | 635 if (pItem) { |
1408 pItem->TryContent(wsText); | 636 pItem->TryContent(wsText); |
1409 return TRUE; | 637 return TRUE; |
1410 } | 638 } |
1411 } | 639 } |
1412 return FALSE; | 640 return FALSE; |
1413 } | 641 } |
| 642 |
1414 void CXFA_WidgetData::GetChoiceListItems(CFX_WideStringArray& wsTextArray, | 643 void CXFA_WidgetData::GetChoiceListItems(CFX_WideStringArray& wsTextArray, |
1415 FX_BOOL bSaveValue) { | 644 FX_BOOL bSaveValue) { |
1416 CXFA_NodeArray pItems; | 645 CXFA_NodeArray pItems; |
1417 CXFA_Node* pItem = NULL; | 646 CXFA_Node* pItem = NULL; |
1418 int32_t iCount = 0; | 647 int32_t iCount = 0; |
1419 CXFA_Node* pNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 648 CXFA_Node* pNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
1420 for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 649 for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
1421 if (pNode->GetClassID() != XFA_ELEMENT_Items) { | 650 if (pNode->GetClassID() != XFA_ELEMENT_Items) |
1422 continue; | 651 continue; |
1423 } | 652 |
1424 iCount++; | 653 iCount++; |
1425 pItems.Add(pNode); | 654 pItems.Add(pNode); |
1426 if (iCount == 2) { | 655 if (iCount == 2) |
1427 break; | 656 break; |
1428 } | |
1429 } | 657 } |
1430 if (iCount == 0) { | 658 if (iCount == 0) |
1431 return; | 659 return; |
1432 } | 660 |
1433 pItem = pItems[0]; | 661 pItem = pItems[0]; |
1434 if (iCount > 1) { | 662 if (iCount > 1) { |
1435 FX_BOOL bItemOneHasSave = pItems[0]->GetBoolean(XFA_ATTRIBUTE_Save); | 663 FX_BOOL bItemOneHasSave = pItems[0]->GetBoolean(XFA_ATTRIBUTE_Save); |
1436 FX_BOOL bItemTwoHasSave = pItems[1]->GetBoolean(XFA_ATTRIBUTE_Save); | 664 FX_BOOL bItemTwoHasSave = pItems[1]->GetBoolean(XFA_ATTRIBUTE_Save); |
1437 if (bItemOneHasSave != bItemTwoHasSave && bSaveValue == bItemTwoHasSave) { | 665 if (bItemOneHasSave != bItemTwoHasSave && bSaveValue == bItemTwoHasSave) |
1438 pItem = pItems[1]; | 666 pItem = pItems[1]; |
1439 } | |
1440 } | 667 } |
1441 pItems.RemoveAll(); | 668 pItems.RemoveAll(); |
1442 pNode = pItem->GetNodeItem(XFA_NODEITEM_FirstChild); | 669 pNode = pItem->GetNodeItem(XFA_NODEITEM_FirstChild); |
1443 for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 670 for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) |
1444 pNode->TryContent(wsTextArray.Add()); | 671 pNode->TryContent(wsTextArray.Add()); |
1445 } | |
1446 } | 672 } |
| 673 |
1447 int32_t CXFA_WidgetData::CountSelectedItems() { | 674 int32_t CXFA_WidgetData::CountSelectedItems() { |
1448 CFX_WideStringArray wsValueArray; | 675 CFX_WideStringArray wsValueArray; |
1449 GetSelectedItemsValue(wsValueArray); | 676 GetSelectedItemsValue(wsValueArray); |
1450 if (IsListBox() || !IsChoiceListAllowTextEntry()) { | 677 if (IsListBox() || !IsChoiceListAllowTextEntry()) |
1451 return wsValueArray.GetSize(); | 678 return wsValueArray.GetSize(); |
1452 } | 679 |
1453 int32_t iSelected = 0; | 680 int32_t iSelected = 0; |
1454 CFX_WideStringArray wsSaveTextArray; | 681 CFX_WideStringArray wsSaveTextArray; |
1455 GetChoiceListItems(wsSaveTextArray, TRUE); | 682 GetChoiceListItems(wsSaveTextArray, TRUE); |
1456 int32_t iValues = wsValueArray.GetSize(); | 683 int32_t iValues = wsValueArray.GetSize(); |
1457 for (int32_t i = 0; i < iValues; i++) { | 684 for (int32_t i = 0; i < iValues; i++) { |
1458 int32_t iSaves = wsSaveTextArray.GetSize(); | 685 int32_t iSaves = wsSaveTextArray.GetSize(); |
1459 for (int32_t j = 0; j < iSaves; j++) { | 686 for (int32_t j = 0; j < iSaves; j++) { |
1460 if (wsValueArray[i] == wsSaveTextArray[j]) { | 687 if (wsValueArray[i] == wsSaveTextArray[j]) { |
1461 iSelected++; | 688 iSelected++; |
1462 break; | 689 break; |
1463 } | 690 } |
1464 } | 691 } |
1465 } | 692 } |
1466 return iSelected; | 693 return iSelected; |
1467 } | 694 } |
| 695 |
1468 int32_t CXFA_WidgetData::GetSelectedItem(int32_t nIndex) { | 696 int32_t CXFA_WidgetData::GetSelectedItem(int32_t nIndex) { |
1469 CFX_WideStringArray wsValueArray; | 697 CFX_WideStringArray wsValueArray; |
1470 GetSelectedItemsValue(wsValueArray); | 698 GetSelectedItemsValue(wsValueArray); |
1471 CFX_WideStringArray wsSaveTextArray; | 699 CFX_WideStringArray wsSaveTextArray; |
1472 GetChoiceListItems(wsSaveTextArray, TRUE); | 700 GetChoiceListItems(wsSaveTextArray, TRUE); |
1473 int32_t iSaves = wsSaveTextArray.GetSize(); | 701 int32_t iSaves = wsSaveTextArray.GetSize(); |
1474 for (int32_t j = 0; j < iSaves; j++) { | 702 for (int32_t j = 0; j < iSaves; j++) { |
1475 if (wsValueArray[nIndex] == wsSaveTextArray[j]) { | 703 if (wsValueArray[nIndex] == wsSaveTextArray[j]) |
1476 return j; | 704 return j; |
1477 } | |
1478 } | 705 } |
1479 return -1; | 706 return -1; |
1480 } | 707 } |
| 708 |
1481 void CXFA_WidgetData::GetSelectedItems(CFX_Int32Array& iSelArray) { | 709 void CXFA_WidgetData::GetSelectedItems(CFX_Int32Array& iSelArray) { |
1482 CFX_WideStringArray wsValueArray; | 710 CFX_WideStringArray wsValueArray; |
1483 GetSelectedItemsValue(wsValueArray); | 711 GetSelectedItemsValue(wsValueArray); |
1484 int32_t iValues = wsValueArray.GetSize(); | 712 int32_t iValues = wsValueArray.GetSize(); |
1485 if (iValues < 1) { | 713 if (iValues < 1) |
1486 return; | 714 return; |
1487 } | 715 |
1488 CFX_WideStringArray wsSaveTextArray; | 716 CFX_WideStringArray wsSaveTextArray; |
1489 GetChoiceListItems(wsSaveTextArray, TRUE); | 717 GetChoiceListItems(wsSaveTextArray, TRUE); |
1490 int32_t iSaves = wsSaveTextArray.GetSize(); | 718 int32_t iSaves = wsSaveTextArray.GetSize(); |
1491 for (int32_t i = 0; i < iValues; i++) { | 719 for (int32_t i = 0; i < iValues; i++) { |
1492 for (int32_t j = 0; j < iSaves; j++) { | 720 for (int32_t j = 0; j < iSaves; j++) { |
1493 if (wsValueArray[i] == wsSaveTextArray[j]) { | 721 if (wsValueArray[i] == wsSaveTextArray[j]) { |
1494 iSelArray.Add(j); | 722 iSelArray.Add(j); |
1495 break; | 723 break; |
1496 } | 724 } |
1497 } | 725 } |
1498 } | 726 } |
1499 } | 727 } |
| 728 |
1500 void CXFA_WidgetData::GetSelectedItemsValue( | 729 void CXFA_WidgetData::GetSelectedItemsValue( |
1501 CFX_WideStringArray& wsSelTextArray) { | 730 CFX_WideStringArray& wsSelTextArray) { |
1502 CFX_WideString wsValue = GetRawValue(); | 731 CFX_WideString wsValue = GetRawValue(); |
1503 if (GetChoiceListOpen() == XFA_ATTRIBUTEENUM_MultiSelect) { | 732 if (GetChoiceListOpen() == XFA_ATTRIBUTEENUM_MultiSelect) { |
1504 if (!wsValue.IsEmpty()) { | 733 if (!wsValue.IsEmpty()) { |
1505 int32_t iStart = 0; | 734 int32_t iStart = 0; |
1506 int32_t iLength = wsValue.GetLength(); | 735 int32_t iLength = wsValue.GetLength(); |
1507 int32_t iEnd = wsValue.Find(L'\n', iStart); | 736 int32_t iEnd = wsValue.Find(L'\n', iStart); |
1508 iEnd = (iEnd == -1) ? iLength : iEnd; | 737 iEnd = (iEnd == -1) ? iLength : iEnd; |
1509 while (iEnd >= iStart) { | 738 while (iEnd >= iStart) { |
1510 wsSelTextArray.Add(wsValue.Mid(iStart, iEnd - iStart)); | 739 wsSelTextArray.Add(wsValue.Mid(iStart, iEnd - iStart)); |
1511 iStart = iEnd + 1; | 740 iStart = iEnd + 1; |
1512 if (iStart >= iLength) { | 741 if (iStart >= iLength) |
1513 break; | 742 break; |
1514 } | 743 |
1515 iEnd = wsValue.Find(L'\n', iStart); | 744 iEnd = wsValue.Find(L'\n', iStart); |
1516 if (iEnd < 0) { | 745 if (iEnd < 0) |
1517 wsSelTextArray.Add(wsValue.Mid(iStart, iLength - iStart)); | 746 wsSelTextArray.Add(wsValue.Mid(iStart, iLength - iStart)); |
1518 } | |
1519 } | 747 } |
1520 } | 748 } |
1521 } else { | 749 } else { |
1522 wsSelTextArray.Add(wsValue); | 750 wsSelTextArray.Add(wsValue); |
1523 } | 751 } |
1524 } | 752 } |
| 753 |
1525 FX_BOOL CXFA_WidgetData::GetItemState(int32_t nIndex) { | 754 FX_BOOL CXFA_WidgetData::GetItemState(int32_t nIndex) { |
1526 if (nIndex < 0) { | 755 if (nIndex < 0) |
1527 return FALSE; | 756 return FALSE; |
1528 } | 757 |
1529 CFX_WideStringArray wsSaveTextArray; | 758 CFX_WideStringArray wsSaveTextArray; |
1530 GetChoiceListItems(wsSaveTextArray, TRUE); | 759 GetChoiceListItems(wsSaveTextArray, TRUE); |
1531 if (wsSaveTextArray.GetSize() <= nIndex) { | 760 if (wsSaveTextArray.GetSize() <= nIndex) |
1532 return FALSE; | 761 return FALSE; |
1533 } | 762 |
1534 CFX_WideStringArray wsValueArray; | 763 CFX_WideStringArray wsValueArray; |
1535 GetSelectedItemsValue(wsValueArray); | 764 GetSelectedItemsValue(wsValueArray); |
1536 int32_t iValues = wsValueArray.GetSize(); | 765 int32_t iValues = wsValueArray.GetSize(); |
1537 for (int32_t j = 0; j < iValues; j++) { | 766 for (int32_t j = 0; j < iValues; j++) { |
1538 if (wsValueArray[j] == wsSaveTextArray[nIndex]) { | 767 if (wsValueArray[j] == wsSaveTextArray[nIndex]) |
1539 return TRUE; | 768 return TRUE; |
1540 } | |
1541 } | 769 } |
1542 return FALSE; | 770 return FALSE; |
1543 } | 771 } |
| 772 |
1544 void CXFA_WidgetData::SetItemState(int32_t nIndex, | 773 void CXFA_WidgetData::SetItemState(int32_t nIndex, |
1545 FX_BOOL bSelected, | 774 FX_BOOL bSelected, |
1546 FX_BOOL bNotify, | 775 FX_BOOL bNotify, |
1547 FX_BOOL bScriptModify, | 776 FX_BOOL bScriptModify, |
1548 FX_BOOL bSyncData) { | 777 FX_BOOL bSyncData) { |
1549 if (nIndex < 0) { | 778 if (nIndex < 0) |
1550 return; | 779 return; |
1551 } | 780 |
1552 CFX_WideStringArray wsSaveTextArray; | 781 CFX_WideStringArray wsSaveTextArray; |
1553 GetChoiceListItems(wsSaveTextArray, TRUE); | 782 GetChoiceListItems(wsSaveTextArray, TRUE); |
1554 if (wsSaveTextArray.GetSize() <= nIndex) { | 783 if (wsSaveTextArray.GetSize() <= nIndex) |
1555 return; | 784 return; |
1556 } | 785 |
1557 int32_t iSel = -1; | 786 int32_t iSel = -1; |
1558 CFX_WideStringArray wsValueArray; | 787 CFX_WideStringArray wsValueArray; |
1559 GetSelectedItemsValue(wsValueArray); | 788 GetSelectedItemsValue(wsValueArray); |
1560 int32_t iValues = wsValueArray.GetSize(); | 789 int32_t iValues = wsValueArray.GetSize(); |
1561 for (int32_t j = 0; j < iValues; j++) { | 790 for (int32_t j = 0; j < iValues; j++) { |
1562 if (wsValueArray[j] == wsSaveTextArray[nIndex]) { | 791 if (wsValueArray[j] == wsSaveTextArray[nIndex]) { |
1563 iSel = j; | 792 iSel = j; |
1564 break; | 793 break; |
1565 } | 794 } |
1566 } | 795 } |
(...skipping 27 matching lines...) Expand all Loading... |
1594 GetFormatDataValue(wsSaveText.AsWideStringC(), wsFormatText); | 823 GetFormatDataValue(wsSaveText.AsWideStringC(), wsFormatText); |
1595 m_pNode->SetContent(wsSaveText, wsFormatText, bNotify, bScriptModify, | 824 m_pNode->SetContent(wsSaveText, wsFormatText, bNotify, bScriptModify, |
1596 bSyncData); | 825 bSyncData); |
1597 } | 826 } |
1598 } else if (iSel >= 0) { | 827 } else if (iSel >= 0) { |
1599 m_pNode->SetContent(CFX_WideString(), CFX_WideString(), bNotify, | 828 m_pNode->SetContent(CFX_WideString(), CFX_WideString(), bNotify, |
1600 bScriptModify, bSyncData); | 829 bScriptModify, bSyncData); |
1601 } | 830 } |
1602 } | 831 } |
1603 } | 832 } |
| 833 |
1604 void CXFA_WidgetData::SetSelectdItems(CFX_Int32Array& iSelArray, | 834 void CXFA_WidgetData::SetSelectdItems(CFX_Int32Array& iSelArray, |
1605 FX_BOOL bNotify, | 835 FX_BOOL bNotify, |
1606 FX_BOOL bScriptModify, | 836 FX_BOOL bScriptModify, |
1607 FX_BOOL bSyncData) { | 837 FX_BOOL bSyncData) { |
1608 CFX_WideString wsValue; | 838 CFX_WideString wsValue; |
1609 int32_t iSize = iSelArray.GetSize(); | 839 int32_t iSize = iSelArray.GetSize(); |
1610 if (iSize >= 1) { | 840 if (iSize >= 1) { |
1611 CFX_WideStringArray wsSaveTextArray; | 841 CFX_WideStringArray wsSaveTextArray; |
1612 GetChoiceListItems(wsSaveTextArray, TRUE); | 842 GetChoiceListItems(wsSaveTextArray, TRUE); |
1613 CFX_WideString wsItemValue; | 843 CFX_WideString wsItemValue; |
1614 for (int32_t i = 0; i < iSize; i++) { | 844 for (int32_t i = 0; i < iSize; i++) { |
1615 wsItemValue = (iSize == 1) | 845 wsItemValue = (iSize == 1) |
1616 ? wsSaveTextArray[iSelArray[i]] | 846 ? wsSaveTextArray[iSelArray[i]] |
1617 : wsSaveTextArray[iSelArray[i]] + FX_WSTRC(L"\n"); | 847 : wsSaveTextArray[iSelArray[i]] + FX_WSTRC(L"\n"); |
1618 wsValue += wsItemValue; | 848 wsValue += wsItemValue; |
1619 } | 849 } |
1620 } | 850 } |
1621 CFX_WideString wsFormat(wsValue); | 851 CFX_WideString wsFormat(wsValue); |
1622 if (GetChoiceListOpen() != XFA_ATTRIBUTEENUM_MultiSelect) { | 852 if (GetChoiceListOpen() != XFA_ATTRIBUTEENUM_MultiSelect) |
1623 GetFormatDataValue(wsValue.AsWideStringC(), wsFormat); | 853 GetFormatDataValue(wsValue.AsWideStringC(), wsFormat); |
1624 } | 854 |
1625 m_pNode->SetContent(wsValue, wsFormat, bNotify, bScriptModify, bSyncData); | 855 m_pNode->SetContent(wsValue, wsFormat, bNotify, bScriptModify, bSyncData); |
1626 } | 856 } |
| 857 |
1627 void CXFA_WidgetData::ClearAllSelections() { | 858 void CXFA_WidgetData::ClearAllSelections() { |
1628 CXFA_Node* pBind = m_pNode->GetBindData(); | 859 CXFA_Node* pBind = m_pNode->GetBindData(); |
1629 if (pBind && GetChoiceListOpen() == XFA_ATTRIBUTEENUM_MultiSelect) { | 860 if (pBind && GetChoiceListOpen() == XFA_ATTRIBUTEENUM_MultiSelect) { |
1630 while (CXFA_Node* pChildNode = | 861 while (CXFA_Node* pChildNode = |
1631 pBind->GetNodeItem(XFA_NODEITEM_FirstChild)) { | 862 pBind->GetNodeItem(XFA_NODEITEM_FirstChild)) { |
1632 pBind->RemoveChild(pChildNode); | 863 pBind->RemoveChild(pChildNode); |
1633 } | 864 } |
1634 } else { | 865 } else { |
1635 SyncValue(CFX_WideString(), FALSE); | 866 SyncValue(CFX_WideString(), FALSE); |
1636 } | 867 } |
1637 } | 868 } |
| 869 |
1638 void CXFA_WidgetData::InsertItem(const CFX_WideString& wsLabel, | 870 void CXFA_WidgetData::InsertItem(const CFX_WideString& wsLabel, |
1639 const CFX_WideString& wsValue, | 871 const CFX_WideString& wsValue, |
1640 int32_t nIndex, | 872 int32_t nIndex, |
1641 FX_BOOL bNotify) { | 873 FX_BOOL bNotify) { |
1642 CFX_WideString wsNewValue(wsValue); | 874 CFX_WideString wsNewValue(wsValue); |
1643 if (wsNewValue.IsEmpty()) { | 875 if (wsNewValue.IsEmpty()) |
1644 wsNewValue = wsLabel; | 876 wsNewValue = wsLabel; |
1645 } | 877 |
1646 CXFA_NodeArray listitems; | 878 CXFA_NodeArray listitems; |
1647 int32_t iCount = 0; | 879 int32_t iCount = 0; |
1648 CXFA_Node* pItemNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 880 CXFA_Node* pItemNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
1649 for (; pItemNode; | 881 for (; pItemNode; |
1650 pItemNode = pItemNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 882 pItemNode = pItemNode->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
1651 if (pItemNode->GetClassID() != XFA_ELEMENT_Items) { | 883 if (pItemNode->GetClassID() != XFA_ELEMENT_Items) |
1652 continue; | 884 continue; |
1653 } | 885 |
1654 listitems.Add(pItemNode); | 886 listitems.Add(pItemNode); |
1655 iCount++; | 887 iCount++; |
1656 } | 888 } |
1657 if (iCount < 1) { | 889 if (iCount < 1) { |
1658 CXFA_Node* pItems = m_pNode->CreateSamePacketNode(XFA_ELEMENT_Items); | 890 CXFA_Node* pItems = m_pNode->CreateSamePacketNode(XFA_ELEMENT_Items); |
1659 m_pNode->InsertChild(-1, pItems); | 891 m_pNode->InsertChild(-1, pItems); |
1660 InsertListTextItem(pItems, wsLabel.AsWideStringC(), nIndex); | 892 InsertListTextItem(pItems, wsLabel.AsWideStringC(), nIndex); |
1661 CXFA_Node* pSaveItems = m_pNode->CreateSamePacketNode(XFA_ELEMENT_Items); | 893 CXFA_Node* pSaveItems = m_pNode->CreateSamePacketNode(XFA_ELEMENT_Items); |
1662 m_pNode->InsertChild(-1, pSaveItems); | 894 m_pNode->InsertChild(-1, pSaveItems); |
1663 pSaveItems->SetBoolean(XFA_ATTRIBUTE_Save, TRUE); | 895 pSaveItems->SetBoolean(XFA_ATTRIBUTE_Save, TRUE); |
1664 InsertListTextItem(pSaveItems, wsNewValue.AsWideStringC(), nIndex); | 896 InsertListTextItem(pSaveItems, wsNewValue.AsWideStringC(), nIndex); |
1665 } else if (iCount > 1) { | 897 } else if (iCount > 1) { |
1666 for (int32_t i = 0; i < 2; i++) { | 898 for (int32_t i = 0; i < 2; i++) { |
1667 CXFA_Node* pNode = listitems[i]; | 899 CXFA_Node* pNode = listitems[i]; |
1668 FX_BOOL bHasSave = pNode->GetBoolean(XFA_ATTRIBUTE_Save); | 900 FX_BOOL bHasSave = pNode->GetBoolean(XFA_ATTRIBUTE_Save); |
1669 if (bHasSave) { | 901 if (bHasSave) |
1670 InsertListTextItem(pNode, wsNewValue.AsWideStringC(), nIndex); | 902 InsertListTextItem(pNode, wsNewValue.AsWideStringC(), nIndex); |
1671 } else { | 903 else |
1672 InsertListTextItem(pNode, wsLabel.AsWideStringC(), nIndex); | 904 InsertListTextItem(pNode, wsLabel.AsWideStringC(), nIndex); |
1673 } | |
1674 } | 905 } |
1675 } else { | 906 } else { |
1676 CXFA_Node* pNode = listitems[0]; | 907 CXFA_Node* pNode = listitems[0]; |
1677 pNode->SetBoolean(XFA_ATTRIBUTE_Save, FALSE); | 908 pNode->SetBoolean(XFA_ATTRIBUTE_Save, FALSE); |
1678 pNode->SetEnum(XFA_ATTRIBUTE_Presence, XFA_ATTRIBUTEENUM_Visible); | 909 pNode->SetEnum(XFA_ATTRIBUTE_Presence, XFA_ATTRIBUTEENUM_Visible); |
1679 CXFA_Node* pSaveItems = m_pNode->CreateSamePacketNode(XFA_ELEMENT_Items); | 910 CXFA_Node* pSaveItems = m_pNode->CreateSamePacketNode(XFA_ELEMENT_Items); |
1680 m_pNode->InsertChild(-1, pSaveItems); | 911 m_pNode->InsertChild(-1, pSaveItems); |
1681 pSaveItems->SetBoolean(XFA_ATTRIBUTE_Save, TRUE); | 912 pSaveItems->SetBoolean(XFA_ATTRIBUTE_Save, TRUE); |
1682 pSaveItems->SetEnum(XFA_ATTRIBUTE_Presence, XFA_ATTRIBUTEENUM_Hidden); | 913 pSaveItems->SetEnum(XFA_ATTRIBUTE_Presence, XFA_ATTRIBUTEENUM_Hidden); |
1683 listitems.RemoveAll(); | 914 listitems.RemoveAll(); |
1684 CXFA_Node* pListNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 915 CXFA_Node* pListNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
1685 int32_t i = 0; | 916 int32_t i = 0; |
1686 while (pListNode) { | 917 while (pListNode) { |
1687 CFX_WideString wsOldValue; | 918 CFX_WideString wsOldValue; |
1688 pListNode->TryContent(wsOldValue); | 919 pListNode->TryContent(wsOldValue); |
1689 InsertListTextItem(pSaveItems, wsOldValue.AsWideStringC(), i); | 920 InsertListTextItem(pSaveItems, wsOldValue.AsWideStringC(), i); |
1690 i++; | 921 i++; |
1691 pListNode = pListNode->GetNodeItem(XFA_NODEITEM_NextSibling); | 922 pListNode = pListNode->GetNodeItem(XFA_NODEITEM_NextSibling); |
1692 } | 923 } |
1693 InsertListTextItem(pNode, wsLabel.AsWideStringC(), nIndex); | 924 InsertListTextItem(pNode, wsLabel.AsWideStringC(), nIndex); |
1694 InsertListTextItem(pSaveItems, wsNewValue.AsWideStringC(), nIndex); | 925 InsertListTextItem(pSaveItems, wsNewValue.AsWideStringC(), nIndex); |
1695 } | 926 } |
1696 if (!bNotify) { | 927 if (!bNotify) |
1697 return; | 928 return; |
1698 } | 929 |
1699 m_pNode->GetDocument()->GetNotify()->OnWidgetDataEvent( | 930 m_pNode->GetDocument()->GetNotify()->OnWidgetDataEvent( |
1700 this, XFA_WIDGETEVENT_ListItemAdded, (void*)(const FX_WCHAR*)wsLabel, | 931 this, XFA_WIDGETEVENT_ListItemAdded, (void*)(const FX_WCHAR*)wsLabel, |
1701 (void*)(const FX_WCHAR*)wsValue, (void*)(uintptr_t)nIndex); | 932 (void*)(const FX_WCHAR*)wsValue, (void*)(uintptr_t)nIndex); |
1702 } | 933 } |
| 934 |
1703 void CXFA_WidgetData::GetItemLabel(const CFX_WideStringC& wsValue, | 935 void CXFA_WidgetData::GetItemLabel(const CFX_WideStringC& wsValue, |
1704 CFX_WideString& wsLabel) { | 936 CFX_WideString& wsLabel) { |
1705 int32_t iCount = 0; | 937 int32_t iCount = 0; |
1706 CXFA_NodeArray listitems; | 938 CXFA_NodeArray listitems; |
1707 CXFA_Node* pItems = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 939 CXFA_Node* pItems = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
1708 for (; pItems; pItems = pItems->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 940 for (; pItems; pItems = pItems->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
1709 if (pItems->GetClassID() != XFA_ELEMENT_Items) { | 941 if (pItems->GetClassID() != XFA_ELEMENT_Items) |
1710 continue; | 942 continue; |
1711 } | 943 |
1712 iCount++; | 944 iCount++; |
1713 listitems.Add(pItems); | 945 listitems.Add(pItems); |
1714 } | 946 } |
1715 if (iCount <= 1) { | 947 if (iCount <= 1) { |
1716 wsLabel = wsValue; | 948 wsLabel = wsValue; |
1717 } else { | 949 } else { |
1718 CXFA_Node* pLabelItems = listitems[0]; | 950 CXFA_Node* pLabelItems = listitems[0]; |
1719 FX_BOOL bSave = pLabelItems->GetBoolean(XFA_ATTRIBUTE_Save); | 951 FX_BOOL bSave = pLabelItems->GetBoolean(XFA_ATTRIBUTE_Save); |
1720 CXFA_Node* pSaveItems = NULL; | 952 CXFA_Node* pSaveItems = NULL; |
1721 if (bSave) { | 953 if (bSave) { |
1722 pSaveItems = pLabelItems; | 954 pSaveItems = pLabelItems; |
1723 pLabelItems = listitems[1]; | 955 pLabelItems = listitems[1]; |
1724 } else { | 956 } else { |
1725 pSaveItems = listitems[1]; | 957 pSaveItems = listitems[1]; |
1726 } | 958 } |
1727 iCount = 0; | 959 iCount = 0; |
1728 int32_t iSearch = -1; | 960 int32_t iSearch = -1; |
1729 CFX_WideString wsContent; | 961 CFX_WideString wsContent; |
1730 CXFA_Node* pChildItem = pSaveItems->GetNodeItem(XFA_NODEITEM_FirstChild); | 962 CXFA_Node* pChildItem = pSaveItems->GetNodeItem(XFA_NODEITEM_FirstChild); |
1731 for (; pChildItem; | 963 for (; pChildItem; |
1732 pChildItem = pChildItem->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 964 pChildItem = pChildItem->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
1733 pChildItem->TryContent(wsContent); | 965 pChildItem->TryContent(wsContent); |
1734 if (wsContent == wsValue) { | 966 if (wsContent == wsValue) { |
1735 iSearch = iCount; | 967 iSearch = iCount; |
1736 break; | 968 break; |
1737 } | 969 } |
1738 iCount++; | 970 iCount++; |
1739 } | 971 } |
1740 if (iSearch < 0) { | 972 if (iSearch < 0) |
1741 return; | 973 return; |
1742 } | |
1743 if (CXFA_Node* pText = | 974 if (CXFA_Node* pText = |
1744 pLabelItems->GetChild(iSearch, XFA_ELEMENT_UNKNOWN)) { | 975 pLabelItems->GetChild(iSearch, XFA_ELEMENT_UNKNOWN)) { |
1745 pText->TryContent(wsLabel); | 976 pText->TryContent(wsLabel); |
1746 } | 977 } |
1747 } | 978 } |
1748 } | 979 } |
| 980 |
1749 void CXFA_WidgetData::GetItemValue(const CFX_WideStringC& wsLabel, | 981 void CXFA_WidgetData::GetItemValue(const CFX_WideStringC& wsLabel, |
1750 CFX_WideString& wsValue) { | 982 CFX_WideString& wsValue) { |
1751 int32_t iCount = 0; | 983 int32_t iCount = 0; |
1752 CXFA_NodeArray listitems; | 984 CXFA_NodeArray listitems; |
1753 CXFA_Node* pItems = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 985 CXFA_Node* pItems = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
1754 for (; pItems; pItems = pItems->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 986 for (; pItems; pItems = pItems->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
1755 if (pItems->GetClassID() != XFA_ELEMENT_Items) { | 987 if (pItems->GetClassID() != XFA_ELEMENT_Items) |
1756 continue; | 988 continue; |
1757 } | 989 |
1758 iCount++; | 990 iCount++; |
1759 listitems.Add(pItems); | 991 listitems.Add(pItems); |
1760 } | 992 } |
1761 if (iCount <= 1) { | 993 if (iCount <= 1) { |
1762 wsValue = wsLabel; | 994 wsValue = wsLabel; |
1763 } else { | 995 } else { |
1764 CXFA_Node* pLabelItems = listitems[0]; | 996 CXFA_Node* pLabelItems = listitems[0]; |
1765 FX_BOOL bSave = pLabelItems->GetBoolean(XFA_ATTRIBUTE_Save); | 997 FX_BOOL bSave = pLabelItems->GetBoolean(XFA_ATTRIBUTE_Save); |
1766 CXFA_Node* pSaveItems = NULL; | 998 CXFA_Node* pSaveItems = NULL; |
1767 if (bSave) { | 999 if (bSave) { |
1768 pSaveItems = pLabelItems; | 1000 pSaveItems = pLabelItems; |
1769 pLabelItems = listitems[1]; | 1001 pLabelItems = listitems[1]; |
1770 } else { | 1002 } else { |
1771 pSaveItems = listitems[1]; | 1003 pSaveItems = listitems[1]; |
1772 } | 1004 } |
1773 iCount = 0; | 1005 iCount = 0; |
1774 int32_t iSearch = -1; | 1006 int32_t iSearch = -1; |
1775 CFX_WideString wsContent; | 1007 CFX_WideString wsContent; |
1776 CXFA_Node* pChildItem = pLabelItems->GetNodeItem(XFA_NODEITEM_FirstChild); | 1008 CXFA_Node* pChildItem = pLabelItems->GetNodeItem(XFA_NODEITEM_FirstChild); |
1777 for (; pChildItem; | 1009 for (; pChildItem; |
1778 pChildItem = pChildItem->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 1010 pChildItem = pChildItem->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
1779 pChildItem->TryContent(wsContent); | 1011 pChildItem->TryContent(wsContent); |
1780 if (wsContent == wsLabel) { | 1012 if (wsContent == wsLabel) { |
1781 iSearch = iCount; | 1013 iSearch = iCount; |
1782 break; | 1014 break; |
1783 } | 1015 } |
1784 iCount++; | 1016 iCount++; |
1785 } | 1017 } |
1786 if (iSearch < 0) { | 1018 if (iSearch < 0) |
1787 return; | 1019 return; |
1788 } | 1020 if (CXFA_Node* pText = pSaveItems->GetChild(iSearch, XFA_ELEMENT_UNKNOWN)) |
1789 if (CXFA_Node* pText = pSaveItems->GetChild(iSearch, XFA_ELEMENT_UNKNOWN)) { | |
1790 pText->TryContent(wsValue); | 1021 pText->TryContent(wsValue); |
1791 } | |
1792 } | 1022 } |
1793 } | 1023 } |
| 1024 |
1794 FX_BOOL CXFA_WidgetData::DeleteItem(int32_t nIndex, | 1025 FX_BOOL CXFA_WidgetData::DeleteItem(int32_t nIndex, |
1795 FX_BOOL bNotify, | 1026 FX_BOOL bNotify, |
1796 FX_BOOL bScriptModify, | 1027 FX_BOOL bScriptModify, |
1797 FX_BOOL bSyncData) { | 1028 FX_BOOL bSyncData) { |
1798 FX_BOOL bSetValue = FALSE; | 1029 FX_BOOL bSetValue = FALSE; |
1799 CXFA_Node* pItems = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); | 1030 CXFA_Node* pItems = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); |
1800 for (; pItems; pItems = pItems->GetNodeItem(XFA_NODEITEM_NextSibling)) { | 1031 for (; pItems; pItems = pItems->GetNodeItem(XFA_NODEITEM_NextSibling)) { |
1801 if (pItems->GetClassID() != XFA_ELEMENT_Items) { | 1032 if (pItems->GetClassID() != XFA_ELEMENT_Items) |
1802 continue; | 1033 continue; |
1803 } | 1034 |
1804 if (nIndex < 0) { | 1035 if (nIndex < 0) { |
1805 while (CXFA_Node* pNode = pItems->GetNodeItem(XFA_NODEITEM_FirstChild)) { | 1036 while (CXFA_Node* pNode = pItems->GetNodeItem(XFA_NODEITEM_FirstChild)) { |
1806 pItems->RemoveChild(pNode); | 1037 pItems->RemoveChild(pNode); |
1807 } | 1038 } |
1808 } else { | 1039 } else { |
1809 if (!bSetValue && pItems->GetBoolean(XFA_ATTRIBUTE_Save)) { | 1040 if (!bSetValue && pItems->GetBoolean(XFA_ATTRIBUTE_Save)) { |
1810 SetItemState(nIndex, FALSE, TRUE, bScriptModify, bSyncData); | 1041 SetItemState(nIndex, FALSE, TRUE, bScriptModify, bSyncData); |
1811 bSetValue = TRUE; | 1042 bSetValue = TRUE; |
1812 } | 1043 } |
1813 int32_t i = 0; | 1044 int32_t i = 0; |
1814 CXFA_Node* pNode = pItems->GetNodeItem(XFA_NODEITEM_FirstChild); | 1045 CXFA_Node* pNode = pItems->GetNodeItem(XFA_NODEITEM_FirstChild); |
1815 while (pNode) { | 1046 while (pNode) { |
1816 if (i == nIndex) { | 1047 if (i == nIndex) { |
1817 pItems->RemoveChild(pNode); | 1048 pItems->RemoveChild(pNode); |
1818 break; | 1049 break; |
1819 } | 1050 } |
1820 i++; | 1051 i++; |
1821 pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling); | 1052 pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling); |
1822 } | 1053 } |
1823 } | 1054 } |
1824 } | 1055 } |
1825 if (!bNotify) { | 1056 if (!bNotify) |
1826 return TRUE; | 1057 return TRUE; |
1827 } | 1058 |
1828 m_pNode->GetDocument()->GetNotify()->OnWidgetDataEvent( | 1059 m_pNode->GetDocument()->GetNotify()->OnWidgetDataEvent( |
1829 this, XFA_WIDGETEVENT_ListItemRemoved, (void*)(uintptr_t)nIndex); | 1060 this, XFA_WIDGETEVENT_ListItemRemoved, (void*)(uintptr_t)nIndex); |
1830 return TRUE; | 1061 return TRUE; |
1831 } | 1062 } |
| 1063 |
1832 int32_t CXFA_WidgetData::GetHorizontalScrollPolicy() { | 1064 int32_t CXFA_WidgetData::GetHorizontalScrollPolicy() { |
1833 CXFA_Node* pUIChild = GetUIChild(); | 1065 CXFA_Node* pUIChild = GetUIChild(); |
1834 if (pUIChild) { | 1066 if (pUIChild) |
1835 return pUIChild->GetEnum(XFA_ATTRIBUTE_HScrollPolicy); | 1067 return pUIChild->GetEnum(XFA_ATTRIBUTE_HScrollPolicy); |
1836 } | |
1837 return XFA_ATTRIBUTEENUM_Auto; | 1068 return XFA_ATTRIBUTEENUM_Auto; |
1838 } | 1069 } |
| 1070 |
1839 int32_t CXFA_WidgetData::GetNumberOfCells() { | 1071 int32_t CXFA_WidgetData::GetNumberOfCells() { |
1840 CXFA_Node* pUIChild = GetUIChild(); | 1072 CXFA_Node* pUIChild = GetUIChild(); |
1841 if (!pUIChild) { | 1073 if (!pUIChild) |
1842 return -1; | 1074 return -1; |
1843 } | 1075 if (CXFA_Node* pNode = pUIChild->GetChild(0, XFA_ELEMENT_Comb)) |
1844 if (CXFA_Node* pNode = pUIChild->GetChild(0, XFA_ELEMENT_Comb)) { | |
1845 return pNode->GetInteger(XFA_ATTRIBUTE_NumberOfCells); | 1076 return pNode->GetInteger(XFA_ATTRIBUTE_NumberOfCells); |
1846 } | |
1847 return -1; | 1077 return -1; |
1848 } | 1078 } |
| 1079 |
1849 CFX_WideString CXFA_WidgetData::GetBarcodeType() { | 1080 CFX_WideString CXFA_WidgetData::GetBarcodeType() { |
1850 CXFA_Node* pUIChild = GetUIChild(); | 1081 CXFA_Node* pUIChild = GetUIChild(); |
1851 return pUIChild ? pUIChild->GetCData(XFA_ATTRIBUTE_Type) : NULL; | 1082 return pUIChild ? pUIChild->GetCData(XFA_ATTRIBUTE_Type) : NULL; |
1852 } | 1083 } |
| 1084 |
1853 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_CharEncoding(int32_t& val) { | 1085 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_CharEncoding(int32_t& val) { |
1854 CXFA_Node* pUIChild = GetUIChild(); | 1086 CXFA_Node* pUIChild = GetUIChild(); |
1855 CFX_WideString wsCharEncoding; | 1087 CFX_WideString wsCharEncoding; |
1856 if (pUIChild->TryCData(XFA_ATTRIBUTE_CharEncoding, wsCharEncoding)) { | 1088 if (pUIChild->TryCData(XFA_ATTRIBUTE_CharEncoding, wsCharEncoding)) { |
1857 if (wsCharEncoding.CompareNoCase(L"UTF-16")) { | 1089 if (wsCharEncoding.CompareNoCase(L"UTF-16")) { |
1858 val = CHAR_ENCODING_UNICODE; | 1090 val = CHAR_ENCODING_UNICODE; |
1859 return TRUE; | 1091 return TRUE; |
1860 } else if (wsCharEncoding.CompareNoCase(L"UTF-8")) { | 1092 } else if (wsCharEncoding.CompareNoCase(L"UTF-8")) { |
1861 val = CHAR_ENCODING_UTF8; | 1093 val = CHAR_ENCODING_UTF8; |
1862 return TRUE; | 1094 return TRUE; |
1863 } | 1095 } |
1864 } | 1096 } |
1865 return FALSE; | 1097 return FALSE; |
1866 } | 1098 } |
| 1099 |
1867 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_Checksum(int32_t& val) { | 1100 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_Checksum(int32_t& val) { |
1868 CXFA_Node* pUIChild = GetUIChild(); | 1101 CXFA_Node* pUIChild = GetUIChild(); |
1869 XFA_ATTRIBUTEENUM eChecksum; | 1102 XFA_ATTRIBUTEENUM eChecksum; |
1870 if (pUIChild->TryEnum(XFA_ATTRIBUTE_Checksum, eChecksum)) { | 1103 if (pUIChild->TryEnum(XFA_ATTRIBUTE_Checksum, eChecksum)) { |
1871 switch (eChecksum) { | 1104 switch (eChecksum) { |
1872 case XFA_ATTRIBUTEENUM_None: | 1105 case XFA_ATTRIBUTEENUM_None: |
1873 val = 0; | 1106 val = 0; |
1874 return TRUE; | 1107 return TRUE; |
1875 case XFA_ATTRIBUTEENUM_Auto: | 1108 case XFA_ATTRIBUTEENUM_Auto: |
1876 val = 1; | 1109 val = 1; |
1877 return TRUE; | 1110 return TRUE; |
1878 case XFA_ATTRIBUTEENUM_1mod10: | 1111 case XFA_ATTRIBUTEENUM_1mod10: |
1879 break; | 1112 break; |
1880 case XFA_ATTRIBUTEENUM_1mod10_1mod11: | 1113 case XFA_ATTRIBUTEENUM_1mod10_1mod11: |
1881 break; | 1114 break; |
1882 case XFA_ATTRIBUTEENUM_2mod10: | 1115 case XFA_ATTRIBUTEENUM_2mod10: |
1883 break; | 1116 break; |
1884 default: | 1117 default: |
1885 break; | 1118 break; |
1886 } | 1119 } |
1887 } | 1120 } |
1888 return FALSE; | 1121 return FALSE; |
1889 } | 1122 } |
| 1123 |
1890 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_DataLength(int32_t& val) { | 1124 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_DataLength(int32_t& val) { |
1891 CXFA_Node* pUIChild = GetUIChild(); | 1125 CXFA_Node* pUIChild = GetUIChild(); |
1892 CFX_WideString wsDataLength; | 1126 CFX_WideString wsDataLength; |
1893 if (pUIChild->TryCData(XFA_ATTRIBUTE_DataLength, wsDataLength)) { | 1127 if (pUIChild->TryCData(XFA_ATTRIBUTE_DataLength, wsDataLength)) { |
1894 val = FXSYS_wtoi(wsDataLength); | 1128 val = FXSYS_wtoi(wsDataLength); |
1895 return TRUE; | 1129 return TRUE; |
1896 } | 1130 } |
1897 return FALSE; | 1131 return FALSE; |
1898 } | 1132 } |
| 1133 |
1899 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_StartChar(FX_CHAR& val) { | 1134 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_StartChar(FX_CHAR& val) { |
1900 CXFA_Node* pUIChild = GetUIChild(); | 1135 CXFA_Node* pUIChild = GetUIChild(); |
1901 CFX_WideStringC wsStartEndChar; | 1136 CFX_WideStringC wsStartEndChar; |
1902 if (pUIChild->TryCData(XFA_ATTRIBUTE_StartChar, wsStartEndChar)) { | 1137 if (pUIChild->TryCData(XFA_ATTRIBUTE_StartChar, wsStartEndChar)) { |
1903 if (wsStartEndChar.GetLength()) { | 1138 if (wsStartEndChar.GetLength()) { |
1904 val = (FX_CHAR)wsStartEndChar.GetAt(0); | 1139 val = (FX_CHAR)wsStartEndChar.GetAt(0); |
1905 return TRUE; | 1140 return TRUE; |
1906 } | 1141 } |
1907 } | 1142 } |
1908 return FALSE; | 1143 return FALSE; |
1909 } | 1144 } |
| 1145 |
1910 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_EndChar(FX_CHAR& val) { | 1146 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_EndChar(FX_CHAR& val) { |
1911 CXFA_Node* pUIChild = GetUIChild(); | 1147 CXFA_Node* pUIChild = GetUIChild(); |
1912 CFX_WideStringC wsStartEndChar; | 1148 CFX_WideStringC wsStartEndChar; |
1913 if (pUIChild->TryCData(XFA_ATTRIBUTE_EndChar, wsStartEndChar)) { | 1149 if (pUIChild->TryCData(XFA_ATTRIBUTE_EndChar, wsStartEndChar)) { |
1914 if (wsStartEndChar.GetLength()) { | 1150 if (wsStartEndChar.GetLength()) { |
1915 val = (FX_CHAR)wsStartEndChar.GetAt(0); | 1151 val = (FX_CHAR)wsStartEndChar.GetAt(0); |
1916 return TRUE; | 1152 return TRUE; |
1917 } | 1153 } |
1918 } | 1154 } |
1919 return FALSE; | 1155 return FALSE; |
1920 } | 1156 } |
| 1157 |
1921 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_ECLevel(int32_t& val) { | 1158 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_ECLevel(int32_t& val) { |
1922 CXFA_Node* pUIChild = GetUIChild(); | 1159 CXFA_Node* pUIChild = GetUIChild(); |
1923 CFX_WideString wsECLevel; | 1160 CFX_WideString wsECLevel; |
1924 if (pUIChild->TryCData(XFA_ATTRIBUTE_ErrorCorrectionLevel, wsECLevel)) { | 1161 if (pUIChild->TryCData(XFA_ATTRIBUTE_ErrorCorrectionLevel, wsECLevel)) { |
1925 val = FXSYS_wtoi(wsECLevel); | 1162 val = FXSYS_wtoi(wsECLevel); |
1926 return TRUE; | 1163 return TRUE; |
1927 } | 1164 } |
1928 return FALSE; | 1165 return FALSE; |
1929 } | 1166 } |
| 1167 |
1930 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_ModuleWidth(int32_t& val) { | 1168 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_ModuleWidth(int32_t& val) { |
1931 CXFA_Node* pUIChild = GetUIChild(); | 1169 CXFA_Node* pUIChild = GetUIChild(); |
1932 CXFA_Measurement mModuleWidthHeight; | 1170 CXFA_Measurement mModuleWidthHeight; |
1933 if (pUIChild->TryMeasure(XFA_ATTRIBUTE_ModuleWidth, mModuleWidthHeight)) { | 1171 if (pUIChild->TryMeasure(XFA_ATTRIBUTE_ModuleWidth, mModuleWidthHeight)) { |
1934 val = (int32_t)mModuleWidthHeight.ToUnit(XFA_UNIT_Pt); | 1172 val = (int32_t)mModuleWidthHeight.ToUnit(XFA_UNIT_Pt); |
1935 return TRUE; | 1173 return TRUE; |
1936 } | 1174 } |
1937 return FALSE; | 1175 return FALSE; |
1938 } | 1176 } |
| 1177 |
1939 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_ModuleHeight(int32_t& val) { | 1178 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_ModuleHeight(int32_t& val) { |
1940 CXFA_Node* pUIChild = GetUIChild(); | 1179 CXFA_Node* pUIChild = GetUIChild(); |
1941 CXFA_Measurement mModuleWidthHeight; | 1180 CXFA_Measurement mModuleWidthHeight; |
1942 if (pUIChild->TryMeasure(XFA_ATTRIBUTE_ModuleHeight, mModuleWidthHeight)) { | 1181 if (pUIChild->TryMeasure(XFA_ATTRIBUTE_ModuleHeight, mModuleWidthHeight)) { |
1943 val = (int32_t)mModuleWidthHeight.ToUnit(XFA_UNIT_Pt); | 1182 val = (int32_t)mModuleWidthHeight.ToUnit(XFA_UNIT_Pt); |
1944 return TRUE; | 1183 return TRUE; |
1945 } | 1184 } |
1946 return FALSE; | 1185 return FALSE; |
1947 } | 1186 } |
| 1187 |
1948 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_PrintChecksum(FX_BOOL& val) { | 1188 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_PrintChecksum(FX_BOOL& val) { |
1949 CXFA_Node* pUIChild = GetUIChild(); | 1189 CXFA_Node* pUIChild = GetUIChild(); |
1950 FX_BOOL bPrintCheckDigit; | 1190 FX_BOOL bPrintCheckDigit; |
1951 if (pUIChild->TryBoolean(XFA_ATTRIBUTE_PrintCheckDigit, bPrintCheckDigit)) { | 1191 if (pUIChild->TryBoolean(XFA_ATTRIBUTE_PrintCheckDigit, bPrintCheckDigit)) { |
1952 val = bPrintCheckDigit; | 1192 val = bPrintCheckDigit; |
1953 return TRUE; | 1193 return TRUE; |
1954 } | 1194 } |
1955 return FALSE; | 1195 return FALSE; |
1956 } | 1196 } |
| 1197 |
1957 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_TextLocation(int32_t& val) { | 1198 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_TextLocation(int32_t& val) { |
1958 CXFA_Node* pUIChild = GetUIChild(); | 1199 CXFA_Node* pUIChild = GetUIChild(); |
1959 XFA_ATTRIBUTEENUM eTextLocation; | 1200 XFA_ATTRIBUTEENUM eTextLocation; |
1960 if (pUIChild->TryEnum(XFA_ATTRIBUTE_TextLocation, eTextLocation)) { | 1201 if (pUIChild->TryEnum(XFA_ATTRIBUTE_TextLocation, eTextLocation)) { |
1961 switch (eTextLocation) { | 1202 switch (eTextLocation) { |
1962 case XFA_ATTRIBUTEENUM_None: | 1203 case XFA_ATTRIBUTEENUM_None: |
1963 val = BC_TEXT_LOC_NONE; | 1204 val = BC_TEXT_LOC_NONE; |
1964 return TRUE; | 1205 return TRUE; |
1965 case XFA_ATTRIBUTEENUM_Above: | 1206 case XFA_ATTRIBUTEENUM_Above: |
1966 val = BC_TEXT_LOC_ABOVE; | 1207 val = BC_TEXT_LOC_ABOVE; |
1967 return TRUE; | 1208 return TRUE; |
1968 case XFA_ATTRIBUTEENUM_Below: | 1209 case XFA_ATTRIBUTEENUM_Below: |
1969 val = BC_TEXT_LOC_BELOW; | 1210 val = BC_TEXT_LOC_BELOW; |
1970 return TRUE; | 1211 return TRUE; |
1971 case XFA_ATTRIBUTEENUM_AboveEmbedded: | 1212 case XFA_ATTRIBUTEENUM_AboveEmbedded: |
1972 val = BC_TEXT_LOC_ABOVEEMBED; | 1213 val = BC_TEXT_LOC_ABOVEEMBED; |
1973 return TRUE; | 1214 return TRUE; |
1974 case XFA_ATTRIBUTEENUM_BelowEmbedded: | 1215 case XFA_ATTRIBUTEENUM_BelowEmbedded: |
1975 val = BC_TEXT_LOC_BELOWEMBED; | 1216 val = BC_TEXT_LOC_BELOWEMBED; |
1976 return TRUE; | 1217 return TRUE; |
1977 default: | 1218 default: |
1978 break; | 1219 break; |
1979 } | 1220 } |
1980 } | 1221 } |
1981 return FALSE; | 1222 return FALSE; |
1982 } | 1223 } |
| 1224 |
1983 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_Truncate(FX_BOOL& val) { | 1225 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_Truncate(FX_BOOL& val) { |
1984 CXFA_Node* pUIChild = GetUIChild(); | 1226 CXFA_Node* pUIChild = GetUIChild(); |
1985 FX_BOOL bTruncate; | 1227 FX_BOOL bTruncate; |
1986 if (pUIChild->TryBoolean(XFA_ATTRIBUTE_Truncate, bTruncate)) { | 1228 if (pUIChild->TryBoolean(XFA_ATTRIBUTE_Truncate, bTruncate)) { |
1987 val = bTruncate; | 1229 val = bTruncate; |
1988 return TRUE; | 1230 return TRUE; |
1989 } | 1231 } |
1990 return FALSE; | 1232 return FALSE; |
1991 } | 1233 } |
| 1234 |
1992 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_WideNarrowRatio(FX_FLOAT& val) { | 1235 FX_BOOL CXFA_WidgetData::GetBarcodeAttribute_WideNarrowRatio(FX_FLOAT& val) { |
1993 CXFA_Node* pUIChild = GetUIChild(); | 1236 CXFA_Node* pUIChild = GetUIChild(); |
1994 CFX_WideString wsWideNarrowRatio; | 1237 CFX_WideString wsWideNarrowRatio; |
1995 if (pUIChild->TryCData(XFA_ATTRIBUTE_WideNarrowRatio, wsWideNarrowRatio)) { | 1238 if (pUIChild->TryCData(XFA_ATTRIBUTE_WideNarrowRatio, wsWideNarrowRatio)) { |
1996 FX_STRSIZE ptPos = wsWideNarrowRatio.Find(':'); | 1239 FX_STRSIZE ptPos = wsWideNarrowRatio.Find(':'); |
1997 FX_FLOAT fRatio = 0; | 1240 FX_FLOAT fRatio = 0; |
1998 if (ptPos >= 0) { | 1241 if (ptPos >= 0) { |
1999 fRatio = (FX_FLOAT)FXSYS_wtoi(wsWideNarrowRatio); | 1242 fRatio = (FX_FLOAT)FXSYS_wtoi(wsWideNarrowRatio); |
2000 } else { | 1243 } else { |
2001 int32_t fA, fB; | 1244 int32_t fA, fB; |
2002 fA = FXSYS_wtoi(wsWideNarrowRatio.Left(ptPos)); | 1245 fA = FXSYS_wtoi(wsWideNarrowRatio.Left(ptPos)); |
2003 fB = FXSYS_wtoi(wsWideNarrowRatio.Mid(ptPos + 1)); | 1246 fB = FXSYS_wtoi(wsWideNarrowRatio.Mid(ptPos + 1)); |
2004 if (fB) { | 1247 if (fB) |
2005 fRatio = (FX_FLOAT)fA / fB; | 1248 fRatio = (FX_FLOAT)fA / fB; |
2006 } | |
2007 } | 1249 } |
2008 val = fRatio; | 1250 val = fRatio; |
2009 return TRUE; | 1251 return TRUE; |
2010 } | 1252 } |
2011 return FALSE; | 1253 return FALSE; |
2012 } | 1254 } |
| 1255 |
2013 void CXFA_WidgetData::GetPasswordChar(CFX_WideString& wsPassWord) { | 1256 void CXFA_WidgetData::GetPasswordChar(CFX_WideString& wsPassWord) { |
2014 CXFA_Node* pUIChild = GetUIChild(); | 1257 CXFA_Node* pUIChild = GetUIChild(); |
2015 if (pUIChild) { | 1258 if (pUIChild) { |
2016 pUIChild->TryCData(XFA_ATTRIBUTE_PasswordChar, wsPassWord); | 1259 pUIChild->TryCData(XFA_ATTRIBUTE_PasswordChar, wsPassWord); |
2017 } else { | 1260 } else { |
2018 wsPassWord = XFA_GetAttributeDefaultValue_Cdata(XFA_ELEMENT_PasswordEdit, | 1261 wsPassWord = XFA_GetAttributeDefaultValue_Cdata(XFA_ELEMENT_PasswordEdit, |
2019 XFA_ATTRIBUTE_PasswordChar, | 1262 XFA_ATTRIBUTE_PasswordChar, |
2020 XFA_XDPPACKET_Form); | 1263 XFA_XDPPACKET_Form); |
2021 } | 1264 } |
2022 } | 1265 } |
| 1266 |
2023 FX_BOOL CXFA_WidgetData::IsMultiLine() { | 1267 FX_BOOL CXFA_WidgetData::IsMultiLine() { |
2024 CXFA_Node* pUIChild = GetUIChild(); | 1268 CXFA_Node* pUIChild = GetUIChild(); |
2025 if (pUIChild) { | 1269 if (pUIChild) |
2026 return pUIChild->GetBoolean(XFA_ATTRIBUTE_MultiLine); | 1270 return pUIChild->GetBoolean(XFA_ATTRIBUTE_MultiLine); |
2027 } | |
2028 return XFA_GetAttributeDefaultValue_Boolean( | 1271 return XFA_GetAttributeDefaultValue_Boolean( |
2029 XFA_ELEMENT_TextEdit, XFA_ATTRIBUTE_MultiLine, XFA_XDPPACKET_Form); | 1272 XFA_ELEMENT_TextEdit, XFA_ATTRIBUTE_MultiLine, XFA_XDPPACKET_Form); |
2030 } | 1273 } |
| 1274 |
2031 int32_t CXFA_WidgetData::GetVerticalScrollPolicy() { | 1275 int32_t CXFA_WidgetData::GetVerticalScrollPolicy() { |
2032 CXFA_Node* pUIChild = GetUIChild(); | 1276 CXFA_Node* pUIChild = GetUIChild(); |
2033 if (pUIChild) { | 1277 if (pUIChild) |
2034 return pUIChild->GetEnum(XFA_ATTRIBUTE_VScrollPolicy); | 1278 return pUIChild->GetEnum(XFA_ATTRIBUTE_VScrollPolicy); |
2035 } | |
2036 return XFA_GetAttributeDefaultValue_Enum( | 1279 return XFA_GetAttributeDefaultValue_Enum( |
2037 XFA_ELEMENT_TextEdit, XFA_ATTRIBUTE_VScrollPolicy, XFA_XDPPACKET_Form); | 1280 XFA_ELEMENT_TextEdit, XFA_ATTRIBUTE_VScrollPolicy, XFA_XDPPACKET_Form); |
2038 } | 1281 } |
| 1282 |
2039 int32_t CXFA_WidgetData::GetMaxChars(XFA_ELEMENT& eType) { | 1283 int32_t CXFA_WidgetData::GetMaxChars(XFA_ELEMENT& eType) { |
2040 if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_ELEMENT_Value)) { | 1284 if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_ELEMENT_Value)) { |
2041 if (CXFA_Node* pChild = pNode->GetNodeItem(XFA_NODEITEM_FirstChild)) { | 1285 if (CXFA_Node* pChild = pNode->GetNodeItem(XFA_NODEITEM_FirstChild)) { |
2042 switch (pChild->GetClassID()) { | 1286 switch (pChild->GetClassID()) { |
2043 case XFA_ELEMENT_Text: | 1287 case XFA_ELEMENT_Text: |
2044 eType = XFA_ELEMENT_Text; | 1288 eType = XFA_ELEMENT_Text; |
2045 return pChild->GetInteger(XFA_ATTRIBUTE_MaxChars); | 1289 return pChild->GetInteger(XFA_ATTRIBUTE_MaxChars); |
2046 case XFA_ELEMENT_ExData: { | 1290 case XFA_ELEMENT_ExData: { |
2047 eType = XFA_ELEMENT_ExData; | 1291 eType = XFA_ELEMENT_ExData; |
2048 int32_t iMax = pChild->GetInteger(XFA_ATTRIBUTE_MaxLength); | 1292 int32_t iMax = pChild->GetInteger(XFA_ATTRIBUTE_MaxLength); |
2049 return iMax < 0 ? 0 : iMax; | 1293 return iMax < 0 ? 0 : iMax; |
2050 } | 1294 } |
2051 default: | 1295 default: |
2052 break; | 1296 break; |
2053 } | 1297 } |
2054 } | 1298 } |
2055 } | 1299 } |
2056 return 0; | 1300 return 0; |
2057 } | 1301 } |
| 1302 |
2058 FX_BOOL CXFA_WidgetData::GetFracDigits(int32_t& iFracDigits) { | 1303 FX_BOOL CXFA_WidgetData::GetFracDigits(int32_t& iFracDigits) { |
2059 if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_ELEMENT_Value)) { | 1304 if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_ELEMENT_Value)) { |
2060 if (CXFA_Node* pChild = pNode->GetChild(0, XFA_ELEMENT_Decimal)) { | 1305 if (CXFA_Node* pChild = pNode->GetChild(0, XFA_ELEMENT_Decimal)) |
2061 return pChild->TryInteger(XFA_ATTRIBUTE_FracDigits, iFracDigits); | 1306 return pChild->TryInteger(XFA_ATTRIBUTE_FracDigits, iFracDigits); |
2062 } | |
2063 } | 1307 } |
2064 iFracDigits = -1; | 1308 iFracDigits = -1; |
2065 return FALSE; | 1309 return FALSE; |
2066 } | 1310 } |
| 1311 |
2067 FX_BOOL CXFA_WidgetData::GetLeadDigits(int32_t& iLeadDigits) { | 1312 FX_BOOL CXFA_WidgetData::GetLeadDigits(int32_t& iLeadDigits) { |
2068 if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_ELEMENT_Value)) { | 1313 if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_ELEMENT_Value)) { |
2069 if (CXFA_Node* pChild = pNode->GetChild(0, XFA_ELEMENT_Decimal)) { | 1314 if (CXFA_Node* pChild = pNode->GetChild(0, XFA_ELEMENT_Decimal)) |
2070 return pChild->TryInteger(XFA_ATTRIBUTE_LeadDigits, iLeadDigits); | 1315 return pChild->TryInteger(XFA_ATTRIBUTE_LeadDigits, iLeadDigits); |
2071 } | |
2072 } | 1316 } |
2073 iLeadDigits = -1; | 1317 iLeadDigits = -1; |
2074 return FALSE; | 1318 return FALSE; |
2075 } | 1319 } |
2076 CFX_WideString XFA_NumericLimit(const CFX_WideString& wsValue, | 1320 |
2077 int32_t iLead, | |
2078 int32_t iTread) { | |
2079 if ((iLead == -1) && (iTread == -1)) { | |
2080 return wsValue; | |
2081 } | |
2082 CFX_WideString wsRet; | |
2083 int32_t iLead_ = 0, iTread_ = -1; | |
2084 int32_t iCount = wsValue.GetLength(); | |
2085 if (iCount == 0) { | |
2086 return wsValue; | |
2087 } | |
2088 int32_t i = 0; | |
2089 if (wsValue[i] == L'-') { | |
2090 wsRet += L'-'; | |
2091 i++; | |
2092 } | |
2093 for (; i < iCount; i++) { | |
2094 FX_WCHAR wc = wsValue[i]; | |
2095 if (XFA_IsDigit(wc)) { | |
2096 if (iLead >= 0) { | |
2097 iLead_++; | |
2098 if (iLead_ > iLead) { | |
2099 return L"0"; | |
2100 } | |
2101 } else if (iTread_ >= 0) { | |
2102 iTread_++; | |
2103 if (iTread_ > iTread) { | |
2104 if (iTread != -1) { | |
2105 CFX_Decimal wsDeci = CFX_Decimal(wsValue.AsWideStringC()); | |
2106 wsDeci.SetScale(iTread); | |
2107 wsRet = wsDeci; | |
2108 } | |
2109 return wsRet; | |
2110 } | |
2111 } | |
2112 } else if (wc == L'.') { | |
2113 iTread_ = 0; | |
2114 iLead = -1; | |
2115 } | |
2116 wsRet += wc; | |
2117 } | |
2118 return wsRet; | |
2119 } | |
2120 FX_BOOL CXFA_WidgetData::SetValue(const CFX_WideString& wsValue, | 1321 FX_BOOL CXFA_WidgetData::SetValue(const CFX_WideString& wsValue, |
2121 XFA_VALUEPICTURE eValueType) { | 1322 XFA_VALUEPICTURE eValueType) { |
2122 if (wsValue.IsEmpty()) { | 1323 if (wsValue.IsEmpty()) { |
2123 SyncValue(wsValue, TRUE); | 1324 SyncValue(wsValue, TRUE); |
2124 return TRUE; | 1325 return TRUE; |
2125 } | 1326 } |
2126 m_bPreNull = m_bIsNull; | 1327 m_bPreNull = m_bIsNull; |
2127 m_bIsNull = FALSE; | 1328 m_bIsNull = FALSE; |
2128 CFX_WideString wsNewText(wsValue); | 1329 CFX_WideString wsNewText(wsValue); |
2129 CFX_WideString wsPicture; | 1330 CFX_WideString wsPicture; |
2130 GetPictureContent(wsPicture, eValueType); | 1331 GetPictureContent(wsPicture, eValueType); |
2131 FX_BOOL bValidate = TRUE; | 1332 FX_BOOL bValidate = TRUE; |
2132 FX_BOOL bSyncData = FALSE; | 1333 FX_BOOL bSyncData = FALSE; |
2133 CXFA_Node* pNode = GetUIChild(); | 1334 CXFA_Node* pNode = GetUIChild(); |
2134 if (!pNode) { | 1335 if (!pNode) |
2135 return TRUE; | 1336 return TRUE; |
2136 } | 1337 |
2137 XFA_ELEMENT uiType = pNode->GetClassID(); | 1338 XFA_ELEMENT uiType = pNode->GetClassID(); |
2138 if (!wsPicture.IsEmpty()) { | 1339 if (!wsPicture.IsEmpty()) { |
2139 CXFA_LocaleMgr* pLocalMgr = m_pNode->GetDocument()->GetLocalMgr(); | 1340 CXFA_LocaleMgr* pLocalMgr = m_pNode->GetDocument()->GetLocalMgr(); |
2140 IFX_Locale* pLocale = GetLocal(); | 1341 IFX_Locale* pLocale = GetLocal(); |
2141 CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(this); | 1342 CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(this); |
2142 bValidate = | 1343 bValidate = |
2143 widgetValue.ValidateValue(wsValue, wsPicture, pLocale, &wsPicture); | 1344 widgetValue.ValidateValue(wsValue, wsPicture, pLocale, &wsPicture); |
2144 if (bValidate) { | 1345 if (bValidate) { |
2145 widgetValue = CXFA_LocaleValue(widgetValue.GetType(), wsNewText, | 1346 widgetValue = CXFA_LocaleValue(widgetValue.GetType(), wsNewText, |
2146 wsPicture, pLocale, pLocalMgr); | 1347 wsPicture, pLocale, pLocalMgr); |
2147 wsNewText = widgetValue.GetValue(); | 1348 wsNewText = widgetValue.GetValue(); |
2148 if (uiType == XFA_ELEMENT_NumericEdit) { | 1349 if (uiType == XFA_ELEMENT_NumericEdit) { |
2149 int32_t iLeadDigits = 0; | 1350 int32_t iLeadDigits = 0; |
2150 int32_t iFracDigits = 0; | 1351 int32_t iFracDigits = 0; |
2151 GetLeadDigits(iLeadDigits); | 1352 GetLeadDigits(iLeadDigits); |
2152 GetFracDigits(iFracDigits); | 1353 GetFracDigits(iFracDigits); |
2153 wsNewText = XFA_NumericLimit(wsNewText, iLeadDigits, iFracDigits); | 1354 wsNewText = NumericLimit(wsNewText, iLeadDigits, iFracDigits); |
2154 } | 1355 } |
2155 bSyncData = TRUE; | 1356 bSyncData = TRUE; |
2156 } | 1357 } |
2157 } else { | 1358 } else { |
2158 if (uiType == XFA_ELEMENT_NumericEdit) { | 1359 if (uiType == XFA_ELEMENT_NumericEdit) { |
2159 if (wsNewText != FX_WSTRC(L"0")) { | 1360 if (wsNewText != FX_WSTRC(L"0")) { |
2160 int32_t iLeadDigits = 0; | 1361 int32_t iLeadDigits = 0; |
2161 int32_t iFracDigits = 0; | 1362 int32_t iFracDigits = 0; |
2162 GetLeadDigits(iLeadDigits); | 1363 GetLeadDigits(iLeadDigits); |
2163 GetFracDigits(iFracDigits); | 1364 GetFracDigits(iFracDigits); |
2164 wsNewText = XFA_NumericLimit(wsNewText, iLeadDigits, iFracDigits); | 1365 wsNewText = NumericLimit(wsNewText, iLeadDigits, iFracDigits); |
2165 } | 1366 } |
2166 bSyncData = TRUE; | 1367 bSyncData = TRUE; |
2167 } | 1368 } |
2168 } | 1369 } |
2169 if (uiType != XFA_ELEMENT_NumericEdit || bSyncData) { | 1370 if (uiType != XFA_ELEMENT_NumericEdit || bSyncData) |
2170 SyncValue(wsNewText, TRUE); | 1371 SyncValue(wsNewText, TRUE); |
2171 } | 1372 |
2172 return bValidate; | 1373 return bValidate; |
2173 } | 1374 } |
| 1375 |
2174 FX_BOOL CXFA_WidgetData::GetPictureContent(CFX_WideString& wsPicture, | 1376 FX_BOOL CXFA_WidgetData::GetPictureContent(CFX_WideString& wsPicture, |
2175 XFA_VALUEPICTURE ePicture) { | 1377 XFA_VALUEPICTURE ePicture) { |
2176 if (ePicture == XFA_VALUEPICTURE_Raw) { | 1378 if (ePicture == XFA_VALUEPICTURE_Raw) |
2177 return FALSE; | 1379 return FALSE; |
2178 } | 1380 |
2179 CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(this); | 1381 CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(this); |
2180 switch (ePicture) { | 1382 switch (ePicture) { |
2181 case XFA_VALUEPICTURE_Display: { | 1383 case XFA_VALUEPICTURE_Display: { |
2182 if (CXFA_Node* pFormat = m_pNode->GetChild(0, XFA_ELEMENT_Format)) { | 1384 if (CXFA_Node* pFormat = m_pNode->GetChild(0, XFA_ELEMENT_Format)) { |
2183 if (CXFA_Node* pPicture = pFormat->GetChild(0, XFA_ELEMENT_Picture)) { | 1385 if (CXFA_Node* pPicture = pFormat->GetChild(0, XFA_ELEMENT_Picture)) { |
2184 if (pPicture->TryContent(wsPicture)) { | 1386 if (pPicture->TryContent(wsPicture)) |
2185 return TRUE; | 1387 return TRUE; |
2186 } | |
2187 } | 1388 } |
2188 } | 1389 } |
2189 CFX_WideString wsDataPicture, wsTimePicture; | 1390 CFX_WideString wsDataPicture, wsTimePicture; |
2190 IFX_Locale* pLocale = GetLocal(); | 1391 IFX_Locale* pLocale = GetLocal(); |
2191 if (!pLocale) { | 1392 if (!pLocale) |
2192 return FALSE; | 1393 return FALSE; |
2193 } | 1394 |
2194 uint32_t dwType = widgetValue.GetType(); | 1395 uint32_t dwType = widgetValue.GetType(); |
2195 switch (dwType) { | 1396 switch (dwType) { |
2196 case XFA_VT_DATE: | 1397 case XFA_VT_DATE: |
2197 pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Medium, | 1398 pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Medium, |
2198 wsPicture); | 1399 wsPicture); |
2199 break; | 1400 break; |
2200 case XFA_VT_TIME: | 1401 case XFA_VT_TIME: |
2201 pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Medium, | 1402 pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Medium, |
2202 wsPicture); | 1403 wsPicture); |
2203 break; | 1404 break; |
2204 case XFA_VT_DATETIME: | 1405 case XFA_VT_DATETIME: |
2205 pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Medium, | 1406 pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Medium, |
2206 wsDataPicture); | 1407 wsDataPicture); |
2207 pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Medium, | 1408 pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Medium, |
2208 wsTimePicture); | 1409 wsTimePicture); |
2209 wsPicture = wsDataPicture + FX_WSTRC(L"T") + wsTimePicture; | 1410 wsPicture = wsDataPicture + FX_WSTRC(L"T") + wsTimePicture; |
2210 break; | 1411 break; |
2211 case XFA_VT_DECIMAL: | 1412 case XFA_VT_DECIMAL: |
2212 case XFA_VT_FLOAT: | 1413 case XFA_VT_FLOAT: |
2213 break; | 1414 break; |
2214 default: | 1415 default: |
2215 break; | 1416 break; |
2216 } | 1417 } |
| 1418 return TRUE; |
2217 } | 1419 } |
2218 return TRUE; | 1420 |
2219 case XFA_VALUEPICTURE_Edit: { | 1421 case XFA_VALUEPICTURE_Edit: { |
2220 CXFA_Node* pUI = m_pNode->GetChild(0, XFA_ELEMENT_Ui); | 1422 CXFA_Node* pUI = m_pNode->GetChild(0, XFA_ELEMENT_Ui); |
2221 if (pUI) { | 1423 if (pUI) { |
2222 if (CXFA_Node* pPicture = pUI->GetChild(0, XFA_ELEMENT_Picture)) { | 1424 if (CXFA_Node* pPicture = pUI->GetChild(0, XFA_ELEMENT_Picture)) { |
2223 if (pPicture->TryContent(wsPicture)) { | 1425 if (pPicture->TryContent(wsPicture)) |
2224 return TRUE; | 1426 return TRUE; |
2225 } | |
2226 } | 1427 } |
2227 } | 1428 } |
2228 { | 1429 { |
2229 CFX_WideString wsDataPicture, wsTimePicture; | 1430 CFX_WideString wsDataPicture, wsTimePicture; |
2230 IFX_Locale* pLocale = GetLocal(); | 1431 IFX_Locale* pLocale = GetLocal(); |
2231 if (!pLocale) { | 1432 if (!pLocale) { |
2232 return FALSE; | 1433 return FALSE; |
2233 } | 1434 } |
2234 uint32_t dwType = widgetValue.GetType(); | 1435 uint32_t dwType = widgetValue.GetType(); |
2235 switch (dwType) { | 1436 switch (dwType) { |
2236 case XFA_VT_DATE: | 1437 case XFA_VT_DATE: |
2237 pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Short, | 1438 pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Short, |
2238 wsPicture); | 1439 wsPicture); |
2239 break; | 1440 break; |
2240 case XFA_VT_TIME: | 1441 case XFA_VT_TIME: |
2241 pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Short, | 1442 pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Short, |
2242 wsPicture); | 1443 wsPicture); |
2243 break; | 1444 break; |
2244 case XFA_VT_DATETIME: | 1445 case XFA_VT_DATETIME: |
2245 pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Short, | 1446 pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Short, |
2246 wsDataPicture); | 1447 wsDataPicture); |
2247 pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Short, | 1448 pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Short, |
2248 wsTimePicture); | 1449 wsTimePicture); |
2249 wsPicture = wsDataPicture + L"T" + wsTimePicture; | 1450 wsPicture = wsDataPicture + L"T" + wsTimePicture; |
2250 break; | 1451 break; |
2251 default: | 1452 default: |
2252 break; | 1453 break; |
2253 } | 1454 } |
2254 } | 1455 } |
| 1456 return TRUE; |
2255 } | 1457 } |
2256 return TRUE; | |
2257 case XFA_VALUEPICTURE_DataBind: { | 1458 case XFA_VALUEPICTURE_DataBind: { |
2258 if (CXFA_Bind bind = GetBind()) { | 1459 if (CXFA_Bind bind = GetBind()) { |
2259 bind.GetPicture(wsPicture); | 1460 bind.GetPicture(wsPicture); |
2260 return TRUE; | 1461 return TRUE; |
2261 } | 1462 } |
2262 } break; | 1463 break; |
| 1464 } |
2263 default: | 1465 default: |
2264 break; | 1466 break; |
2265 } | 1467 } |
2266 return FALSE; | 1468 return FALSE; |
2267 } | 1469 } |
| 1470 |
2268 IFX_Locale* CXFA_WidgetData::GetLocal() { | 1471 IFX_Locale* CXFA_WidgetData::GetLocal() { |
2269 IFX_Locale* pLocale = NULL; | 1472 IFX_Locale* pLocale = NULL; |
2270 if (!m_pNode) { | 1473 if (!m_pNode) |
2271 return pLocale; | 1474 return pLocale; |
2272 } | 1475 |
2273 FX_BOOL bLocale = FALSE; | 1476 FX_BOOL bLocale = FALSE; |
2274 CFX_WideString wsLocaleName; | 1477 CFX_WideString wsLocaleName; |
2275 bLocale = m_pNode->GetLocaleName(wsLocaleName); | 1478 bLocale = m_pNode->GetLocaleName(wsLocaleName); |
2276 if (bLocale) { | 1479 if (bLocale) { |
2277 if (wsLocaleName == FX_WSTRC(L"ambient")) { | 1480 if (wsLocaleName == FX_WSTRC(L"ambient")) { |
2278 pLocale = m_pNode->GetDocument()->GetLocalMgr()->GetDefLocale(); | 1481 pLocale = m_pNode->GetDocument()->GetLocalMgr()->GetDefLocale(); |
2279 } else { | 1482 } else { |
2280 pLocale = m_pNode->GetDocument()->GetLocalMgr()->GetLocaleByName( | 1483 pLocale = m_pNode->GetDocument()->GetLocalMgr()->GetLocaleByName( |
2281 wsLocaleName.AsWideStringC()); | 1484 wsLocaleName.AsWideStringC()); |
2282 } | 1485 } |
2283 } | 1486 } |
2284 return pLocale; | 1487 return pLocale; |
2285 } | 1488 } |
2286 static FX_BOOL XFA_SplitDateTime(const CFX_WideString& wsDateTime, | |
2287 CFX_WideString& wsDate, | |
2288 CFX_WideString& wsTime) { | |
2289 wsDate = L""; | |
2290 wsTime = L""; | |
2291 if (wsDateTime.IsEmpty()) { | |
2292 return FALSE; | |
2293 } | |
2294 int nSplitIndex = -1; | |
2295 nSplitIndex = wsDateTime.Find('T'); | |
2296 if (nSplitIndex < 0) { | |
2297 nSplitIndex = wsDateTime.Find(' '); | |
2298 } | |
2299 if (nSplitIndex < 0) { | |
2300 return FALSE; | |
2301 } | |
2302 wsDate = wsDateTime.Left(nSplitIndex); | |
2303 if (!wsDate.IsEmpty()) { | |
2304 int32_t iCount = wsDate.GetLength(); | |
2305 int32_t i = 0; | |
2306 for (i = 0; i < iCount; i++) { | |
2307 if (wsDate[i] >= '0' && wsDate[i] <= '9') { | |
2308 break; | |
2309 } | |
2310 } | |
2311 if (i == iCount) { | |
2312 return FALSE; | |
2313 } | |
2314 } | |
2315 wsTime = wsDateTime.Right(wsDateTime.GetLength() - nSplitIndex - 1); | |
2316 if (!wsTime.IsEmpty()) { | |
2317 int32_t iCount = wsTime.GetLength(); | |
2318 int32_t i = 0; | |
2319 for (i = 0; i < iCount; i++) { | |
2320 if (wsTime[i] >= '0' && wsTime[i] <= '9') { | |
2321 break; | |
2322 } | |
2323 } | |
2324 if (i == iCount) { | |
2325 return FALSE; | |
2326 } | |
2327 } | |
2328 return TRUE; | |
2329 } | |
2330 | 1489 |
2331 FX_BOOL CXFA_WidgetData::GetValue(CFX_WideString& wsValue, | 1490 FX_BOOL CXFA_WidgetData::GetValue(CFX_WideString& wsValue, |
2332 XFA_VALUEPICTURE eValueType) { | 1491 XFA_VALUEPICTURE eValueType) { |
2333 wsValue = m_pNode->GetContent(); | 1492 wsValue = m_pNode->GetContent(); |
2334 | 1493 |
2335 if (eValueType == XFA_VALUEPICTURE_Display) | 1494 if (eValueType == XFA_VALUEPICTURE_Display) |
2336 GetItemLabel(wsValue.AsWideStringC(), wsValue); | 1495 GetItemLabel(wsValue.AsWideStringC(), wsValue); |
2337 | 1496 |
2338 CFX_WideString wsPicture; | 1497 CFX_WideString wsPicture; |
2339 GetPictureContent(wsPicture, eValueType); | 1498 GetPictureContent(wsPicture, eValueType); |
(...skipping 28 matching lines...) Expand all Loading... |
2368 } | 1527 } |
2369 if (wsPicture.IsEmpty()) | 1528 if (wsPicture.IsEmpty()) |
2370 return TRUE; | 1529 return TRUE; |
2371 | 1530 |
2372 if (IFX_Locale* pLocale = GetLocal()) { | 1531 if (IFX_Locale* pLocale = GetLocal()) { |
2373 CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(this); | 1532 CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(this); |
2374 CXFA_LocaleMgr* pLocalMgr = m_pNode->GetDocument()->GetLocalMgr(); | 1533 CXFA_LocaleMgr* pLocalMgr = m_pNode->GetDocument()->GetLocalMgr(); |
2375 switch (widgetValue.GetType()) { | 1534 switch (widgetValue.GetType()) { |
2376 case XFA_VT_DATE: { | 1535 case XFA_VT_DATE: { |
2377 CFX_WideString wsDate, wsTime; | 1536 CFX_WideString wsDate, wsTime; |
2378 if (XFA_SplitDateTime(wsValue, wsDate, wsTime)) { | 1537 if (SplitDateTime(wsValue, wsDate, wsTime)) { |
2379 CXFA_LocaleValue date(XFA_VT_DATE, wsDate, pLocalMgr); | 1538 CXFA_LocaleValue date(XFA_VT_DATE, wsDate, pLocalMgr); |
2380 if (date.FormatPatterns(wsValue, wsPicture, pLocale, eValueType)) | 1539 if (date.FormatPatterns(wsValue, wsPicture, pLocale, eValueType)) |
2381 return TRUE; | 1540 return TRUE; |
2382 } | 1541 } |
2383 break; | 1542 break; |
2384 } | 1543 } |
2385 case XFA_VT_TIME: { | 1544 case XFA_VT_TIME: { |
2386 CFX_WideString wsDate, wsTime; | 1545 CFX_WideString wsDate, wsTime; |
2387 if (XFA_SplitDateTime(wsValue, wsDate, wsTime)) { | 1546 if (SplitDateTime(wsValue, wsDate, wsTime)) { |
2388 CXFA_LocaleValue time(XFA_VT_TIME, wsTime, pLocalMgr); | 1547 CXFA_LocaleValue time(XFA_VT_TIME, wsTime, pLocalMgr); |
2389 if (time.FormatPatterns(wsValue, wsPicture, pLocale, eValueType)) | 1548 if (time.FormatPatterns(wsValue, wsPicture, pLocale, eValueType)) |
2390 return TRUE; | 1549 return TRUE; |
2391 } | 1550 } |
2392 break; | 1551 break; |
2393 } | 1552 } |
2394 default: | 1553 default: |
2395 break; | 1554 break; |
2396 } | 1555 } |
2397 widgetValue.FormatPatterns(wsValue, wsPicture, pLocale, eValueType); | 1556 widgetValue.FormatPatterns(wsValue, wsPicture, pLocale, eValueType); |
2398 } | 1557 } |
2399 return TRUE; | 1558 return TRUE; |
2400 } | 1559 } |
2401 | 1560 |
2402 FX_BOOL CXFA_WidgetData::GetNormalizeDataValue( | 1561 FX_BOOL CXFA_WidgetData::GetNormalizeDataValue( |
2403 const CFX_WideStringC& wsValue, | 1562 const CFX_WideStringC& wsValue, |
2404 CFX_WideString& wsNormalizeValue) { | 1563 CFX_WideString& wsNormalizeValue) { |
2405 wsNormalizeValue = wsValue; | 1564 wsNormalizeValue = wsValue; |
2406 if (wsValue.IsEmpty()) { | 1565 if (wsValue.IsEmpty()) |
2407 return TRUE; | 1566 return TRUE; |
2408 } | 1567 |
2409 CFX_WideString wsPicture; | 1568 CFX_WideString wsPicture; |
2410 GetPictureContent(wsPicture, XFA_VALUEPICTURE_DataBind); | 1569 GetPictureContent(wsPicture, XFA_VALUEPICTURE_DataBind); |
2411 if (wsPicture.IsEmpty()) { | 1570 if (wsPicture.IsEmpty()) |
2412 return TRUE; | 1571 return TRUE; |
2413 } | 1572 |
2414 FXSYS_assert(GetNode()); | 1573 FXSYS_assert(GetNode()); |
2415 CXFA_LocaleMgr* pLocalMgr = GetNode()->GetDocument()->GetLocalMgr(); | 1574 CXFA_LocaleMgr* pLocalMgr = GetNode()->GetDocument()->GetLocalMgr(); |
2416 IFX_Locale* pLocale = GetLocal(); | 1575 IFX_Locale* pLocale = GetLocal(); |
2417 CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(this); | 1576 CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(this); |
2418 if (widgetValue.ValidateValue(wsValue, wsPicture, pLocale, &wsPicture)) { | 1577 if (widgetValue.ValidateValue(wsValue, wsPicture, pLocale, &wsPicture)) { |
2419 widgetValue = CXFA_LocaleValue(widgetValue.GetType(), wsNormalizeValue, | 1578 widgetValue = CXFA_LocaleValue(widgetValue.GetType(), wsNormalizeValue, |
2420 wsPicture, pLocale, pLocalMgr); | 1579 wsPicture, pLocale, pLocalMgr); |
2421 wsNormalizeValue = widgetValue.GetValue(); | 1580 wsNormalizeValue = widgetValue.GetValue(); |
2422 return TRUE; | 1581 return TRUE; |
2423 } | 1582 } |
2424 return FALSE; | 1583 return FALSE; |
2425 } | 1584 } |
| 1585 |
2426 FX_BOOL CXFA_WidgetData::GetFormatDataValue(const CFX_WideStringC& wsValue, | 1586 FX_BOOL CXFA_WidgetData::GetFormatDataValue(const CFX_WideStringC& wsValue, |
2427 CFX_WideString& wsFormatedValue) { | 1587 CFX_WideString& wsFormatedValue) { |
2428 wsFormatedValue = wsValue; | 1588 wsFormatedValue = wsValue; |
2429 if (wsValue.IsEmpty()) { | 1589 if (wsValue.IsEmpty()) |
2430 return TRUE; | 1590 return TRUE; |
2431 } | 1591 |
2432 CFX_WideString wsPicture; | 1592 CFX_WideString wsPicture; |
2433 GetPictureContent(wsPicture, XFA_VALUEPICTURE_DataBind); | 1593 GetPictureContent(wsPicture, XFA_VALUEPICTURE_DataBind); |
2434 if (wsPicture.IsEmpty()) { | 1594 if (wsPicture.IsEmpty()) |
2435 return TRUE; | 1595 return TRUE; |
2436 } | 1596 |
2437 if (IFX_Locale* pLocale = GetLocal()) { | 1597 if (IFX_Locale* pLocale = GetLocal()) { |
2438 FXSYS_assert(GetNode()); | 1598 FXSYS_assert(GetNode()); |
2439 CXFA_Node* pNodeValue = GetNode()->GetChild(0, XFA_ELEMENT_Value); | 1599 CXFA_Node* pNodeValue = GetNode()->GetChild(0, XFA_ELEMENT_Value); |
2440 if (!pNodeValue) { | 1600 if (!pNodeValue) |
2441 return FALSE; | 1601 return FALSE; |
2442 } | 1602 |
2443 CXFA_Node* pValueChild = pNodeValue->GetNodeItem(XFA_NODEITEM_FirstChild); | 1603 CXFA_Node* pValueChild = pNodeValue->GetNodeItem(XFA_NODEITEM_FirstChild); |
2444 if (!pValueChild) { | 1604 if (!pValueChild) |
2445 return FALSE; | 1605 return FALSE; |
2446 } | 1606 |
2447 int32_t iVTType = XFA_VT_NULL; | 1607 int32_t iVTType = XFA_VT_NULL; |
2448 XFA_ELEMENT eType = pValueChild->GetClassID(); | 1608 XFA_ELEMENT eType = pValueChild->GetClassID(); |
2449 switch (eType) { | 1609 switch (eType) { |
2450 case XFA_ELEMENT_Decimal: | 1610 case XFA_ELEMENT_Decimal: |
2451 iVTType = XFA_VT_DECIMAL; | 1611 iVTType = XFA_VT_DECIMAL; |
2452 break; | 1612 break; |
2453 case XFA_ELEMENT_Float: | 1613 case XFA_ELEMENT_Float: |
2454 iVTType = XFA_VT_FLOAT; | 1614 iVTType = XFA_VT_FLOAT; |
2455 break; | 1615 break; |
2456 case XFA_ELEMENT_Date: | 1616 case XFA_ELEMENT_Date: |
(...skipping 16 matching lines...) Expand all Loading... |
2473 break; | 1633 break; |
2474 default: | 1634 default: |
2475 iVTType = XFA_VT_NULL; | 1635 iVTType = XFA_VT_NULL; |
2476 break; | 1636 break; |
2477 } | 1637 } |
2478 CXFA_LocaleMgr* pLocalMgr = GetNode()->GetDocument()->GetLocalMgr(); | 1638 CXFA_LocaleMgr* pLocalMgr = GetNode()->GetDocument()->GetLocalMgr(); |
2479 CXFA_LocaleValue widgetValue(iVTType, wsValue, pLocalMgr); | 1639 CXFA_LocaleValue widgetValue(iVTType, wsValue, pLocalMgr); |
2480 switch (widgetValue.GetType()) { | 1640 switch (widgetValue.GetType()) { |
2481 case XFA_VT_DATE: { | 1641 case XFA_VT_DATE: { |
2482 CFX_WideString wsDate, wsTime; | 1642 CFX_WideString wsDate, wsTime; |
2483 if (XFA_SplitDateTime(wsValue, wsDate, wsTime)) { | 1643 if (SplitDateTime(wsValue, wsDate, wsTime)) { |
2484 CXFA_LocaleValue date(XFA_VT_DATE, wsDate, pLocalMgr); | 1644 CXFA_LocaleValue date(XFA_VT_DATE, wsDate, pLocalMgr); |
2485 if (date.FormatPatterns(wsFormatedValue, wsPicture, pLocale, | 1645 if (date.FormatPatterns(wsFormatedValue, wsPicture, pLocale, |
2486 XFA_VALUEPICTURE_DataBind)) { | 1646 XFA_VALUEPICTURE_DataBind)) { |
2487 return TRUE; | 1647 return TRUE; |
2488 } | 1648 } |
2489 } | 1649 } |
2490 break; | 1650 break; |
2491 } | 1651 } |
2492 case XFA_VT_TIME: { | 1652 case XFA_VT_TIME: { |
2493 CFX_WideString wsDate, wsTime; | 1653 CFX_WideString wsDate, wsTime; |
2494 if (XFA_SplitDateTime(wsValue, wsDate, wsTime)) { | 1654 if (SplitDateTime(wsValue, wsDate, wsTime)) { |
2495 CXFA_LocaleValue time(XFA_VT_TIME, wsTime, pLocalMgr); | 1655 CXFA_LocaleValue time(XFA_VT_TIME, wsTime, pLocalMgr); |
2496 if (time.FormatPatterns(wsFormatedValue, wsPicture, pLocale, | 1656 if (time.FormatPatterns(wsFormatedValue, wsPicture, pLocale, |
2497 XFA_VALUEPICTURE_DataBind)) { | 1657 XFA_VALUEPICTURE_DataBind)) { |
2498 return TRUE; | 1658 return TRUE; |
2499 } | 1659 } |
2500 } | 1660 } |
2501 break; | 1661 break; |
2502 } | 1662 } |
2503 default: | 1663 default: |
2504 break; | 1664 break; |
2505 } | 1665 } |
2506 widgetValue.FormatPatterns(wsFormatedValue, wsPicture, pLocale, | 1666 widgetValue.FormatPatterns(wsFormatedValue, wsPicture, pLocale, |
2507 XFA_VALUEPICTURE_DataBind); | 1667 XFA_VALUEPICTURE_DataBind); |
2508 } | 1668 } |
2509 return FALSE; | 1669 return FALSE; |
2510 } | 1670 } |
| 1671 |
2511 void CXFA_WidgetData::NormalizeNumStr(const CFX_WideString& wsValue, | 1672 void CXFA_WidgetData::NormalizeNumStr(const CFX_WideString& wsValue, |
2512 CFX_WideString& wsOutput) { | 1673 CFX_WideString& wsOutput) { |
2513 if (wsValue.IsEmpty()) { | 1674 if (wsValue.IsEmpty()) |
2514 return; | 1675 return; |
2515 } | 1676 |
2516 wsOutput = wsValue; | 1677 wsOutput = wsValue; |
2517 wsOutput.TrimLeft('0'); | 1678 wsOutput.TrimLeft('0'); |
2518 int32_t dot_index = wsOutput.Find('.'); | 1679 int32_t dot_index = wsOutput.Find('.'); |
2519 int32_t iFracDigits = 0; | 1680 int32_t iFracDigits = 0; |
2520 if (!wsOutput.IsEmpty() && dot_index >= 0 && | 1681 if (!wsOutput.IsEmpty() && dot_index >= 0 && |
2521 (!GetFracDigits(iFracDigits) || iFracDigits != -1)) { | 1682 (!GetFracDigits(iFracDigits) || iFracDigits != -1)) { |
2522 wsOutput.TrimRight(L"0"); | 1683 wsOutput.TrimRight(L"0"); |
2523 wsOutput.TrimRight(L"."); | 1684 wsOutput.TrimRight(L"."); |
2524 } | 1685 } |
2525 if (wsOutput.IsEmpty() || wsOutput[0] == '.') { | 1686 if (wsOutput.IsEmpty() || wsOutput[0] == '.') |
2526 wsOutput.Insert(0, '0'); | 1687 wsOutput.Insert(0, '0'); |
2527 } | |
2528 } | 1688 } |
| 1689 |
2529 void CXFA_WidgetData::FormatNumStr(const CFX_WideString& wsValue, | 1690 void CXFA_WidgetData::FormatNumStr(const CFX_WideString& wsValue, |
2530 IFX_Locale* pLocale, | 1691 IFX_Locale* pLocale, |
2531 CFX_WideString& wsOutput) { | 1692 CFX_WideString& wsOutput) { |
2532 if (wsValue.IsEmpty()) { | 1693 if (wsValue.IsEmpty()) |
2533 return; | 1694 return; |
2534 } | 1695 |
2535 CFX_WideString wsSrcNum = wsValue; | 1696 CFX_WideString wsSrcNum = wsValue; |
2536 CFX_WideString wsGroupSymbol; | 1697 CFX_WideString wsGroupSymbol; |
2537 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Grouping, wsGroupSymbol); | 1698 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Grouping, wsGroupSymbol); |
2538 FX_BOOL bNeg = FALSE; | 1699 FX_BOOL bNeg = FALSE; |
2539 if (wsSrcNum[0] == '-') { | 1700 if (wsSrcNum[0] == '-') { |
2540 bNeg = TRUE; | 1701 bNeg = TRUE; |
2541 wsSrcNum.Delete(0, 1); | 1702 wsSrcNum.Delete(0, 1); |
2542 } | 1703 } |
2543 int32_t len = wsSrcNum.GetLength(); | 1704 int32_t len = wsSrcNum.GetLength(); |
2544 int32_t dot_index = wsSrcNum.Find('.'); | 1705 int32_t dot_index = wsSrcNum.Find('.'); |
2545 if (dot_index == -1) { | 1706 if (dot_index == -1) |
2546 dot_index = len; | 1707 dot_index = len; |
2547 } | 1708 |
2548 int32_t cc = dot_index - 1; | 1709 int32_t cc = dot_index - 1; |
2549 if (cc >= 0) { | 1710 if (cc >= 0) { |
2550 int nPos = dot_index % 3; | 1711 int nPos = dot_index % 3; |
2551 wsOutput.Empty(); | 1712 wsOutput.Empty(); |
2552 for (int32_t i = 0; i < dot_index; i++) { | 1713 for (int32_t i = 0; i < dot_index; i++) { |
2553 if (i % 3 == nPos && i != 0) { | 1714 if (i % 3 == nPos && i != 0) |
2554 wsOutput += wsGroupSymbol; | 1715 wsOutput += wsGroupSymbol; |
2555 } | 1716 |
2556 wsOutput += wsSrcNum[i]; | 1717 wsOutput += wsSrcNum[i]; |
2557 } | 1718 } |
2558 if (dot_index < len) { | 1719 if (dot_index < len) { |
2559 CFX_WideString wsSymbol; | 1720 CFX_WideString wsSymbol; |
2560 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal, wsSymbol); | 1721 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal, wsSymbol); |
2561 wsOutput += wsSymbol; | 1722 wsOutput += wsSymbol; |
2562 wsOutput += wsSrcNum.Right(len - dot_index - 1); | 1723 wsOutput += wsSrcNum.Right(len - dot_index - 1); |
2563 } | 1724 } |
2564 if (bNeg) { | 1725 if (bNeg) { |
2565 CFX_WideString wsMinusymbol; | 1726 CFX_WideString wsMinusymbol; |
2566 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus, wsMinusymbol); | 1727 pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus, wsMinusymbol); |
2567 wsOutput = wsMinusymbol + wsOutput; | 1728 wsOutput = wsMinusymbol + wsOutput; |
2568 } | 1729 } |
2569 } | 1730 } |
2570 } | 1731 } |
| 1732 |
2571 void CXFA_WidgetData::SyncValue(const CFX_WideString& wsValue, | 1733 void CXFA_WidgetData::SyncValue(const CFX_WideString& wsValue, |
2572 FX_BOOL bNotify) { | 1734 FX_BOOL bNotify) { |
2573 if (!m_pNode) { | 1735 if (!m_pNode) |
2574 return; | 1736 return; |
2575 } | 1737 |
2576 CFX_WideString wsFormatValue(wsValue); | 1738 CFX_WideString wsFormatValue(wsValue); |
2577 CXFA_WidgetData* pContainerWidgetData = m_pNode->GetContainerWidgetData(); | 1739 CXFA_WidgetData* pContainerWidgetData = m_pNode->GetContainerWidgetData(); |
2578 if (pContainerWidgetData) { | 1740 if (pContainerWidgetData) |
2579 pContainerWidgetData->GetFormatDataValue(wsValue.AsWideStringC(), | 1741 pContainerWidgetData->GetFormatDataValue(wsValue.AsWideStringC(), |
2580 wsFormatValue); | 1742 wsFormatValue); |
2581 } | 1743 |
2582 m_pNode->SetContent(wsValue, wsFormatValue, bNotify); | 1744 m_pNode->SetContent(wsValue, wsFormatValue, bNotify); |
2583 } | 1745 } |
| 1746 |
2584 void CXFA_WidgetData::InsertListTextItem(CXFA_Node* pItems, | 1747 void CXFA_WidgetData::InsertListTextItem(CXFA_Node* pItems, |
2585 const CFX_WideStringC& wsText, | 1748 const CFX_WideStringC& wsText, |
2586 int32_t nIndex) { | 1749 int32_t nIndex) { |
2587 CXFA_Node* pText = pItems->CreateSamePacketNode(XFA_ELEMENT_Text); | 1750 CXFA_Node* pText = pItems->CreateSamePacketNode(XFA_ELEMENT_Text); |
2588 pItems->InsertChild(nIndex, pText); | 1751 pItems->InsertChild(nIndex, pText); |
2589 pText->SetContent(wsText, wsText, FALSE, FALSE, FALSE); | 1752 pText->SetContent(wsText, wsText, FALSE, FALSE, FALSE); |
2590 } | 1753 } |
2591 CXFA_Occur::CXFA_Occur(CXFA_Node* pNode) : CXFA_Data(pNode) {} | 1754 |
2592 int32_t CXFA_Occur::GetMax() { | 1755 CFX_WideString CXFA_WidgetData::NumericLimit(const CFX_WideString& wsValue, |
2593 int32_t iMax = 1; | 1756 int32_t iLead, |
2594 if (m_pNode) { | 1757 int32_t iTread) const { |
2595 if (!m_pNode->TryInteger(XFA_ATTRIBUTE_Max, iMax, TRUE)) { | 1758 if ((iLead == -1) && (iTread == -1)) |
2596 iMax = GetMin(); | 1759 return wsValue; |
| 1760 |
| 1761 CFX_WideString wsRet; |
| 1762 int32_t iLead_ = 0, iTread_ = -1; |
| 1763 int32_t iCount = wsValue.GetLength(); |
| 1764 if (iCount == 0) |
| 1765 return wsValue; |
| 1766 |
| 1767 int32_t i = 0; |
| 1768 if (wsValue[i] == L'-') { |
| 1769 wsRet += L'-'; |
| 1770 i++; |
| 1771 } |
| 1772 for (; i < iCount; i++) { |
| 1773 FX_WCHAR wc = wsValue[i]; |
| 1774 if (XFA_IsDigit(wc)) { |
| 1775 if (iLead >= 0) { |
| 1776 iLead_++; |
| 1777 if (iLead_ > iLead) |
| 1778 return L"0"; |
| 1779 } else if (iTread_ >= 0) { |
| 1780 iTread_++; |
| 1781 if (iTread_ > iTread) { |
| 1782 if (iTread != -1) { |
| 1783 CFX_Decimal wsDeci = CFX_Decimal(wsValue.AsWideStringC()); |
| 1784 wsDeci.SetScale(iTread); |
| 1785 wsRet = wsDeci; |
| 1786 } |
| 1787 return wsRet; |
| 1788 } |
| 1789 } |
| 1790 } else if (wc == L'.') { |
| 1791 iTread_ = 0; |
| 1792 iLead = -1; |
2597 } | 1793 } |
| 1794 wsRet += wc; |
2598 } | 1795 } |
2599 return iMax; | 1796 return wsRet; |
2600 } | 1797 } |
2601 int32_t CXFA_Occur::GetMin() { | |
2602 int32_t iMin = 1; | |
2603 if (m_pNode) { | |
2604 if (!m_pNode->TryInteger(XFA_ATTRIBUTE_Min, iMin, TRUE) || iMin < 0) { | |
2605 iMin = 1; | |
2606 } | |
2607 } | |
2608 return iMin; | |
2609 } | |
2610 FX_BOOL CXFA_Occur::GetOccurInfo(int32_t& iMin, int32_t& iMax, int32_t& iInit) { | |
2611 if (!m_pNode) { | |
2612 return FALSE; | |
2613 } | |
2614 if (!m_pNode->TryInteger(XFA_ATTRIBUTE_Min, iMin, FALSE) || iMin < 0) { | |
2615 iMin = 1; | |
2616 } | |
2617 if (!m_pNode->TryInteger(XFA_ATTRIBUTE_Max, iMax, FALSE)) { | |
2618 if (iMin == 0) { | |
2619 iMax = 1; | |
2620 } else { | |
2621 iMax = iMin; | |
2622 } | |
2623 } | |
2624 if (!m_pNode->TryInteger(XFA_ATTRIBUTE_Initial, iInit, FALSE) || | |
2625 iInit < iMin) { | |
2626 iInit = iMin; | |
2627 } | |
2628 return TRUE; | |
2629 } | |
2630 void CXFA_Occur::SetMax(int32_t iMax) { | |
2631 iMax = (iMax != -1 && iMax < 1) ? 1 : iMax; | |
2632 m_pNode->SetInteger(XFA_ATTRIBUTE_Max, iMax, FALSE); | |
2633 int32_t iMin = GetMin(); | |
2634 if (iMax != -1 && iMax < iMin) { | |
2635 iMin = iMax; | |
2636 m_pNode->SetInteger(XFA_ATTRIBUTE_Min, iMin, FALSE); | |
2637 } | |
2638 } | |
2639 void CXFA_Occur::SetMin(int32_t iMin) { | |
2640 iMin = (iMin < 0) ? 1 : iMin; | |
2641 m_pNode->SetInteger(XFA_ATTRIBUTE_Min, iMin, FALSE); | |
2642 int32_t iMax = GetMax(); | |
2643 if (iMax > 0 && iMax < iMin) { | |
2644 iMax = iMin; | |
2645 m_pNode->SetInteger(XFA_ATTRIBUTE_Max, iMax, FALSE); | |
2646 } | |
2647 } | |
2648 XFA_ATTRIBUTEENUM XFA_GetEnumTypeAttribute( | |
2649 CXFA_Node* pNode, | |
2650 XFA_ATTRIBUTE attributeValue = XFA_ATTRIBUTE_Type, | |
2651 XFA_ATTRIBUTEENUM eDefaultValue = XFA_ATTRIBUTEENUM_Optional) { | |
2652 XFA_ATTRIBUTEENUM eType = eDefaultValue; | |
2653 if (pNode) { | |
2654 if (!pNode->TryEnum(attributeValue, eType, TRUE)) { | |
2655 eType = eDefaultValue; | |
2656 } | |
2657 } | |
2658 return eType; | |
2659 } | |
OLD | NEW |