Chromium Code Reviews| 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..684fb2e369285a574412a53bf9ef73f6ba7832b0 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,21 +233,23 @@ 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 (!m_TabOrderWidgetArray.empty()) { |
|
npm
2017/01/23 14:49:50
Do you need this if, or can it also be deleted?
Tom Sepez
2017/01/23 18:36:51
I kept it so that if we decide to go to signed ind
npm
2017/01/23 18:51:51
Won't it be -1, since you are using int? Also, why
Tom Sepez
2017/01/23 18:59:45
Fixed.
|
| + 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; |
| @@ -252,8 +259,10 @@ CXFA_FFWidget* CXFA_FFTabOrderPageWidgetIterator::MoveToLast() { |
| } |
| 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 +272,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 +284,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 +320,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 +359,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 +430,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)) { |