| // Copyright 2016 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_CPDFSDK_WIDGET_H_ |
| #define FPDFSDK_CPDFSDK_WIDGET_H_ |
| |
| #include <set> |
| |
| #include "core/fpdfdoc/cpdf_aaction.h" |
| #include "core/fpdfdoc/cpdf_action.h" |
| #include "core/fpdfdoc/cpdf_annot.h" |
| #include "core/fxcrt/fx_coordinates.h" |
| #include "core/fxcrt/fx_string.h" |
| #include "fpdfsdk/cpdfsdk_baannot.h" |
| #include "fpdfsdk/pdfsdk_fieldaction.h" |
| #include "fpdfsdk/pdfwindow/PWL_Wnd.h" |
| |
| class CFX_RenderDevice; |
| class CPDF_Annot; |
| class CPDF_Dictionary; |
| class CPDF_FormControl; |
| class CPDF_FormField; |
| class CPDF_RenderOptions; |
| class CPDF_Stream; |
| class CPDFSDK_InterForm; |
| class CPDFSDK_PageView; |
| |
| #ifdef PDF_ENABLE_XFA |
| class CXFA_FFWidget; |
| class CXFA_FFWidgetHandler; |
| #endif // PDF_ENABLE_XFA |
| |
| class CPDFSDK_Widget : public CPDFSDK_BAAnnot { |
| public: |
| #ifdef PDF_ENABLE_XFA |
| CXFA_FFWidget* GetMixXFAWidget() const; |
| CXFA_FFWidget* GetGroupMixXFAWidget(); |
| CXFA_FFWidgetHandler* GetXFAWidgetHandler() const; |
| |
| bool HasXFAAAction(PDFSDK_XFAAActionType eXFAAAT); |
| bool OnXFAAAction(PDFSDK_XFAAActionType eXFAAAT, |
| PDFSDK_FieldAction& data, |
| CPDFSDK_PageView* pPageView); |
| |
| void Synchronize(bool bSynchronizeElse); |
| void SynchronizeXFAValue(); |
| void SynchronizeXFAItems(); |
| |
| static void SynchronizeXFAValue(CXFA_FFDocView* pXFADocView, |
| CXFA_FFWidget* hWidget, |
| CPDF_FormField* pFormField, |
| CPDF_FormControl* pFormControl); |
| static void SynchronizeXFAItems(CXFA_FFDocView* pXFADocView, |
| CXFA_FFWidget* hWidget, |
| CPDF_FormField* pFormField, |
| CPDF_FormControl* pFormControl); |
| #endif // PDF_ENABLE_XFA |
| |
| CPDFSDK_Widget(CPDF_Annot* pAnnot, |
| CPDFSDK_PageView* pPageView, |
| CPDFSDK_InterForm* pInterForm); |
| ~CPDFSDK_Widget() override; |
| |
| bool IsSignatureWidget() const override; |
| CPDF_Action GetAAction(CPDF_AAction::AActionType eAAT) override; |
| bool IsAppearanceValid() override; |
| |
| int GetLayoutOrder() const override; |
| |
| int GetFieldType() const; |
| int GetFieldFlags() const; |
| int GetRotate() const; |
| |
| bool GetFillColor(FX_COLORREF& color) const; |
| bool GetBorderColor(FX_COLORREF& color) const; |
| bool GetTextColor(FX_COLORREF& color) const; |
| FX_FLOAT GetFontSize() const; |
| |
| int GetSelectedIndex(int nIndex) const; |
| #ifndef PDF_ENABLE_XFA |
| CFX_WideString GetValue() const; |
| #else |
| CFX_WideString GetValue(bool bDisplay = true) const; |
| #endif // PDF_ENABLE_XFA |
| CFX_WideString GetDefaultValue() const; |
| CFX_WideString GetOptionLabel(int nIndex) const; |
| int CountOptions() const; |
| bool IsOptionSelected(int nIndex) const; |
| int GetTopVisibleIndex() const; |
| bool IsChecked() const; |
| int GetAlignment() const; |
| int GetMaxLen() const; |
| #ifdef PDF_ENABLE_XFA |
| CFX_WideString GetName() const; |
| #endif // PDF_ENABLE_XFA |
| CFX_WideString GetAlternateName() const; |
| |
| void SetCheck(bool bChecked, bool bNotify); |
| void SetValue(const CFX_WideString& sValue, bool bNotify); |
| void SetDefaultValue(const CFX_WideString& sValue); |
| void SetOptionSelection(int index, bool bSelected, bool bNotify); |
| void ClearSelection(bool bNotify); |
| void SetTopVisibleIndex(int index); |
| |
| #ifdef PDF_ENABLE_XFA |
| void ResetAppearance(bool bValueChanged); |
| #endif // PDF_ENABLE_XFA |
| void ResetAppearance(const CFX_WideString* sValue, bool bValueChanged); |
| void ResetFieldAppearance(bool bValueChanged); |
| void UpdateField(); |
| CFX_WideString OnFormat(bool& bFormatted); |
| |
| bool OnAAction(CPDF_AAction::AActionType type, |
| PDFSDK_FieldAction& data, |
| CPDFSDK_PageView* pPageView); |
| |
| CPDFSDK_InterForm* GetInterForm() const { return m_pInterForm; } |
| CPDF_FormField* GetFormField() const; |
| CPDF_FormControl* GetFormControl() const; |
| static CPDF_FormControl* GetFormControl(CPDF_InterForm* pInterForm, |
| const CPDF_Dictionary* pAnnotDict); |
| |
| void DrawShadow(CFX_RenderDevice* pDevice, CPDFSDK_PageView* pPageView); |
| |
| void SetAppModified(); |
| void ClearAppModified(); |
| bool IsAppModified() const; |
| |
| int32_t GetAppearanceAge() const; |
| int32_t GetValueAge() const; |
| |
| bool IsWidgetAppearanceValid(CPDF_Annot::AppearanceMode mode); |
| void DrawAppearance(CFX_RenderDevice* pDevice, |
| const CFX_Matrix* pUser2Device, |
| CPDF_Annot::AppearanceMode mode, |
| const CPDF_RenderOptions* pOptions) override; |
| |
| bool HitTest(FX_FLOAT pageX, FX_FLOAT pageY); |
| |
| private: |
| void ResetAppearance_PushButton(); |
| void ResetAppearance_CheckBox(); |
| void ResetAppearance_RadioButton(); |
| void ResetAppearance_ComboBox(const CFX_WideString* sValue); |
| void ResetAppearance_ListBox(); |
| void ResetAppearance_TextField(const CFX_WideString* sValue); |
| |
| CFX_FloatRect GetClientRect() const; |
| CFX_FloatRect GetRotatedRect() const; |
| |
| CFX_ByteString GetBackgroundAppStream() const; |
| CFX_ByteString GetBorderAppStream() const; |
| CFX_Matrix GetMatrix() const; |
| |
| CPWL_Color GetTextPWLColor() const; |
| CPWL_Color GetBorderPWLColor() const; |
| CPWL_Color GetFillPWLColor() const; |
| |
| void AddImageToAppearance(const CFX_ByteString& sAPType, CPDF_Stream* pImage); |
| void RemoveAppearance(const CFX_ByteString& sAPType); |
| |
| CPDFSDK_InterForm* const m_pInterForm; |
| bool m_bAppModified; |
| int32_t m_nAppAge; |
| int32_t m_nValueAge; |
| |
| #ifdef PDF_ENABLE_XFA |
| mutable CXFA_FFWidget* m_hMixXFAWidget; |
| mutable CXFA_FFWidgetHandler* m_pWidgetHandler; |
| #endif // PDF_ENABLE_XFA |
| }; |
| |
| #endif // FPDFSDK_CPDFSDK_WIDGET_H_ |