summaryrefslogtreecommitdiff
path: root/xfa/fxfa/app/xfa_ffpageview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/fxfa/app/xfa_ffpageview.cpp')
-rw-r--r--xfa/fxfa/app/xfa_ffpageview.cpp136
1 files changed, 78 insertions, 58 deletions
diff --git a/xfa/fxfa/app/xfa_ffpageview.cpp b/xfa/fxfa/app/xfa_ffpageview.cpp
index 5ef108693a..3dfa237c0f 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)) {