Index: xfa/fxfa/app/xfa_ffpageview.cpp |
diff --git a/xfa/fxfa/app/xfa_ffpageview.cpp b/xfa/fxfa/app/xfa_ffpageview.cpp |
index 5ef108693ac6dfd33b04c28ce38c8b87a26976e3..3dfa237c0f5edb5254516b57544a6fa14c357853 100644 |
--- a/xfa/fxfa/app/xfa_ffpageview.cpp |
+++ b/xfa/fxfa/app/xfa_ffpageview.cpp |
@@ -6,6 +6,11 @@ |
#include "xfa/fxfa/xfa_ffpageview.h" |
+#include <memory> |
+#include <vector> |
+ |
+#include "third_party/base/ptr_util.h" |
+#include "third_party/base/stl_util.h" |
#include "xfa/fde/fde_render.h" |
#include "xfa/fxfa/app/xfa_ffcheckbutton.h" |
#include "xfa/fxfa/app/xfa_ffchoicelist.h" |
@@ -228,32 +233,34 @@ void CXFA_FFTabOrderPageWidgetIterator::Reset() { |
CreateTabOrderWidgetArray(); |
m_iCurWidget = -1; |
} |
+ |
CXFA_FFWidget* CXFA_FFTabOrderPageWidgetIterator::MoveToFirst() { |
- if (m_TabOrderWidgetArray.GetSize() > 0) { |
- for (int32_t i = 0; i < m_TabOrderWidgetArray.GetSize(); i++) { |
- if (PageWidgetFilter(m_TabOrderWidgetArray[i], m_dwFilter, true, |
- m_bIgnorerelevant)) { |
- m_iCurWidget = i; |
- return m_TabOrderWidgetArray[m_iCurWidget]; |
- } |
+ for (int32_t i = 0; |
+ i < pdfium::CollectionSize<int32_t>(m_TabOrderWidgetArray); i++) { |
+ if (PageWidgetFilter(m_TabOrderWidgetArray[i], m_dwFilter, true, |
+ m_bIgnorerelevant)) { |
+ m_iCurWidget = i; |
+ return m_TabOrderWidgetArray[m_iCurWidget]; |
} |
} |
return nullptr; |
} |
+ |
CXFA_FFWidget* CXFA_FFTabOrderPageWidgetIterator::MoveToLast() { |
- if (m_TabOrderWidgetArray.GetSize() > 0) { |
- for (int32_t i = m_TabOrderWidgetArray.GetSize() - 1; i >= 0; i--) { |
- if (PageWidgetFilter(m_TabOrderWidgetArray[i], m_dwFilter, true, |
- m_bIgnorerelevant)) { |
- m_iCurWidget = i; |
- return m_TabOrderWidgetArray[m_iCurWidget]; |
- } |
+ for (int32_t i = pdfium::CollectionSize<int32_t>(m_TabOrderWidgetArray) - 1; |
+ i >= 0; i--) { |
+ if (PageWidgetFilter(m_TabOrderWidgetArray[i], m_dwFilter, true, |
+ m_bIgnorerelevant)) { |
+ m_iCurWidget = i; |
+ return m_TabOrderWidgetArray[m_iCurWidget]; |
} |
} |
return nullptr; |
} |
+ |
CXFA_FFWidget* CXFA_FFTabOrderPageWidgetIterator::MoveToNext() { |
- for (int32_t i = m_iCurWidget + 1; i < m_TabOrderWidgetArray.GetSize(); i++) { |
+ for (int32_t i = m_iCurWidget + 1; |
+ i < pdfium::CollectionSize<int32_t>(m_TabOrderWidgetArray); i++) { |
if (PageWidgetFilter(m_TabOrderWidgetArray[i], m_dwFilter, true, |
m_bIgnorerelevant)) { |
m_iCurWidget = i; |
@@ -263,6 +270,7 @@ CXFA_FFWidget* CXFA_FFTabOrderPageWidgetIterator::MoveToNext() { |
m_iCurWidget = -1; |
return nullptr; |
} |
+ |
CXFA_FFWidget* CXFA_FFTabOrderPageWidgetIterator::MoveToPrevious() { |
for (int32_t i = m_iCurWidget - 1; i >= 0; i--) { |
if (PageWidgetFilter(m_TabOrderWidgetArray[i], m_dwFilter, true, |
@@ -274,21 +282,22 @@ CXFA_FFWidget* CXFA_FFTabOrderPageWidgetIterator::MoveToPrevious() { |
m_iCurWidget = -1; |
return nullptr; |
} |
+ |
CXFA_FFWidget* CXFA_FFTabOrderPageWidgetIterator::GetCurrentWidget() { |
- if (m_iCurWidget >= 0) { |
- return m_TabOrderWidgetArray[m_iCurWidget]; |
- } |
- return nullptr; |
+ return m_iCurWidget >= 0 ? m_TabOrderWidgetArray[m_iCurWidget] : nullptr; |
} |
+ |
bool CXFA_FFTabOrderPageWidgetIterator::SetCurrentWidget( |
CXFA_FFWidget* hWidget) { |
- int32_t iWidgetIndex = m_TabOrderWidgetArray.Find(hWidget); |
- if (iWidgetIndex >= 0) { |
- m_iCurWidget = iWidgetIndex; |
- return true; |
- } |
- return false; |
+ auto it = std::find(m_TabOrderWidgetArray.begin(), |
+ m_TabOrderWidgetArray.end(), hWidget); |
+ if (it == m_TabOrderWidgetArray.end()) |
+ return false; |
+ |
+ m_iCurWidget = it - m_TabOrderWidgetArray.begin(); |
+ return true; |
} |
+ |
CXFA_FFWidget* CXFA_FFTabOrderPageWidgetIterator::GetTraverseWidget( |
CXFA_FFWidget* pWidget) { |
CXFA_WidgetAcc* pAcc = pWidget->GetDataAcc(); |
@@ -309,29 +318,36 @@ CXFA_FFWidget* CXFA_FFTabOrderPageWidgetIterator::FindWidgetByName( |
CXFA_FFWidget* pRefWidget) { |
return pRefWidget->GetDocView()->GetWidgetByName(wsWidgetName, pRefWidget); |
} |
+ |
void CXFA_FFTabOrderPageWidgetIterator::CreateTabOrderWidgetArray() { |
- m_TabOrderWidgetArray.RemoveAll(); |
- CXFA_WidgetArray SpaceOrderWidgetArray; |
- CreateSpaceOrderWidgetArray(SpaceOrderWidgetArray); |
- int32_t nWidgetCount = SpaceOrderWidgetArray.GetSize(); |
- if (nWidgetCount < 1) { |
+ 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]; |
- for (; m_TabOrderWidgetArray.GetSize() < nWidgetCount;) { |
- if (m_TabOrderWidgetArray.Find(hWidget) < 0) { |
- m_TabOrderWidgetArray.Add(hWidget); |
+ 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) { |
- int32_t iWidgetIndex = SpaceOrderWidgetArray.Find(hWidget) + 1; |
+ 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]; |
+ SpaceOrderWidgetArray[iWidgetIndex % nWidgetCount]; |
if (pRadio->GetDataAcc()->GetExclGroup() != pWidgetAcc) { |
break; |
} |
- if (m_TabOrderWidgetArray.Find(hWidget) < 0) { |
- m_TabOrderWidgetArray.Add(pRadio); |
+ if (!pdfium::ContainsValue(m_TabOrderWidgetArray, hWidget)) { |
+ m_TabOrderWidgetArray.push_back(pRadio); |
} |
iWidgetIndex++; |
} |
@@ -341,10 +357,15 @@ void CXFA_FFTabOrderPageWidgetIterator::CreateTabOrderWidgetArray() { |
continue; |
} |
} |
- int32_t iWidgetIndex = SpaceOrderWidgetArray.Find(hWidget); |
- hWidget = SpaceOrderWidgetArray[(iWidgetIndex + 1) % nWidgetCount]; |
+ auto it = std::find(SpaceOrderWidgetArray.begin(), |
+ SpaceOrderWidgetArray.end(), hWidget); |
+ int32_t iWidgetIndex = it != SpaceOrderWidgetArray.end() |
+ ? it - SpaceOrderWidgetArray.begin() + 1 |
+ : 0; |
+ hWidget = SpaceOrderWidgetArray[iWidgetIndex % nWidgetCount]; |
} |
} |
+ |
static int32_t XFA_TabOrderWidgetComparator(const void* phWidget1, |
const void* phWidget2) { |
CXFA_FFWidget* pWidget1 = (*(CXFA_TabParam**)phWidget1)->m_pWidget; |
@@ -407,36 +428,35 @@ void CXFA_FFTabOrderPageWidgetIterator::OrderContainer( |
XFA_TabOrderWidgetComparator); |
} |
for (int32_t iStart = 0; iStart < iChildren; iStart++) { |
- CXFA_TabParam* pParam = tabParams[iStart]; |
- pContainer->m_Children.Add(pParam->m_pWidget); |
- if (pParam->m_Children.GetSize() > 0) { |
- pContainer->m_Children.Append(pParam->m_Children); |
- } |
- delete pParam; |
+ std::unique_ptr<CXFA_TabParam> pParam(tabParams[iStart]); |
+ pContainer->m_Children.push_back(pParam->m_pWidget); |
+ pContainer->m_Children.insert(pContainer->m_Children.end(), |
+ pParam->m_Children.begin(), |
+ pParam->m_Children.end()); |
} |
tabParams.RemoveAll(); |
} |
void CXFA_FFTabOrderPageWidgetIterator::CreateSpaceOrderWidgetArray( |
- CXFA_WidgetArray& WidgetArray) { |
+ std::vector<CXFA_FFWidget*>* WidgetArray) { |
CXFA_LayoutItemIterator sIterator; |
sIterator.Init(m_pPageView); |
- CXFA_TabParam* pParam = new CXFA_TabParam; |
+ auto pParam = pdfium::MakeUnique<CXFA_TabParam>(); |
bool bCurrentItem = false; |
bool bContentArea = false; |
- OrderContainer(&sIterator, nullptr, pParam, bCurrentItem, bContentArea); |
- if (pParam->m_Children.GetSize() > 0) { |
- WidgetArray.Append(pParam->m_Children); |
- } |
+ OrderContainer(&sIterator, nullptr, pParam.get(), bCurrentItem, bContentArea); |
+ WidgetArray->insert(WidgetArray->end(), pParam->m_Children.begin(), |
+ pParam->m_Children.end()); |
+ |
sIterator.Reset(); |
bCurrentItem = false; |
bContentArea = false; |
- pParam->m_Children.RemoveAll(); |
- OrderContainer(&sIterator, nullptr, pParam, bCurrentItem, bContentArea, true); |
- if (pParam->m_Children.GetSize() > 0) { |
- WidgetArray.Append(pParam->m_Children); |
- } |
- delete pParam; |
+ pParam->m_Children.clear(); |
+ OrderContainer(&sIterator, nullptr, pParam.get(), bCurrentItem, bContentArea, |
+ true); |
+ WidgetArray->insert(WidgetArray->end(), pParam->m_Children.begin(), |
+ pParam->m_Children.end()); |
} |
+ |
CXFA_FFWidget* CXFA_FFTabOrderPageWidgetIterator::GetWidget( |
CXFA_LayoutItem* pLayoutItem) { |
if (CXFA_FFWidget* pWidget = XFA_GetWidgetFromLayoutItem(pLayoutItem)) { |