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_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]; } }