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