7#include "fpdfsdk/formfiller/cffl_textfield.h"
11#include "constants/ascii.h"
12#include "constants/form_flags.h"
13#include "core/fpdfdoc/cpdf_bafontmap.h"
14#include "fpdfsdk/cpdfsdk_widget.h"
15#include "fpdfsdk/formfiller/cffl_perwindowdata.h"
16#include "fpdfsdk/pwl/cpwl_edit.h"
17#include "public/fpdf_fwlevent.h"
18#include "third_party/base/check.h"
32 CPDFSDK_Widget* pWidget)
44 int nFlags = m_pWidget->GetFieldFlags();
66 switch (m_pWidget->GetAlignment()) {
84 std::unique_ptr<IPWL_FillerNotify::PerWindowData> pAttachedData) {
85 static_cast<CFFL_PerWindowData*>(pAttachedData.get())
->SetFormField(
this);
86 auto pWnd =
std::make_unique<CPWL_Edit>(cp,
std::move(pAttachedData));
89 int32_t nMaxLen = m_pWidget->GetMaxLen();
90 WideString swValue = m_pWidget->GetValue();
93 pWnd->SetCharArray(nMaxLen);
94 pWnd->SetAlignFormatVerticalCenter();
96 pWnd->SetLimitChar(nMaxLen);
99 pWnd->SetText(swValue);
100 return std::move(pWnd);
103bool CFFL_TextField::
OnChar(CPDFSDK_Widget* pWidget,
105 Mask<FWL_EVENTFLAG> nFlags) {
108 if (m_pWidget->GetFieldFlags() & pdfium::form_flags::kTextMultiline)
114 m_pFormFiller->Invalidate(pWidget->GetPage(),
115 pWidget->GetRect().GetOuterRect());
140 CPWL_Edit* pEdit = GetPWLEdit(pPageView);
141 return pEdit && pEdit->GetText() != m_pWidget->GetValue();
144void CFFL_TextField::
SaveData(
const CPDFSDK_PageView* pPageView) {
145 ObservedPtr<CPWL_Edit> observed_edit(GetPWLEdit(pPageView));
146 if (!observed_edit) {
149 WideString sOldValue = m_pWidget->GetValue();
150 if (!observed_edit) {
153 WideString sNewValue = observed_edit->GetText();
154 ObservedPtr<CPDFSDK_Widget> observed_widget(m_pWidget);
155 ObservedPtr<CFFL_TextField> observed_this(
this);
156 m_pWidget->SetValue(sNewValue);
157 if (!observed_widget) {
160 m_pWidget->ResetFieldAppearance();
161 if (!observed_widget) {
164 m_pWidget->UpdateField();
165 if (!observed_widget || !observed_this) {
176 if (CPWL_Edit* pWnd = GetPWLEdit(pPageView)) {
181 fa.sChangeEx.clear();
186 if (CPWL_Edit* pWnd = GetPWLEdit(pPageView)) {
190 case CPDF_AAction::kLoseFocus:
191 case CPDF_AAction::kGetFocus:
192 fa.sValue = m_pWidget->GetValue();
204 if (CPWL_Edit* pEdit = GetPWLEdit(pPageView)) {
216 CPWL_Edit* pWnd = GetPWLEdit(pPageView);
220 std::tie(m_State.nStart, m_State.nEnd) = pWnd->GetSelection();
221 m_State.sValue = pWnd->GetText();
225 const CPDFSDK_PageView* pPageView) {
226 CPWL_Edit* pWnd = CreateOrUpdatePWLEdit(pPageView);
230 pWnd->SetText(m_State.sValue);
231 pWnd->SetSelection(m_State.nStart, m_State.nEnd);
235bool CFFL_TextField::IsFieldFull(
const CPDFSDK_PageView* pPageView) {
236 CPWL_Edit* pWnd = GetPWLEdit(pPageView);
237 return pWnd && pWnd->IsTextFull();
244 m_pFormFiller->OnSetFieldInputFocus(pEdit->GetText());
247CPWL_Edit* CFFL_TextField::GetPWLEdit(
const CPDFSDK_PageView* pPageView)
const {
248 return static_cast<CPWL_Edit*>(
GetPWLWindow(pPageView));
251CPWL_Edit* CFFL_TextField::CreateOrUpdatePWLEdit(
252 const CPDFSDK_PageView* pPageView) {
void SetFormField(CFFL_FormField *pFormField)
bool OnChar(CPDFSDK_Widget *pWidget, uint32_t nChar, Mask< FWL_EVENTFLAG > nFlags) override
std::unique_ptr< CPWL_Wnd > NewPWLWindow(const CPWL_Wnd::CreateParams &cp, std::unique_ptr< IPWL_FillerNotify::PerWindowData > pAttachedData) override
void RecreatePWLWindowFromSavedState(const CPDFSDK_PageView *pPageView) override
CFFL_TextField(CFFL_InteractiveFormFiller *pFormFiller, CPDFSDK_Widget *pWidget)
~CFFL_TextField() override
void GetActionData(const CPDFSDK_PageView *pPageView, CPDF_AAction::AActionType type, CFFL_FieldAction &fa) override
void SavePWLWindowState(const CPDFSDK_PageView *pPageView) override
void OnSetFocusForEdit(CPWL_Edit *pEdit) override
bool IsDataChanged(const CPDFSDK_PageView *pPageView) override
void SetActionData(const CPDFSDK_PageView *pPageView, CPDF_AAction::AActionType type, const CFFL_FieldAction &fa) override
void SaveData(const CPDFSDK_PageView *pPageView) override
CPWL_Wnd::CreateParams GetCreateParam() override
CPDF_BAFontMap * GetOrCreateFontMap()
CFFL_TextObject(CFFL_InteractiveFormFiller *pFormFiller, CPDFSDK_Widget *pWidget)
WideString GetText() override
void SetCharSet(FX_Charset nCharSet)
void SetSelection(int32_t nStartChar, int32_t nEndChar)
void ReplaceSelection(const WideString &text) override
constexpr uint8_t kEscape
constexpr uint8_t kReturn