// 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_INCLUDE_FXFA_WIDGET_H_ #define XFA_FXFA_INCLUDE_FXFA_WIDGET_H_ #include "core/fxcrt/include/fx_coordinates.h" #include "core/fxge/include/fx_dib.h" #include "xfa/fxfa/parser/cxfa_box.h" #include "xfa/fxfa/parser/cxfa_event.h" #include "xfa/fxfa/parser/cxfa_image.h" #include "xfa/fxfa/parser/cxfa_margin.h" #include "xfa/fxfa/parser/cxfa_script.h" #include "xfa/fxfa/parser/cxfa_value.h" #include "xfa/fxfa/parser/cxfa_widgetdata.h" class CFGAS_GEFont; class CXFA_EventParam; class CXFA_FFApp; class CXFA_FFDoc; class CXFA_FFDocView; class CXFA_FFWidget; class CXFA_Node; class CXFA_TextLayout; class CXFA_WidgetLayoutData; class IXFA_AppProvider; class CXFA_WidgetAcc : public CXFA_WidgetData { public: CXFA_WidgetAcc(CXFA_FFDocView* pDocView, CXFA_Node* pNode); ~CXFA_WidgetAcc(); FX_BOOL GetName(CFX_WideString& wsName, int32_t iNameType = 0); FX_BOOL ProcessValueChanged(); void ResetData(); void SetImageEdit(const CFX_WideString& wsContentType, const CFX_WideString& wsHref, const CFX_WideString& wsData); CXFA_WidgetAcc* GetExclGroup(); CXFA_FFDocView* GetDocView(); CXFA_FFDoc* GetDoc(); CXFA_FFApp* GetApp(); IXFA_AppProvider* GetAppProvider(); int32_t ProcessEvent(int32_t iActivity, CXFA_EventParam* pEventParam); int32_t ProcessEvent(CXFA_Event& event, CXFA_EventParam* pEventParam); int32_t ProcessCalculate(); int32_t ProcessValidate(int32_t iFlags = 0); int32_t ExecuteScript(CXFA_Script script, CXFA_EventParam* pEventParam, CFXJSE_Value** pRetValue = nullptr); CXFA_FFWidget* GetNextWidget(CXFA_FFWidget* pWidget); void StartWidgetLayout(FX_FLOAT& fCalcWidth, FX_FLOAT& fCalcHeight); FX_BOOL FindSplitPos(int32_t iBlockIndex, FX_FLOAT& fCalcHeight); FX_BOOL LoadCaption(); void LoadText(); FX_BOOL LoadImageImage(); FX_BOOL LoadImageEditImage(); void GetImageDpi(int32_t& iImageXDpi, int32_t& iImageYDpi); void GetImageEditDpi(int32_t& iImageXDpi, int32_t& iImageYDpi); CXFA_TextLayout* GetCaptionTextLayout(); CXFA_TextLayout* GetTextLayout(); CFX_DIBitmap* GetImageImage(); CFX_DIBitmap* GetImageEditImage(); void SetImageImage(CFX_DIBitmap* newImage); void SetImageEditImage(CFX_DIBitmap* newImage); void UpdateUIDisplay(CXFA_FFWidget* pExcept = nullptr); CXFA_Node* GetDatasets(); CFGAS_GEFont* GetFDEFont(); FX_FLOAT GetFontSize(); FX_ARGB GetTextColor(); FX_FLOAT GetLineHeight(); CXFA_WidgetLayoutData* GetWidgetLayoutData(); protected: void ProcessScriptTestValidate(CXFA_Validate validate, int32_t iRet, CFXJSE_Value* pRetValue, FX_BOOL bVersionFlag); int32_t ProcessFormatTestValidate(CXFA_Validate validate, FX_BOOL bVersionFlag); int32_t ProcessNullTestValidate(CXFA_Validate validate, int32_t iFlags, FX_BOOL bVersionFlag); void GetValidateCaptionName(CFX_WideString& wsCaptionName, FX_BOOL bVersionFlag); void GetValidateMessage(IXFA_AppProvider* pAppProvider, CFX_WideString& wsMessage, FX_BOOL bError, FX_BOOL bVersionFlag); void CalcCaptionSize(CFX_SizeF& szCap); FX_BOOL CalculateFieldAutoSize(CFX_SizeF& size); FX_BOOL CalculateWidgetAutoSize(CFX_SizeF& size); FX_BOOL CalculateTextEditAutoSize(CFX_SizeF& size); FX_BOOL CalculateCheckButtonAutoSize(CFX_SizeF& size); FX_BOOL CalculatePushButtonAutoSize(CFX_SizeF& size); FX_BOOL CalculateImageEditAutoSize(CFX_SizeF& size); FX_BOOL CalculateImageAutoSize(CFX_SizeF& size); FX_BOOL CalculateTextAutoSize(CFX_SizeF& size); FX_FLOAT CalculateWidgetAutoHeight(FX_FLOAT fHeightCalc); FX_FLOAT CalculateWidgetAutoWidth(FX_FLOAT fWidthCalc); FX_FLOAT GetWidthWithoutMargin(FX_FLOAT fWidthCalc); FX_FLOAT GetHeightWithoutMargin(FX_FLOAT fHeightCalc); void CalculateTextContentSize(CFX_SizeF& size); void CalculateAccWidthAndHeight(XFA_Element eUIType, FX_FLOAT& fWidth, FX_FLOAT& fCalcHeight); void InitLayoutData(); void StartTextLayout(FX_FLOAT& fCalcWidth, FX_FLOAT& fCalcHeight); CXFA_FFDocView* m_pDocView; std::unique_ptr<CXFA_WidgetLayoutData> m_pLayoutData; uint32_t m_nRecursionDepth; }; #endif // XFA_FXFA_INCLUDE_FXFA_WIDGET_H_