void CXFA_FFTextEdit::OnTextChanged(IFWL_Widget* pWidget, const CFX_WideString& wsChanged, const CFX_WideString& wsPrevText) { m_dwStatus |= XFA_WidgetStatus_TextEditValueChanged; CXFA_EventParam eParam; eParam.m_eType = XFA_EVENT_Change; eParam.m_wsChange = wsChanged; eParam.m_pTarget = m_pDataAcc; eParam.m_wsPrevText = wsPrevText; CFWL_Edit* pEdit = ((CFWL_Edit*)m_pNormalWidget); if (m_pDataAcc->GetUIType() == XFA_Element::DateTimeEdit) { CFWL_DateTimePicker* pDateTime = (CFWL_DateTimePicker*)pEdit; pDateTime->GetEditText(eParam.m_wsNewText); int32_t iSels = pDateTime->CountSelRanges(); if (iSels) { eParam.m_iSelEnd = pDateTime->GetSelRange(0, eParam.m_iSelStart); } } else { pEdit->GetText(eParam.m_wsNewText); int32_t iSels = pEdit->CountSelRanges(); if (iSels) { eParam.m_iSelEnd = pEdit->GetSelRange(0, eParam.m_iSelStart); } } m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Change, &eParam); }
bool CXFA_FFTextEdit::UpdateFWLData() { if (!m_pNormalWidget) return false; CFWL_Edit* pEdit = ToEdit(m_pNormalWidget.get()); XFA_VALUEPICTURE eType = XFA_VALUEPICTURE_Display; if (IsFocused()) eType = XFA_VALUEPICTURE_Edit; bool bUpdate = false; if (m_pNode->GetFFWidgetType() == XFA_FFWidgetType::kTextEdit && !m_pNode->GetNumberOfCells()) { XFA_Element elementType; int32_t iMaxChars; std::tie(elementType, iMaxChars) = m_pNode->GetMaxChars(); if (elementType == XFA_Element::ExData) iMaxChars = eType == XFA_VALUEPICTURE_Edit ? iMaxChars : 0; if (pEdit->GetLimit() != iMaxChars) { pEdit->SetLimit(iMaxChars); bUpdate = true; } } else if (m_pNode->GetFFWidgetType() == XFA_FFWidgetType::kBarcode) { int32_t nDataLen = 0; if (eType == XFA_VALUEPICTURE_Edit) { nDataLen = static_cast<CXFA_Barcode*>(m_pNode.Get()) ->GetDataLength() .value_or(0); } pEdit->SetLimit(nDataLen); bUpdate = true; } WideString wsText = m_pNode->GetValue(eType); WideString wsOldText = pEdit->GetText(); if (wsText != wsOldText || (eType == XFA_VALUEPICTURE_Edit && bUpdate)) { pEdit->SetText(wsText, CFDE_TextEditEngine::RecordOperation::kSkipNotify); bUpdate = true; } if (bUpdate) m_pNormalWidget->Update(); return true; }