1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2014 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 "fpdfsdk/formfiller/cffl_textfield.h"
8*3ac0a46fSAndroid Build Coastguard Worker
9*3ac0a46fSAndroid Build Coastguard Worker #include <utility>
10*3ac0a46fSAndroid Build Coastguard Worker
11*3ac0a46fSAndroid Build Coastguard Worker #include "constants/ascii.h"
12*3ac0a46fSAndroid Build Coastguard Worker #include "constants/form_flags.h"
13*3ac0a46fSAndroid Build Coastguard Worker #include "core/fpdfdoc/cpdf_bafontmap.h"
14*3ac0a46fSAndroid Build Coastguard Worker #include "fpdfsdk/cpdfsdk_widget.h"
15*3ac0a46fSAndroid Build Coastguard Worker #include "fpdfsdk/formfiller/cffl_perwindowdata.h"
16*3ac0a46fSAndroid Build Coastguard Worker #include "fpdfsdk/pwl/cpwl_edit.h"
17*3ac0a46fSAndroid Build Coastguard Worker #include "public/fpdf_fwlevent.h"
18*3ac0a46fSAndroid Build Coastguard Worker #include "third_party/base/check.h"
19*3ac0a46fSAndroid Build Coastguard Worker
20*3ac0a46fSAndroid Build Coastguard Worker namespace {
21*3ac0a46fSAndroid Build Coastguard Worker
22*3ac0a46fSAndroid Build Coastguard Worker // PDF 1.7 spec, Table 8.25
23*3ac0a46fSAndroid Build Coastguard Worker enum Alignment {
24*3ac0a46fSAndroid Build Coastguard Worker kLeft = 0,
25*3ac0a46fSAndroid Build Coastguard Worker kCenter = 1,
26*3ac0a46fSAndroid Build Coastguard Worker kRight = 2,
27*3ac0a46fSAndroid Build Coastguard Worker };
28*3ac0a46fSAndroid Build Coastguard Worker
29*3ac0a46fSAndroid Build Coastguard Worker } // namespace
30*3ac0a46fSAndroid Build Coastguard Worker
CFFL_TextField(CFFL_InteractiveFormFiller * pFormFiller,CPDFSDK_Widget * pWidget)31*3ac0a46fSAndroid Build Coastguard Worker CFFL_TextField::CFFL_TextField(CFFL_InteractiveFormFiller* pFormFiller,
32*3ac0a46fSAndroid Build Coastguard Worker CPDFSDK_Widget* pWidget)
33*3ac0a46fSAndroid Build Coastguard Worker : CFFL_TextObject(pFormFiller, pWidget) {}
34*3ac0a46fSAndroid Build Coastguard Worker
~CFFL_TextField()35*3ac0a46fSAndroid Build Coastguard Worker CFFL_TextField::~CFFL_TextField() {
36*3ac0a46fSAndroid Build Coastguard Worker // See comment in cffl_formfiller.h.
37*3ac0a46fSAndroid Build Coastguard Worker // The font map should be stored somewhere more appropriate so it will live
38*3ac0a46fSAndroid Build Coastguard Worker // until the PWL_Edit is done with it. pdfium:566
39*3ac0a46fSAndroid Build Coastguard Worker DestroyWindows();
40*3ac0a46fSAndroid Build Coastguard Worker }
41*3ac0a46fSAndroid Build Coastguard Worker
GetCreateParam()42*3ac0a46fSAndroid Build Coastguard Worker CPWL_Wnd::CreateParams CFFL_TextField::GetCreateParam() {
43*3ac0a46fSAndroid Build Coastguard Worker CPWL_Wnd::CreateParams cp = CFFL_TextObject::GetCreateParam();
44*3ac0a46fSAndroid Build Coastguard Worker int nFlags = m_pWidget->GetFieldFlags();
45*3ac0a46fSAndroid Build Coastguard Worker if (nFlags & pdfium::form_flags::kTextPassword)
46*3ac0a46fSAndroid Build Coastguard Worker cp.dwFlags |= PES_PASSWORD;
47*3ac0a46fSAndroid Build Coastguard Worker
48*3ac0a46fSAndroid Build Coastguard Worker if (nFlags & pdfium::form_flags::kTextMultiline) {
49*3ac0a46fSAndroid Build Coastguard Worker cp.dwFlags |= PES_MULTILINE | PES_AUTORETURN | PES_TOP;
50*3ac0a46fSAndroid Build Coastguard Worker if (!(nFlags & pdfium::form_flags::kTextDoNotScroll))
51*3ac0a46fSAndroid Build Coastguard Worker cp.dwFlags |= PWS_VSCROLL | PES_AUTOSCROLL;
52*3ac0a46fSAndroid Build Coastguard Worker } else {
53*3ac0a46fSAndroid Build Coastguard Worker cp.dwFlags |= PES_CENTER;
54*3ac0a46fSAndroid Build Coastguard Worker if (!(nFlags & pdfium::form_flags::kTextDoNotScroll))
55*3ac0a46fSAndroid Build Coastguard Worker cp.dwFlags |= PES_AUTOSCROLL;
56*3ac0a46fSAndroid Build Coastguard Worker }
57*3ac0a46fSAndroid Build Coastguard Worker
58*3ac0a46fSAndroid Build Coastguard Worker if (nFlags & pdfium::form_flags::kTextComb)
59*3ac0a46fSAndroid Build Coastguard Worker cp.dwFlags |= PES_CHARARRAY;
60*3ac0a46fSAndroid Build Coastguard Worker
61*3ac0a46fSAndroid Build Coastguard Worker if (nFlags & pdfium::form_flags::kTextRichText)
62*3ac0a46fSAndroid Build Coastguard Worker cp.dwFlags |= PES_RICH;
63*3ac0a46fSAndroid Build Coastguard Worker
64*3ac0a46fSAndroid Build Coastguard Worker cp.dwFlags |= PES_UNDO;
65*3ac0a46fSAndroid Build Coastguard Worker
66*3ac0a46fSAndroid Build Coastguard Worker switch (m_pWidget->GetAlignment()) {
67*3ac0a46fSAndroid Build Coastguard Worker default:
68*3ac0a46fSAndroid Build Coastguard Worker case kLeft:
69*3ac0a46fSAndroid Build Coastguard Worker cp.dwFlags |= PES_LEFT;
70*3ac0a46fSAndroid Build Coastguard Worker break;
71*3ac0a46fSAndroid Build Coastguard Worker case kCenter:
72*3ac0a46fSAndroid Build Coastguard Worker cp.dwFlags |= PES_MIDDLE;
73*3ac0a46fSAndroid Build Coastguard Worker break;
74*3ac0a46fSAndroid Build Coastguard Worker case kRight:
75*3ac0a46fSAndroid Build Coastguard Worker cp.dwFlags |= PES_RIGHT;
76*3ac0a46fSAndroid Build Coastguard Worker break;
77*3ac0a46fSAndroid Build Coastguard Worker }
78*3ac0a46fSAndroid Build Coastguard Worker cp.pFontMap = GetOrCreateFontMap();
79*3ac0a46fSAndroid Build Coastguard Worker return cp;
80*3ac0a46fSAndroid Build Coastguard Worker }
81*3ac0a46fSAndroid Build Coastguard Worker
NewPWLWindow(const CPWL_Wnd::CreateParams & cp,std::unique_ptr<IPWL_FillerNotify::PerWindowData> pAttachedData)82*3ac0a46fSAndroid Build Coastguard Worker std::unique_ptr<CPWL_Wnd> CFFL_TextField::NewPWLWindow(
83*3ac0a46fSAndroid Build Coastguard Worker const CPWL_Wnd::CreateParams& cp,
84*3ac0a46fSAndroid Build Coastguard Worker std::unique_ptr<IPWL_FillerNotify::PerWindowData> pAttachedData) {
85*3ac0a46fSAndroid Build Coastguard Worker static_cast<CFFL_PerWindowData*>(pAttachedData.get())->SetFormField(this);
86*3ac0a46fSAndroid Build Coastguard Worker auto pWnd = std::make_unique<CPWL_Edit>(cp, std::move(pAttachedData));
87*3ac0a46fSAndroid Build Coastguard Worker pWnd->Realize();
88*3ac0a46fSAndroid Build Coastguard Worker
89*3ac0a46fSAndroid Build Coastguard Worker int32_t nMaxLen = m_pWidget->GetMaxLen();
90*3ac0a46fSAndroid Build Coastguard Worker WideString swValue = m_pWidget->GetValue();
91*3ac0a46fSAndroid Build Coastguard Worker if (nMaxLen > 0) {
92*3ac0a46fSAndroid Build Coastguard Worker if (pWnd->HasFlag(PES_CHARARRAY)) {
93*3ac0a46fSAndroid Build Coastguard Worker pWnd->SetCharArray(nMaxLen);
94*3ac0a46fSAndroid Build Coastguard Worker pWnd->SetAlignFormatVerticalCenter();
95*3ac0a46fSAndroid Build Coastguard Worker } else {
96*3ac0a46fSAndroid Build Coastguard Worker pWnd->SetLimitChar(nMaxLen);
97*3ac0a46fSAndroid Build Coastguard Worker }
98*3ac0a46fSAndroid Build Coastguard Worker }
99*3ac0a46fSAndroid Build Coastguard Worker pWnd->SetText(swValue);
100*3ac0a46fSAndroid Build Coastguard Worker return std::move(pWnd);
101*3ac0a46fSAndroid Build Coastguard Worker }
102*3ac0a46fSAndroid Build Coastguard Worker
OnChar(CPDFSDK_Widget * pWidget,uint32_t nChar,Mask<FWL_EVENTFLAG> nFlags)103*3ac0a46fSAndroid Build Coastguard Worker bool CFFL_TextField::OnChar(CPDFSDK_Widget* pWidget,
104*3ac0a46fSAndroid Build Coastguard Worker uint32_t nChar,
105*3ac0a46fSAndroid Build Coastguard Worker Mask<FWL_EVENTFLAG> nFlags) {
106*3ac0a46fSAndroid Build Coastguard Worker switch (nChar) {
107*3ac0a46fSAndroid Build Coastguard Worker case pdfium::ascii::kReturn: {
108*3ac0a46fSAndroid Build Coastguard Worker if (m_pWidget->GetFieldFlags() & pdfium::form_flags::kTextMultiline)
109*3ac0a46fSAndroid Build Coastguard Worker break;
110*3ac0a46fSAndroid Build Coastguard Worker
111*3ac0a46fSAndroid Build Coastguard Worker CPDFSDK_PageView* pPageView = GetCurPageView();
112*3ac0a46fSAndroid Build Coastguard Worker DCHECK(pPageView);
113*3ac0a46fSAndroid Build Coastguard Worker m_bValid = !m_bValid;
114*3ac0a46fSAndroid Build Coastguard Worker m_pFormFiller->Invalidate(pWidget->GetPage(),
115*3ac0a46fSAndroid Build Coastguard Worker pWidget->GetRect().GetOuterRect());
116*3ac0a46fSAndroid Build Coastguard Worker if (m_bValid) {
117*3ac0a46fSAndroid Build Coastguard Worker if (CPWL_Wnd* pWnd = CreateOrUpdatePWLWindow(pPageView))
118*3ac0a46fSAndroid Build Coastguard Worker pWnd->SetFocus();
119*3ac0a46fSAndroid Build Coastguard Worker break;
120*3ac0a46fSAndroid Build Coastguard Worker }
121*3ac0a46fSAndroid Build Coastguard Worker
122*3ac0a46fSAndroid Build Coastguard Worker if (!CommitData(pPageView, nFlags))
123*3ac0a46fSAndroid Build Coastguard Worker return false;
124*3ac0a46fSAndroid Build Coastguard Worker
125*3ac0a46fSAndroid Build Coastguard Worker DestroyPWLWindow(pPageView);
126*3ac0a46fSAndroid Build Coastguard Worker return true;
127*3ac0a46fSAndroid Build Coastguard Worker }
128*3ac0a46fSAndroid Build Coastguard Worker case pdfium::ascii::kEscape: {
129*3ac0a46fSAndroid Build Coastguard Worker CPDFSDK_PageView* pPageView = GetCurPageView();
130*3ac0a46fSAndroid Build Coastguard Worker DCHECK(pPageView);
131*3ac0a46fSAndroid Build Coastguard Worker EscapeFiller(pPageView, true);
132*3ac0a46fSAndroid Build Coastguard Worker return true;
133*3ac0a46fSAndroid Build Coastguard Worker }
134*3ac0a46fSAndroid Build Coastguard Worker }
135*3ac0a46fSAndroid Build Coastguard Worker
136*3ac0a46fSAndroid Build Coastguard Worker return CFFL_TextObject::OnChar(pWidget, nChar, nFlags);
137*3ac0a46fSAndroid Build Coastguard Worker }
138*3ac0a46fSAndroid Build Coastguard Worker
IsDataChanged(const CPDFSDK_PageView * pPageView)139*3ac0a46fSAndroid Build Coastguard Worker bool CFFL_TextField::IsDataChanged(const CPDFSDK_PageView* pPageView) {
140*3ac0a46fSAndroid Build Coastguard Worker CPWL_Edit* pEdit = GetPWLEdit(pPageView);
141*3ac0a46fSAndroid Build Coastguard Worker return pEdit && pEdit->GetText() != m_pWidget->GetValue();
142*3ac0a46fSAndroid Build Coastguard Worker }
143*3ac0a46fSAndroid Build Coastguard Worker
SaveData(const CPDFSDK_PageView * pPageView)144*3ac0a46fSAndroid Build Coastguard Worker void CFFL_TextField::SaveData(const CPDFSDK_PageView* pPageView) {
145*3ac0a46fSAndroid Build Coastguard Worker ObservedPtr<CPWL_Edit> observed_edit(GetPWLEdit(pPageView));
146*3ac0a46fSAndroid Build Coastguard Worker if (!observed_edit) {
147*3ac0a46fSAndroid Build Coastguard Worker return;
148*3ac0a46fSAndroid Build Coastguard Worker }
149*3ac0a46fSAndroid Build Coastguard Worker WideString sOldValue = m_pWidget->GetValue();
150*3ac0a46fSAndroid Build Coastguard Worker if (!observed_edit) {
151*3ac0a46fSAndroid Build Coastguard Worker return;
152*3ac0a46fSAndroid Build Coastguard Worker }
153*3ac0a46fSAndroid Build Coastguard Worker WideString sNewValue = observed_edit->GetText();
154*3ac0a46fSAndroid Build Coastguard Worker ObservedPtr<CPDFSDK_Widget> observed_widget(m_pWidget);
155*3ac0a46fSAndroid Build Coastguard Worker ObservedPtr<CFFL_TextField> observed_this(this);
156*3ac0a46fSAndroid Build Coastguard Worker m_pWidget->SetValue(sNewValue);
157*3ac0a46fSAndroid Build Coastguard Worker if (!observed_widget) {
158*3ac0a46fSAndroid Build Coastguard Worker return;
159*3ac0a46fSAndroid Build Coastguard Worker }
160*3ac0a46fSAndroid Build Coastguard Worker m_pWidget->ResetFieldAppearance();
161*3ac0a46fSAndroid Build Coastguard Worker if (!observed_widget) {
162*3ac0a46fSAndroid Build Coastguard Worker return;
163*3ac0a46fSAndroid Build Coastguard Worker }
164*3ac0a46fSAndroid Build Coastguard Worker m_pWidget->UpdateField();
165*3ac0a46fSAndroid Build Coastguard Worker if (!observed_widget || !observed_this) {
166*3ac0a46fSAndroid Build Coastguard Worker return;
167*3ac0a46fSAndroid Build Coastguard Worker }
168*3ac0a46fSAndroid Build Coastguard Worker SetChangeMark();
169*3ac0a46fSAndroid Build Coastguard Worker }
170*3ac0a46fSAndroid Build Coastguard Worker
GetActionData(const CPDFSDK_PageView * pPageView,CPDF_AAction::AActionType type,CFFL_FieldAction & fa)171*3ac0a46fSAndroid Build Coastguard Worker void CFFL_TextField::GetActionData(const CPDFSDK_PageView* pPageView,
172*3ac0a46fSAndroid Build Coastguard Worker CPDF_AAction::AActionType type,
173*3ac0a46fSAndroid Build Coastguard Worker CFFL_FieldAction& fa) {
174*3ac0a46fSAndroid Build Coastguard Worker switch (type) {
175*3ac0a46fSAndroid Build Coastguard Worker case CPDF_AAction::kKeyStroke:
176*3ac0a46fSAndroid Build Coastguard Worker if (CPWL_Edit* pWnd = GetPWLEdit(pPageView)) {
177*3ac0a46fSAndroid Build Coastguard Worker fa.bFieldFull = pWnd->IsTextFull();
178*3ac0a46fSAndroid Build Coastguard Worker fa.sValue = pWnd->GetText();
179*3ac0a46fSAndroid Build Coastguard Worker if (fa.bFieldFull) {
180*3ac0a46fSAndroid Build Coastguard Worker fa.sChange.clear();
181*3ac0a46fSAndroid Build Coastguard Worker fa.sChangeEx.clear();
182*3ac0a46fSAndroid Build Coastguard Worker }
183*3ac0a46fSAndroid Build Coastguard Worker }
184*3ac0a46fSAndroid Build Coastguard Worker break;
185*3ac0a46fSAndroid Build Coastguard Worker case CPDF_AAction::kValidate:
186*3ac0a46fSAndroid Build Coastguard Worker if (CPWL_Edit* pWnd = GetPWLEdit(pPageView)) {
187*3ac0a46fSAndroid Build Coastguard Worker fa.sValue = pWnd->GetText();
188*3ac0a46fSAndroid Build Coastguard Worker }
189*3ac0a46fSAndroid Build Coastguard Worker break;
190*3ac0a46fSAndroid Build Coastguard Worker case CPDF_AAction::kLoseFocus:
191*3ac0a46fSAndroid Build Coastguard Worker case CPDF_AAction::kGetFocus:
192*3ac0a46fSAndroid Build Coastguard Worker fa.sValue = m_pWidget->GetValue();
193*3ac0a46fSAndroid Build Coastguard Worker break;
194*3ac0a46fSAndroid Build Coastguard Worker default:
195*3ac0a46fSAndroid Build Coastguard Worker break;
196*3ac0a46fSAndroid Build Coastguard Worker }
197*3ac0a46fSAndroid Build Coastguard Worker }
198*3ac0a46fSAndroid Build Coastguard Worker
SetActionData(const CPDFSDK_PageView * pPageView,CPDF_AAction::AActionType type,const CFFL_FieldAction & fa)199*3ac0a46fSAndroid Build Coastguard Worker void CFFL_TextField::SetActionData(const CPDFSDK_PageView* pPageView,
200*3ac0a46fSAndroid Build Coastguard Worker CPDF_AAction::AActionType type,
201*3ac0a46fSAndroid Build Coastguard Worker const CFFL_FieldAction& fa) {
202*3ac0a46fSAndroid Build Coastguard Worker switch (type) {
203*3ac0a46fSAndroid Build Coastguard Worker case CPDF_AAction::kKeyStroke:
204*3ac0a46fSAndroid Build Coastguard Worker if (CPWL_Edit* pEdit = GetPWLEdit(pPageView)) {
205*3ac0a46fSAndroid Build Coastguard Worker pEdit->SetFocus();
206*3ac0a46fSAndroid Build Coastguard Worker pEdit->SetSelection(fa.nSelStart, fa.nSelEnd);
207*3ac0a46fSAndroid Build Coastguard Worker pEdit->ReplaceSelection(fa.sChange);
208*3ac0a46fSAndroid Build Coastguard Worker }
209*3ac0a46fSAndroid Build Coastguard Worker break;
210*3ac0a46fSAndroid Build Coastguard Worker default:
211*3ac0a46fSAndroid Build Coastguard Worker break;
212*3ac0a46fSAndroid Build Coastguard Worker }
213*3ac0a46fSAndroid Build Coastguard Worker }
214*3ac0a46fSAndroid Build Coastguard Worker
SavePWLWindowState(const CPDFSDK_PageView * pPageView)215*3ac0a46fSAndroid Build Coastguard Worker void CFFL_TextField::SavePWLWindowState(const CPDFSDK_PageView* pPageView) {
216*3ac0a46fSAndroid Build Coastguard Worker CPWL_Edit* pWnd = GetPWLEdit(pPageView);
217*3ac0a46fSAndroid Build Coastguard Worker if (!pWnd)
218*3ac0a46fSAndroid Build Coastguard Worker return;
219*3ac0a46fSAndroid Build Coastguard Worker
220*3ac0a46fSAndroid Build Coastguard Worker std::tie(m_State.nStart, m_State.nEnd) = pWnd->GetSelection();
221*3ac0a46fSAndroid Build Coastguard Worker m_State.sValue = pWnd->GetText();
222*3ac0a46fSAndroid Build Coastguard Worker }
223*3ac0a46fSAndroid Build Coastguard Worker
RecreatePWLWindowFromSavedState(const CPDFSDK_PageView * pPageView)224*3ac0a46fSAndroid Build Coastguard Worker void CFFL_TextField::RecreatePWLWindowFromSavedState(
225*3ac0a46fSAndroid Build Coastguard Worker const CPDFSDK_PageView* pPageView) {
226*3ac0a46fSAndroid Build Coastguard Worker CPWL_Edit* pWnd = CreateOrUpdatePWLEdit(pPageView);
227*3ac0a46fSAndroid Build Coastguard Worker if (!pWnd)
228*3ac0a46fSAndroid Build Coastguard Worker return;
229*3ac0a46fSAndroid Build Coastguard Worker
230*3ac0a46fSAndroid Build Coastguard Worker pWnd->SetText(m_State.sValue);
231*3ac0a46fSAndroid Build Coastguard Worker pWnd->SetSelection(m_State.nStart, m_State.nEnd);
232*3ac0a46fSAndroid Build Coastguard Worker }
233*3ac0a46fSAndroid Build Coastguard Worker
234*3ac0a46fSAndroid Build Coastguard Worker #ifdef PDF_ENABLE_XFA
IsFieldFull(const CPDFSDK_PageView * pPageView)235*3ac0a46fSAndroid Build Coastguard Worker bool CFFL_TextField::IsFieldFull(const CPDFSDK_PageView* pPageView) {
236*3ac0a46fSAndroid Build Coastguard Worker CPWL_Edit* pWnd = GetPWLEdit(pPageView);
237*3ac0a46fSAndroid Build Coastguard Worker return pWnd && pWnd->IsTextFull();
238*3ac0a46fSAndroid Build Coastguard Worker }
239*3ac0a46fSAndroid Build Coastguard Worker #endif // PDF_ENABLE_XFA
240*3ac0a46fSAndroid Build Coastguard Worker
OnSetFocusForEdit(CPWL_Edit * pEdit)241*3ac0a46fSAndroid Build Coastguard Worker void CFFL_TextField::OnSetFocusForEdit(CPWL_Edit* pEdit) {
242*3ac0a46fSAndroid Build Coastguard Worker pEdit->SetCharSet(FX_Charset::kChineseSimplified);
243*3ac0a46fSAndroid Build Coastguard Worker pEdit->SetReadyToInput();
244*3ac0a46fSAndroid Build Coastguard Worker m_pFormFiller->OnSetFieldInputFocus(pEdit->GetText());
245*3ac0a46fSAndroid Build Coastguard Worker }
246*3ac0a46fSAndroid Build Coastguard Worker
GetPWLEdit(const CPDFSDK_PageView * pPageView) const247*3ac0a46fSAndroid Build Coastguard Worker CPWL_Edit* CFFL_TextField::GetPWLEdit(const CPDFSDK_PageView* pPageView) const {
248*3ac0a46fSAndroid Build Coastguard Worker return static_cast<CPWL_Edit*>(GetPWLWindow(pPageView));
249*3ac0a46fSAndroid Build Coastguard Worker }
250*3ac0a46fSAndroid Build Coastguard Worker
CreateOrUpdatePWLEdit(const CPDFSDK_PageView * pPageView)251*3ac0a46fSAndroid Build Coastguard Worker CPWL_Edit* CFFL_TextField::CreateOrUpdatePWLEdit(
252*3ac0a46fSAndroid Build Coastguard Worker const CPDFSDK_PageView* pPageView) {
253*3ac0a46fSAndroid Build Coastguard Worker return static_cast<CPWL_Edit*>(CreateOrUpdatePWLWindow(pPageView));
254*3ac0a46fSAndroid Build Coastguard Worker }
255