Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(56)

Side by Side Diff: xfa/fxfa/app/xfa_fftextedit.cpp

Issue 2466273003: Change IFWL_Widget to store a single delegate. (Closed)
Patch Set: Fix Mac Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « xfa/fxfa/app/xfa_fftextedit.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "xfa/fxfa/app/xfa_fftextedit.h" 7 #include "xfa/fxfa/app/xfa_fftextedit.h"
8 8
9 #include <vector> 9 #include <vector>
10 10
11 #include "third_party/base/ptr_util.h"
11 #include "xfa/fwl/core/cfwl_datetimepicker.h" 12 #include "xfa/fwl/core/cfwl_datetimepicker.h"
12 #include "xfa/fwl/core/cfwl_edit.h" 13 #include "xfa/fwl/core/cfwl_edit.h"
13 #include "xfa/fwl/core/cfwl_message.h" 14 #include "xfa/fwl/core/cfwl_message.h"
14 #include "xfa/fwl/core/fwl_noteimp.h" 15 #include "xfa/fwl/core/fwl_noteimp.h"
15 #include "xfa/fwl/core/ifwl_edit.h" 16 #include "xfa/fwl/core/ifwl_edit.h"
17 #include "xfa/fxfa/app/cxfa_ffdatetimeeditdelegate.h"
18 #include "xfa/fxfa/app/cxfa_ffnumericeditdelegate.h"
19 #include "xfa/fxfa/app/cxfa_fftexteditdelegate.h"
16 #include "xfa/fxfa/app/xfa_fffield.h" 20 #include "xfa/fxfa/app/xfa_fffield.h"
17 #include "xfa/fxfa/app/xfa_fwladapter.h" 21 #include "xfa/fxfa/app/xfa_fwladapter.h"
18 #include "xfa/fxfa/app/xfa_textlayout.h" 22 #include "xfa/fxfa/app/xfa_textlayout.h"
19 #include "xfa/fxfa/cxfa_eventparam.h" 23 #include "xfa/fxfa/cxfa_eventparam.h"
20 #include "xfa/fxfa/parser/xfa_localevalue.h" 24 #include "xfa/fxfa/parser/xfa_localevalue.h"
21 #include "xfa/fxfa/xfa_ffapp.h" 25 #include "xfa/fxfa/xfa_ffapp.h"
22 #include "xfa/fxfa/xfa_ffdoc.h" 26 #include "xfa/fxfa/xfa_ffdoc.h"
23 #include "xfa/fxfa/xfa_ffdocview.h" 27 #include "xfa/fxfa/xfa_ffdocview.h"
24 #include "xfa/fxfa/xfa_ffpageview.h" 28 #include "xfa/fxfa/xfa_ffpageview.h"
25 #include "xfa/fxfa/xfa_ffwidget.h" 29 #include "xfa/fxfa/xfa_ffwidget.h"
26 30
27 CXFA_FFTextEdit::CXFA_FFTextEdit(CXFA_FFPageView* pPageView, 31 CXFA_FFTextEdit::CXFA_FFTextEdit(CXFA_FFPageView* pPageView,
28 CXFA_WidgetAcc* pDataAcc) 32 CXFA_WidgetAcc* pDataAcc)
29 : CXFA_FFField(pPageView, pDataAcc), m_pOldDelegate(nullptr) {} 33 : CXFA_FFField(pPageView, pDataAcc) {}
30 34
31 CXFA_FFTextEdit::~CXFA_FFTextEdit() { 35 CXFA_FFTextEdit::~CXFA_FFTextEdit() {
32 if (m_pNormalWidget) { 36 if (m_pNormalWidget) {
33 IFWL_Widget* pWidget = m_pNormalWidget->GetWidget(); 37 IFWL_Widget* pWidget = m_pNormalWidget->GetWidget();
34 CFWL_NoteDriver* pNoteDriver = pWidget->GetOwnerApp()->GetNoteDriver(); 38 CFWL_NoteDriver* pNoteDriver = pWidget->GetOwnerApp()->GetNoteDriver();
35 pNoteDriver->UnregisterEventTarget(pWidget); 39 pNoteDriver->UnregisterEventTarget(pWidget);
36 } 40 }
37 } 41 }
38 42
39 FX_BOOL CXFA_FFTextEdit::LoadWidget() { 43 FX_BOOL CXFA_FFTextEdit::LoadWidget() {
40 CFWL_Edit* pFWLEdit = new CFWL_Edit(GetFWLApp()); 44 CFWL_Edit* pFWLEdit = new CFWL_Edit(GetFWLApp());
41 pFWLEdit->Initialize(); 45 pFWLEdit->Initialize();
42 m_pNormalWidget = pFWLEdit; 46 m_pNormalWidget = pFWLEdit;
43 m_pNormalWidget->SetLayoutItem(this); 47 m_pNormalWidget->SetLayoutItem(this);
44 48
45 IFWL_Widget* pWidget = m_pNormalWidget->GetWidget(); 49 IFWL_Widget* pWidget = m_pNormalWidget->GetWidget();
46 CFWL_NoteDriver* pNoteDriver = pWidget->GetOwnerApp()->GetNoteDriver(); 50 CFWL_NoteDriver* pNoteDriver = pWidget->GetOwnerApp()->GetNoteDriver();
47 pNoteDriver->RegisterEventTarget(pWidget, pWidget); 51 pNoteDriver->RegisterEventTarget(pWidget, pWidget);
48 52
49 m_pOldDelegate = m_pNormalWidget->GetCurrentDelegate(); 53 m_pNormalWidget->SetDelegate(pdfium::MakeUnique<CXFA_FFTextEditDelegate>(
50 m_pNormalWidget->SetCurrentDelegate(this); 54 m_pNormalWidget->ReleaseDelegate(), this));
51 m_pNormalWidget->LockUpdate(); 55 m_pNormalWidget->LockUpdate();
52 56
53 UpdateWidgetProperty(); 57 UpdateWidgetProperty();
54 CFX_WideString wsText; 58 CFX_WideString wsText;
55 m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Display); 59 m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Display);
56 pFWLEdit->SetText(wsText); 60 pFWLEdit->SetText(wsText);
57 m_pNormalWidget->UnlockUpdate(); 61 m_pNormalWidget->UnlockUpdate();
58 return CXFA_FFField::LoadWidget(); 62 return CXFA_FFField::LoadWidget();
59 } 63 }
60 void CXFA_FFTextEdit::UpdateWidgetProperty() { 64 void CXFA_FFTextEdit::UpdateWidgetProperty() {
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 eParam.m_pTarget = m_pDataAcc; 395 eParam.m_pTarget = m_pDataAcc;
392 m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Full, &eParam); 396 m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Full, &eParam);
393 } 397 }
394 398
395 FX_BOOL CXFA_FFTextEdit::CheckWord(const CFX_ByteStringC& sWord) { 399 FX_BOOL CXFA_FFTextEdit::CheckWord(const CFX_ByteStringC& sWord) {
396 if (sWord.IsEmpty() || m_pDataAcc->GetUIType() != XFA_Element::TextEdit) 400 if (sWord.IsEmpty() || m_pDataAcc->GetUIType() != XFA_Element::TextEdit)
397 return TRUE; 401 return TRUE;
398 return FALSE; 402 return FALSE;
399 } 403 }
400 404
401 void CXFA_FFTextEdit::OnProcessMessage(CFWL_Message* pMessage) {
402 m_pOldDelegate->OnProcessMessage(pMessage);
403 }
404
405 void CXFA_FFTextEdit::OnProcessEvent(CFWL_Event* pEvent) {
406 CXFA_FFField::OnProcessEvent(pEvent);
407 switch (pEvent->GetClassID()) {
408 case CFWL_EventType::TextChanged: {
409 CFWL_EvtEdtTextChanged* event = (CFWL_EvtEdtTextChanged*)pEvent;
410 CFX_WideString wsChange;
411 OnTextChanged(m_pNormalWidget->GetWidget(), wsChange, event->wsPrevText);
412 break;
413 }
414 case CFWL_EventType::TextFull: {
415 OnTextFull(m_pNormalWidget->GetWidget());
416 break;
417 }
418 case CFWL_EventType::CheckWord: {
419 CFX_WideString wstr(L"FWL_EVENT_DTP_SelectChanged");
420 CFWL_EvtEdtCheckWord* event = (CFWL_EvtEdtCheckWord*)pEvent;
421 event->bCheckWord = CheckWord(event->bsWord.AsStringC());
422 break;
423 }
424 case CFWL_EventType::GetSuggestedWords: {
425 CFWL_EvtEdtGetSuggestWords* event = (CFWL_EvtEdtGetSuggestWords*)pEvent;
426 event->bSuggestWords = FALSE;
427 break;
428 }
429 default:
430 break;
431 }
432 m_pOldDelegate->OnProcessEvent(pEvent);
433 }
434
435 void CXFA_FFTextEdit::OnDrawWidget(CFX_Graphics* pGraphics,
436 const CFX_Matrix* pMatrix) {
437 m_pOldDelegate->OnDrawWidget(pGraphics, pMatrix);
438 }
439
440 CXFA_FFNumericEdit::CXFA_FFNumericEdit(CXFA_FFPageView* pPageView, 405 CXFA_FFNumericEdit::CXFA_FFNumericEdit(CXFA_FFPageView* pPageView,
441 CXFA_WidgetAcc* pDataAcc) 406 CXFA_WidgetAcc* pDataAcc)
442 : CXFA_FFTextEdit(pPageView, pDataAcc) {} 407 : CXFA_FFTextEdit(pPageView, pDataAcc) {}
408
443 CXFA_FFNumericEdit::~CXFA_FFNumericEdit() {} 409 CXFA_FFNumericEdit::~CXFA_FFNumericEdit() {}
410
444 FX_BOOL CXFA_FFNumericEdit::LoadWidget() { 411 FX_BOOL CXFA_FFNumericEdit::LoadWidget() {
445 CFWL_Edit* pWidget = new CFWL_Edit(GetFWLApp()); 412 CFWL_Edit* pWidget = new CFWL_Edit(GetFWLApp());
446 pWidget->Initialize(); 413 pWidget->Initialize();
447 m_pNormalWidget = pWidget; 414 m_pNormalWidget = pWidget;
448 415
449 IFWL_Widget* pIWidget = m_pNormalWidget->GetWidget(); 416 IFWL_Widget* pIWidget = m_pNormalWidget->GetWidget();
450 m_pNormalWidget->SetLayoutItem(this); 417 m_pNormalWidget->SetLayoutItem(this);
451 CFWL_NoteDriver* pNoteDriver = pIWidget->GetOwnerApp()->GetNoteDriver(); 418 CFWL_NoteDriver* pNoteDriver = pIWidget->GetOwnerApp()->GetNoteDriver();
452 pNoteDriver->RegisterEventTarget(pIWidget, pIWidget); 419 pNoteDriver->RegisterEventTarget(pIWidget, pIWidget);
453 420
454 m_pOldDelegate = m_pNormalWidget->GetCurrentDelegate(); 421 m_pNormalWidget->SetDelegate(pdfium::MakeUnique<CXFA_FFNumericEditDelegate>(
455 m_pNormalWidget->SetCurrentDelegate(this); 422 m_pNormalWidget->ReleaseDelegate(), this));
456 m_pNormalWidget->LockUpdate(); 423 m_pNormalWidget->LockUpdate();
457 424
458 CFX_WideString wsText; 425 CFX_WideString wsText;
459 m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Display); 426 m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Display);
460 pWidget->SetText(wsText); 427 pWidget->SetText(wsText);
461 UpdateWidgetProperty(); 428 UpdateWidgetProperty();
462 m_pNormalWidget->UnlockUpdate(); 429 m_pNormalWidget->UnlockUpdate();
463 return CXFA_FFField::LoadWidget(); 430 return CXFA_FFField::LoadWidget();
464 } 431 }
465 void CXFA_FFNumericEdit::UpdateWidgetProperty() { 432 void CXFA_FFNumericEdit::UpdateWidgetProperty() {
(...skipping 15 matching lines...) Expand all
481 pWidget->SetLimit(iNumCells); 448 pWidget->SetLimit(iNumCells);
482 } 449 }
483 dwExtendedStyle |= GetAlignment(); 450 dwExtendedStyle |= GetAlignment();
484 if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open || 451 if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open ||
485 !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) { 452 !m_pDataAcc->GetDoc()->GetXFADoc()->IsInteractive()) {
486 dwExtendedStyle |= FWL_STYLEEXT_EDT_ReadOnly; 453 dwExtendedStyle |= FWL_STYLEEXT_EDT_ReadOnly;
487 } 454 }
488 m_pNormalWidget->ModifyStylesEx(dwExtendedStyle, 0xFFFFFFFF); 455 m_pNormalWidget->ModifyStylesEx(dwExtendedStyle, 0xFFFFFFFF);
489 } 456 }
490 457
491 void CXFA_FFNumericEdit::OnProcessEvent(CFWL_Event* pEvent) {
492 if (pEvent->GetClassID() == CFWL_EventType::Validate) {
493 CFWL_EvtEdtValidate* event = (CFWL_EvtEdtValidate*)pEvent;
494 CFX_WideString wsChange = event->wsInsert;
495 event->bValidate = OnValidate(m_pNormalWidget->GetWidget(), wsChange);
496 return;
497 }
498 CXFA_FFTextEdit::OnProcessEvent(pEvent);
499 }
500
501 FX_BOOL CXFA_FFNumericEdit::OnValidate(IFWL_Widget* pWidget, 458 FX_BOOL CXFA_FFNumericEdit::OnValidate(IFWL_Widget* pWidget,
502 CFX_WideString& wsText) { 459 CFX_WideString& wsText) {
503 CFX_WideString wsPattern; 460 CFX_WideString wsPattern;
504 m_pDataAcc->GetPictureContent(wsPattern, XFA_VALUEPICTURE_Edit); 461 m_pDataAcc->GetPictureContent(wsPattern, XFA_VALUEPICTURE_Edit);
505 if (!wsPattern.IsEmpty()) { 462 if (!wsPattern.IsEmpty()) {
506 return TRUE; 463 return TRUE;
507 } 464 }
508 int32_t iLeads = 0; 465 int32_t iLeads = 0;
509 m_pDataAcc->GetLeadDigits(iLeads); 466 m_pDataAcc->GetLeadDigits(iLeads);
510 int32_t iFracs = 0; 467 int32_t iFracs = 0;
(...skipping 13 matching lines...) Expand all
524 FX_BOOL CXFA_FFPasswordEdit::LoadWidget() { 481 FX_BOOL CXFA_FFPasswordEdit::LoadWidget() {
525 CFWL_Edit* pWidget = new CFWL_Edit(GetFWLApp()); 482 CFWL_Edit* pWidget = new CFWL_Edit(GetFWLApp());
526 pWidget->Initialize(); 483 pWidget->Initialize();
527 m_pNormalWidget = pWidget; 484 m_pNormalWidget = pWidget;
528 m_pNormalWidget->SetLayoutItem(this); 485 m_pNormalWidget->SetLayoutItem(this);
529 486
530 IFWL_Widget* pIWidget = m_pNormalWidget->GetWidget(); 487 IFWL_Widget* pIWidget = m_pNormalWidget->GetWidget();
531 CFWL_NoteDriver* pNoteDriver = pIWidget->GetOwnerApp()->GetNoteDriver(); 488 CFWL_NoteDriver* pNoteDriver = pIWidget->GetOwnerApp()->GetNoteDriver();
532 pNoteDriver->RegisterEventTarget(pIWidget, pIWidget); 489 pNoteDriver->RegisterEventTarget(pIWidget, pIWidget);
533 490
534 m_pOldDelegate = m_pNormalWidget->GetCurrentDelegate(); 491 m_pNormalWidget->SetDelegate(pdfium::MakeUnique<CXFA_FFTextEditDelegate>(
535 m_pNormalWidget->SetCurrentDelegate(this); 492 m_pNormalWidget->ReleaseDelegate(), this));
536 m_pNormalWidget->LockUpdate(); 493 m_pNormalWidget->LockUpdate();
537 494
538 CFX_WideString wsText; 495 CFX_WideString wsText;
539 m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Display); 496 m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Display);
540 pWidget->SetText(wsText); 497 pWidget->SetText(wsText);
541 UpdateWidgetProperty(); 498 UpdateWidgetProperty();
542 m_pNormalWidget->UnlockUpdate(); 499 m_pNormalWidget->UnlockUpdate();
543 return CXFA_FFField::LoadWidget(); 500 return CXFA_FFField::LoadWidget();
544 } 501 }
545 void CXFA_FFPasswordEdit::UpdateWidgetProperty() { 502 void CXFA_FFPasswordEdit::UpdateWidgetProperty() {
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
593 } 550 }
594 FX_BOOL CXFA_FFDateTimeEdit::LoadWidget() { 551 FX_BOOL CXFA_FFDateTimeEdit::LoadWidget() {
595 CFWL_DateTimePicker* pWidget = new CFWL_DateTimePicker(GetFWLApp()); 552 CFWL_DateTimePicker* pWidget = new CFWL_DateTimePicker(GetFWLApp());
596 pWidget->Initialize(); 553 pWidget->Initialize();
597 m_pNormalWidget = pWidget; 554 m_pNormalWidget = pWidget;
598 m_pNormalWidget->SetLayoutItem(this); 555 m_pNormalWidget->SetLayoutItem(this);
599 IFWL_Widget* pIWidget = m_pNormalWidget->GetWidget(); 556 IFWL_Widget* pIWidget = m_pNormalWidget->GetWidget();
600 CFWL_NoteDriver* pNoteDriver = pIWidget->GetOwnerApp()->GetNoteDriver(); 557 CFWL_NoteDriver* pNoteDriver = pIWidget->GetOwnerApp()->GetNoteDriver();
601 pNoteDriver->RegisterEventTarget(pIWidget, pIWidget); 558 pNoteDriver->RegisterEventTarget(pIWidget, pIWidget);
602 559
603 m_pOldDelegate = m_pNormalWidget->GetCurrentDelegate(); 560 m_pNormalWidget->SetDelegate(pdfium::MakeUnique<CXFA_FFDateTimeEditDelegate>(
604 m_pNormalWidget->SetCurrentDelegate(this); 561 m_pNormalWidget->ReleaseDelegate(), this));
605 m_pNormalWidget->LockUpdate(); 562 m_pNormalWidget->LockUpdate();
606 563
607 CFX_WideString wsText; 564 CFX_WideString wsText;
608 m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Display); 565 m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Display);
609 pWidget->SetEditText(wsText); 566 pWidget->SetEditText(wsText);
610 if (CXFA_Value value = m_pDataAcc->GetFormValue()) { 567 if (CXFA_Value value = m_pDataAcc->GetFormValue()) {
611 switch (value.GetChildValueClassID()) { 568 switch (value.GetChildValueClassID()) {
612 case XFA_Element::Date: { 569 case XFA_Element::Date: {
613 if (!wsText.IsEmpty()) { 570 if (!wsText.IsEmpty()) {
614 CXFA_LocaleValue lcValue = XFA_GetLocaleValue(m_pDataAcc); 571 CXFA_LocaleValue lcValue = XFA_GetLocaleValue(m_pDataAcc);
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
791 CFWL_DateTimePicker* pDateTime = (CFWL_DateTimePicker*)m_pNormalWidget; 748 CFWL_DateTimePicker* pDateTime = (CFWL_DateTimePicker*)m_pNormalWidget;
792 pDateTime->SetEditText(wsDate); 749 pDateTime->SetEditText(wsDate);
793 pDateTime->Update(); 750 pDateTime->Update();
794 GetDoc()->GetDocEnvironment()->SetFocusWidget(GetDoc(), nullptr); 751 GetDoc()->GetDocEnvironment()->SetFocusWidget(GetDoc(), nullptr);
795 CXFA_EventParam eParam; 752 CXFA_EventParam eParam;
796 eParam.m_eType = XFA_EVENT_Change; 753 eParam.m_eType = XFA_EVENT_Change;
797 eParam.m_pTarget = m_pDataAcc; 754 eParam.m_pTarget = m_pDataAcc;
798 m_pDataAcc->GetValue(eParam.m_wsNewText, XFA_VALUEPICTURE_Raw); 755 m_pDataAcc->GetValue(eParam.m_wsNewText, XFA_VALUEPICTURE_Raw);
799 m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Change, &eParam); 756 m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Change, &eParam);
800 } 757 }
801
802 void CXFA_FFDateTimeEdit::OnProcessEvent(CFWL_Event* pEvent) {
803 if (pEvent->GetClassID() == CFWL_EventType::SelectChanged) {
804 CFWL_Event_DtpSelectChanged* event = (CFWL_Event_DtpSelectChanged*)pEvent;
805 OnSelectChanged(m_pNormalWidget->GetWidget(), event->iYear, event->iMonth,
806 event->iDay);
807 return;
808 }
809 CXFA_FFTextEdit::OnProcessEvent(pEvent);
810 }
OLDNEW
« no previous file with comments | « xfa/fxfa/app/xfa_fftextedit.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698