1 // Copyright 2017 PDFium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #include "xfa/fxfa/cxfa_ffpasswordedit.h" 8 9 #include "third_party/base/check.h" 10 #include "xfa/fwl/cfwl_edit.h" 11 #include "xfa/fwl/cfwl_notedriver.h" 12 #include "xfa/fxfa/cxfa_ffdoc.h" 13 #include "xfa/fxfa/parser/cxfa_node.h" 14 #include "xfa/fxfa/parser/cxfa_passwordedit.h" 15 CXFA_FFPasswordEdit(CXFA_Node * pNode,CXFA_PasswordEdit * password_node)16CXFA_FFPasswordEdit::CXFA_FFPasswordEdit(CXFA_Node* pNode, 17 CXFA_PasswordEdit* password_node) 18 : CXFA_FFTextEdit(pNode), password_node_(password_node) {} 19 20 CXFA_FFPasswordEdit::~CXFA_FFPasswordEdit() = default; 21 Trace(cppgc::Visitor * visitor) const22void CXFA_FFPasswordEdit::Trace(cppgc::Visitor* visitor) const { 23 CXFA_FFTextEdit::Trace(visitor); 24 visitor->Trace(password_node_); 25 } 26 LoadWidget()27bool CXFA_FFPasswordEdit::LoadWidget() { 28 DCHECK(!IsLoaded()); 29 30 CFWL_Edit* pWidget = cppgc::MakeGarbageCollected<CFWL_Edit>( 31 GetFWLApp()->GetHeap()->GetAllocationHandle(), GetFWLApp(), 32 CFWL_Widget::Properties(), nullptr); 33 SetNormalWidget(pWidget); 34 pWidget->SetAdapterIface(this); 35 36 CFWL_NoteDriver* pNoteDriver = pWidget->GetFWLApp()->GetNoteDriver(); 37 pNoteDriver->RegisterEventTarget(pWidget, pWidget); 38 m_pOldDelegate = pWidget->GetDelegate(); 39 pWidget->SetDelegate(this); 40 41 { 42 CFWL_Widget::ScopedUpdateLock update_lock(pWidget); 43 pWidget->SetText(m_pNode->GetValue(XFA_VALUEPICTURE_Display)); 44 UpdateWidgetProperty(); 45 } 46 47 return CXFA_FFField::LoadWidget(); 48 } 49 UpdateWidgetProperty()50void CXFA_FFPasswordEdit::UpdateWidgetProperty() { 51 CFWL_Edit* pWidget = static_cast<CFWL_Edit*>(GetNormalWidget()); 52 if (!pWidget) 53 return; 54 55 uint32_t dwExtendedStyle = FWL_STYLEEXT_EDT_ShowScrollbarFocus | 56 FWL_STYLEEXT_EDT_OuterScrollbar | 57 FWL_STYLEEXT_EDT_Password; 58 dwExtendedStyle |= UpdateUIProperty(); 59 60 WideString password = password_node_->GetPasswordChar(); 61 if (!password.IsEmpty()) 62 pWidget->SetAliasChar(password[0]); 63 if (!m_pNode->IsHorizontalScrollPolicyOff()) 64 dwExtendedStyle |= FWL_STYLEEXT_EDT_AutoHScroll; 65 if (!m_pNode->IsOpenAccess() || !GetDoc()->GetXFADoc()->IsInteractive()) 66 dwExtendedStyle |= FWL_STYLEEXT_EDT_ReadOnly; 67 68 dwExtendedStyle |= GetAlignment(); 69 GetNormalWidget()->ModifyStylesEx(dwExtendedStyle, 0xFFFFFFFF); 70 } 71