Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
cxfa_ffnotify.cpp
Go to the documentation of this file.
1// Copyright 2014 The PDFium Authors
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7#include "xfa/fxfa/cxfa_ffnotify.h"
8
9#include <utility>
10
11#include "third_party/base/check.h"
12#include "xfa/fxfa/cxfa_ffapp.h"
13#include "xfa/fxfa/cxfa_ffarc.h"
14#include "xfa/fxfa/cxfa_ffbarcode.h"
15#include "xfa/fxfa/cxfa_ffcheckbutton.h"
16#include "xfa/fxfa/cxfa_ffcombobox.h"
17#include "xfa/fxfa/cxfa_ffdatetimeedit.h"
18#include "xfa/fxfa/cxfa_ffdoc.h"
19#include "xfa/fxfa/cxfa_ffdocview.h"
20#include "xfa/fxfa/cxfa_ffexclgroup.h"
21#include "xfa/fxfa/cxfa_fffield.h"
22#include "xfa/fxfa/cxfa_ffimage.h"
23#include "xfa/fxfa/cxfa_ffimageedit.h"
24#include "xfa/fxfa/cxfa_ffline.h"
25#include "xfa/fxfa/cxfa_fflistbox.h"
26#include "xfa/fxfa/cxfa_ffnumericedit.h"
27#include "xfa/fxfa/cxfa_ffpageview.h"
28#include "xfa/fxfa/cxfa_ffpasswordedit.h"
29#include "xfa/fxfa/cxfa_ffpushbutton.h"
30#include "xfa/fxfa/cxfa_ffrectangle.h"
31#include "xfa/fxfa/cxfa_ffsignature.h"
32#include "xfa/fxfa/cxfa_fftext.h"
33#include "xfa/fxfa/cxfa_ffwidget.h"
34#include "xfa/fxfa/cxfa_ffwidgethandler.h"
35#include "xfa/fxfa/cxfa_fwladapterwidgetmgr.h"
36#include "xfa/fxfa/cxfa_textlayout.h"
37#include "xfa/fxfa/cxfa_textprovider.h"
38#include "xfa/fxfa/layout/cxfa_layoutprocessor.h"
39#include "xfa/fxfa/parser/cxfa_barcode.h"
40#include "xfa/fxfa/parser/cxfa_binditems.h"
41#include "xfa/fxfa/parser/cxfa_button.h"
42#include "xfa/fxfa/parser/cxfa_checkbutton.h"
43#include "xfa/fxfa/parser/cxfa_node.h"
44#include "xfa/fxfa/parser/cxfa_passwordedit.h"
45
46CXFA_FFNotify::CXFA_FFNotify(CXFA_FFDoc* pDoc) : m_pDoc(pDoc) {}
47
48CXFA_FFNotify::~CXFA_FFNotify() = default;
49
50void CXFA_FFNotify::Trace(cppgc::Visitor* visitor) const {
51 visitor->Trace(m_pDoc);
52}
53
54void CXFA_FFNotify::OnPageViewEvent(CXFA_ViewLayoutItem* pSender,
55 CXFA_FFDoc::PageViewEvent eEvent) {
56 CXFA_FFDocView* pDocView = m_pDoc->GetDocView(pSender->GetLayout());
57 if (pDocView)
58 pDocView->OnPageViewEvent(pSender, eEvent);
59}
60
62 const WideString& wsLabel,
63 int32_t iIndex) {
65 return;
66
67 CXFA_FFWidget* pWidget = m_pDoc->GetDocView()->GetWidgetForNode(pSender);
68 for (; pWidget; pWidget = pWidget->GetNextFFWidget()) {
69 if (pWidget->IsLoaded())
70 ToDropDown(ToField(pWidget))->InsertItem(wsLabel, iIndex);
71 }
72}
73
75 int32_t iIndex) {
77 return;
78
79 CXFA_FFWidget* pWidget = m_pDoc->GetDocView()->GetWidgetForNode(pSender);
80 for (; pWidget; pWidget = pWidget->GetNextFFWidget()) {
81 if (pWidget->IsLoaded())
83 }
84}
85
87 if (pNode->GetElementType() != XFA_Element::PageArea)
88 return nullptr;
89
90 auto* pLayout = CXFA_LayoutProcessor::FromDocument(m_pDoc->GetXFADoc());
91 return cppgc::MakeGarbageCollected<CXFA_FFPageView>(
92 m_pDoc->GetHeap()->GetAllocationHandle(), m_pDoc->GetDocView(pLayout),
93 pNode);
94}
95
97 DCHECK(pNode->GetElementType() != XFA_Element::ContentArea);
98 DCHECK(pNode->GetElementType() != XFA_Element::PageArea);
99
100 // We only need to create the widget for certain types of objects.
101 if (!pNode->HasCreatedUIWidget())
102 return nullptr;
103
104 CXFA_FFWidget* pWidget = nullptr;
105 switch (pNode->GetFFWidgetType()) {
107 auto* child = CXFA_Barcode::FromNode(pNode->GetUIChildNode());
108 if (!child)
109 return nullptr;
110
111 pWidget = cppgc::MakeGarbageCollected<CXFA_FFBarcode>(
112 m_pDoc->GetHeap()->GetAllocationHandle(), pNode, child);
113 break;
114 }
116 auto* child = CXFA_Button::FromNode(pNode->GetUIChildNode());
117 if (!child)
118 return nullptr;
119
120 pWidget = cppgc::MakeGarbageCollected<CXFA_FFPushButton>(
121 m_pDoc->GetHeap()->GetAllocationHandle(), pNode, child);
122 break;
123 }
125 auto* child = CXFA_CheckButton::FromNode(pNode->GetUIChildNode());
126 if (!child)
127 return nullptr;
128
129 pWidget = cppgc::MakeGarbageCollected<CXFA_FFCheckButton>(
130 m_pDoc->GetHeap()->GetAllocationHandle(), pNode, child);
131 break;
132 }
134 if (pNode->IsListBox()) {
135 pWidget = cppgc::MakeGarbageCollected<CXFA_FFListBox>(
136 m_pDoc->GetHeap()->GetAllocationHandle(), pNode);
137 } else {
138 pWidget = cppgc::MakeGarbageCollected<CXFA_FFComboBox>(
139 m_pDoc->GetHeap()->GetAllocationHandle(), pNode);
140 }
141 break;
142 }
143 case XFA_FFWidgetType::kDateTimeEdit:
144 pWidget = cppgc::MakeGarbageCollected<CXFA_FFDateTimeEdit>(
145 m_pDoc->GetHeap()->GetAllocationHandle(), pNode);
146 break;
147 case XFA_FFWidgetType::kImageEdit:
148 pWidget = cppgc::MakeGarbageCollected<CXFA_FFImageEdit>(
149 m_pDoc->GetHeap()->GetAllocationHandle(), pNode);
150 break;
151 case XFA_FFWidgetType::kNumericEdit:
152 pWidget = cppgc::MakeGarbageCollected<CXFA_FFNumericEdit>(
153 m_pDoc->GetHeap()->GetAllocationHandle(), pNode);
154 break;
156 auto* child = CXFA_PasswordEdit::FromNode(pNode->GetUIChildNode());
157 if (!child)
158 return nullptr;
159
160 pWidget = cppgc::MakeGarbageCollected<CXFA_FFPasswordEdit>(
161 m_pDoc->GetHeap()->GetAllocationHandle(), pNode, child);
162 break;
163 }
164 case XFA_FFWidgetType::kSignature:
165 pWidget = cppgc::MakeGarbageCollected<CXFA_FFSignature>(
166 m_pDoc->GetHeap()->GetAllocationHandle(), pNode);
167 break;
168 case XFA_FFWidgetType::kTextEdit:
169 pWidget = cppgc::MakeGarbageCollected<CXFA_FFTextEdit>(
170 m_pDoc->GetHeap()->GetAllocationHandle(), pNode);
171 break;
172 case XFA_FFWidgetType::kArc:
173 pWidget = cppgc::MakeGarbageCollected<CXFA_FFArc>(
174 m_pDoc->GetHeap()->GetAllocationHandle(), pNode);
175 break;
176 case XFA_FFWidgetType::kLine:
177 pWidget = cppgc::MakeGarbageCollected<CXFA_FFLine>(
178 m_pDoc->GetHeap()->GetAllocationHandle(), pNode);
179 break;
180 case XFA_FFWidgetType::kRectangle:
181 pWidget = cppgc::MakeGarbageCollected<CXFA_FFRectangle>(
182 m_pDoc->GetHeap()->GetAllocationHandle(), pNode);
183 break;
184 case XFA_FFWidgetType::kText:
185 pWidget = cppgc::MakeGarbageCollected<CXFA_FFText>(
186 m_pDoc->GetHeap()->GetAllocationHandle(), pNode);
187 break;
188 case XFA_FFWidgetType::kImage:
189 pWidget = cppgc::MakeGarbageCollected<CXFA_FFImage>(
190 m_pDoc->GetHeap()->GetAllocationHandle(), pNode);
191 break;
192 case XFA_FFWidgetType::kSubform:
193 pWidget = cppgc::MakeGarbageCollected<CXFA_FFWidget>(
194 m_pDoc->GetHeap()->GetAllocationHandle(), pNode);
195 break;
196 case XFA_FFWidgetType::kExclGroup:
197 pWidget = cppgc::MakeGarbageCollected<CXFA_FFExclGroup>(
198 m_pDoc->GetHeap()->GetAllocationHandle(), pNode);
199 break;
201 return nullptr;
202 }
203 auto* pLayout = CXFA_LayoutProcessor::FromDocument(m_pDoc->GetXFADoc());
204 pWidget->SetDocView(m_pDoc->GetDocView(pLayout));
205 return pWidget;
206}
207
209 float* pCalcWidth,
210 float* pCalcHeight) {
211 pItem->StartWidgetLayout(m_pDoc.Get(), pCalcWidth, pCalcHeight);
212}
213
214bool CXFA_FFNotify::RunScript(CXFA_Script* script, CXFA_Node* item) {
215 CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
216 if (!pDocView)
217 return false;
218
220 EventParam.m_bTargeted = false;
221
223 item->ExecuteBoolScript(pDocView, script, &EventParam);
224
226 result.script_result;
227}
228
230 XFA_EVENTTYPE eEventType,
231 bool bIsFormReady,
232 bool bRecursive) {
233 CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
234 if (!pDocView)
236 return pDocView->ExecEventActivityByDeepFirst(pFormNode, eEventType,
237 bIsFormReady, bRecursive);
238}
239
241 CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
242 if (!pDocView)
243 return;
244
245 pDocView->AddCalculateNode(pNode);
246 pDocView->AddValidateNode(pNode);
247}
248
250 return m_pDoc->GetApp()->GetAppProvider();
251}
252
254 CXFA_EventParam* pParam) {
255 CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
256 if (!pDocView)
257 return;
258
259 CXFA_FFWidgetHandler* pHandler = pDocView->GetWidgetHandler();
260 if (!pHandler)
261 return;
262
263 pHandler->ProcessEvent(pNode, pParam);
264}
265
267 auto* pDocLayout = CXFA_LayoutProcessor::FromDocument(m_pDoc->GetXFADoc());
268 CXFA_LayoutItem* pLayoutItem = pDocLayout->GetLayoutItem(pNode);
269 if (!pLayoutItem)
270 return;
271
273 if (!hWidget)
274 return;
275
276 CXFA_FFDoc* hDoc = GetFFDoc();
277 hDoc->SetFocusWidget(hWidget);
279 return;
280
281 if (!hWidget->IsLoaded())
282 return;
283
284 CXFA_FFDropDown* pDropDown = ToDropDown(ToField(hWidget));
285 CXFA_FFComboBox* pComboBox = ToComboBox(pDropDown);
286 if (!pComboBox)
287 return;
288
289 CXFA_FFDocView::UpdateScope scope(m_pDoc->GetDocView());
290 pComboBox->OpenDropDownList();
291}
292
294 CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
295 if (!pDocView)
296 return;
297
298 pDocView->ResetNode(pNode);
299}
300
302 CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
303 return pDocView ? pDocView->GetLayoutStatus()
305}
306
308 CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
309 if (!pDocView)
310 return;
311
312 pDocView->AddNewFormNode(pNode);
313}
314
315void CXFA_FFNotify::RunSubformIndexChange(CXFA_Subform* pSubformNode) {
316 CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
317 if (!pDocView)
318 return;
319
320 pDocView->AddIndexChangedSubform(pSubformNode);
321}
322
324 CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
325 return pDocView ? pDocView->GetFocusNode() : nullptr;
326}
327
329 CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
330 if (!pDocView)
331 return;
332 pDocView->SetFocusNode(pNode);
333}
334
336 CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
337 if (!pDocView)
338 return;
339
340 if (pNode->HasCreatedUIWidget()) {
342 return;
343 }
344
345 switch (pNode->GetElementType()) {
346 case XFA_Element::BindItems:
347 pDocView->AddBindItem(static_cast<CXFA_BindItems*>(pNode));
348 break;
349 case XFA_Element::Validate:
351 break;
352 default:
353 break;
354 }
355}
356
358 if (eAttr != XFA_Attribute::Presence)
359 return;
360 if (pSender->GetPacketType() == XFA_PacketType::Datasets)
361 return;
362 if (!pSender->IsFormContainer())
363 return;
364
365 CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
366 if (!pDocView)
367 return;
369 return;
370
371 CXFA_FFWidget* pWidget = m_pDoc->GetDocView()->GetWidgetForNode(pSender);
372 for (; pWidget; pWidget = pWidget->GetNextFFWidget()) {
373 if (pWidget->IsLoaded())
374 pWidget->InvalidateRect();
375 }
376}
377
379 XFA_Attribute eAttr,
380 CXFA_Node* pParentNode,
381 CXFA_Node* pWidgetNode) {
382 CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
383 if (!pDocView)
384 return;
385
386 if (pSender->GetPacketType() != XFA_PacketType::Form) {
387 if (eAttr == XFA_Attribute::Value)
388 pDocView->AddCalculateNodeNotify(pSender);
389 return;
390 }
391
392 XFA_Element eType = pParentNode->GetElementType();
393 bool bIsContainerNode = pParentNode->IsContainerNode();
394 bool bUpdateProperty = false;
395 pDocView->SetChangeMark();
396 switch (eType) {
397 case XFA_Element::Caption: {
398 CXFA_TextLayout* pCapOut = pWidgetNode->GetCaptionTextLayout();
399 if (!pCapOut)
400 return;
401
402 pCapOut->Unload();
403 break;
404 }
405 case XFA_Element::Ui:
406 case XFA_Element::Para:
407 bUpdateProperty = true;
408 break;
409 default:
410 break;
411 }
412 if (bIsContainerNode && eAttr == XFA_Attribute::Access)
413 bUpdateProperty = true;
414
415 if (eAttr == XFA_Attribute::Value) {
416 pDocView->AddCalculateNodeNotify(pSender);
417 if (eType == XFA_Element::Value || bIsContainerNode) {
418 if (bIsContainerNode) {
419 m_pDoc->GetDocView()->UpdateUIDisplay(pWidgetNode, nullptr);
420 pDocView->AddCalculateNode(pWidgetNode);
421 pDocView->AddValidateNode(pWidgetNode);
422 } else if (pWidgetNode->GetParent()->GetElementType() ==
423 XFA_Element::ExclGroup) {
424 m_pDoc->GetDocView()->UpdateUIDisplay(pWidgetNode, nullptr);
425 }
426 return;
427 }
428 }
429
430 CXFA_FFWidget* pWidget = m_pDoc->GetDocView()->GetWidgetForNode(pWidgetNode);
431 for (; pWidget; pWidget = pWidget->GetNextFFWidget()) {
432 if (!pWidget->IsLoaded())
433 continue;
434
435 if (bUpdateProperty)
437 pWidget->PerformLayout();
438 pWidget->InvalidateRect();
439 }
440}
441
443 m_pDoc->GetXFADoc()->GetLayoutProcessor()->SetHasChangedContainer();
444}
445
447 if (!pSender->IsFormContainer())
448 return;
449
450 CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
451 if (!pDocView)
452 return;
453
454 const bool bLayoutReady =
455 !pDocView->InLayoutStatus() &&
457 if (bLayoutReady)
458 m_pDoc->SetChangeMark();
459}
460
462 CXFA_FFDocView* pDocView = m_pDoc->GetDocView();
463 if (!pDocView)
464 return;
465
466 const bool bLayoutReady =
467 !pDocView->InLayoutStatus() &&
469 if (bLayoutReady)
470 m_pDoc->SetChangeMark();
471}
472
473void CXFA_FFNotify::OnLayoutItemAdded(CXFA_LayoutProcessor* pLayout,
474 CXFA_LayoutItem* pSender,
475 int32_t iPageIdx,
476 Mask<XFA_WidgetStatus> dwStatus) {
477 CXFA_FFDocView* pDocView = m_pDoc->GetDocView(pLayout);
478 if (!pDocView)
479 return;
480
482 if (!pWidget)
483 return;
484
485 CXFA_FFPageView* pNewPageView = pDocView->GetPageView(iPageIdx);
486 constexpr Mask<XFA_WidgetStatus> kRemove{XFA_WidgetStatus::kVisible,
487 XFA_WidgetStatus::kViewable,
488 XFA_WidgetStatus::kPrintable};
489 pWidget->ModifyStatus(dwStatus, kRemove);
490 CXFA_FFPageView* pPrePageView = pWidget->GetPageView();
491 if (pPrePageView != pNewPageView ||
492 dwStatus.TestAll(
494 pWidget->SetPageView(pNewPageView);
495 m_pDoc->WidgetPostAdd(pWidget);
496 }
498 !(dwStatus & XFA_WidgetStatus::kVisible)) {
499 return;
500 }
501 if (pWidget->IsLoaded()) {
503 pWidget->PerformLayout();
504 } else {
505 pWidget->LoadWidget();
506 }
507 pWidget->InvalidateRect();
508}
509
510void CXFA_FFNotify::OnLayoutItemRemoving(CXFA_LayoutProcessor* pLayout,
511 CXFA_LayoutItem* pSender) {
512 CXFA_FFDocView* pDocView = m_pDoc->GetDocView(pLayout);
513 if (!pDocView)
514 return;
515
517 if (!pWidget)
518 return;
519
520 pDocView->DeleteLayoutItem(pWidget);
521 m_pDoc->WidgetPreRemove(pWidget);
522 pWidget->InvalidateRect();
523}
friend bool operator!=(const CFX_RectF &rc1, const CFX_RectF &rc2)
static CXFA_Barcode * FromNode(CXFA_Node *pNode)
static CXFA_Button * FromNode(CXFA_Node *pNode)
static CXFA_CheckButton * FromNode(CXFA_Node *pNode)
CXFA_EventParam(XFA_EVENTTYPE type)
CXFA_FFWidgetHandler * GetWidgetHandler()
LayoutStatus GetLayoutStatus() const
void AddValidateNode(CXFA_Node *node)
void ResetNode(CXFA_Node *pNode)
void AddCalculateNodeNotify(CXFA_Node *pNodeChange)
bool InLayoutStatus() const
CXFA_Node * GetFocusNode() const
void DeleteLayoutItem(CXFA_FFWidget *pWidget)
void AddNewFormNode(CXFA_Node *pNode)
void AddBindItem(CXFA_BindItems *item)
void OnPageViewEvent(CXFA_ViewLayoutItem *pSender, CXFA_FFDoc::PageViewEvent eEvent)
CXFA_FFPageView * GetPageView(int32_t nIndex) const
void SetFocusNode(CXFA_Node *pNode)
void AddCalculateNode(CXFA_Node *node)
XFA_EventError ExecEventActivityByDeepFirst(CXFA_Node *pFormNode, XFA_EVENTTYPE eEventType, bool bIsFormReady, bool bRecursive)
void AddIndexChangedSubform(CXFA_Subform *pNode)
void SetFocusWidget(CXFA_FFWidget *hWidget)
virtual void DeleteItem(int32_t nIndex)=0
virtual void InsertItem(const WideString &wsLabel, int32_t nIndex)=0
void OnValueChanged(CXFA_Node *pSender, XFA_Attribute eAttr, CXFA_Node *pParentNode, CXFA_Node *pWidgetNode)
CXFA_FFPageView * OnCreateViewLayoutItem(CXFA_Node *pNode)
CXFA_FFDocView::LayoutStatus GetLayoutStatus()
void OnLayoutItemAdded(CXFA_LayoutProcessor *pLayout, CXFA_LayoutItem *pSender, int32_t iPageIdx, Mask< XFA_WidgetStatus > dwStatus)
void OnValueChanging(CXFA_Node *pSender, XFA_Attribute eAttr)
void Trace(cppgc::Visitor *visitor) const
void OnWidgetListItemRemoved(CXFA_Node *pSender, int32_t iIndex)
void OnNodeReady(CXFA_Node *pNode)
void ResetData(CXFA_Node *pNode)
void SetFocusWidgetNode(CXFA_Node *pNode)
void OnChildAdded(CXFA_Node *pSender)
void OnWidgetListItemAdded(CXFA_Node *pSender, const WideString &wsLabel, int32_t iIndex)
void HandleWidgetEvent(CXFA_Node *pNode, CXFA_EventParam *pParam)
void StartFieldDrawLayout(CXFA_Node *pItem, float *pCalcWidth, float *pCalcHeight)
void AddCalcValidate(CXFA_Node *pNode)
bool RunScript(CXFA_Script *pScript, CXFA_Node *pFormItem)
CXFA_FFDoc * GetFFDoc() const
CXFA_FFApp::CallbackIface * GetAppProvider()
CXFA_Node * GetFocusWidgetNode()
XFA_EventError ExecEventByDeepFirst(CXFA_Node *pFormNode, XFA_EVENTTYPE eEventType, bool bIsFormReady, bool bRecursive)
CXFA_FFWidget * OnCreateContentLayoutItem(CXFA_Node *pNode)
void OnPageViewEvent(CXFA_ViewLayoutItem *pSender, CXFA_FFDoc::PageViewEvent eEvent)
void OpenDropDownList(CXFA_Node *pNode)
void RunNodeInitialize(CXFA_Node *pNode)
void OnContainerChanged()
void OnLayoutItemRemoving(CXFA_LayoutProcessor *pLayout, CXFA_LayoutItem *pSender)
void RunSubformIndexChange(CXFA_Subform *pSubformNode)
XFA_EventError ProcessEvent(CXFA_Node *pNode, CXFA_EventParam *pParam)
static CXFA_FFWidget * FromLayoutItem(CXFA_LayoutItem *pLayoutItem)
virtual bool PerformLayout()
const CFX_RectF & RecacheWidgetRect() const
CXFA_FFWidget * GetNextFFWidget() const
const CFX_RectF & GetWidgetRect() const
void SetPageView(CXFA_FFPageView *pPageView)
virtual void UpdateWidgetProperty()
virtual bool IsLoaded()
CXFA_Node * GetNode() const
virtual bool LoadWidget()
void ModifyStatus(Mask< XFA_WidgetStatus > dwAdded, Mask< XFA_WidgetStatus > dwRemoved)
CXFA_FFPageView * GetPageView() const
bool IsListBox()
bool IsFormContainer() const
Definition cxfa_node.h:179
void SetFlag(XFA_NodeFlag dwFlag)
void SetWidgetReady()
Definition cxfa_node.h:326
CXFA_TextLayout * GetCaptionTextLayout()
BoolScriptResult ExecuteBoolScript(CXFA_FFDocView *pDocView, CXFA_Script *script, CXFA_EventParam *pEventParam)
CXFA_Node * GetUIChildNode()
XFA_PacketType GetPacketType() const
Definition cxfa_node.h:146
XFA_FFWidgetType GetFFWidgetType()
XFA_Element GetElementType() const
Definition cxfa_object.h:91
bool HasCreatedUIWidget() const
Definition cxfa_object.h:84
bool IsContainerNode() const
Definition cxfa_object.h:69
static CXFA_PasswordEdit * FromNode(CXFA_Node *pNode)
XFA_EVENTTYPE
@ XFA_EVENT_Unknown
CXFA_FFComboBox * ToComboBox(CXFA_FFDropDown *pDropDown)
CXFA_FFDropDown * ToDropDown(CXFA_FFField *field)
CXFA_FFField * ToField(CXFA_FFWidget *widget)
XFA_FFWidgetType
XFA_NodeFlag
Definition cxfa_node.h:77
XFA_EventError
Definition fxfa.h:54
XFA_WidgetStatus
Definition fxfa.h:61
XFA_Attribute
Definition fxfa_basic.h:67
XFA_Element
Definition fxfa_basic.h:75
XFA_PacketType
Definition fxfa_basic.h:44
Definition heap.h:12
XFA_EventError xfa_event_result
Definition cxfa_node.h:116