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_ffpasswordedit.h" 8*3ac0a46fSAndroid Build Coastguard Worker 9*3ac0a46fSAndroid Build Coastguard Worker #include "third_party/base/check.h" 10*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fwl/cfwl_edit.h" 11*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fwl/cfwl_notedriver.h" 12*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/cxfa_ffdoc.h" 13*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/parser/cxfa_node.h" 14*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/parser/cxfa_passwordedit.h" 15*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFPasswordEdit(CXFA_Node * pNode,CXFA_PasswordEdit * password_node)16*3ac0a46fSAndroid Build Coastguard WorkerCXFA_FFPasswordEdit::CXFA_FFPasswordEdit(CXFA_Node* pNode, 17*3ac0a46fSAndroid Build Coastguard Worker CXFA_PasswordEdit* password_node) 18*3ac0a46fSAndroid Build Coastguard Worker : CXFA_FFTextEdit(pNode), password_node_(password_node) {} 19*3ac0a46fSAndroid Build Coastguard Worker 20*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFPasswordEdit::~CXFA_FFPasswordEdit() = default; 21*3ac0a46fSAndroid Build Coastguard Worker Trace(cppgc::Visitor * visitor) const22*3ac0a46fSAndroid Build Coastguard Workervoid CXFA_FFPasswordEdit::Trace(cppgc::Visitor* visitor) const { 23*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFTextEdit::Trace(visitor); 24*3ac0a46fSAndroid Build Coastguard Worker visitor->Trace(password_node_); 25*3ac0a46fSAndroid Build Coastguard Worker } 26*3ac0a46fSAndroid Build Coastguard Worker LoadWidget()27*3ac0a46fSAndroid Build Coastguard Workerbool CXFA_FFPasswordEdit::LoadWidget() { 28*3ac0a46fSAndroid Build Coastguard Worker DCHECK(!IsLoaded()); 29*3ac0a46fSAndroid Build Coastguard Worker 30*3ac0a46fSAndroid Build Coastguard Worker CFWL_Edit* pWidget = cppgc::MakeGarbageCollected<CFWL_Edit>( 31*3ac0a46fSAndroid Build Coastguard Worker GetFWLApp()->GetHeap()->GetAllocationHandle(), GetFWLApp(), 32*3ac0a46fSAndroid Build Coastguard Worker CFWL_Widget::Properties(), nullptr); 33*3ac0a46fSAndroid Build Coastguard Worker SetNormalWidget(pWidget); 34*3ac0a46fSAndroid Build Coastguard Worker pWidget->SetAdapterIface(this); 35*3ac0a46fSAndroid Build Coastguard Worker 36*3ac0a46fSAndroid Build Coastguard Worker CFWL_NoteDriver* pNoteDriver = pWidget->GetFWLApp()->GetNoteDriver(); 37*3ac0a46fSAndroid Build Coastguard Worker pNoteDriver->RegisterEventTarget(pWidget, pWidget); 38*3ac0a46fSAndroid Build Coastguard Worker m_pOldDelegate = pWidget->GetDelegate(); 39*3ac0a46fSAndroid Build Coastguard Worker pWidget->SetDelegate(this); 40*3ac0a46fSAndroid Build Coastguard Worker 41*3ac0a46fSAndroid Build Coastguard Worker { 42*3ac0a46fSAndroid Build Coastguard Worker CFWL_Widget::ScopedUpdateLock update_lock(pWidget); 43*3ac0a46fSAndroid Build Coastguard Worker pWidget->SetText(m_pNode->GetValue(XFA_ValuePicture::kDisplay)); 44*3ac0a46fSAndroid Build Coastguard Worker UpdateWidgetProperty(); 45*3ac0a46fSAndroid Build Coastguard Worker } 46*3ac0a46fSAndroid Build Coastguard Worker 47*3ac0a46fSAndroid Build Coastguard Worker return CXFA_FFField::LoadWidget(); 48*3ac0a46fSAndroid Build Coastguard Worker } 49*3ac0a46fSAndroid Build Coastguard Worker UpdateWidgetProperty()50*3ac0a46fSAndroid Build Coastguard Workervoid CXFA_FFPasswordEdit::UpdateWidgetProperty() { 51*3ac0a46fSAndroid Build Coastguard Worker CFWL_Edit* pWidget = static_cast<CFWL_Edit*>(GetNormalWidget()); 52*3ac0a46fSAndroid Build Coastguard Worker if (!pWidget) 53*3ac0a46fSAndroid Build Coastguard Worker return; 54*3ac0a46fSAndroid Build Coastguard Worker 55*3ac0a46fSAndroid Build Coastguard Worker uint32_t dwExtendedStyle = FWL_STYLEEXT_EDT_ShowScrollbarFocus | 56*3ac0a46fSAndroid Build Coastguard Worker FWL_STYLEEXT_EDT_OuterScrollbar | 57*3ac0a46fSAndroid Build Coastguard Worker FWL_STYLEEXT_EDT_Password; 58*3ac0a46fSAndroid Build Coastguard Worker dwExtendedStyle |= UpdateUIProperty(); 59*3ac0a46fSAndroid Build Coastguard Worker 60*3ac0a46fSAndroid Build Coastguard Worker WideString password = password_node_->GetPasswordChar(); 61*3ac0a46fSAndroid Build Coastguard Worker if (!password.IsEmpty()) 62*3ac0a46fSAndroid Build Coastguard Worker pWidget->SetAliasChar(password[0]); 63*3ac0a46fSAndroid Build Coastguard Worker if (!m_pNode->IsHorizontalScrollPolicyOff()) 64*3ac0a46fSAndroid Build Coastguard Worker dwExtendedStyle |= FWL_STYLEEXT_EDT_AutoHScroll; 65*3ac0a46fSAndroid Build Coastguard Worker if (!m_pNode->IsOpenAccess() || !GetDoc()->GetXFADoc()->IsInteractive()) 66*3ac0a46fSAndroid Build Coastguard Worker dwExtendedStyle |= FWL_STYLEEXT_EDT_ReadOnly; 67*3ac0a46fSAndroid Build Coastguard Worker 68*3ac0a46fSAndroid Build Coastguard Worker dwExtendedStyle |= GetAlignment(); 69*3ac0a46fSAndroid Build Coastguard Worker GetNormalWidget()->ModifyStyleExts(dwExtendedStyle, 0xFFFFFFFF); 70*3ac0a46fSAndroid Build Coastguard Worker } 71