void CXFA_FFNotify::OnWidgetListItemRemoved(CXFA_WidgetData* pSender, int32_t iIndex) { CXFA_WidgetAcc* pWidgetAcc = static_cast<CXFA_WidgetAcc*>(pSender); if (pWidgetAcc->GetUIType() != XFA_Element::ChoiceList) return; CXFA_FFWidget* pWidget = nullptr; while ((pWidget = pWidgetAcc->GetNextWidget(pWidget)) != nullptr) { if (pWidget->IsLoaded()) { if (pWidgetAcc->IsListBox()) { static_cast<CXFA_FFListBox*>(pWidget)->DeleteItem(iIndex); } else { static_cast<CXFA_FFComboBox*>(pWidget)->DeleteItem(iIndex); } } } }
void CXFA_FFNotify::OnWidgetListItemAdded(CXFA_WidgetData* pSender, const FX_WCHAR* pLabel, const FX_WCHAR* pValue, int32_t iIndex) { CXFA_WidgetAcc* pWidgetAcc = static_cast<CXFA_WidgetAcc*>(pSender); if (pWidgetAcc->GetUIType() != XFA_Element::ChoiceList) return; CXFA_FFWidget* pWidget = nullptr; while ((pWidget = pWidgetAcc->GetNextWidget(pWidget)) != nullptr) { if (pWidget->IsLoaded()) { if (pWidgetAcc->IsListBox()) { static_cast<CXFA_FFListBox*>(pWidget)->InsertItem(pLabel, iIndex); } else { static_cast<CXFA_FFComboBox*>(pWidget)->InsertItem(pLabel, iIndex); } } } }
CXFA_LayoutItem* CXFA_FFNotify::OnCreateLayoutItem(CXFA_Node* pNode) { CXFA_LayoutProcessor* pLayout = m_pDoc->GetXFADoc()->GetDocLayout(); CXFA_FFDocView* pDocView = m_pDoc->GetDocView(pLayout); XFA_Element eType = pNode->GetElementType(); if (eType == XFA_Element::PageArea) return new CXFA_FFPageView(pDocView, pNode); if (eType == XFA_Element::ContentArea) return new CXFA_ContainerLayoutItem(pNode); CXFA_WidgetAcc* pAcc = static_cast<CXFA_WidgetAcc*>(pNode->GetWidgetData()); if (!pAcc) return new CXFA_ContentLayoutItem(pNode); CXFA_FFWidget* pWidget; switch (pAcc->GetUIType()) { case XFA_Element::Barcode: pWidget = new CXFA_FFBarcode(nullptr, pAcc); break; case XFA_Element::Button: pWidget = new CXFA_FFPushButton(nullptr, pAcc); break; case XFA_Element::CheckButton: pWidget = new CXFA_FFCheckButton(nullptr, pAcc); break; case XFA_Element::ChoiceList: { if (pAcc->IsListBox()) { pWidget = new CXFA_FFListBox(nullptr, pAcc); } else { pWidget = new CXFA_FFComboBox(nullptr, pAcc); } } break; case XFA_Element::DateTimeEdit: pWidget = new CXFA_FFDateTimeEdit(nullptr, pAcc); break; case XFA_Element::ImageEdit: pWidget = new CXFA_FFImageEdit(nullptr, pAcc); break; case XFA_Element::NumericEdit: pWidget = new CXFA_FFNumericEdit(nullptr, pAcc); break; case XFA_Element::PasswordEdit: pWidget = new CXFA_FFPasswordEdit(nullptr, pAcc); break; case XFA_Element::Signature: pWidget = new CXFA_FFSignature(nullptr, pAcc); break; case XFA_Element::TextEdit: pWidget = new CXFA_FFTextEdit(nullptr, pAcc); break; case XFA_Element::Arc: pWidget = new CXFA_FFArc(nullptr, pAcc); break; case XFA_Element::Line: pWidget = new CXFA_FFLine(nullptr, pAcc); break; case XFA_Element::Rectangle: pWidget = new CXFA_FFRectangle(nullptr, pAcc); break; case XFA_Element::Text: pWidget = new CXFA_FFText(nullptr, pAcc); break; case XFA_Element::Image: pWidget = new CXFA_FFImage(nullptr, pAcc); break; case XFA_Element::Draw: pWidget = new CXFA_FFDraw(nullptr, pAcc); break; case XFA_Element::Subform: pWidget = new CXFA_FFSubForm(nullptr, pAcc); break; case XFA_Element::ExclGroup: pWidget = new CXFA_FFExclGroup(nullptr, pAcc); break; case XFA_Element::DefaultUi: default: pWidget = nullptr; break; } if (pWidget) pWidget->SetDocView(pDocView); return pWidget; }