Home | History | Annotate | Download | only in pdfwindow
      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 _PWL_EDIT_H_
      8 #define _PWL_EDIT_H_
      9 
     10 class IPWL_Filler_Notify;
     11 class CPWL_Edit;
     12 class IPWL_SpellCheck;
     13 
     14 class IPWL_Filler_Notify
     15 {
     16 public:
     17 	virtual void					QueryWherePopup(void* pPrivateData, FX_FLOAT fPopupMin,FX_FLOAT fPopupMax,
     18 										FX_INT32 & nRet, FX_FLOAT & fPopupRet) = 0; //nRet: (0:bottom 1:top)
     19 	virtual void					OnBeforeKeyStroke(FX_BOOL bEditOrList, void* pPrivateData, FX_INT32 nKeyCode,
     20 										CFX_WideString & strChange, const CFX_WideString& strChangeEx,
     21 										int nSelStart, int nSelEnd,
     22 										FX_BOOL bKeyDown, FX_BOOL & bRC, FX_BOOL & bExit, FX_DWORD nFlag) = 0;
     23 	virtual void					OnAfterKeyStroke(FX_BOOL bEditOrList, void* pPrivateData, FX_BOOL & bExit, FX_DWORD nFlag) = 0;
     24 };
     25 
     26 class PWL_CLASS CPWL_Edit : public CPWL_EditCtrl, public IFX_Edit_OprNotify
     27 {
     28 public:
     29 	CPWL_Edit();
     30 	virtual ~CPWL_Edit();
     31 
     32 public:
     33 	virtual CFX_ByteString			GetClassName() const;
     34 	virtual void					OnDestroy();
     35 	virtual void					OnCreated();
     36 	virtual void					RePosChildWnd();
     37 	virtual CPDF_Rect				GetClientRect() const;
     38 
     39 	virtual void					GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream);
     40 	virtual void					DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
     41 
     42 	virtual FX_BOOL					OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag);
     43 	virtual FX_BOOL					OnLButtonDblClk(const CPDF_Point & point, FX_DWORD nFlag);
     44 	virtual FX_BOOL					OnRButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
     45 	virtual FX_BOOL					OnMouseWheel(short zDelta, const CPDF_Point & point, FX_DWORD nFlag);
     46 
     47 	virtual FX_BOOL					OnKeyDown(FX_WORD nChar, FX_DWORD nFlag);
     48 	virtual FX_BOOL					OnChar(FX_WORD nChar, FX_DWORD nFlag);
     49 
     50 	virtual CPDF_Rect				GetFocusRect() const;
     51 
     52 public:
     53 	void							SetAlignFormatH(PWL_EDIT_ALIGNFORMAT_H nFormat = PEAH_LEFT, FX_BOOL bPaint = TRUE);	//0:left 1:right 2:middle
     54 	void							SetAlignFormatV(PWL_EDIT_ALIGNFORMAT_V nFormat = PEAV_TOP, FX_BOOL bPaint = TRUE);	//0:top 1:bottom 2:center
     55 
     56 	void							SetCharArray(FX_INT32 nCharArray);
     57 	void							SetLimitChar(FX_INT32 nLimitChar);
     58 
     59 	void							SetHorzScale(FX_INT32 nHorzScale, FX_BOOL bPaint = TRUE);
     60 	void							SetCharSpace(FX_FLOAT fCharSpace, FX_BOOL bPaint = TRUE);
     61 
     62 	void							SetLineLeading(FX_FLOAT fLineLeading, FX_BOOL bPaint = TRUE);
     63 
     64 	void							EnableSpellCheck(FX_BOOL bEnabled);
     65 
     66 	FX_BOOL							CanSelectAll() const;
     67 	FX_BOOL							CanClear() const;
     68 	FX_BOOL							CanCopy() const;
     69 	FX_BOOL							CanCut() const;
     70 	FX_BOOL							CanPaste() const;
     71 
     72 	virtual void					CopyText();
     73 	virtual void					PasteText();
     74 	virtual void 					CutText();
     75 
     76 	virtual void					SetText(FX_LPCWSTR csText);
     77 	void							ReplaceSel(FX_LPCWSTR csText);
     78 
     79 	CFX_ByteString					GetTextAppearanceStream(const CPDF_Point & ptOffset) const;
     80 	CFX_ByteString					GetCaretAppearanceStream(const CPDF_Point & ptOffset) const;
     81 	CFX_ByteString					GetSelectAppearanceStream(const CPDF_Point & ptOffset) const;
     82 
     83 	FX_BOOL							IsTextFull() const;
     84 
     85 	static FX_FLOAT					GetCharArrayAutoFontSize(CPDF_Font* pFont, const CPDF_Rect& rcPlate, FX_INT32 nCharArray);
     86 
     87 	void							SetFillerNotify(IPWL_Filler_Notify* pNotify) {m_pFillerNotify = pNotify;}
     88 
     89 	void							GeneratePageObjects(CPDF_PageObjects* pPageObjects,
     90 										const CPDF_Point& ptOffset, CFX_ArrayTemplate<CPDF_TextObject*>& ObjArray);
     91 	void							GeneratePageObjects(CPDF_PageObjects* pPageObjects,
     92 										const CPDF_Point& ptOffset);
     93 
     94 protected:
     95 	virtual void					OnSetFocus();
     96 	virtual void					OnKillFocus();
     97 
     98 protected:
     99 	virtual void					OnInsertWord(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace);
    100 	virtual void					OnInsertReturn(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace);
    101 	virtual void					OnBackSpace(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace);
    102 	virtual void					OnDelete(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace);
    103 	virtual void					OnClear(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace);
    104 	virtual void					OnSetText(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace);
    105 	virtual void					OnInsertText(const CPVT_WordPlace& place, const CPVT_WordPlace& oldplace);
    106 	virtual void					OnAddUndo(IFX_Edit_UndoItem* pUndoItem);
    107 
    108 private:
    109 	CPVT_WordRange					GetSelectWordRange() const;
    110 	virtual void					ShowVScrollBar(FX_BOOL bShow);
    111 	FX_BOOL							IsVScrollBarVisible() const;
    112 	void							SetParamByFlag();
    113 
    114 	FX_FLOAT						GetCharArrayAutoFontSize(FX_INT32 nCharArray);
    115 	CPDF_Point						GetWordRightBottomPoint(const CPVT_WordPlace& wpWord);
    116 
    117 	CPVT_WordRange					CombineWordRange(const CPVT_WordRange& wr1, const CPVT_WordRange& wr2);
    118 	CPVT_WordRange					GetLatinWordsRange(const CPDF_Point & point) const;
    119 	CPVT_WordRange					GetLatinWordsRange(const CPVT_WordPlace & place) const;
    120 	CPVT_WordRange					GetArabicWordsRange(const CPVT_WordPlace & place) const;
    121 	CPVT_WordRange					GetSameWordsRange(const CPVT_WordPlace & place, FX_BOOL bLatin, FX_BOOL bArabic) const;
    122 
    123 	void							AjustArabicWords(const CPVT_WordRange& wr);
    124 public:
    125 	FX_BOOL							IsProceedtoOnChar(FX_WORD nKeyCode, FX_DWORD nFlag);
    126 private:
    127 	IPWL_Filler_Notify*				m_pFillerNotify;
    128 	IPWL_SpellCheck*				m_pSpellCheck;
    129 	FX_BOOL							m_bFocus;
    130 	CPDF_Rect						m_rcOldWindow;
    131 public:
    132 	void							AttachFFLData(void* pData) {m_pFormFiller = pData;}
    133 private:
    134 	void*							m_pFormFiller;
    135 };
    136 
    137 #endif
    138 
    139