| Index: xfa/fwl/core/cfwl_edit.h
|
| diff --git a/xfa/fwl/core/cfwl_edit.h b/xfa/fwl/core/cfwl_edit.h
|
| index 4570d57f6ee0cc299d1d5c7072e540746e3148a1..3c4c80759fb16711574310d3c9d87c972a720bbc 100644
|
| --- a/xfa/fwl/core/cfwl_edit.h
|
| +++ b/xfa/fwl/core/cfwl_edit.h
|
| @@ -7,34 +7,190 @@
|
| #ifndef XFA_FWL_CORE_CFWL_EDIT_H_
|
| #define XFA_FWL_CORE_CFWL_EDIT_H_
|
|
|
| +#include <deque>
|
| +#include <memory>
|
| #include <vector>
|
|
|
| +#include "xfa/fde/cfde_txtedtengine.h"
|
| +#include "xfa/fde/ifde_txtedtdorecord.h"
|
| +#include "xfa/fwl/core/cfwl_event.h"
|
| +#include "xfa/fwl/core/cfwl_scrollbar.h"
|
| #include "xfa/fwl/core/cfwl_widget.h"
|
| -#include "xfa/fwl/core/ifwl_edit.h"
|
| +#include "xfa/fxgraphics/cfx_path.h"
|
| +
|
| +#define FWL_STYLEEXT_EDT_ReadOnly (1L << 0)
|
| +#define FWL_STYLEEXT_EDT_MultiLine (1L << 1)
|
| +#define FWL_STYLEEXT_EDT_WantReturn (1L << 2)
|
| +#define FWL_STYLEEXT_EDT_NoHideSel (1L << 3)
|
| +#define FWL_STYLEEXT_EDT_AutoHScroll (1L << 4)
|
| +#define FWL_STYLEEXT_EDT_AutoVScroll (1L << 5)
|
| +#define FWL_STYLEEXT_EDT_NoRedoUndo (1L << 6)
|
| +#define FWL_STYLEEXT_EDT_Validate (1L << 7)
|
| +#define FWL_STYLEEXT_EDT_Password (1L << 8)
|
| +#define FWL_STYLEEXT_EDT_Number (1L << 9)
|
| +#define FWL_STYLEEXT_EDT_VerticalLayout (1L << 12)
|
| +#define FWL_STYLEEXT_EDT_VerticalChars (1L << 13)
|
| +#define FWL_STYLEEXT_EDT_ReverseLine (1L << 14)
|
| +#define FWL_STYLEEXT_EDT_ArabicShapes (1L << 15)
|
| +#define FWL_STYLEEXT_EDT_ExpandTab (1L << 16)
|
| +#define FWL_STYLEEXT_EDT_CombText (1L << 17)
|
| +#define FWL_STYLEEXT_EDT_HNear (0L << 18)
|
| +#define FWL_STYLEEXT_EDT_HCenter (1L << 18)
|
| +#define FWL_STYLEEXT_EDT_HFar (2L << 18)
|
| +#define FWL_STYLEEXT_EDT_VNear (0L << 20)
|
| +#define FWL_STYLEEXT_EDT_VCenter (1L << 20)
|
| +#define FWL_STYLEEXT_EDT_VFar (2L << 20)
|
| +#define FWL_STYLEEXT_EDT_Justified (1L << 22)
|
| +#define FWL_STYLEEXT_EDT_Distributed (2L << 22)
|
| +#define FWL_STYLEEXT_EDT_HAlignMask (3L << 18)
|
| +#define FWL_STYLEEXT_EDT_VAlignMask (3L << 20)
|
| +#define FWL_STYLEEXT_EDT_HAlignModeMask (3L << 22)
|
| +#define FWL_STYLEEXT_EDT_InnerCaret (1L << 24)
|
| +#define FWL_STYLEEXT_EDT_ShowScrollbarFocus (1L << 25)
|
| +#define FWL_STYLEEXT_EDT_OuterScrollbar (1L << 26)
|
| +#define FWL_STYLEEXT_EDT_LastLineHeight (1L << 27)
|
|
|
| class IFDE_TxtEdtDoRecord;
|
| +class CFWL_Edit;
|
| +class CFWL_MsgMouse;
|
| +class CFWL_WidgetProperties;
|
| +class CFWL_Caret;
|
|
|
| class CFWL_Edit : public CFWL_Widget {
|
| public:
|
| - explicit CFWL_Edit(const CFWL_App*);
|
| + CFWL_Edit(const CFWL_App* app,
|
| + std::unique_ptr<CFWL_WidgetProperties> properties,
|
| + CFWL_Widget* pOuter);
|
| ~CFWL_Edit() override;
|
|
|
| - void Initialize();
|
| + // CFWL_Widget:
|
| + FWL_Type GetClassID() const override;
|
| + void GetWidgetRect(CFX_RectF& rect, bool bAutoSize = false) override;
|
| + void Update() override;
|
| + FWL_WidgetHit HitTest(FX_FLOAT fx, FX_FLOAT fy) override;
|
| + void SetStates(uint32_t dwStates, bool bSet = true) override;
|
| + void DrawWidget(CFX_Graphics* pGraphics,
|
| + const CFX_Matrix* pMatrix = nullptr) override;
|
| + void SetThemeProvider(IFWL_ThemeProvider* pThemeProvider) override;
|
| + void OnProcessMessage(CFWL_Message* pMessage) override;
|
| + void OnProcessEvent(CFWL_Event* pEvent) override;
|
| + void OnDrawWidget(CFX_Graphics* pGraphics,
|
| + const CFX_Matrix* pMatrix) override;
|
| +
|
| + virtual void SetText(const CFX_WideString& wsText);
|
|
|
| - void SetText(const CFX_WideString& wsText);
|
| + int32_t GetTextLength() const;
|
| void GetText(CFX_WideString& wsText,
|
| int32_t nStart = 0,
|
| int32_t nCount = -1) const;
|
| + void ClearText();
|
|
|
| + void AddSelRange(int32_t nStart, int32_t nCount = -1);
|
| int32_t CountSelRanges() const;
|
| int32_t GetSelRange(int32_t nIndex, int32_t& nStart) const;
|
| -
|
| + void ClearSelections();
|
| int32_t GetLimit() const;
|
| void SetLimit(int32_t nLimit);
|
| -
|
| void SetAliasChar(FX_WCHAR wAlias);
|
| + bool Copy(CFX_WideString& wsCopy);
|
| + bool Cut(CFX_WideString& wsCut);
|
| + bool Paste(const CFX_WideString& wsPaste);
|
| + bool Redo(const IFDE_TxtEdtDoRecord* pRecord);
|
| + bool Undo(const IFDE_TxtEdtDoRecord* pRecord);
|
| + bool Undo();
|
| + bool Redo();
|
| + bool CanUndo();
|
| + bool CanRedo();
|
| +
|
| + void SetOuter(CFWL_Widget* pOuter);
|
|
|
| + void On_CaretChanged(CFDE_TxtEdtEngine* pEdit,
|
| + int32_t nPage,
|
| + bool bVisible = true);
|
| + void On_TextChanged(CFDE_TxtEdtEngine* pEdit,
|
| + FDE_TXTEDT_TEXTCHANGE_INFO& ChangeInfo);
|
| + void On_SelChanged(CFDE_TxtEdtEngine* pEdit);
|
| + bool On_PageLoad(CFDE_TxtEdtEngine* pEdit,
|
| + int32_t nPageIndex,
|
| + int32_t nPurpose);
|
| + bool On_PageUnload(CFDE_TxtEdtEngine* pEdit,
|
| + int32_t nPageIndex,
|
| + int32_t nPurpose);
|
| + void On_AddDoRecord(CFDE_TxtEdtEngine* pEdit, IFDE_TxtEdtDoRecord* pRecord);
|
| + bool On_Validate(CFDE_TxtEdtEngine* pEdit, CFX_WideString& wsText);
|
| void SetScrollOffset(FX_FLOAT fScrollOffset);
|
| +
|
| + protected:
|
| + void ShowCaret(bool bVisible, CFX_RectF* pRect = nullptr);
|
| + const CFX_RectF& GetRTClient() const { return m_rtClient; }
|
| + CFDE_TxtEdtEngine* GetTxtEdtEngine() { return &m_EdtEngine; }
|
| +
|
| + private:
|
| + void DrawTextBk(CFX_Graphics* pGraphics,
|
| + IFWL_ThemeProvider* pTheme,
|
| + const CFX_Matrix* pMatrix = nullptr);
|
| + void DrawContent(CFX_Graphics* pGraphics,
|
| + IFWL_ThemeProvider* pTheme,
|
| + const CFX_Matrix* pMatrix = nullptr);
|
| + void UpdateEditEngine();
|
| + void UpdateEditParams();
|
| + void UpdateEditLayout();
|
| + bool UpdateOffset();
|
| + bool UpdateOffset(CFWL_ScrollBar* pScrollBar, FX_FLOAT fPosChanged);
|
| + void UpdateVAlignment();
|
| + void UpdateCaret();
|
| + CFWL_ScrollBar* UpdateScroll();
|
| + void Layout();
|
| + void LayoutScrollBar();
|
| + void DeviceToEngine(CFX_PointF& pt);
|
| + void InitScrollBar(bool bVert = true);
|
| + void InitEngine();
|
| + bool ValidateNumberChar(FX_WCHAR cNum);
|
| + void InitCaret();
|
| + void ClearRecord();
|
| + bool IsShowScrollBar(bool bVert);
|
| + bool IsContentHeightOverflow();
|
| + int32_t AddDoRecord(IFDE_TxtEdtDoRecord* pRecord);
|
| + void ProcessInsertError(int32_t iError);
|
| +
|
| + void DrawSpellCheck(CFX_Graphics* pGraphics,
|
| + const CFX_Matrix* pMatrix = nullptr);
|
| + void AddSpellCheckObj(CFX_Path& PathData,
|
| + int32_t nStart,
|
| + int32_t nCount,
|
| + FX_FLOAT fOffSetX,
|
| + FX_FLOAT fOffSetY);
|
| + void DoButtonDown(CFWL_MsgMouse* pMsg);
|
| + void OnFocusChanged(CFWL_Message* pMsg, bool bSet);
|
| + void OnLButtonDown(CFWL_MsgMouse* pMsg);
|
| + void OnLButtonUp(CFWL_MsgMouse* pMsg);
|
| + void OnButtonDblClk(CFWL_MsgMouse* pMsg);
|
| + void OnMouseMove(CFWL_MsgMouse* pMsg);
|
| + void OnKeyDown(CFWL_MsgKey* pMsg);
|
| + void OnChar(CFWL_MsgKey* pMsg);
|
| + bool OnScroll(CFWL_ScrollBar* pScrollBar, FWL_SCBCODE dwCode, FX_FLOAT fPos);
|
| +
|
| + CFX_RectF m_rtClient;
|
| + CFX_RectF m_rtEngine;
|
| + CFX_RectF m_rtStatic;
|
| + FX_FLOAT m_fVAlignOffset;
|
| + FX_FLOAT m_fScrollOffsetX;
|
| + FX_FLOAT m_fScrollOffsetY;
|
| + CFDE_TxtEdtEngine m_EdtEngine;
|
| + bool m_bLButtonDown;
|
| + int32_t m_nSelStart;
|
| + int32_t m_nLimit;
|
| + FX_FLOAT m_fFontSize;
|
| + bool m_bSetRange;
|
| + int32_t m_iMax;
|
| + std::unique_ptr<CFWL_ScrollBar> m_pVertScrollBar;
|
| + std::unique_ptr<CFWL_ScrollBar> m_pHorzScrollBar;
|
| + std::unique_ptr<CFWL_Caret> m_pCaret;
|
| + CFX_WideString m_wsCache;
|
| + CFX_WideString m_wsFont;
|
| + std::deque<std::unique_ptr<IFDE_TxtEdtDoRecord>> m_DoRecords;
|
| + int32_t m_iCurRecord;
|
| + int32_t m_iMaxRecord;
|
| };
|
|
|
| #endif // XFA_FWL_CORE_CFWL_EDIT_H_
|
|
|