Home | History | Annotate | Download | only in fxfa
      1 // Copyright 2014 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 XFA_FXFA_CXFA_WIDGETACC_H_
      8 #define XFA_FXFA_CXFA_WIDGETACC_H_
      9 
     10 #include <memory>
     11 #include <utility>
     12 #include <vector>
     13 
     14 #include "core/fxcrt/fx_coordinates.h"
     15 #include "core/fxcrt/fx_string.h"
     16 #include "core/fxcrt/fx_system.h"
     17 #include "core/fxcrt/retain_ptr.h"
     18 #include "core/fxge/dib/cfx_dibitmap.h"
     19 #include "core/fxge/fx_dib.h"
     20 #include "xfa/fxfa/fxfa_basic.h"
     21 
     22 enum XFA_CHECKSTATE {
     23   XFA_CHECKSTATE_On = 0,
     24   XFA_CHECKSTATE_Off = 1,
     25   XFA_CHECKSTATE_Neutral = 2,
     26 };
     27 
     28 enum XFA_VALUEPICTURE {
     29   XFA_VALUEPICTURE_Raw = 0,
     30   XFA_VALUEPICTURE_Display,
     31   XFA_VALUEPICTURE_Edit,
     32   XFA_VALUEPICTURE_DataBind,
     33 };
     34 
     35 class CFGAS_GEFont;
     36 class CXFA_Bind;
     37 class CXFA_Border;
     38 class CXFA_Calculate;
     39 class CXFA_Caption;
     40 class CXFA_Event;
     41 class CXFA_EventParam;
     42 class CXFA_FFApp;
     43 class CXFA_FFDoc;
     44 class CXFA_FFDocView;
     45 class CXFA_FFWidget;
     46 class CXFA_Font;
     47 class CXFA_Margin;
     48 class CXFA_Node;
     49 class CXFA_Script;
     50 class CXFA_Para;
     51 class CXFA_TextLayout;
     52 class CXFA_Value;
     53 class CXFA_Validate;
     54 class CXFA_WidgetLayoutData;
     55 class IFX_Locale;
     56 
     57 class CXFA_WidgetAcc {
     58  public:
     59   explicit CXFA_WidgetAcc(CXFA_Node* pNode);
     60   ~CXFA_WidgetAcc();
     61 
     62   void ResetData();
     63 
     64   CXFA_FFWidget* GetNextWidget(CXFA_FFWidget* pWidget);
     65   void StartWidgetLayout(CXFA_FFDoc* doc,
     66                          float& fCalcWidth,
     67                          float& fCalcHeight);
     68   bool FindSplitPos(CXFA_FFDocView* docView,
     69                     int32_t iBlockIndex,
     70                     float& fCalcHeight);
     71 
     72   bool LoadCaption(CXFA_FFDoc* doc);
     73   CXFA_TextLayout* GetCaptionTextLayout();
     74 
     75   void LoadText(CXFA_FFDoc* doc);
     76   CXFA_TextLayout* GetTextLayout();
     77 
     78   bool LoadImageImage(CXFA_FFDoc* doc);
     79   bool LoadImageEditImage(CXFA_FFDoc* doc);
     80   void GetImageDpi(int32_t& iImageXDpi, int32_t& iImageYDpi);
     81   void GetImageEditDpi(int32_t& iImageXDpi, int32_t& iImageYDpi);
     82 
     83   RetainPtr<CFX_DIBitmap> GetImageImage();
     84   RetainPtr<CFX_DIBitmap> GetImageEditImage();
     85   void SetImageEdit(const WideString& wsContentType,
     86                     const WideString& wsHref,
     87                     const WideString& wsData);
     88   void SetImageImage(const RetainPtr<CFX_DIBitmap>& newImage);
     89   void SetImageEditImage(const RetainPtr<CFX_DIBitmap>& newImage);
     90   void UpdateUIDisplay(CXFA_FFDocView* docView, CXFA_FFWidget* pExcept);
     91 
     92   RetainPtr<CFGAS_GEFont> GetFDEFont(CXFA_FFDoc* doc);
     93 
     94   CXFA_Node* GetNode() const { return m_pNode; }
     95 
     96   CXFA_Node* GetUIChild();
     97   XFA_Element GetUIType();
     98   CFX_RectF GetUIMargin();
     99 
    100   bool IsOpenAccess() const;
    101   bool IsListBox();
    102   bool IsAllowNeutral();
    103   bool IsRadioButton();
    104   bool IsChoiceListAllowTextEntry();
    105   bool IsMultiLine();
    106 
    107   CXFA_Border* GetUIBorder();
    108 
    109   std::vector<CXFA_Event*> GetEventByActivity(XFA_AttributeEnum iActivity,
    110                                               bool bIsFormReady);
    111 
    112   XFA_AttributeEnum GetButtonHighlight();
    113   bool HasButtonRollover() const;
    114   bool HasButtonDown() const;
    115 
    116   bool IsCheckButtonRound();
    117   XFA_AttributeEnum GetCheckButtonMark();
    118   float GetCheckButtonSize();
    119 
    120   XFA_CHECKSTATE GetCheckState();
    121   void SetCheckState(XFA_CHECKSTATE eCheckState, bool bNotify);
    122 
    123   CXFA_Node* GetSelectedMember();
    124   CXFA_Node* SetSelectedMember(const WideStringView& wsName, bool bNotify);
    125   void SetSelectedMemberByValue(const WideStringView& wsValue,
    126                                 bool bNotify,
    127                                 bool bScriptModify,
    128                                 bool bSyncData);
    129 
    130   CXFA_Node* GetExclGroupFirstMember();
    131   CXFA_Node* GetExclGroupNextMember(CXFA_Node* pNode);
    132 
    133   int32_t CountChoiceListItems(bool bSaveValue);
    134   Optional<WideString> GetChoiceListItem(int32_t nIndex, bool bSaveValue);
    135   bool IsChoiceListMultiSelect();
    136   bool IsChoiceListCommitOnSelect();
    137   std::vector<WideString> GetChoiceListItems(bool bSaveValue);
    138 
    139   int32_t CountSelectedItems();
    140   int32_t GetSelectedItem(int32_t nIndex);
    141   std::vector<int32_t> GetSelectedItems();
    142   std::vector<WideString> GetSelectedItemsValue();
    143   void SetSelectedItems(const std::vector<int32_t>& iSelArray,
    144                         bool bNotify,
    145                         bool bScriptModify,
    146                         bool bSyncData);
    147   void InsertItem(const WideString& wsLabel,
    148                   const WideString& wsValue,
    149                   bool bNotify);
    150   bool DeleteItem(int32_t nIndex, bool bNotify, bool bScriptModify);
    151   void ClearAllSelections();
    152 
    153   bool GetItemState(int32_t nIndex);
    154   void SetItemState(int32_t nIndex,
    155                     bool bSelected,
    156                     bool bNotify,
    157                     bool bScriptModify,
    158                     bool bSyncData);
    159 
    160   WideString GetItemValue(const WideStringView& wsLabel);
    161 
    162   bool IsHorizontalScrollPolicyOff();
    163   bool IsVerticalScrollPolicyOff();
    164   Optional<int32_t> GetNumberOfCells();
    165 
    166   bool SetValue(XFA_VALUEPICTURE eValueType, const WideString& wsValue);
    167   WideString GetValue(XFA_VALUEPICTURE eValueType);
    168 
    169   WideString GetPictureContent(XFA_VALUEPICTURE ePicture);
    170   IFX_Locale* GetLocale();
    171 
    172   WideString GetNormalizeDataValue(const WideString& wsValue);
    173   WideString GetFormatDataValue(const WideString& wsValue);
    174   WideString NormalizeNumStr(const WideString& wsValue);
    175 
    176   WideString GetPasswordChar();
    177   std::pair<XFA_Element, int32_t> GetMaxChars();
    178   int32_t GetFracDigits();
    179   int32_t GetLeadDigits();
    180 
    181   WideString NumericLimit(const WideString& wsValue,
    182                           int32_t iLead,
    183                           int32_t iTread) const;
    184 
    185   bool IsPreNull() const { return m_bPreNull; }
    186   void SetPreNull(bool val) { m_bPreNull = val; }
    187   bool IsNull() const { return m_bIsNull; }
    188   void SetIsNull(bool val) { m_bIsNull = val; }
    189 
    190  private:
    191   void CalcCaptionSize(CXFA_FFDoc* doc, CFX_SizeF& szCap);
    192   bool CalculateFieldAutoSize(CXFA_FFDoc* doc, CFX_SizeF& size);
    193   bool CalculateWidgetAutoSize(CFX_SizeF& size);
    194   bool CalculateTextEditAutoSize(CXFA_FFDoc* doc, CFX_SizeF& size);
    195   bool CalculateCheckButtonAutoSize(CXFA_FFDoc* doc, CFX_SizeF& size);
    196   bool CalculatePushButtonAutoSize(CXFA_FFDoc* doc, CFX_SizeF& size);
    197   CFX_SizeF CalculateImageSize(float img_width,
    198                                float img_height,
    199                                float dpi_x,
    200                                float dpi_y);
    201   bool CalculateImageEditAutoSize(CXFA_FFDoc* doc, CFX_SizeF& size);
    202   bool CalculateImageAutoSize(CXFA_FFDoc* doc, CFX_SizeF& size);
    203   float CalculateWidgetAutoHeight(float fHeightCalc);
    204   float CalculateWidgetAutoWidth(float fWidthCalc);
    205   float GetWidthWithoutMargin(float fWidthCalc);
    206   float GetHeightWithoutMargin(float fHeightCalc);
    207   void CalculateTextContentSize(CXFA_FFDoc* doc, CFX_SizeF& size);
    208   void CalculateAccWidthAndHeight(CXFA_FFDoc* doc,
    209                                   XFA_Element eUIType,
    210                                   float& fWidth,
    211                                   float& fCalcHeight);
    212   void InitLayoutData();
    213   void StartTextLayout(CXFA_FFDoc* doc, float& fCalcWidth, float& fCalcHeight);
    214 
    215   void InsertListTextItem(CXFA_Node* pItems,
    216                           const WideString& wsText,
    217                           int32_t nIndex);
    218   WideString FormatNumStr(const WideString& wsValue, IFX_Locale* pLocale);
    219   void GetItemLabel(const WideStringView& wsValue, WideString& wsLabel);
    220 
    221   std::unique_ptr<CXFA_WidgetLayoutData> m_pLayoutData;
    222   bool m_bIsNull;
    223   bool m_bPreNull;
    224   CXFA_Node* m_pUiChildNode;
    225   XFA_Element m_eUIType;
    226   CXFA_Node* m_pNode;
    227 };
    228 
    229 #endif  // XFA_FXFA_CXFA_WIDGETACC_H_
    230