| // 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 XFA_FXFA_CXFA_WIDGETACC_H_ |
| #define XFA_FXFA_CXFA_WIDGETACC_H_ |
| |
| #include <memory> |
| #include <utility> |
| #include <vector> |
| |
| #include "core/fxcrt/fx_coordinates.h" |
| #include "core/fxcrt/fx_string.h" |
| #include "core/fxcrt/fx_system.h" |
| #include "core/fxcrt/retain_ptr.h" |
| #include "core/fxge/dib/cfx_dibitmap.h" |
| #include "core/fxge/fx_dib.h" |
| #include "xfa/fxfa/fxfa_basic.h" |
| |
| enum XFA_CHECKSTATE { |
| XFA_CHECKSTATE_On = 0, |
| XFA_CHECKSTATE_Off = 1, |
| XFA_CHECKSTATE_Neutral = 2, |
| }; |
| |
| enum XFA_VALUEPICTURE { |
| XFA_VALUEPICTURE_Raw = 0, |
| XFA_VALUEPICTURE_Display, |
| XFA_VALUEPICTURE_Edit, |
| XFA_VALUEPICTURE_DataBind, |
| }; |
| |
| class CFGAS_GEFont; |
| class CXFA_Bind; |
| class CXFA_Border; |
| class CXFA_Calculate; |
| class CXFA_Caption; |
| class CXFA_Event; |
| class CXFA_EventParam; |
| class CXFA_FFApp; |
| class CXFA_FFDoc; |
| class CXFA_FFDocView; |
| class CXFA_FFWidget; |
| class CXFA_Font; |
| class CXFA_Margin; |
| class CXFA_Node; |
| class CXFA_Script; |
| class CXFA_Para; |
| class CXFA_TextLayout; |
| class CXFA_Value; |
| class CXFA_Validate; |
| class CXFA_WidgetLayoutData; |
| class IFX_Locale; |
| |
| class CXFA_WidgetAcc { |
| public: |
| explicit CXFA_WidgetAcc(CXFA_Node* pNode); |
| ~CXFA_WidgetAcc(); |
| |
| void ResetData(); |
| |
| CXFA_FFWidget* GetNextWidget(CXFA_FFWidget* pWidget); |
| void StartWidgetLayout(CXFA_FFDoc* doc, |
| float& fCalcWidth, |
| float& fCalcHeight); |
| bool FindSplitPos(CXFA_FFDocView* docView, |
| int32_t iBlockIndex, |
| float& fCalcHeight); |
| |
| bool LoadCaption(CXFA_FFDoc* doc); |
| CXFA_TextLayout* GetCaptionTextLayout(); |
| |
| void LoadText(CXFA_FFDoc* doc); |
| CXFA_TextLayout* GetTextLayout(); |
| |
| bool LoadImageImage(CXFA_FFDoc* doc); |
| bool LoadImageEditImage(CXFA_FFDoc* doc); |
| void GetImageDpi(int32_t& iImageXDpi, int32_t& iImageYDpi); |
| void GetImageEditDpi(int32_t& iImageXDpi, int32_t& iImageYDpi); |
| |
| RetainPtr<CFX_DIBitmap> GetImageImage(); |
| RetainPtr<CFX_DIBitmap> GetImageEditImage(); |
| void SetImageEdit(const WideString& wsContentType, |
| const WideString& wsHref, |
| const WideString& wsData); |
| void SetImageImage(const RetainPtr<CFX_DIBitmap>& newImage); |
| void SetImageEditImage(const RetainPtr<CFX_DIBitmap>& newImage); |
| void UpdateUIDisplay(CXFA_FFDocView* docView, CXFA_FFWidget* pExcept); |
| |
| RetainPtr<CFGAS_GEFont> GetFDEFont(CXFA_FFDoc* doc); |
| |
| CXFA_Node* GetNode() const { return m_pNode; } |
| |
| bool IsOpenAccess() const; |
| bool IsListBox(); |
| bool IsAllowNeutral(); |
| bool IsRadioButton(); |
| bool IsChoiceListAllowTextEntry(); |
| bool IsMultiLine(); |
| |
| XFA_AttributeEnum GetButtonHighlight(); |
| bool HasButtonRollover() const; |
| bool HasButtonDown() const; |
| |
| bool IsCheckButtonRound(); |
| XFA_AttributeEnum GetCheckButtonMark(); |
| float GetCheckButtonSize(); |
| |
| XFA_CHECKSTATE GetCheckState(); |
| void SetCheckState(XFA_CHECKSTATE eCheckState, bool bNotify); |
| |
| CXFA_Node* GetSelectedMember(); |
| CXFA_Node* SetSelectedMember(const WideStringView& wsName, bool bNotify); |
| void SetSelectedMemberByValue(const WideStringView& wsValue, |
| bool bNotify, |
| bool bScriptModify, |
| bool bSyncData); |
| |
| CXFA_Node* GetExclGroupFirstMember(); |
| CXFA_Node* GetExclGroupNextMember(CXFA_Node* pNode); |
| |
| int32_t CountChoiceListItems(bool bSaveValue); |
| Optional<WideString> GetChoiceListItem(int32_t nIndex, bool bSaveValue); |
| bool IsChoiceListMultiSelect(); |
| bool IsChoiceListCommitOnSelect(); |
| std::vector<WideString> GetChoiceListItems(bool bSaveValue); |
| |
| int32_t CountSelectedItems(); |
| int32_t GetSelectedItem(int32_t nIndex); |
| std::vector<int32_t> GetSelectedItems(); |
| std::vector<WideString> GetSelectedItemsValue(); |
| void SetSelectedItems(const std::vector<int32_t>& iSelArray, |
| bool bNotify, |
| bool bScriptModify, |
| bool bSyncData); |
| void InsertItem(const WideString& wsLabel, |
| const WideString& wsValue, |
| bool bNotify); |
| bool DeleteItem(int32_t nIndex, bool bNotify, bool bScriptModify); |
| void ClearAllSelections(); |
| |
| bool GetItemState(int32_t nIndex); |
| void SetItemState(int32_t nIndex, |
| bool bSelected, |
| bool bNotify, |
| bool bScriptModify, |
| bool bSyncData); |
| |
| WideString GetItemValue(const WideStringView& wsLabel); |
| |
| bool IsHorizontalScrollPolicyOff(); |
| bool IsVerticalScrollPolicyOff(); |
| Optional<int32_t> GetNumberOfCells(); |
| |
| bool SetValue(XFA_VALUEPICTURE eValueType, const WideString& wsValue); |
| WideString GetValue(XFA_VALUEPICTURE eValueType); |
| |
| WideString GetPictureContent(XFA_VALUEPICTURE ePicture); |
| WideString GetNormalizeDataValue(const WideString& wsValue); |
| WideString GetFormatDataValue(const WideString& wsValue); |
| WideString NormalizeNumStr(const WideString& wsValue); |
| |
| WideString GetPasswordChar(); |
| std::pair<XFA_Element, int32_t> GetMaxChars(); |
| int32_t GetFracDigits(); |
| int32_t GetLeadDigits(); |
| |
| WideString NumericLimit(const WideString& wsValue, |
| int32_t iLead, |
| int32_t iTread) const; |
| |
| private: |
| void CalcCaptionSize(CXFA_FFDoc* doc, CFX_SizeF& szCap); |
| bool CalculateFieldAutoSize(CXFA_FFDoc* doc, CFX_SizeF& size); |
| bool CalculateWidgetAutoSize(CFX_SizeF& size); |
| bool CalculateTextEditAutoSize(CXFA_FFDoc* doc, CFX_SizeF& size); |
| bool CalculateCheckButtonAutoSize(CXFA_FFDoc* doc, CFX_SizeF& size); |
| bool CalculatePushButtonAutoSize(CXFA_FFDoc* doc, CFX_SizeF& size); |
| CFX_SizeF CalculateImageSize(float img_width, |
| float img_height, |
| float dpi_x, |
| float dpi_y); |
| bool CalculateImageEditAutoSize(CXFA_FFDoc* doc, CFX_SizeF& size); |
| bool CalculateImageAutoSize(CXFA_FFDoc* doc, CFX_SizeF& size); |
| float CalculateWidgetAutoHeight(float fHeightCalc); |
| float CalculateWidgetAutoWidth(float fWidthCalc); |
| float GetWidthWithoutMargin(float fWidthCalc); |
| float GetHeightWithoutMargin(float fHeightCalc); |
| void CalculateTextContentSize(CXFA_FFDoc* doc, CFX_SizeF& size); |
| void CalculateAccWidthAndHeight(CXFA_FFDoc* doc, |
| XFA_Element eUIType, |
| float& fWidth, |
| float& fCalcHeight); |
| void InitLayoutData(); |
| void StartTextLayout(CXFA_FFDoc* doc, float& fCalcWidth, float& fCalcHeight); |
| |
| void InsertListTextItem(CXFA_Node* pItems, |
| const WideString& wsText, |
| int32_t nIndex); |
| WideString FormatNumStr(const WideString& wsValue, IFX_Locale* pLocale); |
| void GetItemLabel(const WideStringView& wsValue, WideString& wsLabel); |
| |
| std::unique_ptr<CXFA_WidgetLayoutData> m_pLayoutData; |
| CXFA_Node* m_pNode; |
| }; |
| |
| #endif // XFA_FXFA_CXFA_WIDGETACC_H_ |