bool CFFL_CheckBox::OnChar(CPDFSDK_Annot* pAnnot, uint32_t nChar, uint32_t nFlags) { switch (nChar) { case FWL_VKEY_Return: case FWL_VKEY_Space: { CPDFSDK_PageView* pPageView = pAnnot->GetPageView(); ASSERT(pPageView); CPDFSDK_Annot::ObservedPtr pObserved(m_pWidget.Get()); if (m_pFormFillEnv->GetInteractiveFormFiller()->OnButtonUp( &pObserved, pPageView, nFlags)) { if (!pObserved) m_pWidget = nullptr; return true; } if (!pObserved) { m_pWidget = nullptr; return true; } CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags); CPWL_CheckBox* pWnd = GetCheckBox(pPageView, true); if (pWnd) { CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot); pWnd->SetCheck(!pWidget->IsChecked()); } return CommitData(pPageView, nFlags); } default: return CFFL_FormFiller::OnChar(pAnnot, nChar, nFlags); } }
bool CFFL_InteractiveFormFiller::OnPopupPostOpen( const CPWL_Wnd::PrivateData* pAttached, uint32_t nFlag) { auto* pData = static_cast<const CFFL_PrivateData*>(pAttached); ASSERT(pData->pWidget); CPDFSDK_Annot::ObservedPtr pObserved(pData->pWidget); return OnPostOpen(&pObserved, pData->pPageView, nFlag) || !pObserved; }
void FormFillerAndWindowSetup(CPDFSDK_Annot* pAnnotTextField) { CFFL_InteractiveFormFiller* pInteractiveFormFiller = m_pFormFillEnv->GetInteractiveFormFiller(); { CPDFSDK_Annot::ObservedPtr pObserved(pAnnotTextField); EXPECT_TRUE(pInteractiveFormFiller->OnSetFocus(&pObserved, 0)); } m_pFormFiller = pInteractiveFormFiller->GetFormFiller(pAnnotTextField, false); ASSERT_TRUE(m_pFormFiller); CPWL_Wnd* pWindow = m_pFormFiller->GetPDFWindow(m_pFormFillEnv->GetPageView(0), false); ASSERT_TRUE(pWindow); m_pEdit = static_cast<CPWL_Edit*>(pWindow); }
std::pair<bool, bool> CFFL_InteractiveFormFiller::OnBeforeKeyStroke( const CPWL_Wnd::PrivateData* pAttached, WideString& strChange, const WideString& strChangeEx, int nSelStart, int nSelEnd, bool bKeyDown, uint32_t nFlag) { // Copy the private data since the window owning it may not survive. CFFL_PrivateData privateData = *static_cast<const CFFL_PrivateData*>(pAttached); ASSERT(privateData.pWidget); CFFL_FormFiller* pFormFiller = GetFormFiller(privateData.pWidget, false); #ifdef PDF_ENABLE_XFA if (pFormFiller->IsFieldFull(privateData.pPageView)) { CPDFSDK_Annot::ObservedPtr pObserved(privateData.pWidget); if (OnFull(&pObserved, privateData.pPageView, nFlag) || !pObserved) return {true, true}; } #endif // PDF_ENABLE_XFA if (m_bNotifying || !privateData.pWidget->GetAAction(CPDF_AAction::kKeyStroke).GetDict()) { return {true, false}; } AutoRestorer<bool> restorer(&m_bNotifying); m_bNotifying = true; uint32_t nAge = privateData.pWidget->GetAppearanceAge(); uint32_t nValueAge = privateData.pWidget->GetValueAge(); CPDFSDK_FormFillEnvironment* pFormFillEnv = privateData.pPageView->GetFormFillEnv(); CPDFSDK_FieldAction fa; fa.bModifier = CPDFSDK_FormFillEnvironment::IsCTRLKeyDown(nFlag); fa.bShift = CPDFSDK_FormFillEnvironment::IsSHIFTKeyDown(nFlag); fa.sChange = strChange; fa.sChangeEx = strChangeEx; fa.bKeyDown = bKeyDown; fa.bWillCommit = false; fa.bRC = true; fa.nSelStart = nSelStart; fa.nSelEnd = nSelEnd; pFormFiller->GetActionData(privateData.pPageView, CPDF_AAction::kKeyStroke, fa); pFormFiller->SaveState(privateData.pPageView); CPDFSDK_Annot::ObservedPtr pObserved(privateData.pWidget); bool action_status = privateData.pWidget->OnAAction( CPDF_AAction::kKeyStroke, &fa, privateData.pPageView); if (!pObserved || !IsValidAnnot(privateData.pPageView, privateData.pWidget)) return {true, true}; if (!action_status) return {true, false}; bool bExit = false; if (nAge != privateData.pWidget->GetAppearanceAge()) { CPWL_Wnd* pWnd = pFormFiller->ResetPDFWindow( privateData.pPageView, nValueAge == privateData.pWidget->GetValueAge()); if (!pWnd) return {true, true}; privateData = *static_cast<const CFFL_PrivateData*>(pWnd->GetAttachedData()); bExit = true; } if (fa.bRC) { pFormFiller->SetActionData(privateData.pPageView, CPDF_AAction::kKeyStroke, fa); } else { pFormFiller->RestoreState(privateData.pPageView); } if (pFormFillEnv->GetFocusAnnot() == privateData.pWidget) return {false, bExit}; pFormFiller->CommitData(privateData.pPageView, nFlag); return {false, true}; }