diff options
Diffstat (limited to 'xfa/fxfa/app/xfa_ffchoicelist.cpp')
-rw-r--r-- | xfa/fxfa/app/xfa_ffchoicelist.cpp | 227 |
1 files changed, 123 insertions, 104 deletions
diff --git a/xfa/fxfa/app/xfa_ffchoicelist.cpp b/xfa/fxfa/app/xfa_ffchoicelist.cpp index 061e9aa842..b191f838ce 100644 --- a/xfa/fxfa/app/xfa_ffchoicelist.cpp +++ b/xfa/fxfa/app/xfa_ffchoicelist.cpp @@ -27,15 +27,28 @@ #include "xfa/fxfa/cxfa_ffpageview.h" #include "xfa/fxfa/cxfa_ffwidget.h" +namespace { + +CFWL_ListBox* ToListBox(CFWL_Widget* widget) { + return static_cast<CFWL_ListBox*>(widget); +} + +CFWL_ComboBox* ToComboBox(CFWL_Widget* widget) { + return static_cast<CFWL_ComboBox*>(widget); +} + +} // namespace + CXFA_FFListBox::CXFA_FFListBox(CXFA_WidgetAcc* pDataAcc) : CXFA_FFField(pDataAcc), m_pOldDelegate(nullptr) {} CXFA_FFListBox::~CXFA_FFListBox() { - if (m_pNormalWidget) { - CFWL_NoteDriver* pNoteDriver = - m_pNormalWidget->GetOwnerApp()->GetNoteDriver(); - pNoteDriver->UnregisterEventTarget(m_pNormalWidget.get()); - } + if (!m_pNormalWidget) + return; + + CFWL_NoteDriver* pNoteDriver = + m_pNormalWidget->GetOwnerApp()->GetNoteDriver(); + pNoteDriver->UnregisterEventTarget(m_pNormalWidget.get()); } bool CXFA_FFListBox::LoadWidget() { @@ -74,16 +87,18 @@ bool CXFA_FFListBox::LoadWidget() { bool CXFA_FFListBox::OnKillFocus(CXFA_FFWidget* pNewFocus) { if (!ProcessCommittedData()) UpdateFWLData(); + CXFA_FFField::OnKillFocus(pNewFocus); return true; } bool CXFA_FFListBox::CommitData() { - auto* pListBox = static_cast<CFWL_ListBox*>(m_pNormalWidget.get()); + auto* pListBox = ToListBox(m_pNormalWidget.get()); std::vector<int32_t> iSelArray; int32_t iSels = pListBox->CountSelItems(); for (int32_t i = 0; i < iSels; ++i) iSelArray.push_back(pListBox->GetSelIndex(i)); + m_pDataAcc->SetSelectedItems(iSelArray, true, false, true); return true; } @@ -91,7 +106,7 @@ bool CXFA_FFListBox::CommitData() { bool CXFA_FFListBox::IsDataChanged() { std::vector<int32_t> iSelArray = m_pDataAcc->GetSelectedItems(); int32_t iOldSels = pdfium::CollectionSize<int32_t>(iSelArray); - auto* pListBox = static_cast<CFWL_ListBox*>(m_pNormalWidget.get()); + auto* pListBox = ToListBox(m_pNormalWidget.get()); int32_t iSels = pListBox->CountSelItems(); if (iOldSels != iSels) return true; @@ -105,34 +120,36 @@ bool CXFA_FFListBox::IsDataChanged() { } uint32_t CXFA_FFListBox::GetAlignment() { + CXFA_Para para = m_pDataAcc->GetPara(); + if (!para) + return 0; + uint32_t dwExtendedStyle = 0; - if (CXFA_Para para = m_pDataAcc->GetPara()) { - int32_t iHorz = para.GetHorizontalAlign(); - switch (iHorz) { - case XFA_ATTRIBUTEENUM_Center: - dwExtendedStyle |= FWL_STYLEEXT_LTB_CenterAlign; - break; - case XFA_ATTRIBUTEENUM_Justify: - break; - case XFA_ATTRIBUTEENUM_JustifyAll: - break; - case XFA_ATTRIBUTEENUM_Radix: - break; - case XFA_ATTRIBUTEENUM_Right: - dwExtendedStyle |= FWL_STYLEEXT_LTB_RightAlign; - break; - default: - dwExtendedStyle |= FWL_STYLEEXT_LTB_LeftAlign; - break; - } + switch (para.GetHorizontalAlign()) { + case XFA_ATTRIBUTEENUM_Center: + dwExtendedStyle |= FWL_STYLEEXT_LTB_CenterAlign; + break; + case XFA_ATTRIBUTEENUM_Justify: + break; + case XFA_ATTRIBUTEENUM_JustifyAll: + break; + case XFA_ATTRIBUTEENUM_Radix: + break; + case XFA_ATTRIBUTEENUM_Right: + dwExtendedStyle |= FWL_STYLEEXT_LTB_RightAlign; + break; + default: + dwExtendedStyle |= FWL_STYLEEXT_LTB_LeftAlign; + break; } return dwExtendedStyle; } + bool CXFA_FFListBox::UpdateFWLData() { if (!m_pNormalWidget) return false; - auto* pListBox = static_cast<CFWL_ListBox*>(m_pNormalWidget.get()); + auto* pListBox = ToListBox(m_pNormalWidget.get()); std::vector<int32_t> iSelArray = m_pDataAcc->GetSelectedItems(); std::vector<CFWL_ListItem*> selItemArray(iSelArray.size()); std::transform(iSelArray.begin(), iSelArray.end(), selItemArray.begin(), @@ -146,13 +163,13 @@ bool CXFA_FFListBox::UpdateFWLData() { return true; } -void CXFA_FFListBox::OnSelectChanged(CFWL_Widget* pWidget, - const std::vector<int32_t>& arrSels) { +void CXFA_FFListBox::OnSelectChanged(CFWL_Widget* pWidget) { CXFA_EventParam eParam; eParam.m_eType = XFA_EVENT_Change; eParam.m_pTarget = m_pDataAcc; m_pDataAcc->GetValue(eParam.m_wsPrevText, XFA_VALUEPICTURE_Raw); - auto* pListBox = static_cast<CFWL_ListBox*>(m_pNormalWidget.get()); + + auto* pListBox = ToListBox(m_pNormalWidget.get()); int32_t iSels = pListBox->CountSelItems(); if (iSels > 0) { CFWL_ListItem* item = pListBox->GetSelItem(0); @@ -162,7 +179,7 @@ void CXFA_FFListBox::OnSelectChanged(CFWL_Widget* pWidget, } void CXFA_FFListBox::SetItemState(int32_t nIndex, bool bSelected) { - auto* pListBox = static_cast<CFWL_ListBox*>(m_pNormalWidget.get()); + auto* pListBox = ToListBox(m_pNormalWidget.get()); pListBox->SetSelItem(pListBox->GetSelItem(nIndex), bSelected); m_pNormalWidget->Update(); AddInvalidateRect(); @@ -171,14 +188,13 @@ void CXFA_FFListBox::SetItemState(int32_t nIndex, bool bSelected) { void CXFA_FFListBox::InsertItem(const CFX_WideStringC& wsLabel, int32_t nIndex) { CFX_WideString wsTemp(wsLabel); - static_cast<CFWL_ListBox*>(m_pNormalWidget.get()) - ->AddString(wsTemp.AsStringC()); + ToListBox(m_pNormalWidget.get())->AddString(wsTemp.AsStringC()); m_pNormalWidget->Update(); AddInvalidateRect(); } void CXFA_FFListBox::DeleteItem(int32_t nIndex) { - auto* pListBox = static_cast<CFWL_ListBox*>(m_pNormalWidget.get()); + auto* pListBox = ToListBox(m_pNormalWidget.get()); if (nIndex < 0) pListBox->DeleteAll(); else @@ -195,16 +211,15 @@ void CXFA_FFListBox::OnProcessMessage(CFWL_Message* pMessage) { void CXFA_FFListBox::OnProcessEvent(CFWL_Event* pEvent) { CXFA_FFField::OnProcessEvent(pEvent); switch (pEvent->GetType()) { - case CFWL_Event::Type::SelectChanged: { - std::vector<int32_t> arrSels; - OnSelectChanged(m_pNormalWidget.get(), arrSels); + case CFWL_Event::Type::SelectChanged: + OnSelectChanged(m_pNormalWidget.get()); break; - } default: break; } m_pOldDelegate->OnProcessEvent(pEvent); } + void CXFA_FFListBox::OnDrawWidget(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix) { m_pOldDelegate->OnDrawWidget(pGraphics, pMatrix); @@ -216,13 +231,11 @@ CXFA_FFComboBox::CXFA_FFComboBox(CXFA_WidgetAcc* pDataAcc) CXFA_FFComboBox::~CXFA_FFComboBox() {} CFX_RectF CXFA_FFComboBox::GetBBox(uint32_t dwStatus, bool bDrawFocus) { - if (bDrawFocus) - return CFX_RectF(); - return CXFA_FFWidget::GetBBox(dwStatus); + return bDrawFocus ? CFX_RectF() : CXFA_FFWidget::GetBBox(dwStatus); } bool CXFA_FFComboBox::PtInActiveRect(const CFX_PointF& point) { - auto* pComboBox = static_cast<CFWL_ComboBox*>(m_pNormalWidget.get()); + auto* pComboBox = ToComboBox(m_pNormalWidget.get()); return pComboBox && pComboBox->GetBBox().Contains(point); } @@ -251,13 +264,14 @@ bool CXFA_FFComboBox::LoadWidget() { m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Raw); pComboBox->SetEditText(wsText); } + UpdateWidgetProperty(); m_pNormalWidget->UnlockUpdate(); return CXFA_FFField::LoadWidget(); } void CXFA_FFComboBox::UpdateWidgetProperty() { - auto* pComboBox = static_cast<CFWL_ComboBox*>(m_pNormalWidget.get()); + auto* pComboBox = ToComboBox(m_pNormalWidget.get()); if (!pComboBox) return; @@ -276,9 +290,10 @@ void CXFA_FFComboBox::UpdateWidgetProperty() { } dwExtendedStyle |= GetAlignment(); m_pNormalWidget->ModifyStylesEx(dwExtendedStyle, 0xFFFFFFFF); - if (m_pDataAcc->GetHorizontalScrollPolicy() != XFA_ATTRIBUTEENUM_Off) { + + if (m_pDataAcc->GetHorizontalScrollPolicy() != XFA_ATTRIBUTEENUM_Off) dwEditStyles |= FWL_STYLEEXT_EDT_AutoHScroll; - } + pComboBox->EditModifyStylesEx(dwEditStyles, 0xFFFFFFFF); } @@ -299,7 +314,7 @@ bool CXFA_FFComboBox::OnKillFocus(CXFA_FFWidget* pNewWidget) { } void CXFA_FFComboBox::OpenDropDownList() { - static_cast<CFWL_ComboBox*>(m_pNormalWidget.get())->OpenDropDownList(true); + ToComboBox(m_pNormalWidget.get())->OpenDropDownList(true); } bool CXFA_FFComboBox::CommitData() { @@ -307,7 +322,7 @@ bool CXFA_FFComboBox::CommitData() { } bool CXFA_FFComboBox::IsDataChanged() { - auto* pFWLcombobox = static_cast<CFWL_ComboBox*>(m_pNormalWidget.get()); + auto* pFWLcombobox = ToComboBox(m_pNormalWidget.get()); CFX_WideString wsText = pFWLcombobox->GetEditText(); int32_t iCursel = pFWLcombobox->GetCurSel(); if (iCursel >= 0) { @@ -315,6 +330,7 @@ bool CXFA_FFComboBox::IsDataChanged() { if (wsSel == wsText) m_pDataAcc->GetChoiceListItem(wsText, iCursel, true); } + CFX_WideString wsOldValue; m_pDataAcc->GetValue(wsOldValue, XFA_VALUEPICTURE_Raw); if (wsOldValue == wsText) @@ -327,51 +343,52 @@ bool CXFA_FFComboBox::IsDataChanged() { void CXFA_FFComboBox::FWLEventSelChange(CXFA_EventParam* pParam) { pParam->m_eType = XFA_EVENT_Change; pParam->m_pTarget = m_pDataAcc; - auto* pFWLcombobox = static_cast<CFWL_ComboBox*>(m_pNormalWidget.get()); - pParam->m_wsNewText = pFWLcombobox->GetEditText(); + pParam->m_wsNewText = ToComboBox(m_pNormalWidget.get())->GetEditText(); m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Change, pParam); } + uint32_t CXFA_FFComboBox::GetAlignment() { + CXFA_Para para = m_pDataAcc->GetPara(); + if (!para) + return 0; + uint32_t dwExtendedStyle = 0; - if (CXFA_Para para = m_pDataAcc->GetPara()) { - int32_t iHorz = para.GetHorizontalAlign(); - switch (iHorz) { - case XFA_ATTRIBUTEENUM_Center: - dwExtendedStyle |= - FWL_STYLEEXT_CMB_EditHCenter | FWL_STYLEEXT_CMB_ListItemCenterAlign; - break; - case XFA_ATTRIBUTEENUM_Justify: - dwExtendedStyle |= FWL_STYLEEXT_CMB_EditJustified; - break; - case XFA_ATTRIBUTEENUM_JustifyAll: - break; - case XFA_ATTRIBUTEENUM_Radix: - break; - case XFA_ATTRIBUTEENUM_Right: - break; - default: - dwExtendedStyle |= - FWL_STYLEEXT_CMB_EditHNear | FWL_STYLEEXT_CMB_ListItemLeftAlign; - break; - } - int32_t iVert = para.GetVerticalAlign(); - switch (iVert) { - case XFA_ATTRIBUTEENUM_Middle: - dwExtendedStyle |= FWL_STYLEEXT_CMB_EditVCenter; - break; - case XFA_ATTRIBUTEENUM_Bottom: - dwExtendedStyle |= FWL_STYLEEXT_CMB_EditVFar; - break; - default: - dwExtendedStyle |= FWL_STYLEEXT_CMB_EditVNear; - break; - } + switch (para.GetHorizontalAlign()) { + case XFA_ATTRIBUTEENUM_Center: + dwExtendedStyle |= + FWL_STYLEEXT_CMB_EditHCenter | FWL_STYLEEXT_CMB_ListItemCenterAlign; + break; + case XFA_ATTRIBUTEENUM_Justify: + dwExtendedStyle |= FWL_STYLEEXT_CMB_EditJustified; + break; + case XFA_ATTRIBUTEENUM_JustifyAll: + break; + case XFA_ATTRIBUTEENUM_Radix: + break; + case XFA_ATTRIBUTEENUM_Right: + break; + default: + dwExtendedStyle |= + FWL_STYLEEXT_CMB_EditHNear | FWL_STYLEEXT_CMB_ListItemLeftAlign; + break; + } + + switch (para.GetVerticalAlign()) { + case XFA_ATTRIBUTEENUM_Middle: + dwExtendedStyle |= FWL_STYLEEXT_CMB_EditVCenter; + break; + case XFA_ATTRIBUTEENUM_Bottom: + dwExtendedStyle |= FWL_STYLEEXT_CMB_EditVFar; + break; + default: + dwExtendedStyle |= FWL_STYLEEXT_CMB_EditVNear; + break; } return dwExtendedStyle; } bool CXFA_FFComboBox::UpdateFWLData() { - auto* pComboBox = static_cast<CFWL_ComboBox*>(m_pNormalWidget.get()); + auto* pComboBox = ToComboBox(m_pNormalWidget.get()); if (!pComboBox) return false; @@ -390,32 +407,32 @@ bool CXFA_FFComboBox::UpdateFWLData() { bool CXFA_FFComboBox::CanUndo() { return m_pDataAcc->IsChoiceListAllowTextEntry() && - static_cast<CFWL_ComboBox*>(m_pNormalWidget.get())->EditCanUndo(); + ToComboBox(m_pNormalWidget.get())->EditCanUndo(); } bool CXFA_FFComboBox::CanRedo() { return m_pDataAcc->IsChoiceListAllowTextEntry() && - static_cast<CFWL_ComboBox*>(m_pNormalWidget.get())->EditCanRedo(); + ToComboBox(m_pNormalWidget.get())->EditCanRedo(); } bool CXFA_FFComboBox::Undo() { return m_pDataAcc->IsChoiceListAllowTextEntry() && - static_cast<CFWL_ComboBox*>(m_pNormalWidget.get())->EditUndo(); + ToComboBox(m_pNormalWidget.get())->EditUndo(); } bool CXFA_FFComboBox::Redo() { return m_pDataAcc->IsChoiceListAllowTextEntry() && - static_cast<CFWL_ComboBox*>(m_pNormalWidget.get())->EditRedo(); + ToComboBox(m_pNormalWidget.get())->EditRedo(); } bool CXFA_FFComboBox::CanCopy() { - return static_cast<CFWL_ComboBox*>(m_pNormalWidget.get())->EditCanCopy(); + return ToComboBox(m_pNormalWidget.get())->EditCanCopy(); } bool CXFA_FFComboBox::CanCut() { return m_pDataAcc->GetAccess() == XFA_ATTRIBUTEENUM_Open && m_pDataAcc->IsChoiceListAllowTextEntry() && - static_cast<CFWL_ComboBox*>(m_pNormalWidget.get())->EditCanCut(); + ToComboBox(m_pNormalWidget.get())->EditCanCut(); } bool CXFA_FFComboBox::CanPaste() { @@ -424,55 +441,54 @@ bool CXFA_FFComboBox::CanPaste() { } bool CXFA_FFComboBox::CanSelectAll() { - return static_cast<CFWL_ComboBox*>(m_pNormalWidget.get())->EditCanSelectAll(); + return ToComboBox(m_pNormalWidget.get())->EditCanSelectAll(); } bool CXFA_FFComboBox::Copy(CFX_WideString& wsCopy) { - return static_cast<CFWL_ComboBox*>(m_pNormalWidget.get())->EditCopy(wsCopy); + return ToComboBox(m_pNormalWidget.get())->EditCopy(wsCopy); } bool CXFA_FFComboBox::Cut(CFX_WideString& wsCut) { return m_pDataAcc->IsChoiceListAllowTextEntry() && - static_cast<CFWL_ComboBox*>(m_pNormalWidget.get())->EditCut(wsCut); + ToComboBox(m_pNormalWidget.get())->EditCut(wsCut); } bool CXFA_FFComboBox::Paste(const CFX_WideString& wsPaste) { return m_pDataAcc->IsChoiceListAllowTextEntry() && - static_cast<CFWL_ComboBox*>(m_pNormalWidget.get())->EditPaste(wsPaste); + ToComboBox(m_pNormalWidget.get())->EditPaste(wsPaste); } void CXFA_FFComboBox::SelectAll() { - static_cast<CFWL_ComboBox*>(m_pNormalWidget.get())->EditSelectAll(); + ToComboBox(m_pNormalWidget.get())->EditSelectAll(); } void CXFA_FFComboBox::Delete() { - static_cast<CFWL_ComboBox*>(m_pNormalWidget.get())->EditDelete(); + ToComboBox(m_pNormalWidget.get())->EditDelete(); } void CXFA_FFComboBox::DeSelect() { - static_cast<CFWL_ComboBox*>(m_pNormalWidget.get())->EditDeSelect(); + ToComboBox(m_pNormalWidget.get())->EditDeSelect(); } void CXFA_FFComboBox::SetItemState(int32_t nIndex, bool bSelected) { - static_cast<CFWL_ComboBox*>(m_pNormalWidget.get()) - ->SetCurSel(bSelected ? nIndex : -1); + ToComboBox(m_pNormalWidget.get())->SetCurSel(bSelected ? nIndex : -1); m_pNormalWidget->Update(); AddInvalidateRect(); } void CXFA_FFComboBox::InsertItem(const CFX_WideStringC& wsLabel, int32_t nIndex) { - static_cast<CFWL_ComboBox*>(m_pNormalWidget.get())->AddString(wsLabel); + ToComboBox(m_pNormalWidget.get())->AddString(wsLabel); m_pNormalWidget->Update(); AddInvalidateRect(); } void CXFA_FFComboBox::DeleteItem(int32_t nIndex) { - if (nIndex < 0) { - static_cast<CFWL_ComboBox*>(m_pNormalWidget.get())->RemoveAll(); - } else { - static_cast<CFWL_ComboBox*>(m_pNormalWidget.get())->RemoveAt(nIndex); - } + if (nIndex < 0) + ToComboBox(m_pNormalWidget.get())->RemoveAll(); + else + ToComboBox(m_pNormalWidget.get())->RemoveAt(nIndex); + m_pNormalWidget->Update(); AddInvalidateRect(); } @@ -484,6 +500,7 @@ void CXFA_FFComboBox::OnTextChanged(CFWL_Widget* pWidget, eParam.m_wsChange = wsChanged; FWLEventSelChange(&eParam); } + void CXFA_FFComboBox::OnSelectChanged(CFWL_Widget* pWidget, bool bLButtonUp) { CXFA_EventParam eParam; m_pDataAcc->GetValue(eParam.m_wsPrevText, XFA_VALUEPICTURE_Raw); @@ -493,12 +510,14 @@ void CXFA_FFComboBox::OnSelectChanged(CFWL_Widget* pWidget, bool bLButtonUp) { m_pDocView->SetFocusWidgetAcc(nullptr); } } + void CXFA_FFComboBox::OnPreOpen(CFWL_Widget* pWidget) { CXFA_EventParam eParam; eParam.m_eType = XFA_EVENT_PreOpen; eParam.m_pTarget = m_pDataAcc; m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_PreOpen, &eParam); } + void CXFA_FFComboBox::OnPostOpen(CFWL_Widget* pWidget) { CXFA_EventParam eParam; eParam.m_eType = XFA_EVENT_PostOpen; |