CPWL_Wnd* CFFL_ListBox::NewPDFWindow(const PWL_CREATEPARAM& cp, CPDFSDK_PageView* pPageView) { CPWL_ListBox* pWnd = new CPWL_ListBox(); pWnd->AttachFFLData(this); pWnd->Create(cp); ASSERT(m_pApp != NULL); CFFL_IFormFiller* pIFormFiller = m_pApp->GetIFormFiller(); pWnd->SetFillerNotify(pIFormFiller); for (int32_t i=0,sz=m_pWidget->CountOptions(); i<sz; i++) pWnd->AddString(m_pWidget->GetOptionLabel(i).c_str()); if (pWnd->HasFlag(PLBS_MULTIPLESEL)) { m_OriginSelections.clear(); FX_BOOL bSetCaret = FALSE; for (int32_t i=0,sz=m_pWidget->CountOptions(); i<sz; i++) { if (m_pWidget->IsOptionSelected(i)) { if (!bSetCaret) { pWnd->SetCaret(i); bSetCaret = TRUE; } pWnd->Select(i); m_OriginSelections.insert(i); } } } else { for (int i=0,sz=m_pWidget->CountOptions(); i<sz; i++) { if (m_pWidget->IsOptionSelected(i)) { pWnd->Select(i); break; } } } pWnd->SetTopVisibleIndex(m_pWidget->GetTopVisibleIndex()); return pWnd; }
FX_BOOL CFFL_ListBox::IsDataChanged(CPDFSDK_PageView* pPageView) { CPWL_ListBox* pListBox = (CPWL_ListBox*)GetPDFWindow(pPageView, FALSE); if (!pListBox) return FALSE; if (m_pWidget->GetFieldFlags() & FIELDFLAG_MULTISELECT) { size_t nSelCount = 0; for (int32_t i = 0, sz = pListBox->GetCount(); i < sz; ++i) { if (pListBox->IsItemSelected(i)) { if (m_OriginSelections.count(i) == 0) return TRUE; ++nSelCount; } } return nSelCount != m_OriginSelections.size(); } return pListBox->GetCurSel() != m_pWidget->GetSelectedIndex(0); }
void CFFL_ListBox::SaveData(CPDFSDK_PageView* pPageView) { CPWL_ListBox* pListBox = static_cast<CPWL_ListBox*>(GetPDFWindow(pPageView, FALSE)); if (!pListBox) return; int32_t nNewTopIndex = pListBox->GetTopVisibleIndex(); m_pWidget->ClearSelection(FALSE); if (m_pWidget->GetFieldFlags() & FIELDFLAG_MULTISELECT) { for (int32_t i = 0, sz = pListBox->GetCount(); i < sz; i++) { if (pListBox->IsItemSelected(i)) m_pWidget->SetOptionSelection(i, TRUE, FALSE); } } else { m_pWidget->SetOptionSelection(pListBox->GetCurSel(), TRUE, FALSE); } m_pWidget->SetTopVisibleIndex(nNewTopIndex); m_pWidget->ResetFieldAppearance(TRUE); m_pWidget->UpdateField(); SetChangeMark(); }