summaryrefslogtreecommitdiff
path: root/xfa/src/fwl/src/core/include/fwl_noteimp.h
blob: 78afc35313d68a50f347dfa9318244097263a786 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#ifndef _FWL_NOTE_IMP_H
#define _FWL_NOTE_IMP_H
class CFWL_Target;
class CFWL_WidgetImp;
class CFWL_NoteThread;
class CFWL_ToolTipImp;
class IFWL_ToolTipTarget;
class CFWL_CoreToopTipDP;
class CFWL_NoteLoop;
class CFWL_NoteDriver;
class CFWL_EventTarget;
class CFWL_ToolTipContainer;
class CFWL_NoteLoop
{
public:
    CFWL_NoteLoop(CFWL_WidgetImp *pForm = NULL);
    virtual FX_BOOL PreProcessMessage(CFWL_Message *pMessage);
    virtual FWL_ERR	Idle(int32_t count);
    CFWL_WidgetImp*	GetForm();
    FX_BOOL	ContinueModal();
    FWL_ERR	EndModalLoop();
    FX_BOOL TranslateAccelerator(CFWL_Message *pMessage);
    FWL_ERR	SetMainForm(CFWL_WidgetImp *pForm);
protected:
    void GenerateCommondEvent(FX_DWORD dwCommand);

