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 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
|
// 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 FPDFSDK_FORMFILLER_CFFL_INTERACTIVEFORMFILLER_H_
#define FPDFSDK_FORMFILLER_CFFL_INTERACTIVEFORMFILLER_H_
#include <map>
#include <memory>
#include "fpdfsdk/cpdfsdk_annot.h"
#include "fpdfsdk/fsdk_define.h"
#include "fpdfsdk/pdfwindow/PWL_Edit.h"
class CFFL_FormFiller;
class CPDFSDK_FormFillEnvironment;
class CPDFSDK_PageView;
class CPDFSDK_Widget;
class CFFL_InteractiveFormFiller : public IPWL_Filler_Notify {
public:
explicit CFFL_InteractiveFormFiller(
CPDFSDK_FormFillEnvironment* pFormFillEnv);
~CFFL_InteractiveFormFiller() override;
bool Annot_HitTest(CPDFSDK_PageView* pPageView,
CPDFSDK_Annot* pAnnot,
CFX_FloatPoint point);
FX_RECT GetViewBBox(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot);
void OnDraw(CPDFSDK_PageView* pPageView,
CPDFSDK_Annot* pAnnot,
CFX_RenderDevice* pDevice,
CFX_Matrix* pUser2Device);
void OnDelete(CPDFSDK_Annot* pAnnot);
void OnMouseEnter(CPDFSDK_PageView* pPageView,
CPDFSDK_Annot::ObservedPtr* pAnnot,
uint32_t nFlag);
void OnMouseExit(CPDFSDK_PageView* pPageView,
CPDFSDK_Annot::ObservedPtr* pAnnot,
uint32_t nFlag);
bool OnLButtonDown(CPDFSDK_PageView* pPageView,
CPDFSDK_Annot::ObservedPtr* pAnnot,
uint32_t nFlags,
const CFX_FloatPoint& point);
bool OnLButtonUp(CPDFSDK_PageView* pPageView,
CPDFSDK_Annot::ObservedPtr* pAnnot,
uint32_t nFlags,
const CFX_FloatPoint& point);
bool OnLButtonDblClk(CPDFSDK_PageView* pPageView,
CPDFSDK_Annot::ObservedPtr* pAnnot,
uint32_t nFlags,
const CFX_FloatPoint& point);
bool OnMouseMove(CPDFSDK_PageView* pPageView,
CPDFSDK_Annot::ObservedPtr* pAnnot,
uint32_t nFlags,
const CFX_FloatPoint& point);
bool OnMouseWheel(CPDFSDK_PageView* pPageView,
CPDFSDK_Annot::ObservedPtr* pAnnot,
uint32_t nFlags,
short zDelta,
const CFX_FloatPoint& point);
bool OnRButtonDown(CPDFSDK_PageView* pPageView,
CPDFSDK_Annot::ObservedPtr* pAnnot,
uint32_t nFlags,
const CFX_FloatPoint& point);
bool OnRButtonUp(CPDFSDK_PageView* pPageView,
CPDFSDK_Annot::ObservedPtr* pAnnot,
uint32_t nFlags,
const CFX_FloatPoint& point);
bool OnKeyDown(CPDFSDK_Annot* pAnnot, uint32_t nKeyCode, uint32_t nFlags);
bool OnChar(CPDFSDK_Annot* pAnnot, uint32_t nChar, uint32_t nFlags);
bool OnSetFocus(CPDFSDK_Annot::ObservedPtr* pAnnot, uint32_t nFlag);
bool OnKillFocus(CPDFSDK_Annot::ObservedPtr* pAnnot, uint32_t nFlag);
CFFL_FormFiller* GetFormFiller(CPDFSDK_Annot* pAnnot, bool bRegister);
void RemoveFormFiller(CPDFSDK_Annot* pAnnot);
static bool IsVisible(CPDFSDK_Widget* pWidget);
static bool IsReadOnly(CPDFSDK_Widget* pWidget);
static bool IsFillingAllowed(CPDFSDK_Widget* pWidget);
static bool IsValidAnnot(CPDFSDK_PageView* pPageView, CPDFSDK_Annot* pAnnot);
void OnKeyStrokeCommit(CPDFSDK_Annot::ObservedPtr* pWidget,
CPDFSDK_PageView* pPageView,
bool& bRC,
bool& bExit,
uint32_t nFlag);
void OnValidate(CPDFSDK_Annot::ObservedPtr* pWidget,
CPDFSDK_PageView* pPageView,
bool& bRC,
bool& bExit,
uint32_t nFlag);
void OnCalculate(CPDFSDK_Widget* pWidget,
CPDFSDK_PageView* pPageView,
bool& bExit,
uint32_t nFlag);
void OnFormat(CPDFSDK_Widget* pWidget,
CPDFSDK_PageView* pPageView,
bool& bExit,
uint32_t nFlag);
void OnButtonUp(CPDFSDK_Annot::ObservedPtr* pWidget,
CPDFSDK_PageView* pPageView,
bool& bReset,
bool& bExit,
uint32_t nFlag);
#ifdef PDF_ENABLE_XFA
void OnClick(CPDFSDK_Widget* pWidget,
CPDFSDK_PageView* pPageView,
bool& bReset,
bool& bExit,
uint32_t nFlag);
void OnFull(CPDFSDK_Widget* pWidget,
CPDFSDK_PageView* pPageView,
bool& bReset,
bool& bExit,
uint32_t nFlag);
void OnPreOpen(CPDFSDK_Widget* pWidget,
CPDFSDK_PageView* pPageView,
bool& bReset,
bool& bExit,
uint32_t nFlag);
void OnPostOpen(CPDFSDK_Widget* pWidget,
CPDFSDK_PageView* pPageView,
bool& bReset,
bool& bExit,
uint32_t nFlag);
#endif // PDF_ENABLE_XFA
private:
using CFFL_Widget2Filler =
std::map<CPDFSDK_Annot*, std::unique_ptr<CFFL_FormFiller>>;
// IPWL_Filler_Notify:
void QueryWherePopup(void* pPrivateData,
FX_FLOAT fPopupMin,
FX_FLOAT fPopupMax,
int32_t& nRet,
FX_FLOAT& fPopupRet) override;
void OnBeforeKeyStroke(void* pPrivateData,
CFX_WideString& strChange,
const CFX_WideString& strChangeEx,
int nSelStart,
int nSelEnd,
bool bKeyDown,
bool& bRC,
bool& bExit,
uint32_t nFlag) override;
#ifdef PDF_ENABLE_XFA
void OnPopupPreOpen(void* pPrivateData, bool& bExit, uint32_t nFlag) override;
void OnPopupPostOpen(void* pPrivateData,
bool& bExit,
uint32_t nFlag) override;
void SetFocusAnnotTab(CPDFSDK_Annot* pWidget, bool bSameField, bool bNext);
#endif // PDF_ENABLE_XFA
void UnRegisterFormFiller(CPDFSDK_Annot* pAnnot);
CPDFSDK_FormFillEnvironment* const m_pFormFillEnv;
CFFL_Widget2Filler m_Maps;
bool m_bNotifying;
};
class CFFL_PrivateData {
public:
CPDFSDK_Widget* pWidget;
CPDFSDK_PageView* pPageView;
int nWidgetAge;
int nValueAge;
};
#endif // FPDFSDK_FORMFILLER_CFFL_INTERACTIVEFORMFILLER_H_
|