1// Copyright 2016 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 FPDFSDK_CPDFSDK_WIDGET_H_ 8#define FPDFSDK_CPDFSDK_WIDGET_H_ 9 10#include <set> 11 12#include "core/fpdfdoc/cpdf_aaction.h" 13#include "core/fpdfdoc/cpdf_action.h" 14#include "core/fpdfdoc/cpdf_annot.h" 15#include "core/fxcrt/fx_coordinates.h" 16#include "core/fxcrt/fx_string.h" 17#include "core/fxcrt/unowned_ptr.h" 18#include "core/fxge/cfx_color.h" 19#include "fpdfsdk/cpdfsdk_baannot.h" 20#include "fpdfsdk/pdfsdk_fieldaction.h" 21 22class CFX_RenderDevice; 23class CPDF_Annot; 24class CPDF_Dictionary; 25class CPDF_FormControl; 26class CPDF_FormField; 27class CPDF_RenderOptions; 28class CPDF_Stream; 29class CPDFSDK_InterForm; 30class CPDFSDK_PageView; 31 32#ifdef PDF_ENABLE_XFA 33class CXFA_FFWidget; 34class CXFA_FFWidgetHandler; 35#endif // PDF_ENABLE_XFA 36 37class CPDFSDK_Widget : public CPDFSDK_BAAnnot { 38 public: 39#ifdef PDF_ENABLE_XFA 40 CXFA_FFWidget* GetMixXFAWidget() const; 41 CXFA_FFWidget* GetGroupMixXFAWidget(); 42 CXFA_FFWidgetHandler* GetXFAWidgetHandler() const; 43 44 bool HasXFAAAction(PDFSDK_XFAAActionType eXFAAAT); 45 bool OnXFAAAction(PDFSDK_XFAAActionType eXFAAAT, 46 PDFSDK_FieldAction& data, 47 CPDFSDK_PageView* pPageView); 48 49 void Synchronize(bool bSynchronizeElse); 50 void SynchronizeXFAValue(); 51 void SynchronizeXFAItems(); 52 53 static void SynchronizeXFAValue(CXFA_FFDocView* pXFADocView, 54 CXFA_FFWidget* hWidget, 55 CPDF_FormField* pFormField, 56 CPDF_FormControl* pFormControl); 57 static void SynchronizeXFAItems(CXFA_FFDocView* pXFADocView, 58 CXFA_FFWidget* hWidget, 59 CPDF_FormField* pFormField, 60 CPDF_FormControl* pFormControl); 61#endif // PDF_ENABLE_XFA 62 63 CPDFSDK_Widget(CPDF_Annot* pAnnot, 64 CPDFSDK_PageView* pPageView, 65 CPDFSDK_InterForm* pInterForm); 66 ~CPDFSDK_Widget() override; 67 68 bool IsSignatureWidget() const override; 69 CPDF_Action GetAAction(CPDF_AAction::AActionType eAAT) override; 70 bool IsAppearanceValid() override; 71 72 int GetLayoutOrder() const override; 73 74 FormFieldType GetFieldType() const; 75 int GetFieldFlags() const; 76 int GetRotate() const; 77 78 bool GetFillColor(FX_COLORREF& color) const; 79 bool GetBorderColor(FX_COLORREF& color) const; 80 bool GetTextColor(FX_COLORREF& color) const; 81 float GetFontSize() const; 82 83 int GetSelectedIndex(int nIndex) const; 84#ifndef PDF_ENABLE_XFA 85 WideString GetValue() const; 86#else 87 WideString GetValue(bool bDisplay = true) const; 88#endif // PDF_ENABLE_XFA 89 WideString GetDefaultValue() const; 90 WideString GetOptionLabel(int nIndex) const; 91 int CountOptions() const; 92 bool IsOptionSelected(int nIndex) const; 93 int GetTopVisibleIndex() const; 94 bool IsChecked() const; 95 int GetAlignment() const; 96 int GetMaxLen() const; 97#ifdef PDF_ENABLE_XFA 98 WideString GetName() const; 99#endif // PDF_ENABLE_XFA 100 WideString GetAlternateName() const; 101 102 void SetCheck(bool bChecked, bool bNotify); 103 void SetValue(const WideString& sValue, bool bNotify); 104 void SetDefaultValue(const WideString& sValue); 105 void SetOptionSelection(int index, bool bSelected, bool bNotify); 106 void ClearSelection(bool bNotify); 107 void SetTopVisibleIndex(int index); 108 109#ifdef PDF_ENABLE_XFA 110 void ResetAppearance(bool bValueChanged); 111#endif // PDF_ENABLE_XFA 112 void ResetAppearance(const WideString* sValue, bool bValueChanged); 113 void ResetFieldAppearance(bool bValueChanged); 114 void UpdateField(); 115 WideString OnFormat(bool& bFormatted); 116 117 bool OnAAction(CPDF_AAction::AActionType type, 118 PDFSDK_FieldAction& data, 119 CPDFSDK_PageView* pPageView); 120 121 CPDFSDK_InterForm* GetInterForm() const { return m_pInterForm.Get(); } 122 CPDF_FormField* GetFormField() const; 123 CPDF_FormControl* GetFormControl() const; 124 static CPDF_FormControl* GetFormControl(CPDF_InterForm* pInterForm, 125 const CPDF_Dictionary* pAnnotDict); 126 127 void DrawShadow(CFX_RenderDevice* pDevice, CPDFSDK_PageView* pPageView); 128 129 void SetAppModified(); 130 void ClearAppModified(); 131 bool IsAppModified() const; 132 133 uint32_t GetAppearanceAge() const { return m_nAppearanceAge; } 134 uint32_t GetValueAge() const { return m_nValueAge; } 135 136 bool IsWidgetAppearanceValid(CPDF_Annot::AppearanceMode mode); 137 void DrawAppearance(CFX_RenderDevice* pDevice, 138 const CFX_Matrix& mtUser2Device, 139 CPDF_Annot::AppearanceMode mode, 140 const CPDF_RenderOptions* pOptions) override; 141 142 CFX_Matrix GetMatrix() const; 143 CFX_FloatRect GetClientRect() const; 144 CFX_FloatRect GetRotatedRect() const; 145 CFX_Color GetTextPWLColor() const; 146 CFX_Color GetBorderPWLColor() const; 147 CFX_Color GetFillPWLColor() const; 148 149 private: 150 UnownedPtr<CPDFSDK_InterForm> const m_pInterForm; 151 bool m_bAppModified; 152 uint32_t m_nAppearanceAge; 153 uint32_t m_nValueAge; 154 155#ifdef PDF_ENABLE_XFA 156 mutable UnownedPtr<CXFA_FFWidget> m_hMixXFAWidget; 157 mutable UnownedPtr<CXFA_FFWidgetHandler> m_pWidgetHandler; 158#endif // PDF_ENABLE_XFA 159}; 160 161#endif // FPDFSDK_CPDFSDK_WIDGET_H_ 162