    CFWL_WidgetImp	*m_pForm;
    FX_BOOL			m_bContinueModal;
};
class CFWL_NoteDriver
{
public:
    CFWL_NoteDriver();
    ~CFWL_NoteDriver();
    virtual FX_BOOL		SendNote(CFWL_Note *pNote);
    virtual FX_BOOL		PostMessage(CFWL_Message *pMessage);
    virtual FWL_ERR		RegisterEventTarget(IFWL_Widget *pListener, IFWL_Widget *pEventSource = NULL, FX_DWORD dwFilter = FWL_EVENT_ALL_MASK);
    virtual FWL_ERR		UnregisterEventTarget(IFWL_Widget *pListener);
    virtual	void		ClearEventTargets(FX_BOOL bRemoveAll);
    virtual int32_t	GetQueueMaxSize() const;
    virtual FWL_ERR		SetQueueMaxSize(const int32_t size);
    virtual IFWL_NoteThread* GetOwnerThread() const;
    virtual FWL_ERR		PushNoteLoop(IFWL_NoteLoop *pNoteLoop);
    virtual IFWL_NoteLoop* PopNoteLoop();
    virtual FX_BOOL		SetFocus(IFWL_Widget *pFocus, FX_BOOL bNotify = FALSE);
    virtual	FWL_ERR		Run();
    IFWL_Widget*		GetFocus();
    IFWL_Widget*		GetHover();
    void				SetHover(IFWL_Widget *pHover);
    void				SetGrab(IFWL_Widget *pGrab, FX_BOOL bSet);
    void				NotifyTargetHide(IFWL_Widget *pNoteTarget);
    void				NotifyTargetDestroy(IFWL_Widget *pNoteTarget);
    void				NotifyFullScreenMode(IFWL_Widget *pNoteTarget, FX_BOOL bFullScreen);
    FWL_ERR				RegisterForm(CFWL_WidgetImp *pForm);
    FWL_ERR				UnRegisterForm(CFWL_WidgetImp *pForm);
    FX_BOOL				QueueMessage(CFWL_Message *pMessage);
    FX_BOOL				UnqueueMessage(CFWL_NoteLoop *pNoteLoop);
    CFWL_NoteLoop*		GetTopLoop();
    int32_t            CountLoop();
    void                SetHook(FWLMessageHookCallback callback, void* info);
    FX_BOOL				ProcessMessage(CFWL_Message *pMessage);
protected:
    FX_BOOL				DispatchMessage(CFWL_Message *pMessage, IFWL_Widget *pMessageForm);
    FX_BOOL				DoActivate(CFWL_MsgActivate *pMsg, IFWL_Widget *pMessageForm);
    FX_BOOL				DoDeactivate(CFWL_MsgDeactivate *pMsg, IFWL_Widget *pMessageForm);
    FX_BOOL				DoSetFocus(CFWL_MsgSetFocus *pMsg, IFWL_Widget *pMessageForm);
    FX_BOOL				DoKillFocus(CFWL_MsgKillFocus *pMsg, IFWL_Widget *pMessageForm);
    FX_BOOL				DoKey(CFWL_MsgKey *pMsg, IFWL_Widget *pMessageForm);
    FX_BOOL				DoMouse(CFWL_MsgMouse *pMsg, IFWL_Widget *pMessageForm);
    FX_BOOL				DoWheel(CFWL_MsgMouseWheel *pMsg, IFWL_Widget *pMessageForm);
    FX_BOOL				DoSize(CFWL_MsgSize *pMsg);
    FX_BOOL				DoWindowMove(CFWL_MsgWindowMove *pMsg, IFWL_Widget *pMessageForm);
    FX_BOOL				DoDragFiles(CFWL_MsgDropFiles *pMsg, IFWL_Widget *pMessageForm);
    FX_BOOL				DoMouseEx(CFWL_MsgMouse *pMsg, IFWL_Widget *pMessageForm);
    void				MouseSecondary(CFWL_MsgMouse *pMsg);
    FX_BOOL				IsValidMessage(CFWL_Message *pMessage);
    IFWL_Widget*		GetMessageForm(IFWL_Widget *pDstTarget);
    void				ClearInvalidEventTargets(FX_BOOL bRemoveAll);
    CFX_PtrArray		m_forms;
    CFX_PtrArray		m_noteQueue;
    CFX_PtrArray		m_noteLoopQueue;
    CFX_MapPtrToPtr		m_eventTargets;
    int32_t			m_sendEventCalled;
    int32_t			m_maxSize;
    FX_BOOL				m_bFullScreen;
    IFWL_Widget			*m_pHover;
    IFWL_Widget			*m_pFocus;
    IFWL_Widget			*m_pGrab;
    CFWL_NoteLoop		*m_pNoteLoop;
    FWLMessageHookCallback m_hook;
    void*              m_hookInfo;
};
typedef CFX_MapPtrTemplate<void*, FX_DWORD> CFWL_EventSource;
class CFWL_EventTarget
{
public:
    CFWL_EventTarget(CFWL_NoteDriver *pNoteDriver, IFWL_Widget *pListener)
        : m_pNoteDriver(pNoteDriver)
        , m_pListener(pListener)
        , m_bInvalid(FALSE)
    {
    }
    ~CFWL_EventTarget();
    int32_t SetEventSource(IFWL_Widget *pSource, FX_DWORD dwFilter = FWL_EVENT_ALL_MASK);
    FX_BOOL  ProcessEvent(CFWL_Event *pEvent);
    FX_BOOL  IsFilterEvent(CFWL_Event *pEvent, FX_DWORD dwFilter);
    FX_BOOL	 IsInvalid()
    {
        return m_bInvalid;
    }
    void	 FlagInvalid()
    {
        m_bInvalid = TRUE;
    }
protected:
    CFWL_EventSource m_eventSources;
    IFWL_Widget *m_pListener;
    CFWL_NoteDriver *m_pNoteDriver;
    FX_BOOL	m_bInvalid;
};
class CFWL_ToolTipContainer
{
public:
    static CFWL_ToolTipContainer* getInstance();
    static void DeleteInstance();

    FX_ERR		AddToolTipTarget(IFWL_ToolTipTarget *pTarget);
    FX_ERR		RemoveToolTipTarget(IFWL_ToolTipTarget *pTarget);
    IFWL_ToolTipTarget* GetCurrentToolTipTarget();

    FX_BOOL HasToolTip(IFWL_Widget *pWidget);

    FX_BOOL ProcessEnter(CFWL_EvtMouse *pEvt, IFWL_Widget *pOwner);
    FX_BOOL ProcessLeave(CFWL_EvtMouse *pEvt);

    FX_ERR  SetToolTipInitialDelay(int32_t iDelayTime);
    FX_ERR  SetToolTipAutoPopDelay(int32_t iDelayTime);

protected:
    CFWL_ToolTipContainer();
    virtual ~CFWL_ToolTipContainer();

    IFWL_ToolTipTarget		*pCurTarget;
    CFWL_ToolTipImp			*m_pToolTipImp;
    CFWL_CoreToopTipDP		*m_ToolTipDp;
    CFX_PtrArray			m_arrWidget;

private:
    static CFWL_ToolTipContainer* s_pInstance;
};
#endif