Chromium Code Reviews| 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); |
|
npm
2016/11/23 22:48:23
Why is this virtual now but was not before?
dsinclair
2016/11/24 00:05:07
Because CFWL wasn't virtual but IFWL was.
|
| - 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_ |