summaryrefslogtreecommitdiff
path: root/xfa
diff options
context:
space:
mode:
Diffstat (limited to 'xfa')
-rw-r--r--xfa/fxfa/parser/cxfa_node.cpp87
1 files changed, 40 insertions, 47 deletions
diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp
index e2bde5ca00..91e78dc485 100644
--- a/xfa/fxfa/parser/cxfa_node.cpp
+++ b/xfa/fxfa/parser/cxfa_node.cpp
@@ -2355,10 +2355,8 @@ CXFA_Node::CreateChildUIAndValueNodesIfNeeded() {
}
}
- XFA_FFWidgetType ff_widget_type =
- pUIChild ? pUIChild->GetDefaultFFWidgetType() : XFA_FFWidgetType::kNone;
- XFA_Element ui_child_type =
- pUIChild ? pUIChild->GetElementType() : XFA_Element::Unknown;
+ XFA_FFWidgetType widget_type = XFA_FFWidgetType::kNone;
+ XFA_Element expected_ui_child_type = XFA_Element::Unknown;
// Both Field and Draw nodes have a Value child. So, we should either always
// have it, or always create it. If we don't get the Value child for some
@@ -2371,82 +2369,77 @@ CXFA_Node::CreateChildUIAndValueNodesIfNeeded() {
// that child must be the type we want to use.
CXFA_Node* child = value->GetFirstChild();
if (child) {
- XFA_FFWidgetType tmp_widget_type = XFA_FFWidgetType::kNone;
switch (child->GetElementType()) {
case XFA_Element::Boolean:
- ui_child_type = XFA_Element::CheckButton;
- tmp_widget_type = XFA_FFWidgetType::kCheckButton;
+ expected_ui_child_type = XFA_Element::CheckButton;
break;
case XFA_Element::Integer:
case XFA_Element::Decimal:
case XFA_Element::Float:
- ui_child_type = XFA_Element::NumericEdit;
- tmp_widget_type = XFA_FFWidgetType::kNumericEdit;
+ expected_ui_child_type = XFA_Element::NumericEdit;
break;
case XFA_Element::ExData:
case XFA_Element::Text:
- ui_child_type = XFA_Element::TextEdit;
- tmp_widget_type = XFA_FFWidgetType::kTextEdit;
+ expected_ui_child_type = XFA_Element::TextEdit;
+ widget_type = XFA_FFWidgetType::kText;
break;
case XFA_Element::Date:
case XFA_Element::Time:
case XFA_Element::DateTime:
- ui_child_type = XFA_Element::DateTimeEdit;
- tmp_widget_type = XFA_FFWidgetType::kDateTimeEdit;
+ expected_ui_child_type = XFA_Element::DateTimeEdit;
break;
case XFA_Element::Image:
- ui_child_type = XFA_Element::ImageEdit;
- tmp_widget_type = XFA_FFWidgetType::kImageEdit;
+ expected_ui_child_type = XFA_Element::ImageEdit;
+ widget_type = XFA_FFWidgetType::kImage;
break;
case XFA_Element::Arc:
- ui_child_type = XFA_Element::DefaultUi;
- tmp_widget_type = XFA_FFWidgetType::kArc;
+ expected_ui_child_type = XFA_Element::DefaultUi;
+ widget_type = XFA_FFWidgetType::kArc;
break;
case XFA_Element::Line:
- ui_child_type = XFA_Element::DefaultUi;
- tmp_widget_type = XFA_FFWidgetType::kLine;
+ expected_ui_child_type = XFA_Element::DefaultUi;
+ widget_type = XFA_FFWidgetType::kLine;
break;
case XFA_Element::Rectangle:
- ui_child_type = XFA_Element::DefaultUi;
- tmp_widget_type = XFA_FFWidgetType::kRectangle;
+ expected_ui_child_type = XFA_Element::DefaultUi;
+ widget_type = XFA_FFWidgetType::kRectangle;
break;
default:
NOTREACHED();
break;
}
-
- // Only set the FFWidget if we didn't already set it from the UI child.
- if (ff_widget_type == XFA_FFWidgetType::kNone)
- ff_widget_type = tmp_widget_type;
- }
-
- if (!pUIChild) {
- if (ui_child_type == XFA_Element::Unknown)
- ui_child_type = XFA_Element::TextEdit;
-
- pUIChild = CreateUINodeIfNeeded(pUI, ui_child_type);
- if (ff_widget_type == XFA_FFWidgetType::kNone)
- ff_widget_type = pUIChild->GetDefaultFFWidgetType();
}
- // When handling draw children, change the image and text edit items to
- // be non-edit.
if (eType == XFA_Element::Draw) {
- switch (pUIChild->GetElementType()) {
- case XFA_Element::TextEdit:
- ff_widget_type = XFA_FFWidgetType::kText;
- break;
- case XFA_Element::ImageEdit:
- ff_widget_type = XFA_FFWidgetType::kImage;
- break;
- default:
- break;
+ if (pUIChild && pUIChild->GetElementType() == XFA_Element::TextEdit) {
+ widget_type = XFA_FFWidgetType::kText;
+ } else if (pUIChild &&
+ pUIChild->GetElementType() == XFA_Element::ImageEdit) {
+ widget_type = XFA_FFWidgetType::kImage;
+ } else if (widget_type == XFA_FFWidgetType::kNone) {
+ widget_type = XFA_FFWidgetType::kText;
+ }
+ } else if (eType == XFA_Element::Field) {
+ if (pUIChild && pUIChild->GetElementType() == XFA_Element::DefaultUi) {
+ widget_type = XFA_FFWidgetType::kTextEdit;
+ } else if (pUIChild) {
+ widget_type = pUIChild->GetDefaultFFWidgetType();
+ } else if (expected_ui_child_type == XFA_Element::Unknown) {
+ widget_type = XFA_FFWidgetType::kTextEdit;
}
+ } else {
+ NOTREACHED();
+ }
+
+ if (!pUIChild) {
+ if (expected_ui_child_type == XFA_Element::Unknown)
+ expected_ui_child_type = XFA_Element::TextEdit;
+ pUIChild = pUI->JSObject()->GetOrCreateProperty<CXFA_Node>(
+ 0, expected_ui_child_type);
}
- ASSERT(ff_widget_type != XFA_FFWidgetType::kNone);
CreateValueNodeIfNeeded(value, pUIChild);
- return {ff_widget_type, pUI};
+ return {widget_type, pUI};
}
XFA_FFWidgetType CXFA_Node::GetDefaultFFWidgetType() const {