4fd2bd84eab971e50fcd2bcbe66b56635773c1ed
[pdfium.git] / fpdfsdk / src / formfiller / FFL_Notify.cpp
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 // #include "../../include/formfiller/FormFiller.h"
8 #include "../../include/formfiller/FFL_FormFiller.h"
9 #include "../../include/formfiller/FFL_Notify.h"
10 // #include "../../include/formfiller/FFL_ComboBox.h"
11 // #include "../../include/formfiller/FFL_Module.h"
12
13 /* -------------------------------- CFFL_Notify ------------------------------ */
14
15 //#pragma warning(disable: 4800)
16
17 CFFL_Notify::CFFL_Notify(CFFL_FormFiller * pFormFiller) : 
18         m_bDoActioning(FALSE),
19         m_nNotifyFlag(0)
20 {
21         ASSERT(pFormFiller != NULL);
22 }
23
24 CFFL_Notify::~CFFL_Notify()
25 {
26 }
27
28 void CFFL_Notify::BeforeNotify()
29 {
30         m_nNotifyFlag ++;
31 }
32
33
34 void CFFL_Notify::AfterNotify()
35 {
36         m_nNotifyFlag --;
37 }
38
39 FX_BOOL CFFL_Notify::OnMouseUp(FX_BOOL & bExit)
40 {
41         BeforeNotify();
42         FX_BOOL bRet = FALSE;//DoAAction(CPDF_AAction::AActionType::ButtonUp, bExit);
43         AfterNotify();
44         return bRet;
45 }
46
47 FX_BOOL CFFL_Notify::OnMouseDown(FX_BOOL & bExit)
48 {
49         BeforeNotify();
50         FX_BOOL bRet = FALSE;//DoAAction(CPDF_AAction::AActionType::ButtonDown, bExit);
51         AfterNotify();
52         return bRet;
53 }
54
55 FX_BOOL CFFL_Notify::OnMouseEnter(FX_BOOL & bExit)
56 {
57         BeforeNotify();
58         FX_BOOL bRet = FALSE;//DoAAction(CPDF_AAction::AActionType::CursorEnter, bExit);
59         AfterNotify();
60         return bRet;
61 }
62
63 FX_BOOL CFFL_Notify::OnMouseExit(FX_BOOL & bExit)
64 {
65         BeforeNotify();
66         FX_BOOL bRet = FALSE;//DoAAction(CPDF_AAction::AActionType::CursorExit, bExit);
67         AfterNotify();
68         return bRet;
69 }
70
71 FX_BOOL CFFL_Notify::OnSetFocus(FX_BOOL & bExit)
72 {
73         BeforeNotify();
74         FX_BOOL bRet = FALSE;//DoAAction(CPDF_AAction::AActionType::GetFocus, bExit);
75         AfterNotify();
76         return bRet;
77 }
78
79 FX_BOOL CFFL_Notify::OnKillFocus(FX_BOOL & bExit)
80 {
81         BeforeNotify();
82         FX_BOOL bRet = FALSE;//DoAAction(CPDF_AAction::AActionType::LoseFocus, bExit);
83         AfterNotify();
84         return bRet;
85 }
86
87 FX_BOOL CFFL_Notify::OnCalculate()
88 {
89         return TRUE;
90 }
91
92 FX_BOOL CFFL_Notify::OnFormat(int iCommitKey)
93 {
94         return TRUE;
95 }
96
97 FX_BOOL CFFL_Notify::OnKeyStroke(CPDF_FormField* pFormField, int nCommitKey, CFX_WideString& strValue, CFX_WideString& strChange, 
98                                                            const CFX_WideString& strChangeEx, FX_BOOL bKeyDown, FX_BOOL bModifier,
99                                                            FX_BOOL bShift, FX_BOOL bWillCommit, FX_BOOL bFieldFull, 
100                                                            int& nSelStart, int& nSelEnd, FX_BOOL& bRC)
101 {
102         return TRUE;
103 }
104
105 FX_BOOL CFFL_Notify::OnValidate(CPDF_FormField* pFormField, CFX_WideString& strValue, CFX_WideString & strChange, 
106                                                                            const CFX_WideString& strChangeEx, FX_BOOL bKeyDown, FX_BOOL bModifier,
107                                                                            FX_BOOL bShift, FX_BOOL & bRC)
108 {
109         return TRUE;
110 }
111
112 FX_BOOL CFFL_Notify::DoAAction(CPDF_AAction::AActionType eAAT, FX_BOOL & bExit)
113 {
114     if (m_bDoActioning)
115         return FALSE;
116
117     CPDF_Action action;
118     if (!FindAAction(eAAT, action))
119         return FALSE;
120
121     m_bDoActioning = TRUE;
122     ExecuteActionTree(eAAT,action,bExit);
123     m_bDoActioning = FALSE;
124     return TRUE;
125 }
126
127 FX_BOOL CFFL_Notify::ExecuteActionTree(CPDF_AAction::AActionType eAAT,CPDF_Action & action, FX_BOOL& bExit)
128 {
129         if (!ExecuteAction(eAAT,action,bExit)) return FALSE;
130         if (bExit) return TRUE;
131
132         for (int32_t i=0,sz=action.GetSubActionsCount(); i<sz; i++)
133         {
134                 CPDF_Action subaction = action.GetSubAction(i);
135                 if (!ExecuteActionTree(eAAT,subaction,bExit)) return FALSE;
136                 if (bExit) break;
137         }
138
139         return TRUE;
140 }
141
142
143 FX_BOOL CFFL_Notify::FindAAction(CPDF_AAction::AActionType eAAT,CPDF_Action & action)
144 {
145         return FALSE;
146 }
147
148 FX_BOOL CFFL_Notify::FindAAction(CPDF_AAction aaction,CPDF_AAction::AActionType eAAT,CPDF_Action & action)
149 {
150         CPDF_Action MyAction;
151
152         if (aaction.ActionExist(eAAT))
153         {
154                 MyAction = aaction.GetAction(eAAT);
155         }
156         else
157                 return FALSE;
158
159
160         if (MyAction.GetType() == CPDF_Action::Unknown)
161                 return FALSE;
162
163         action = MyAction;
164
165         return TRUE;
166 }
167
168 FX_BOOL CFFL_Notify::ExecuteAction(CPDF_AAction::AActionType eAAT,CPDF_Action & action,FX_BOOL& bExit)
169 {
170         return FALSE;
171 }
172 //#pragma warning(default: 4800)
173