• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 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 #ifndef _FWL_NOTE_IMP_H
8 #define _FWL_NOTE_IMP_H
9 
10 #include "xfa/include/fwl/core/fwl_note.h"
11 
12 class CFWL_TargetImp;
13 class CFWL_WidgetImp;
14 class CFWL_NoteThreadImp;
15 class CFWL_ToolTipImp;
16 class CFWL_CoreToopTipDP;
17 class CFWL_NoteDriver;
18 class CFWL_EventTarget;
19 class CFWL_ToolTipContainer;
20 
21 class CFWL_NoteLoop : public IFWL_NoteLoop {
22  public:
23   CFWL_NoteLoop(CFWL_WidgetImp* pForm = NULL);
24 
25   // IFWL_NoteLoop:
~CFWL_NoteLoop()26   ~CFWL_NoteLoop() override {}
27   FX_BOOL PreProcessMessage(CFWL_Message* pMessage) override;
28   FWL_ERR Idle(int32_t count) override;
29 
30   CFWL_WidgetImp* GetForm();
31   FX_BOOL ContinueModal();
32   FWL_ERR EndModalLoop();
33   FX_BOOL TranslateAccelerator(CFWL_Message* pMessage);
34   FWL_ERR SetMainForm(CFWL_WidgetImp* pForm);
35 
36  protected:
37   void GenerateCommondEvent(FX_DWORD dwCommand);
38 
39   CFWL_WidgetImp* m_pForm;
40   FX_BOOL m_bContinueModal;
41 };
42 class CFWL_NoteDriver : public IFWL_NoteDriver {
43  public:
44   CFWL_NoteDriver();
45   ~CFWL_NoteDriver() override;
46 
47   // IFWL_NoteDriver:
48   FX_BOOL SendNote(CFWL_Note* pNote) override;
49   FX_BOOL PostMessage(CFWL_Message* pMessage) override;
50   FWL_ERR RegisterEventTarget(IFWL_Widget* pListener,
51                               IFWL_Widget* pEventSource = NULL,
52                               FX_DWORD dwFilter = FWL_EVENT_ALL_MASK) override;
53   FWL_ERR UnregisterEventTarget(IFWL_Widget* pListener) override;
54   void ClearEventTargets(FX_BOOL bRemoveAll) override;
55   int32_t GetQueueMaxSize() const override;
56   FWL_ERR SetQueueMaxSize(const int32_t size) override;
57   IFWL_NoteThread* GetOwnerThread() const override;
58   FWL_ERR PushNoteLoop(IFWL_NoteLoop* pNoteLoop) override;
59   IFWL_NoteLoop* PopNoteLoop() override;
60   IFWL_Widget* GetFocus() override;
61   FX_BOOL SetFocus(IFWL_Widget* pFocus, FX_BOOL bNotify = FALSE) override;
62   void SetGrab(IFWL_Widget* pGrab, FX_BOOL bSet) override;
63   FWL_ERR Run() override;
64 
65   IFWL_Widget* GetHover();
66   void SetHover(IFWL_Widget* pHover);
67   void NotifyTargetHide(IFWL_Widget* pNoteTarget);
68   void NotifyTargetDestroy(IFWL_Widget* pNoteTarget);
69   void NotifyFullScreenMode(IFWL_Widget* pNoteTarget, FX_BOOL bFullScreen);
70   FWL_ERR RegisterForm(CFWL_WidgetImp* pForm);
71   FWL_ERR UnRegisterForm(CFWL_WidgetImp* pForm);
72   FX_BOOL QueueMessage(CFWL_Message* pMessage);
73   FX_BOOL UnqueueMessage(CFWL_NoteLoop* pNoteLoop);
74   CFWL_NoteLoop* GetTopLoop();
75   int32_t CountLoop();
76   void SetHook(FWLMessageHookCallback callback, void* info);
77   FX_BOOL ProcessMessage(CFWL_Message* pMessage);
78 
79  protected:
80   FX_BOOL DispatchMessage(CFWL_Message* pMessage, IFWL_Widget* pMessageForm);
81   FX_BOOL DoActivate(CFWL_MsgActivate* pMsg, IFWL_Widget* pMessageForm);
82   FX_BOOL DoDeactivate(CFWL_MsgDeactivate* pMsg, IFWL_Widget* pMessageForm);
83   FX_BOOL DoSetFocus(CFWL_MsgSetFocus* pMsg, IFWL_Widget* pMessageForm);
84   FX_BOOL DoKillFocus(CFWL_MsgKillFocus* pMsg, IFWL_Widget* pMessageForm);
85   FX_BOOL DoKey(CFWL_MsgKey* pMsg, IFWL_Widget* pMessageForm);
86   FX_BOOL DoMouse(CFWL_MsgMouse* pMsg, IFWL_Widget* pMessageForm);
87   FX_BOOL DoWheel(CFWL_MsgMouseWheel* pMsg, IFWL_Widget* pMessageForm);
88   FX_BOOL DoSize(CFWL_MsgSize* pMsg);
89   FX_BOOL DoWindowMove(CFWL_MsgWindowMove* pMsg, IFWL_Widget* pMessageForm);
90   FX_BOOL DoDragFiles(CFWL_MsgDropFiles* pMsg, IFWL_Widget* pMessageForm);
91   FX_BOOL DoMouseEx(CFWL_MsgMouse* pMsg, IFWL_Widget* pMessageForm);
92   void MouseSecondary(CFWL_MsgMouse* pMsg);
93   FX_BOOL IsValidMessage(CFWL_Message* pMessage);
94   IFWL_Widget* GetMessageForm(IFWL_Widget* pDstTarget);
95   void ClearInvalidEventTargets(FX_BOOL bRemoveAll);
96   CFX_PtrArray m_forms;
97   CFX_PtrArray m_noteQueue;
98   CFX_PtrArray m_noteLoopQueue;
99   CFX_MapPtrToPtr m_eventTargets;
100   int32_t m_sendEventCalled;
101   int32_t m_maxSize;
102   FX_BOOL m_bFullScreen;
103   IFWL_Widget* m_pHover;
104   IFWL_Widget* m_pFocus;
105   IFWL_Widget* m_pGrab;
106   CFWL_NoteLoop* m_pNoteLoop;
107   FWLMessageHookCallback m_hook;
108   void* m_hookInfo;
109 };
110 typedef CFX_MapPtrTemplate<void*, FX_DWORD> CFWL_EventSource;
111 class CFWL_EventTarget {
112  public:
CFWL_EventTarget(CFWL_NoteDriver * pNoteDriver,IFWL_Widget * pListener)113   CFWL_EventTarget(CFWL_NoteDriver* pNoteDriver, IFWL_Widget* pListener)
114       : m_pListener(pListener), m_pNoteDriver(pNoteDriver), m_bInvalid(FALSE) {}
115   ~CFWL_EventTarget();
116   int32_t SetEventSource(IFWL_Widget* pSource,
117                          FX_DWORD dwFilter = FWL_EVENT_ALL_MASK);
118   FX_BOOL ProcessEvent(CFWL_Event* pEvent);
119   FX_BOOL IsFilterEvent(CFWL_Event* pEvent, FX_DWORD dwFilter);
IsInvalid()120   FX_BOOL IsInvalid() { return m_bInvalid; }
FlagInvalid()121   void FlagInvalid() { m_bInvalid = TRUE; }
122 
123  protected:
124   CFWL_EventSource m_eventSources;
125   IFWL_Widget* m_pListener;
126   CFWL_NoteDriver* m_pNoteDriver;
127   FX_BOOL m_bInvalid;
128 };
129 class CFWL_ToolTipContainer {
130  public:
131   static CFWL_ToolTipContainer* getInstance();
132   static void DeleteInstance();
133 
134   FX_ERR AddToolTipTarget(IFWL_ToolTipTarget* pTarget);
135   FX_ERR RemoveToolTipTarget(IFWL_ToolTipTarget* pTarget);
136   IFWL_ToolTipTarget* GetCurrentToolTipTarget();
137 
138   FX_BOOL HasToolTip(IFWL_Widget* pWidget);
139 
140   FX_BOOL ProcessEnter(CFWL_EvtMouse* pEvt, IFWL_Widget* pOwner);
141   FX_BOOL ProcessLeave(CFWL_EvtMouse* pEvt);
142 
143   FX_ERR SetToolTipInitialDelay(int32_t iDelayTime);
144   FX_ERR SetToolTipAutoPopDelay(int32_t iDelayTime);
145 
146  protected:
147   CFWL_ToolTipContainer();
148   virtual ~CFWL_ToolTipContainer();
149 
150   IFWL_ToolTipTarget* pCurTarget;
151   CFWL_ToolTipImp* m_pToolTipImp;
152   CFWL_CoreToopTipDP* m_ToolTipDp;
153   CFX_PtrArray m_arrWidget;
154 
155  private:
156   static CFWL_ToolTipContainer* s_pInstance;
157 };
158 #endif
159