xref: /aosp_15_r20/external/pdfium/xfa/fxfa/cxfa_ffdatetimeedit.cpp (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2017 The PDFium Authors
2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file.
4*3ac0a46fSAndroid Build Coastguard Worker 
5*3ac0a46fSAndroid Build Coastguard Worker // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6*3ac0a46fSAndroid Build Coastguard Worker 
7*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/cxfa_ffdatetimeedit.h"
8*3ac0a46fSAndroid Build Coastguard Worker 
9*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/cfx_datetime.h"
10*3ac0a46fSAndroid Build Coastguard Worker #include "third_party/base/check.h"
11*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fwl/cfwl_datetimepicker.h"
12*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fwl/cfwl_eventselectchanged.h"
13*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fwl/cfwl_notedriver.h"
14*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fwl/cfwl_widget.h"
15*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/cxfa_eventparam.h"
16*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/cxfa_ffdoc.h"
17*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/cxfa_ffdocview.h"
18*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/parser/cxfa_localevalue.h"
19*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/parser/cxfa_para.h"
20*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/parser/cxfa_value.h"
21*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/parser/xfa_utils.h"
22*3ac0a46fSAndroid Build Coastguard Worker 
CXFA_FFDateTimeEdit(CXFA_Node * pNode)23*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFDateTimeEdit::CXFA_FFDateTimeEdit(CXFA_Node* pNode)
24*3ac0a46fSAndroid Build Coastguard Worker     : CXFA_FFTextEdit(pNode) {}
25*3ac0a46fSAndroid Build Coastguard Worker 
26*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFDateTimeEdit::~CXFA_FFDateTimeEdit() = default;
27*3ac0a46fSAndroid Build Coastguard Worker 
GetPickerWidget()28*3ac0a46fSAndroid Build Coastguard Worker CFWL_DateTimePicker* CXFA_FFDateTimeEdit::GetPickerWidget() {
29*3ac0a46fSAndroid Build Coastguard Worker   return static_cast<CFWL_DateTimePicker*>(GetNormalWidget());
30*3ac0a46fSAndroid Build Coastguard Worker }
31*3ac0a46fSAndroid Build Coastguard Worker 
GetBBox(FocusOption focus)32*3ac0a46fSAndroid Build Coastguard Worker CFX_RectF CXFA_FFDateTimeEdit::GetBBox(FocusOption focus) {
33*3ac0a46fSAndroid Build Coastguard Worker   if (focus == kDrawFocus)
34*3ac0a46fSAndroid Build Coastguard Worker     return CFX_RectF();
35*3ac0a46fSAndroid Build Coastguard Worker   return CXFA_FFWidget::GetBBox(kDoNotDrawFocus);
36*3ac0a46fSAndroid Build Coastguard Worker }
37*3ac0a46fSAndroid Build Coastguard Worker 
PtInActiveRect(const CFX_PointF & point)38*3ac0a46fSAndroid Build Coastguard Worker bool CXFA_FFDateTimeEdit::PtInActiveRect(const CFX_PointF& point) {
39*3ac0a46fSAndroid Build Coastguard Worker   CFWL_DateTimePicker* pPicker = GetPickerWidget();
40*3ac0a46fSAndroid Build Coastguard Worker   return pPicker && pPicker->GetBBox().Contains(point);
41*3ac0a46fSAndroid Build Coastguard Worker }
42*3ac0a46fSAndroid Build Coastguard Worker 
LoadWidget()43*3ac0a46fSAndroid Build Coastguard Worker bool CXFA_FFDateTimeEdit::LoadWidget() {
44*3ac0a46fSAndroid Build Coastguard Worker   DCHECK(!IsLoaded());
45*3ac0a46fSAndroid Build Coastguard Worker 
46*3ac0a46fSAndroid Build Coastguard Worker   CFWL_DateTimePicker* pWidget =
47*3ac0a46fSAndroid Build Coastguard Worker       cppgc::MakeGarbageCollected<CFWL_DateTimePicker>(
48*3ac0a46fSAndroid Build Coastguard Worker           GetFWLApp()->GetHeap()->GetAllocationHandle(), GetFWLApp());
49*3ac0a46fSAndroid Build Coastguard Worker   SetNormalWidget(pWidget);
50*3ac0a46fSAndroid Build Coastguard Worker   pWidget->SetAdapterIface(this);
51*3ac0a46fSAndroid Build Coastguard Worker 
52*3ac0a46fSAndroid Build Coastguard Worker   CFWL_NoteDriver* pNoteDriver = pWidget->GetFWLApp()->GetNoteDriver();
53*3ac0a46fSAndroid Build Coastguard Worker   pNoteDriver->RegisterEventTarget(pWidget, pWidget);
54*3ac0a46fSAndroid Build Coastguard Worker   m_pOldDelegate = pWidget->GetDelegate();
55*3ac0a46fSAndroid Build Coastguard Worker   pWidget->SetDelegate(this);
56*3ac0a46fSAndroid Build Coastguard Worker 
57*3ac0a46fSAndroid Build Coastguard Worker   {
58*3ac0a46fSAndroid Build Coastguard Worker     CFWL_Widget::ScopedUpdateLock update_lock(pWidget);
59*3ac0a46fSAndroid Build Coastguard Worker     WideString wsText = m_pNode->GetValue(XFA_ValuePicture::kDisplay);
60*3ac0a46fSAndroid Build Coastguard Worker     pWidget->SetEditText(wsText);
61*3ac0a46fSAndroid Build Coastguard Worker 
62*3ac0a46fSAndroid Build Coastguard Worker     CXFA_Value* value = m_pNode->GetFormValueIfExists();
63*3ac0a46fSAndroid Build Coastguard Worker     if (value) {
64*3ac0a46fSAndroid Build Coastguard Worker       switch (value->GetChildValueClassID()) {
65*3ac0a46fSAndroid Build Coastguard Worker         case XFA_Element::Date: {
66*3ac0a46fSAndroid Build Coastguard Worker           if (!wsText.IsEmpty()) {
67*3ac0a46fSAndroid Build Coastguard Worker             CXFA_LocaleValue lcValue = XFA_GetLocaleValue(m_pNode.Get());
68*3ac0a46fSAndroid Build Coastguard Worker             CFX_DateTime date = lcValue.GetDate();
69*3ac0a46fSAndroid Build Coastguard Worker             if (date.IsSet())
70*3ac0a46fSAndroid Build Coastguard Worker               pWidget->SetCurSel(date.GetYear(), date.GetMonth(),
71*3ac0a46fSAndroid Build Coastguard Worker                                  date.GetDay());
72*3ac0a46fSAndroid Build Coastguard Worker           }
73*3ac0a46fSAndroid Build Coastguard Worker         } break;
74*3ac0a46fSAndroid Build Coastguard Worker         default:
75*3ac0a46fSAndroid Build Coastguard Worker           break;
76*3ac0a46fSAndroid Build Coastguard Worker       }
77*3ac0a46fSAndroid Build Coastguard Worker     }
78*3ac0a46fSAndroid Build Coastguard Worker     UpdateWidgetProperty();
79*3ac0a46fSAndroid Build Coastguard Worker   }
80*3ac0a46fSAndroid Build Coastguard Worker 
81*3ac0a46fSAndroid Build Coastguard Worker   return CXFA_FFField::LoadWidget();
82*3ac0a46fSAndroid Build Coastguard Worker }
83*3ac0a46fSAndroid Build Coastguard Worker 
UpdateWidgetProperty()84*3ac0a46fSAndroid Build Coastguard Worker void CXFA_FFDateTimeEdit::UpdateWidgetProperty() {
85*3ac0a46fSAndroid Build Coastguard Worker   CFWL_DateTimePicker* pPicker = GetPickerWidget();
86*3ac0a46fSAndroid Build Coastguard Worker   if (!pPicker)
87*3ac0a46fSAndroid Build Coastguard Worker     return;
88*3ac0a46fSAndroid Build Coastguard Worker 
89*3ac0a46fSAndroid Build Coastguard Worker   uint32_t dwExtendedStyle = FWL_STYLEEXT_DTP_ShortDateFormat;
90*3ac0a46fSAndroid Build Coastguard Worker   dwExtendedStyle |= UpdateUIProperty();
91*3ac0a46fSAndroid Build Coastguard Worker   dwExtendedStyle |= GetAlignment();
92*3ac0a46fSAndroid Build Coastguard Worker   GetNormalWidget()->ModifyStyleExts(dwExtendedStyle, 0xFFFFFFFF);
93*3ac0a46fSAndroid Build Coastguard Worker 
94*3ac0a46fSAndroid Build Coastguard Worker   uint32_t dwEditStyles = 0;
95*3ac0a46fSAndroid Build Coastguard Worker   absl::optional<int32_t> numCells = m_pNode->GetNumberOfCells();
96*3ac0a46fSAndroid Build Coastguard Worker   if (numCells.has_value() && numCells.value() > 0) {
97*3ac0a46fSAndroid Build Coastguard Worker     dwEditStyles |= FWL_STYLEEXT_EDT_CombText;
98*3ac0a46fSAndroid Build Coastguard Worker     pPicker->SetEditLimit(numCells.value());
99*3ac0a46fSAndroid Build Coastguard Worker   }
100*3ac0a46fSAndroid Build Coastguard Worker   if (!m_pNode->IsOpenAccess() || !GetDoc()->GetXFADoc()->IsInteractive())
101*3ac0a46fSAndroid Build Coastguard Worker     dwEditStyles |= FWL_STYLEEXT_EDT_ReadOnly;
102*3ac0a46fSAndroid Build Coastguard Worker   if (!m_pNode->IsHorizontalScrollPolicyOff())
103*3ac0a46fSAndroid Build Coastguard Worker     dwEditStyles |= FWL_STYLEEXT_EDT_AutoHScroll;
104*3ac0a46fSAndroid Build Coastguard Worker 
105*3ac0a46fSAndroid Build Coastguard Worker   pPicker->ModifyEditStyleExts(dwEditStyles, 0xFFFFFFFF);
106*3ac0a46fSAndroid Build Coastguard Worker }
107*3ac0a46fSAndroid Build Coastguard Worker 
GetAlignment()108*3ac0a46fSAndroid Build Coastguard Worker uint32_t CXFA_FFDateTimeEdit::GetAlignment() {
109*3ac0a46fSAndroid Build Coastguard Worker   CXFA_Para* para = m_pNode->GetParaIfExists();
110*3ac0a46fSAndroid Build Coastguard Worker   if (!para)
111*3ac0a46fSAndroid Build Coastguard Worker     return 0;
112*3ac0a46fSAndroid Build Coastguard Worker 
113*3ac0a46fSAndroid Build Coastguard Worker   uint32_t dwExtendedStyle = 0;
114*3ac0a46fSAndroid Build Coastguard Worker   switch (para->GetHorizontalAlign()) {
115*3ac0a46fSAndroid Build Coastguard Worker     case XFA_AttributeValue::Center:
116*3ac0a46fSAndroid Build Coastguard Worker       dwExtendedStyle |= FWL_STYLEEXT_DTP_EditHCenter;
117*3ac0a46fSAndroid Build Coastguard Worker       break;
118*3ac0a46fSAndroid Build Coastguard Worker     case XFA_AttributeValue::Justify:
119*3ac0a46fSAndroid Build Coastguard Worker       dwExtendedStyle |= FWL_STYLEEXT_DTP_EditJustified;
120*3ac0a46fSAndroid Build Coastguard Worker       break;
121*3ac0a46fSAndroid Build Coastguard Worker     case XFA_AttributeValue::JustifyAll:
122*3ac0a46fSAndroid Build Coastguard Worker     case XFA_AttributeValue::Radix:
123*3ac0a46fSAndroid Build Coastguard Worker       break;
124*3ac0a46fSAndroid Build Coastguard Worker     case XFA_AttributeValue::Right:
125*3ac0a46fSAndroid Build Coastguard Worker       dwExtendedStyle |= FWL_STYLEEXT_DTP_EditHFar;
126*3ac0a46fSAndroid Build Coastguard Worker       break;
127*3ac0a46fSAndroid Build Coastguard Worker     default:
128*3ac0a46fSAndroid Build Coastguard Worker       dwExtendedStyle |= FWL_STYLEEXT_DTP_EditHNear;
129*3ac0a46fSAndroid Build Coastguard Worker       break;
130*3ac0a46fSAndroid Build Coastguard Worker   }
131*3ac0a46fSAndroid Build Coastguard Worker 
132*3ac0a46fSAndroid Build Coastguard Worker   switch (para->GetVerticalAlign()) {
133*3ac0a46fSAndroid Build Coastguard Worker     case XFA_AttributeValue::Middle:
134*3ac0a46fSAndroid Build Coastguard Worker       dwExtendedStyle |= FWL_STYLEEXT_DTP_EditVCenter;
135*3ac0a46fSAndroid Build Coastguard Worker       break;
136*3ac0a46fSAndroid Build Coastguard Worker     case XFA_AttributeValue::Bottom:
137*3ac0a46fSAndroid Build Coastguard Worker       dwExtendedStyle |= FWL_STYLEEXT_DTP_EditVFar;
138*3ac0a46fSAndroid Build Coastguard Worker       break;
139*3ac0a46fSAndroid Build Coastguard Worker     default:
140*3ac0a46fSAndroid Build Coastguard Worker       dwExtendedStyle |= FWL_STYLEEXT_DTP_EditVNear;
141*3ac0a46fSAndroid Build Coastguard Worker       break;
142*3ac0a46fSAndroid Build Coastguard Worker   }
143*3ac0a46fSAndroid Build Coastguard Worker   return dwExtendedStyle;
144*3ac0a46fSAndroid Build Coastguard Worker }
145*3ac0a46fSAndroid Build Coastguard Worker 
CommitData()146*3ac0a46fSAndroid Build Coastguard Worker bool CXFA_FFDateTimeEdit::CommitData() {
147*3ac0a46fSAndroid Build Coastguard Worker   CFWL_DateTimePicker* pPicker = GetPickerWidget();
148*3ac0a46fSAndroid Build Coastguard Worker   if (!m_pNode->SetValue(XFA_ValuePicture::kEdit, pPicker->GetEditText()))
149*3ac0a46fSAndroid Build Coastguard Worker     return false;
150*3ac0a46fSAndroid Build Coastguard Worker 
151*3ac0a46fSAndroid Build Coastguard Worker   GetDoc()->GetDocView()->UpdateUIDisplay(m_pNode.Get(), this);
152*3ac0a46fSAndroid Build Coastguard Worker   return true;
153*3ac0a46fSAndroid Build Coastguard Worker }
154*3ac0a46fSAndroid Build Coastguard Worker 
UpdateFWLData()155*3ac0a46fSAndroid Build Coastguard Worker bool CXFA_FFDateTimeEdit::UpdateFWLData() {
156*3ac0a46fSAndroid Build Coastguard Worker   if (!GetNormalWidget())
157*3ac0a46fSAndroid Build Coastguard Worker     return false;
158*3ac0a46fSAndroid Build Coastguard Worker 
159*3ac0a46fSAndroid Build Coastguard Worker   XFA_ValuePicture eType = XFA_ValuePicture::kDisplay;
160*3ac0a46fSAndroid Build Coastguard Worker   if (IsFocused())
161*3ac0a46fSAndroid Build Coastguard Worker     eType = XFA_ValuePicture::kEdit;
162*3ac0a46fSAndroid Build Coastguard Worker 
163*3ac0a46fSAndroid Build Coastguard Worker   WideString wsText = m_pNode->GetValue(eType);
164*3ac0a46fSAndroid Build Coastguard Worker   CFWL_DateTimePicker* pPicker = GetPickerWidget();
165*3ac0a46fSAndroid Build Coastguard Worker   pPicker->SetEditText(wsText);
166*3ac0a46fSAndroid Build Coastguard Worker   if (IsFocused() && !wsText.IsEmpty()) {
167*3ac0a46fSAndroid Build Coastguard Worker     CXFA_LocaleValue lcValue = XFA_GetLocaleValue(m_pNode.Get());
168*3ac0a46fSAndroid Build Coastguard Worker     CFX_DateTime date = lcValue.GetDate();
169*3ac0a46fSAndroid Build Coastguard Worker     if (lcValue.IsValid()) {
170*3ac0a46fSAndroid Build Coastguard Worker       if (date.IsSet())
171*3ac0a46fSAndroid Build Coastguard Worker         pPicker->SetCurSel(date.GetYear(), date.GetMonth(), date.GetDay());
172*3ac0a46fSAndroid Build Coastguard Worker     }
173*3ac0a46fSAndroid Build Coastguard Worker   }
174*3ac0a46fSAndroid Build Coastguard Worker   GetNormalWidget()->Update();
175*3ac0a46fSAndroid Build Coastguard Worker   return true;
176*3ac0a46fSAndroid Build Coastguard Worker }
177*3ac0a46fSAndroid Build Coastguard Worker 
IsDataChanged()178*3ac0a46fSAndroid Build Coastguard Worker bool CXFA_FFDateTimeEdit::IsDataChanged() {
179*3ac0a46fSAndroid Build Coastguard Worker   if (GetLayoutItem()->TestStatusBits(XFA_WidgetStatus::kTextEditValueChanged))
180*3ac0a46fSAndroid Build Coastguard Worker     return true;
181*3ac0a46fSAndroid Build Coastguard Worker 
182*3ac0a46fSAndroid Build Coastguard Worker   WideString wsText = GetPickerWidget()->GetEditText();
183*3ac0a46fSAndroid Build Coastguard Worker   return m_pNode->GetValue(XFA_ValuePicture::kEdit) != wsText;
184*3ac0a46fSAndroid Build Coastguard Worker }
185*3ac0a46fSAndroid Build Coastguard Worker 
OnSelectChanged(CFWL_Widget * pWidget,int32_t iYear,int32_t iMonth,int32_t iDay)186*3ac0a46fSAndroid Build Coastguard Worker void CXFA_FFDateTimeEdit::OnSelectChanged(CFWL_Widget* pWidget,
187*3ac0a46fSAndroid Build Coastguard Worker                                           int32_t iYear,
188*3ac0a46fSAndroid Build Coastguard Worker                                           int32_t iMonth,
189*3ac0a46fSAndroid Build Coastguard Worker                                           int32_t iDay) {
190*3ac0a46fSAndroid Build Coastguard Worker   WideString wsPicture = m_pNode->GetPictureContent(XFA_ValuePicture::kEdit);
191*3ac0a46fSAndroid Build Coastguard Worker   CXFA_LocaleValue date(CXFA_LocaleValue::ValueType::kDate,
192*3ac0a46fSAndroid Build Coastguard Worker                         GetDoc()->GetXFADoc()->GetLocaleMgr());
193*3ac0a46fSAndroid Build Coastguard Worker   date.SetDate(CFX_DateTime(iYear, iMonth, iDay, 0, 0, 0, 0));
194*3ac0a46fSAndroid Build Coastguard Worker 
195*3ac0a46fSAndroid Build Coastguard Worker   WideString wsDate;
196*3ac0a46fSAndroid Build Coastguard Worker   date.FormatPatterns(wsDate, wsPicture, m_pNode->GetLocale(),
197*3ac0a46fSAndroid Build Coastguard Worker                       XFA_ValuePicture::kEdit);
198*3ac0a46fSAndroid Build Coastguard Worker 
199*3ac0a46fSAndroid Build Coastguard Worker   CFWL_DateTimePicker* pPicker = GetPickerWidget();
200*3ac0a46fSAndroid Build Coastguard Worker   pPicker->SetEditText(wsDate);
201*3ac0a46fSAndroid Build Coastguard Worker   pPicker->Update();
202*3ac0a46fSAndroid Build Coastguard Worker   GetDoc()->SetFocusWidget(nullptr);
203*3ac0a46fSAndroid Build Coastguard Worker 
204*3ac0a46fSAndroid Build Coastguard Worker   CXFA_EventParam eParam;
205*3ac0a46fSAndroid Build Coastguard Worker   eParam.m_eType = XFA_EVENT_Change;
206*3ac0a46fSAndroid Build Coastguard Worker   eParam.m_wsPrevText = m_pNode->GetValue(XFA_ValuePicture::kRaw);
207*3ac0a46fSAndroid Build Coastguard Worker   m_pNode->ProcessEvent(GetDocView(), XFA_AttributeValue::Change, &eParam);
208*3ac0a46fSAndroid Build Coastguard Worker }
209*3ac0a46fSAndroid Build Coastguard Worker 
OnProcessEvent(CFWL_Event * pEvent)210*3ac0a46fSAndroid Build Coastguard Worker void CXFA_FFDateTimeEdit::OnProcessEvent(CFWL_Event* pEvent) {
211*3ac0a46fSAndroid Build Coastguard Worker   if (pEvent->GetType() == CFWL_Event::Type::SelectChanged) {
212*3ac0a46fSAndroid Build Coastguard Worker     auto* event = static_cast<CFWL_EventSelectChanged*>(pEvent);
213*3ac0a46fSAndroid Build Coastguard Worker     OnSelectChanged(GetNormalWidget(), event->GetYear(), event->GetMonth(),
214*3ac0a46fSAndroid Build Coastguard Worker                     event->GetDay());
215*3ac0a46fSAndroid Build Coastguard Worker     return;
216*3ac0a46fSAndroid Build Coastguard Worker   }
217*3ac0a46fSAndroid Build Coastguard Worker   CXFA_FFTextEdit::OnProcessEvent(pEvent);
218*3ac0a46fSAndroid Build Coastguard Worker }
219*3ac0a46fSAndroid Build Coastguard Worker 
CanUndo()220*3ac0a46fSAndroid Build Coastguard Worker bool CXFA_FFDateTimeEdit::CanUndo() {
221*3ac0a46fSAndroid Build Coastguard Worker   return GetPickerWidget()->CanUndo();
222*3ac0a46fSAndroid Build Coastguard Worker }
223*3ac0a46fSAndroid Build Coastguard Worker 
CanRedo()224*3ac0a46fSAndroid Build Coastguard Worker bool CXFA_FFDateTimeEdit::CanRedo() {
225*3ac0a46fSAndroid Build Coastguard Worker   return GetPickerWidget()->CanRedo();
226*3ac0a46fSAndroid Build Coastguard Worker }
227*3ac0a46fSAndroid Build Coastguard Worker 
CanCopy()228*3ac0a46fSAndroid Build Coastguard Worker bool CXFA_FFDateTimeEdit::CanCopy() {
229*3ac0a46fSAndroid Build Coastguard Worker   return GetPickerWidget()->HasSelection();
230*3ac0a46fSAndroid Build Coastguard Worker }
231*3ac0a46fSAndroid Build Coastguard Worker 
CanCut()232*3ac0a46fSAndroid Build Coastguard Worker bool CXFA_FFDateTimeEdit::CanCut() {
233*3ac0a46fSAndroid Build Coastguard Worker   if (GetPickerWidget()->GetStyleExts() & FWL_STYLEEXT_EDT_ReadOnly)
234*3ac0a46fSAndroid Build Coastguard Worker     return false;
235*3ac0a46fSAndroid Build Coastguard Worker   return GetPickerWidget()->HasSelection();
236*3ac0a46fSAndroid Build Coastguard Worker }
237*3ac0a46fSAndroid Build Coastguard Worker 
CanPaste()238*3ac0a46fSAndroid Build Coastguard Worker bool CXFA_FFDateTimeEdit::CanPaste() {
239*3ac0a46fSAndroid Build Coastguard Worker   return !(GetPickerWidget()->GetStyleExts() & FWL_STYLEEXT_EDT_ReadOnly);
240*3ac0a46fSAndroid Build Coastguard Worker }
241*3ac0a46fSAndroid Build Coastguard Worker 
CanSelectAll()242*3ac0a46fSAndroid Build Coastguard Worker bool CXFA_FFDateTimeEdit::CanSelectAll() {
243*3ac0a46fSAndroid Build Coastguard Worker   return GetPickerWidget()->GetEditTextLength() > 0;
244*3ac0a46fSAndroid Build Coastguard Worker }
245*3ac0a46fSAndroid Build Coastguard Worker 
Copy()246*3ac0a46fSAndroid Build Coastguard Worker absl::optional<WideString> CXFA_FFDateTimeEdit::Copy() {
247*3ac0a46fSAndroid Build Coastguard Worker   return GetPickerWidget()->Copy();
248*3ac0a46fSAndroid Build Coastguard Worker }
249*3ac0a46fSAndroid Build Coastguard Worker 
Undo()250*3ac0a46fSAndroid Build Coastguard Worker bool CXFA_FFDateTimeEdit::Undo() {
251*3ac0a46fSAndroid Build Coastguard Worker   return GetPickerWidget()->Undo();
252*3ac0a46fSAndroid Build Coastguard Worker }
253*3ac0a46fSAndroid Build Coastguard Worker 
Redo()254*3ac0a46fSAndroid Build Coastguard Worker bool CXFA_FFDateTimeEdit::Redo() {
255*3ac0a46fSAndroid Build Coastguard Worker   return GetPickerWidget()->Redo();
256*3ac0a46fSAndroid Build Coastguard Worker }
257*3ac0a46fSAndroid Build Coastguard Worker 
Cut()258*3ac0a46fSAndroid Build Coastguard Worker absl::optional<WideString> CXFA_FFDateTimeEdit::Cut() {
259*3ac0a46fSAndroid Build Coastguard Worker   return GetPickerWidget()->Cut();
260*3ac0a46fSAndroid Build Coastguard Worker }
261*3ac0a46fSAndroid Build Coastguard Worker 
Paste(const WideString & wsPaste)262*3ac0a46fSAndroid Build Coastguard Worker bool CXFA_FFDateTimeEdit::Paste(const WideString& wsPaste) {
263*3ac0a46fSAndroid Build Coastguard Worker   return GetPickerWidget()->Paste(wsPaste);
264*3ac0a46fSAndroid Build Coastguard Worker }
265*3ac0a46fSAndroid Build Coastguard Worker 
SelectAll()266*3ac0a46fSAndroid Build Coastguard Worker void CXFA_FFDateTimeEdit::SelectAll() {
267*3ac0a46fSAndroid Build Coastguard Worker   GetPickerWidget()->SelectAll();
268*3ac0a46fSAndroid Build Coastguard Worker }
269*3ac0a46fSAndroid Build Coastguard Worker 
Delete()270*3ac0a46fSAndroid Build Coastguard Worker void CXFA_FFDateTimeEdit::Delete() {
271*3ac0a46fSAndroid Build Coastguard Worker   GetPickerWidget()->ClearText();
272*3ac0a46fSAndroid Build Coastguard Worker }
273*3ac0a46fSAndroid Build Coastguard Worker 
DeSelect()274*3ac0a46fSAndroid Build Coastguard Worker void CXFA_FFDateTimeEdit::DeSelect() {
275*3ac0a46fSAndroid Build Coastguard Worker   GetPickerWidget()->ClearSelection();
276*3ac0a46fSAndroid Build Coastguard Worker }
277*3ac0a46fSAndroid Build Coastguard Worker 
GetText()278*3ac0a46fSAndroid Build Coastguard Worker WideString CXFA_FFDateTimeEdit::GetText() {
279*3ac0a46fSAndroid Build Coastguard Worker   return GetPickerWidget()->GetEditText();
280*3ac0a46fSAndroid Build Coastguard Worker }
281