OLD | NEW |
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/fwl/core/fwl_noteimp.h" | 7 #include "xfa/fwl/core/fwl_noteimp.h" |
8 | 8 |
9 #include "core/fxcrt/fx_ext.h" | 9 #include "core/fxcrt/fx_ext.h" |
10 #include "third_party/base/stl_util.h" | 10 #include "third_party/base/stl_util.h" |
11 #include "xfa/fwl/basewidget/fwl_tooltipctrlimp.h" | |
12 #include "xfa/fwl/basewidget/ifwl_tooltip.h" | |
13 #include "xfa/fwl/core/cfwl_message.h" | 11 #include "xfa/fwl/core/cfwl_message.h" |
14 #include "xfa/fwl/core/cfwl_widgetmgr.h" | 12 #include "xfa/fwl/core/cfwl_widgetmgr.h" |
15 #include "xfa/fwl/core/fwl_formimp.h" | |
16 #include "xfa/fwl/core/fwl_widgetimp.h" | |
17 #include "xfa/fwl/core/ifwl_app.h" | 13 #include "xfa/fwl/core/ifwl_app.h" |
| 14 #include "xfa/fwl/core/ifwl_tooltip.h" |
18 | 15 |
19 CFWL_NoteLoop::CFWL_NoteLoop(CFWL_WidgetImp* pForm) | 16 CFWL_NoteLoop::CFWL_NoteLoop(IFWL_Widget* pForm) |
20 : m_pForm(pForm), m_bContinueModal(TRUE) {} | 17 : m_pForm(pForm), m_bContinueModal(TRUE) {} |
21 | 18 |
22 FWL_Error CFWL_NoteLoop::Idle(int32_t count) { | 19 FWL_Error CFWL_NoteLoop::Idle(int32_t count) { |
23 #if (_FX_OS_ == _FX_WIN32_DESKTOP_) | 20 #if (_FX_OS_ == _FX_WIN32_DESKTOP_) |
24 if (count <= 0) { | 21 if (count <= 0) { |
25 #endif | 22 #endif |
26 CFWL_EvtIdle ev; | 23 CFWL_EvtIdle ev; |
27 IFWL_App* pApp = FWL_GetApp(); | 24 IFWL_App* pApp = FWL_GetApp(); |
28 if (!pApp) | 25 if (!pApp) |
29 return FWL_Error::Indefinite; | 26 return FWL_Error::Indefinite; |
30 CFWL_NoteDriver* pDriver = pApp->GetNoteDriver(); | 27 CFWL_NoteDriver* pDriver = pApp->GetNoteDriver(); |
31 if (!pDriver) | 28 if (!pDriver) |
32 return FWL_Error::Indefinite; | 29 return FWL_Error::Indefinite; |
33 pDriver->SendEvent(&ev); | 30 pDriver->SendEvent(&ev); |
34 #if (_FX_OS_ == _FX_WIN32_DESKTOP_) | 31 #if (_FX_OS_ == _FX_WIN32_DESKTOP_) |
35 } | 32 } |
36 #endif | 33 #endif |
37 return FWL_Error::Indefinite; | 34 return FWL_Error::Indefinite; |
38 } | 35 } |
39 CFWL_WidgetImp* CFWL_NoteLoop::GetForm() { | 36 IFWL_Widget* CFWL_NoteLoop::GetForm() { |
40 return m_pForm; | 37 return m_pForm; |
41 } | 38 } |
42 FX_BOOL CFWL_NoteLoop::ContinueModal() { | 39 FX_BOOL CFWL_NoteLoop::ContinueModal() { |
43 return m_bContinueModal; | 40 return m_bContinueModal; |
44 } | 41 } |
45 FWL_Error CFWL_NoteLoop::EndModalLoop() { | 42 FWL_Error CFWL_NoteLoop::EndModalLoop() { |
46 m_bContinueModal = FALSE; | 43 m_bContinueModal = FALSE; |
47 return FWL_Error::Succeeded; | 44 return FWL_Error::Succeeded; |
48 } | 45 } |
49 | 46 |
50 FWL_Error CFWL_NoteLoop::SetMainForm(CFWL_WidgetImp* pForm) { | 47 FWL_Error CFWL_NoteLoop::SetMainForm(IFWL_Widget* pForm) { |
51 m_pForm = pForm; | 48 m_pForm = pForm; |
52 return FWL_Error::Succeeded; | 49 return FWL_Error::Succeeded; |
53 } | 50 } |
54 void CFWL_NoteLoop::GenerateCommondEvent(uint32_t dwCommand) { | 51 void CFWL_NoteLoop::GenerateCommondEvent(uint32_t dwCommand) { |
55 CFWL_EvtMenuCommand ev; | 52 CFWL_EvtMenuCommand ev; |
56 ev.m_iCommand = dwCommand; | 53 ev.m_iCommand = dwCommand; |
57 IFWL_App* pApp = m_pForm->GetOwnerApp(); | 54 IFWL_App* pApp = m_pForm->GetOwnerApp(); |
58 if (!pApp) | 55 if (!pApp) |
59 return; | 56 return; |
60 | 57 |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
148 ms.m_dwExtend = 1; | 145 ms.m_dwExtend = 1; |
149 } | 146 } |
150 IFWL_WidgetDelegate* pDelegate = pPrev->SetDelegate(nullptr); | 147 IFWL_WidgetDelegate* pDelegate = pPrev->SetDelegate(nullptr); |
151 if (pDelegate) { | 148 if (pDelegate) { |
152 pDelegate->OnProcessMessage(&ms); | 149 pDelegate->OnProcessMessage(&ms); |
153 } | 150 } |
154 } | 151 } |
155 if (pFocus) { | 152 if (pFocus) { |
156 IFWL_Widget* pWidget = | 153 IFWL_Widget* pWidget = |
157 CFWL_WidgetMgr::GetInstance()->GetSystemFormWidget(pFocus); | 154 CFWL_WidgetMgr::GetInstance()->GetSystemFormWidget(pFocus); |
158 CFWL_FormImp* pForm = | 155 IFWL_Form* pForm = static_cast<IFWL_Form*>(pWidget); |
159 pWidget ? static_cast<CFWL_FormImp*>(pWidget->GetImpl()) : nullptr; | 156 if (pForm) |
160 if (pForm) { | 157 pForm->SetSubFocus(pFocus); |
161 CFWL_WidgetImp* pNewFocus = | 158 |
162 static_cast<CFWL_WidgetImp*>(pFocus->GetImpl()); | |
163 pForm->SetSubFocus(pNewFocus); | |
164 } | |
165 CFWL_MsgSetFocus ms; | 159 CFWL_MsgSetFocus ms; |
166 ms.m_pDstTarget = pFocus; | 160 ms.m_pDstTarget = pFocus; |
167 if (bNotify) { | 161 if (bNotify) { |
168 ms.m_dwExtend = 1; | 162 ms.m_dwExtend = 1; |
169 } | 163 } |
170 IFWL_WidgetDelegate* pDelegate = pFocus->SetDelegate(nullptr); | 164 IFWL_WidgetDelegate* pDelegate = pFocus->SetDelegate(nullptr); |
171 if (pDelegate) { | 165 if (pDelegate) { |
172 pDelegate->OnProcessMessage(&ms); | 166 pDelegate->OnProcessMessage(&ms); |
173 } | 167 } |
174 } | 168 } |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
223 } | 217 } |
224 if (m_pHover == pNoteTarget) { | 218 if (m_pHover == pNoteTarget) { |
225 m_pHover = nullptr; | 219 m_pHover = nullptr; |
226 } | 220 } |
227 if (m_pGrab == pNoteTarget) { | 221 if (m_pGrab == pNoteTarget) { |
228 m_pGrab = nullptr; | 222 m_pGrab = nullptr; |
229 } | 223 } |
230 UnregisterEventTarget(pNoteTarget); | 224 UnregisterEventTarget(pNoteTarget); |
231 int32_t count = m_forms.GetSize(); | 225 int32_t count = m_forms.GetSize(); |
232 for (int32_t nIndex = 0; nIndex < count; nIndex++) { | 226 for (int32_t nIndex = 0; nIndex < count; nIndex++) { |
233 CFWL_FormImp* pForm = static_cast<CFWL_FormImp*>(m_forms[nIndex]); | 227 IFWL_Form* pForm = static_cast<IFWL_Form*>(m_forms[nIndex]); |
234 if (!pForm) { | 228 if (!pForm) { |
235 continue; | 229 continue; |
236 } | 230 } |
237 CFWL_WidgetImp* pSubFocus = pForm->GetSubFocus(); | 231 IFWL_Widget* pSubFocus = pForm->GetSubFocus(); |
238 if (!pSubFocus) | 232 if (!pSubFocus) |
239 return; | 233 return; |
240 if (pSubFocus && pSubFocus->GetInterface() == pNoteTarget) { | 234 if (pSubFocus == pNoteTarget) { |
241 pForm->SetSubFocus(nullptr); | 235 pForm->SetSubFocus(nullptr); |
242 } | 236 } |
243 } | 237 } |
244 } | 238 } |
245 | 239 |
246 FWL_Error CFWL_NoteDriver::RegisterForm(CFWL_WidgetImp* pForm) { | 240 FWL_Error CFWL_NoteDriver::RegisterForm(IFWL_Widget* pForm) { |
247 if (!pForm) | 241 if (!pForm) |
248 return FWL_Error::Indefinite; | 242 return FWL_Error::Indefinite; |
249 if (m_forms.Find(pForm) >= 0) { | 243 if (m_forms.Find(pForm) >= 0) { |
250 return FWL_Error::Indefinite; | 244 return FWL_Error::Indefinite; |
251 } | 245 } |
252 m_forms.Add(pForm); | 246 m_forms.Add(pForm); |
253 if (m_forms.GetSize() == 1) { | 247 if (m_forms.GetSize() == 1) { |
254 CFWL_NoteLoop* pLoop = | 248 CFWL_NoteLoop* pLoop = |
255 static_cast<CFWL_NoteLoop*>(m_noteLoopQueue.GetAt(0)); | 249 static_cast<CFWL_NoteLoop*>(m_noteLoopQueue.GetAt(0)); |
256 if (!pLoop) | 250 if (!pLoop) |
257 return FWL_Error::Indefinite; | 251 return FWL_Error::Indefinite; |
258 pLoop->SetMainForm(pForm); | 252 pLoop->SetMainForm(pForm); |
259 } | 253 } |
260 return FWL_Error::Succeeded; | 254 return FWL_Error::Succeeded; |
261 } | 255 } |
262 FWL_Error CFWL_NoteDriver::UnRegisterForm(CFWL_WidgetImp* pForm) { | 256 FWL_Error CFWL_NoteDriver::UnRegisterForm(IFWL_Widget* pForm) { |
263 if (!pForm) | 257 if (!pForm) |
264 return FWL_Error::Indefinite; | 258 return FWL_Error::Indefinite; |
265 int32_t nIndex = m_forms.Find(pForm); | 259 int32_t nIndex = m_forms.Find(pForm); |
266 if (nIndex < 0) { | 260 if (nIndex < 0) { |
267 return FWL_Error::Indefinite; | 261 return FWL_Error::Indefinite; |
268 } | 262 } |
269 m_forms.RemoveAt(nIndex); | 263 m_forms.RemoveAt(nIndex); |
270 return FWL_Error::Succeeded; | 264 return FWL_Error::Succeeded; |
271 } | 265 } |
272 FX_BOOL CFWL_NoteDriver::QueueMessage(CFWL_Message* pMessage) { | 266 FX_BOOL CFWL_NoteDriver::QueueMessage(CFWL_Message* pMessage) { |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
417 !pMessageForm->IsInstance(FX_WSTRC(L"FWL_FORMPROXY")); | 411 !pMessageForm->IsInstance(FX_WSTRC(L"FWL_FORMPROXY")); |
418 } | 412 } |
419 FX_BOOL CFWL_NoteDriver::DoSetFocus(CFWL_MsgSetFocus* pMsg, | 413 FX_BOOL CFWL_NoteDriver::DoSetFocus(CFWL_MsgSetFocus* pMsg, |
420 IFWL_Widget* pMessageForm) { | 414 IFWL_Widget* pMessageForm) { |
421 CFWL_WidgetMgr* pWidgetMgr = CFWL_WidgetMgr::GetInstance(); | 415 CFWL_WidgetMgr* pWidgetMgr = CFWL_WidgetMgr::GetInstance(); |
422 if (pWidgetMgr->IsFormDisabled()) { | 416 if (pWidgetMgr->IsFormDisabled()) { |
423 m_pFocus = pMsg->m_pDstTarget; | 417 m_pFocus = pMsg->m_pDstTarget; |
424 return TRUE; | 418 return TRUE; |
425 } | 419 } |
426 IFWL_Widget* pWidget = pMsg->m_pDstTarget; | 420 IFWL_Widget* pWidget = pMsg->m_pDstTarget; |
427 CFWL_FormImp* pForm = | 421 if (pWidget) { |
428 pWidget ? static_cast<CFWL_FormImp*>(pWidget->GetImpl()) : nullptr; | 422 IFWL_Form* pForm = static_cast<IFWL_Form*>(pWidget); |
429 if (pForm) { | 423 IFWL_Widget* pSubFocus = pForm->GetSubFocus(); |
430 CFWL_WidgetImp* pSubFocus = pForm->GetSubFocus(); | |
431 if (pSubFocus && ((pSubFocus->GetStates() & FWL_WGTSTATE_Focused) == 0)) { | 424 if (pSubFocus && ((pSubFocus->GetStates() & FWL_WGTSTATE_Focused) == 0)) { |
432 pMsg->m_pDstTarget = pSubFocus->GetInterface(); | 425 pMsg->m_pDstTarget = pSubFocus; |
433 if (m_pFocus != pMsg->m_pDstTarget) { | 426 if (m_pFocus != pMsg->m_pDstTarget) { |
434 m_pFocus = pMsg->m_pDstTarget; | 427 m_pFocus = pMsg->m_pDstTarget; |
435 return TRUE; | 428 return TRUE; |
436 } | 429 } |
437 } | 430 } |
438 } | 431 } |
439 return FALSE; | 432 return FALSE; |
440 } | 433 } |
441 FX_BOOL CFWL_NoteDriver::DoKillFocus(CFWL_MsgKillFocus* pMsg, | 434 FX_BOOL CFWL_NoteDriver::DoKillFocus(CFWL_MsgKillFocus* pMsg, |
442 IFWL_Widget* pMessageForm) { | 435 IFWL_Widget* pMessageForm) { |
443 CFWL_WidgetMgr* pWidgetMgr = CFWL_WidgetMgr::GetInstance(); | 436 CFWL_WidgetMgr* pWidgetMgr = CFWL_WidgetMgr::GetInstance(); |
444 if (pWidgetMgr->IsFormDisabled()) { | 437 if (pWidgetMgr->IsFormDisabled()) { |
445 if (m_pFocus == pMsg->m_pDstTarget) { | 438 if (m_pFocus == pMsg->m_pDstTarget) { |
446 m_pFocus = nullptr; | 439 m_pFocus = nullptr; |
447 } | 440 } |
448 return TRUE; | 441 return TRUE; |
449 } | 442 } |
450 IFWL_Widget* pWidget = pMsg->m_pDstTarget; | 443 IFWL_Form* pForm = static_cast<IFWL_Form*>(pMsg->m_pDstTarget); |
451 CFWL_FormImp* pForm = | |
452 pWidget ? static_cast<CFWL_FormImp*>(pWidget->GetImpl()) : nullptr; | |
453 if (pForm) { | 444 if (pForm) { |
454 CFWL_WidgetImp* pSubFocus = pForm->GetSubFocus(); | 445 IFWL_Widget* pSubFocus = pForm->GetSubFocus(); |
455 if (pSubFocus && (pSubFocus->GetStates() & FWL_WGTSTATE_Focused)) { | 446 if (pSubFocus && (pSubFocus->GetStates() & FWL_WGTSTATE_Focused)) { |
456 pMsg->m_pDstTarget = pSubFocus->GetInterface(); | 447 pMsg->m_pDstTarget = pSubFocus; |
457 if (m_pFocus == pMsg->m_pDstTarget) { | 448 if (m_pFocus == pMsg->m_pDstTarget) { |
458 m_pFocus = nullptr; | 449 m_pFocus = nullptr; |
459 return TRUE; | 450 return TRUE; |
460 } | 451 } |
461 } | 452 } |
462 } | 453 } |
463 return FALSE; | 454 return FALSE; |
464 } | 455 } |
465 FX_BOOL CFWL_NoteDriver::DoKey(CFWL_MsgKey* pMsg, IFWL_Widget* pMessageForm) { | 456 FX_BOOL CFWL_NoteDriver::DoKey(CFWL_MsgKey* pMsg, IFWL_Widget* pMessageForm) { |
466 #if (_FX_OS_ != _FX_MACOSX_) | 457 #if (_FX_OS_ != _FX_MACOSX_) |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
599 msHover.m_dwCmd = FWL_MouseCommand::Hover; | 590 msHover.m_dwCmd = FWL_MouseCommand::Hover; |
600 DispatchMessage(&msHover, nullptr); | 591 DispatchMessage(&msHover, nullptr); |
601 } | 592 } |
602 FX_BOOL CFWL_NoteDriver::IsValidMessage(CFWL_Message* pMessage) { | 593 FX_BOOL CFWL_NoteDriver::IsValidMessage(CFWL_Message* pMessage) { |
603 if (pMessage->GetClassID() == CFWL_MessageType::Post) | 594 if (pMessage->GetClassID() == CFWL_MessageType::Post) |
604 return TRUE; | 595 return TRUE; |
605 | 596 |
606 int32_t iCount = m_noteLoopQueue.GetSize(); | 597 int32_t iCount = m_noteLoopQueue.GetSize(); |
607 for (int32_t i = 0; i < iCount; i++) { | 598 for (int32_t i = 0; i < iCount; i++) { |
608 CFWL_NoteLoop* pNoteLoop = static_cast<CFWL_NoteLoop*>(m_noteLoopQueue[i]); | 599 CFWL_NoteLoop* pNoteLoop = static_cast<CFWL_NoteLoop*>(m_noteLoopQueue[i]); |
609 CFWL_WidgetImp* pForm = pNoteLoop->GetForm(); | 600 IFWL_Widget* pForm = pNoteLoop->GetForm(); |
610 if (pForm && (pForm->GetInterface() == pMessage->m_pDstTarget)) | 601 if (pForm && (pForm == pMessage->m_pDstTarget)) |
611 return TRUE; | 602 return TRUE; |
612 } | 603 } |
613 iCount = m_forms.GetSize(); | 604 iCount = m_forms.GetSize(); |
614 for (int32_t j = 0; j < iCount; j++) { | 605 for (int32_t j = 0; j < iCount; j++) { |
615 CFWL_FormImp* pForm = static_cast<CFWL_FormImp*>(m_forms[j]); | 606 IFWL_Form* pForm = static_cast<IFWL_Form*>(m_forms[j]); |
616 if (pForm->GetInterface() == pMessage->m_pDstTarget) | 607 if (pForm == pMessage->m_pDstTarget) |
617 return TRUE; | 608 return TRUE; |
618 } | 609 } |
619 return FALSE; | 610 return FALSE; |
620 } | 611 } |
621 | 612 |
622 IFWL_Widget* CFWL_NoteDriver::GetMessageForm(IFWL_Widget* pDstTarget) { | 613 IFWL_Widget* CFWL_NoteDriver::GetMessageForm(IFWL_Widget* pDstTarget) { |
623 int32_t iTrackLoop = m_noteLoopQueue.GetSize(); | 614 int32_t iTrackLoop = m_noteLoopQueue.GetSize(); |
624 if (iTrackLoop <= 0) | 615 if (iTrackLoop <= 0) |
625 return nullptr; | 616 return nullptr; |
626 IFWL_Widget* pMessageForm = nullptr; | 617 IFWL_Widget* pMessageForm = nullptr; |
627 if (iTrackLoop > 1) { | 618 if (iTrackLoop > 1) { |
628 CFWL_NoteLoop* pNootLoop = | 619 CFWL_NoteLoop* pNootLoop = |
629 static_cast<CFWL_NoteLoop*>(m_noteLoopQueue[iTrackLoop - 1]); | 620 static_cast<CFWL_NoteLoop*>(m_noteLoopQueue[iTrackLoop - 1]); |
630 pMessageForm = pNootLoop->GetForm()->GetInterface(); | 621 pMessageForm = pNootLoop->GetForm(); |
631 } else if (m_forms.Find(pDstTarget->GetImpl()) < 0) { | 622 } else if (m_forms.Find(pDstTarget) < 0) { |
632 pMessageForm = pDstTarget; | 623 pMessageForm = pDstTarget; |
633 } | 624 } |
634 if (!pMessageForm && pDstTarget) { | 625 if (!pMessageForm && pDstTarget) { |
635 CFWL_WidgetMgr* pWidgetMgr = CFWL_WidgetMgr::GetInstance(); | 626 CFWL_WidgetMgr* pWidgetMgr = CFWL_WidgetMgr::GetInstance(); |
636 if (!pWidgetMgr) | 627 if (!pWidgetMgr) |
637 return nullptr; | 628 return nullptr; |
638 pMessageForm = pWidgetMgr->GetSystemFormWidget(pDstTarget); | 629 pMessageForm = pWidgetMgr->GetSystemFormWidget(pDstTarget); |
639 } | 630 } |
640 return pMessageForm; | 631 return pMessageForm; |
641 } | 632 } |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
770 } | 761 } |
771 } | 762 } |
772 | 763 |
773 CFWL_ToolTipContainer* CFWL_ToolTipContainer::s_pInstance = nullptr; | 764 CFWL_ToolTipContainer* CFWL_ToolTipContainer::s_pInstance = nullptr; |
774 | 765 |
775 CFWL_ToolTipContainer::CFWL_ToolTipContainer() | 766 CFWL_ToolTipContainer::CFWL_ToolTipContainer() |
776 : m_pToolTipImp(nullptr), m_pToolTipDp(new CFWL_CoreToolTipDP(0, 2000)) {} | 767 : m_pToolTipImp(nullptr), m_pToolTipDp(new CFWL_CoreToolTipDP(0, 2000)) {} |
777 | 768 |
778 CFWL_ToolTipContainer::~CFWL_ToolTipContainer() { | 769 CFWL_ToolTipContainer::~CFWL_ToolTipContainer() { |
779 if (m_pToolTipImp) { | 770 if (m_pToolTipImp) { |
780 IFWL_ToolTip* pToolTip = | 771 IFWL_ToolTip* pToolTip = static_cast<IFWL_ToolTip*>(m_pToolTipImp); |
781 static_cast<IFWL_ToolTip*>(m_pToolTipImp->GetInterface()); | |
782 pToolTip->Finalize(); | 772 pToolTip->Finalize(); |
783 delete pToolTip; | 773 delete pToolTip; |
784 } | 774 } |
785 } | 775 } |
786 | 776 |
787 // static | 777 // static |
788 CFWL_ToolTipContainer* CFWL_ToolTipContainer::getInstance() { | 778 CFWL_ToolTipContainer* CFWL_ToolTipContainer::getInstance() { |
789 if (!s_pInstance) | 779 if (!s_pInstance) |
790 s_pInstance = new CFWL_ToolTipContainer; | 780 s_pInstance = new CFWL_ToolTipContainer; |
791 return s_pInstance; | 781 return s_pInstance; |
792 } | 782 } |
793 | 783 |
794 // static | 784 // static |
795 void CFWL_ToolTipContainer::DeleteInstance() { | 785 void CFWL_ToolTipContainer::DeleteInstance() { |
796 delete s_pInstance; | 786 delete s_pInstance; |
797 s_pInstance = nullptr; | 787 s_pInstance = nullptr; |
798 } | 788 } |
OLD | NEW |