void CXFA_FFTextEdit::ValidateNumberField(const CFX_WideString& wsText) { CXFA_WidgetAcc* pAcc = GetDataAcc(); if (pAcc && pAcc->GetUIType() == XFA_Element::NumericEdit) { IXFA_AppProvider* pAppProvider = GetApp()->GetAppProvider(); if (pAppProvider) { CFX_WideString wsTitle; pAppProvider->LoadString(XFA_IDS_AppName, wsTitle); CFX_WideString wsError; pAppProvider->LoadString(XFA_IDS_ValidateNumberError, wsError); CFX_WideString wsSomField; pAcc->GetNode()->GetSOMExpression(wsSomField); CFX_WideString wsMessage; wsMessage.Format(wsError.c_str(), wsText.c_str(), wsSomField.c_str()); pAppProvider->MsgBox(wsMessage, wsTitle, XFA_MBICON_Error, XFA_MB_OK); } } }
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_FFTabOrderPageWidgetIterator::CreateTabOrderWidgetArray() { m_TabOrderWidgetArray.clear(); std::vector<CXFA_FFWidget*> SpaceOrderWidgetArray; CreateSpaceOrderWidgetArray(&SpaceOrderWidgetArray); if (SpaceOrderWidgetArray.empty()) return; int32_t nWidgetCount = pdfium::CollectionSize<int32_t>(SpaceOrderWidgetArray); CXFA_FFWidget* hWidget = SpaceOrderWidgetArray[0]; while (pdfium::CollectionSize<int32_t>(m_TabOrderWidgetArray) < nWidgetCount) { if (!pdfium::ContainsValue(m_TabOrderWidgetArray, hWidget)) { m_TabOrderWidgetArray.push_back(hWidget); CXFA_WidgetAcc* pWidgetAcc = hWidget->GetDataAcc(); if (pWidgetAcc->GetUIType() == XFA_Element::ExclGroup) { auto it = std::find(SpaceOrderWidgetArray.begin(), SpaceOrderWidgetArray.end(), hWidget); int32_t iWidgetIndex = it != SpaceOrderWidgetArray.end() ? it - SpaceOrderWidgetArray.begin() + 1 : 0; while (true) { CXFA_FFWidget* pRadio = SpaceOrderWidgetArray[iWidgetIndex % nWidgetCount]; if (pRadio->GetDataAcc()->GetExclGroup() != pWidgetAcc) { break; } if (!pdfium::ContainsValue(m_TabOrderWidgetArray, hWidget)) { m_TabOrderWidgetArray.push_back(pRadio); } iWidgetIndex++; } } if (CXFA_FFWidget* hTraverseWidget = GetTraverseWidget(hWidget)) { hWidget = hTraverseWidget; continue; } } auto it = std::find(SpaceOrderWidgetArray.begin(), SpaceOrderWidgetArray.end(), hWidget); int32_t iWidgetIndex = it != SpaceOrderWidgetArray.end() ? it - SpaceOrderWidgetArray.begin() + 1 : 0; hWidget = SpaceOrderWidgetArray[iWidgetIndex % nWidgetCount]; } }
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); } } } }
void CXFA_FFTabOrderPageWidgetIterator::CreateTabOrderWidgetArray() { m_TabOrderWidgetArray.RemoveAll(); CXFA_WidgetArray SpaceOrderWidgetArray; CreateSpaceOrderWidgetArray(SpaceOrderWidgetArray); int32_t nWidgetCount = SpaceOrderWidgetArray.GetSize(); if (nWidgetCount < 1) { return; } CXFA_FFWidget* hWidget = SpaceOrderWidgetArray[0]; for (; m_TabOrderWidgetArray.GetSize() < nWidgetCount;) { if (m_TabOrderWidgetArray.Find(hWidget) < 0) { m_TabOrderWidgetArray.Add(hWidget); CXFA_WidgetAcc* pWidgetAcc = hWidget->GetDataAcc(); if (pWidgetAcc->GetUIType() == XFA_Element::ExclGroup) { int32_t iWidgetIndex = SpaceOrderWidgetArray.Find(hWidget) + 1; while (TRUE) { CXFA_FFWidget* pRadio = SpaceOrderWidgetArray[(iWidgetIndex) % nWidgetCount]; if (pRadio->GetDataAcc()->GetExclGroup() != pWidgetAcc) { break; } if (m_TabOrderWidgetArray.Find(hWidget) < 0) { m_TabOrderWidgetArray.Add(pRadio); } iWidgetIndex++; } } if (CXFA_FFWidget* hTraverseWidget = GetTraverseWidget(hWidget)) { hWidget = hTraverseWidget; continue; } } int32_t iWidgetIndex = SpaceOrderWidgetArray.Find(hWidget); hWidget = SpaceOrderWidgetArray[(iWidgetIndex + 1) % nWidgetCount]; } }
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; }