1d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann// Copyright 2017 PDFium Authors. All rights reserved. 2d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann// Use of this source code is governed by a BSD-style license that can be 3d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann// found in the LICENSE file. 4d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 5d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 7d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_fflistbox.h" 8d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 9d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include <algorithm> 10d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include <utility> 11d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include <vector> 12d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 13d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fwl/cfwl_listbox.h" 14d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fwl/cfwl_notedriver.h" 15d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fwl/cfwl_widget.h" 16d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/cxfa_eventparam.h" 17d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "xfa/fxfa/parser/cxfa_para.h" 18d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 19d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannnamespace { 20d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 21d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCFWL_ListBox* ToListBox(CFWL_Widget* widget) { 22d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return static_cast<CFWL_ListBox*>(widget); 23d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 24d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 25d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} // namespace 26d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 27d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCXFA_FFListBox::CXFA_FFListBox(CXFA_Node* pNode) 28d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann : CXFA_FFField(pNode), m_pOldDelegate(nullptr) {} 29d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 30d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannCXFA_FFListBox::~CXFA_FFListBox() { 31d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!m_pNormalWidget) 32d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 33d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 34d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFWL_NoteDriver* pNoteDriver = 35d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pNormalWidget->GetOwnerApp()->GetNoteDriver(); 36d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pNoteDriver->UnregisterEventTarget(m_pNormalWidget.get()); 37d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 38d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 39d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CXFA_FFListBox::LoadWidget() { 40d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann auto pNew = pdfium::MakeUnique<CFWL_ListBox>( 41d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann GetFWLApp(), pdfium::MakeUnique<CFWL_WidgetProperties>(), nullptr); 42d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFWL_ListBox* pListBox = pNew.get(); 43d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pListBox->ModifyStyles(FWL_WGTSTYLE_VScroll | FWL_WGTSTYLE_NoBackground, 44d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 0xFFFFFFFF); 45d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pNormalWidget = std::move(pNew); 46d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pNormalWidget->SetLayoutItem(this); 47d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 48d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFWL_NoteDriver* pNoteDriver = 49d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pNormalWidget->GetOwnerApp()->GetNoteDriver(); 50d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pNoteDriver->RegisterEventTarget(m_pNormalWidget.get(), 51d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pNormalWidget.get()); 52d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pOldDelegate = m_pNormalWidget->GetDelegate(); 53d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pNormalWidget->SetDelegate(this); 54d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pNormalWidget->LockUpdate(); 55d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 56d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (const auto& label : m_pNode->GetWidgetAcc()->GetChoiceListItems(false)) 57d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pListBox->AddString(label.AsStringView()); 58d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 59d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann uint32_t dwExtendedStyle = FWL_STYLEEXT_LTB_ShowScrollBarFocus; 60d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (m_pNode->GetWidgetAcc()->IsChoiceListMultiSelect()) 61d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann dwExtendedStyle |= FWL_STYLEEXT_LTB_MultiSelection; 62d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 63d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann dwExtendedStyle |= GetAlignment(); 64d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pNormalWidget->ModifyStylesEx(dwExtendedStyle, 0xFFFFFFFF); 65d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (int32_t selected : m_pNode->GetWidgetAcc()->GetSelectedItems()) 66d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pListBox->SetSelItem(pListBox->GetItem(nullptr, selected), true); 67d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 68d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pNormalWidget->UnlockUpdate(); 69d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return CXFA_FFField::LoadWidget(); 70d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 71d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 72d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CXFA_FFListBox::OnKillFocus(CXFA_FFWidget* pNewFocus) { 73d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!ProcessCommittedData()) 74d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann UpdateFWLData(); 75d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 76d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_FFField::OnKillFocus(pNewFocus); 77d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return true; 78d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 79d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 80d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CXFA_FFListBox::CommitData() { 81d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann auto* pListBox = ToListBox(m_pNormalWidget.get()); 82d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann std::vector<int32_t> iSelArray; 83d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t iSels = pListBox->CountSelItems(); 84d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (int32_t i = 0; i < iSels; ++i) 85d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann iSelArray.push_back(pListBox->GetSelIndex(i)); 86d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 87d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pNode->GetWidgetAcc()->SetSelectedItems(iSelArray, true, false, true); 88d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return true; 89d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 90d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 91d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CXFA_FFListBox::IsDataChanged() { 92d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann std::vector<int32_t> iSelArray = m_pNode->GetWidgetAcc()->GetSelectedItems(); 93d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t iOldSels = pdfium::CollectionSize<int32_t>(iSelArray); 94d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann auto* pListBox = ToListBox(m_pNormalWidget.get()); 95d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t iSels = pListBox->CountSelItems(); 96d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (iOldSels != iSels) 97d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return true; 98d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 99d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (int32_t i = 0; i < iSels; ++i) { 100d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFWL_ListItem* hlistItem = pListBox->GetItem(nullptr, iSelArray[i]); 101d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!(hlistItem->GetStates() & FWL_ITEMSTATE_LTB_Selected)) 102d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return true; 103d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 104d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return false; 105d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 106d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 107d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannuint32_t CXFA_FFListBox::GetAlignment() { 108d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_Para* para = m_pNode->GetParaIfExists(); 109d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!para) 110d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return 0; 111d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 112d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann uint32_t dwExtendedStyle = 0; 113d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann switch (para->GetHorizontalAlign()) { 114d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_AttributeEnum::Center: 115d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann dwExtendedStyle |= FWL_STYLEEXT_LTB_CenterAlign; 116d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 117d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_AttributeEnum::Justify: 118d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 119d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_AttributeEnum::JustifyAll: 120d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 121d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_AttributeEnum::Radix: 122d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 123d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case XFA_AttributeEnum::Right: 124d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann dwExtendedStyle |= FWL_STYLEEXT_LTB_RightAlign; 125d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 126d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann default: 127d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann dwExtendedStyle |= FWL_STYLEEXT_LTB_LeftAlign; 128d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 129d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 130d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return dwExtendedStyle; 131d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 132d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 133d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannbool CXFA_FFListBox::UpdateFWLData() { 134d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!m_pNormalWidget) 135d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return false; 136d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 137d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann auto* pListBox = ToListBox(m_pNormalWidget.get()); 138d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann std::vector<int32_t> iSelArray = m_pNode->GetWidgetAcc()->GetSelectedItems(); 139d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann std::vector<CFWL_ListItem*> selItemArray(iSelArray.size()); 140d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann std::transform(iSelArray.begin(), iSelArray.end(), selItemArray.begin(), 141d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann [pListBox](int32_t val) { return pListBox->GetSelItem(val); }); 142d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 143d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pListBox->SetSelItem(pListBox->GetSelItem(-1), false); 144d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (CFWL_ListItem* pItem : selItemArray) 145d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pListBox->SetSelItem(pItem, true); 146d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 147d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pNormalWidget->Update(); 148d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return true; 149d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 150d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 151d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CXFA_FFListBox::OnSelectChanged(CFWL_Widget* pWidget) { 152d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_EventParam eParam; 153d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann eParam.m_eType = XFA_EVENT_Change; 154d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann eParam.m_pTarget = m_pNode->GetWidgetAcc(); 155d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann eParam.m_wsPrevText = m_pNode->GetWidgetAcc()->GetValue(XFA_VALUEPICTURE_Raw); 156d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 157d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann auto* pListBox = ToListBox(m_pNormalWidget.get()); 158d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann int32_t iSels = pListBox->CountSelItems(); 159d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (iSels > 0) { 160d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CFWL_ListItem* item = pListBox->GetSelItem(0); 161d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann eParam.m_wsNewText = item ? item->GetText() : L""; 162d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 163d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pNode->ProcessEvent(GetDocView(), XFA_AttributeEnum::Change, &eParam); 164d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 165d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 166d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CXFA_FFListBox::SetItemState(int32_t nIndex, bool bSelected) { 167d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann auto* pListBox = ToListBox(m_pNormalWidget.get()); 168d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pListBox->SetSelItem(pListBox->GetSelItem(nIndex), bSelected); 169d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pNormalWidget->Update(); 170d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann AddInvalidateRect(); 171d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 172d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 173d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CXFA_FFListBox::InsertItem(const WideStringView& wsLabel, int32_t nIndex) { 174d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann WideString wsTemp(wsLabel); 175d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ToListBox(m_pNormalWidget.get())->AddString(wsTemp.AsStringView()); 176d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pNormalWidget->Update(); 177d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann AddInvalidateRect(); 178d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 179d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 180d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CXFA_FFListBox::DeleteItem(int32_t nIndex) { 181d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann auto* pListBox = ToListBox(m_pNormalWidget.get()); 182d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (nIndex < 0) 183d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pListBox->DeleteAll(); 184d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann else 185d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pListBox->DeleteString(pListBox->GetItem(nullptr, nIndex)); 186d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 187d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pListBox->Update(); 188d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann AddInvalidateRect(); 189d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 190d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 191d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CXFA_FFListBox::OnProcessMessage(CFWL_Message* pMessage) { 192d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pOldDelegate->OnProcessMessage(pMessage); 193d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 194d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 195d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CXFA_FFListBox::OnProcessEvent(CFWL_Event* pEvent) { 196d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann CXFA_FFField::OnProcessEvent(pEvent); 197d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann switch (pEvent->GetType()) { 198d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case CFWL_Event::Type::SelectChanged: 199d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OnSelectChanged(m_pNormalWidget.get()); 200d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 201d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann default: 202d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 203d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 204d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pOldDelegate->OnProcessEvent(pEvent); 205d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 206d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 207d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid CXFA_FFListBox::OnDrawWidget(CXFA_Graphics* pGraphics, 208d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const CFX_Matrix& matrix) { 209d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pOldDelegate->OnDrawWidget(pGraphics, matrix); 210d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 211d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 212d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannFormFieldType CXFA_FFListBox::GetFormFieldType() { 213d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return FormFieldType::kXFA_ListBox; 214d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 215