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_NOTE_H_
      8 #define FPDFSDK_INCLUDE_PDFWINDOW_PWL_NOTE_H_
      9 
     10 #include "PWL_Button.h"
     11 #include "PWL_Edit.h"
     12 #include "PWL_ListCtrl.h"
     13 #include "PWL_ScrollBar.h"
     14 #include "PWL_Wnd.h"
     15 
     16 class CPWL_Label;
     17 class CPWL_Note;
     18 class CPWL_NoteItem;
     19 class CPWL_Note_CloseBox;
     20 class CPWL_Note_Contents;
     21 class CPWL_Note_Edit;
     22 class CPWL_Note_Icon;
     23 class CPWL_Note_LBBox;
     24 class CPWL_Note_Options;
     25 class CPWL_Note_RBBox;
     26 class IPWL_NoteHandler;
     27 class IPWL_NoteItem;
     28 class IPWL_NoteNotify;
     29 class IPopup_Note;
     30 
     31 class IPWL_NoteNotify {
     32  public:
     33   virtual ~IPWL_NoteNotify() {}
     34   virtual void OnNoteMove(const FX_RECT& rtWin) = 0;
     35   virtual void OnNoteShow(FX_BOOL bShow) = 0;
     36   virtual void OnNoteActivate(FX_BOOL bActive) = 0;
     37   virtual void OnNoteClose() = 0;
     38   virtual void OnItemCreate(IPWL_NoteItem* pItem) = 0;
     39   virtual void OnItemDelete(IPWL_NoteItem* pItem) = 0;
     40   virtual void OnSetAuthorName(IPWL_NoteItem* pItem) = 0;
     41   virtual void OnSetBkColor(IPWL_NoteItem* pItem) = 0;
     42   virtual void OnSetContents(IPWL_NoteItem* pItem) = 0;
     43   virtual void OnSetDateTime(IPWL_NoteItem* pItem) = 0;
     44   virtual void OnSetSubjectName(IPWL_NoteItem* pItem) = 0;
     45   virtual void OnPopupMenu(int32_t x, int32_t y) = 0;
     46   virtual void OnPopupMenu(IPWL_NoteItem* pItem, int32_t x, int32_t y) = 0;
     47 };
     48 
     49 class IPWL_NoteHandler {
     50  public:
     51   virtual ~IPWL_NoteHandler() {}
     52   virtual void OnNoteColorChanged(const CPWL_Color& color) = 0;
     53 };
     54 
     55 class IPWL_NoteItem {
     56  public:
     57   virtual ~IPWL_NoteItem() {}
     58   virtual void SetPrivateData(void* pData) = 0;
     59   virtual void SetBkColor(const CPWL_Color& color) = 0;
     60   virtual void SetSubjectName(const CFX_WideString& sName) = 0;
     61   virtual void SetAuthorName(const CFX_WideString& sName) = 0;
     62   virtual void SetDateTime(FX_SYSTEMTIME time) = 0;
     63   virtual void SetContents(const CFX_WideString& sContents) = 0;
     64 
     65   virtual IPWL_NoteItem* CreateSubItem() = 0;
     66   virtual int32_t CountSubItems() const = 0;
     67   virtual IPWL_NoteItem* GetSubItems(int32_t index) const = 0;
     68   virtual void DeleteSubItem(IPWL_NoteItem* pNoteItem) = 0;
     69   virtual void SetFocus() = 0;
     70 
     71   virtual IPWL_NoteItem* GetParentItem() const = 0;
     72   virtual void* GetPrivateData() const = 0;
     73   virtual CFX_WideString GetAuthorName() const = 0;
     74   virtual CPWL_Color GetBkColor() const = 0;
     75   virtual CFX_WideString GetContents() const = 0;
     76   virtual FX_SYSTEMTIME GetDateTime() const = 0;
     77   virtual CFX_WideString GetSubjectName() const = 0;
     78 
     79   virtual CPWL_Edit* GetEdit() const = 0;
     80 };
     81 
     82 class CPWL_Note_Icon : public CPWL_Wnd {
     83  public:
     84   CPWL_Note_Icon();
     85   ~CPWL_Note_Icon() override;
     86 
     87   void SetIconType(int32_t nType);
     88 
     89  protected:
     90   // CPWL_Wnd
     91   void DrawThisAppearance(CFX_RenderDevice* pDevice,
     92                           CFX_Matrix* pUser2Device) override;
     93 
     94  private:
     95   int32_t m_nType;
     96 };
     97 
     98 class CPWL_Note_CloseBox : public CPWL_Button {
     99  public:
    100   CPWL_Note_CloseBox();
    101   ~CPWL_Note_CloseBox() override;
    102 
    103  protected:
    104   // CPWL_Button
    105   void DrawThisAppearance(CFX_RenderDevice* pDevice,
    106                           CFX_Matrix* pUser2Device) override;
    107   FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag) override;
    108   FX_BOOL OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag) override;
    109 
    110  private:
    111   FX_BOOL m_bMouseDown;
    112 };
    113 
    114 class CPWL_Note_LBBox : public CPWL_Wnd {
    115  public:
    116   CPWL_Note_LBBox();
    117   ~CPWL_Note_LBBox() override;
    118 
    119  protected:
    120   // CPWL_Wnd
    121   void DrawThisAppearance(CFX_RenderDevice* pDevice,
    122                           CFX_Matrix* pUser2Device) override;
    123 };
    124 
    125 class CPWL_Note_RBBox : public CPWL_Wnd {
    126  public:
    127   CPWL_Note_RBBox();
    128   ~CPWL_Note_RBBox() override;
    129 
    130  protected:
    131   // CPWL_Wnd
    132   void DrawThisAppearance(CFX_RenderDevice* pDevice,
    133                           CFX_Matrix* pUser2Device) override;
    134 };
    135 
    136 class CPWL_Note_Edit : public CPWL_Edit {
    137  public:
    138   CPWL_Note_Edit();
    139   ~CPWL_Note_Edit() override;
    140 
    141   void EnableNotify(FX_BOOL bEnable) { m_bEnableNotify = bEnable; }
    142 
    143   // CPWL_Edit
    144   FX_FLOAT GetItemLeftMargin() override;
    145   FX_FLOAT GetItemRightMargin() override;
    146   FX_FLOAT GetItemHeight(FX_FLOAT fLimitWidth) override;
    147   void SetText(const FX_WCHAR* csText) override;
    148   void OnNotify(CPWL_Wnd* pWnd,
    149                 FX_DWORD msg,
    150                 intptr_t wParam = 0,
    151                 intptr_t lParam = 0) override;
    152   void RePosChildWnd() override;
    153   void OnSetFocus() override;
    154   void OnKillFocus() override;
    155 
    156  private:
    157   FX_BOOL m_bEnableNotify;
    158   FX_FLOAT m_fOldItemHeight;
    159   FX_BOOL m_bSizeChanged;
    160   FX_FLOAT m_fOldMin;
    161   FX_FLOAT m_fOldMax;
    162 };
    163 
    164 class CPWL_Note_Options : public CPWL_Wnd {
    165  public:
    166   CPWL_Note_Options();
    167   ~CPWL_Note_Options() override;
    168 
    169   CPDF_Rect GetContentRect() const;
    170   void SetText(const CFX_WideString& sText);
    171 
    172   // CPWL_Wnd
    173   void RePosChildWnd() override;
    174   void CreateChildWnd(const PWL_CREATEPARAM& cp) override;
    175   void DrawThisAppearance(CFX_RenderDevice* pDevice,
    176                           CFX_Matrix* pUser2Device) override;
    177   void SetTextColor(const CPWL_Color& color) override;
    178 
    179  private:
    180   CPWL_Label* m_pText;
    181 };
    182 
    183 class CPWL_Note_Contents : public CPWL_ListCtrl {
    184  public:
    185   CPWL_Note_Contents();
    186   ~CPWL_Note_Contents() override;
    187 
    188   void SetEditFocus(FX_BOOL bLast);
    189   CPWL_Edit* GetEdit() const;
    190 
    191   void SetText(const CFX_WideString& sText);
    192   CFX_WideString GetText() const;
    193 
    194   CPWL_NoteItem* CreateSubItem();
    195   void DeleteSubItem(IPWL_NoteItem* pNoteItem);
    196   int32_t CountSubItems() const;
    197   IPWL_NoteItem* GetSubItems(int32_t index) const;
    198 
    199   virtual IPWL_NoteItem* GetHitNoteItem(const CPDF_Point& point);
    200   void EnableRead(FX_BOOL bEnabled);
    201   void EnableModify(FX_BOOL bEnabled);
    202 
    203   // CPWL_ListCtrl
    204   CFX_ByteString GetClassName() const override;
    205   void OnNotify(CPWL_Wnd* pWnd,
    206                 FX_DWORD msg,
    207                 intptr_t wParam = 0,
    208                 intptr_t lParam = 0) override;
    209   FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag) override;
    210   void CreateChildWnd(const PWL_CREATEPARAM& cp) override;
    211 
    212  private:
    213   CPWL_Note_Edit* m_pEdit;
    214 };
    215 
    216 class CPWL_NoteItem : public CPWL_Wnd, public IPWL_NoteItem {
    217  public:
    218   CPWL_NoteItem();
    219   ~CPWL_NoteItem() override;
    220 
    221   virtual IPWL_NoteItem* GetHitNoteItem(const CPDF_Point& point);
    222   virtual IPWL_NoteItem* GetFocusedNoteItem() const;
    223 
    224   virtual FX_BOOL IsTopItem() const { return FALSE; }
    225 
    226   virtual void ResetSubjectName(int32_t nItemIndex);
    227   void EnableRead(FX_BOOL bEnabled);
    228   void EnableModify(FX_BOOL bEnabled);
    229 
    230   void OnContentsValidate();
    231   void OnCreateNoteItem();
    232 
    233   // IPWL_NoteItem
    234   void SetPrivateData(void* pData) override;
    235   void SetBkColor(const CPWL_Color& color) override;
    236   void SetSubjectName(const CFX_WideString& sName) override;
    237   void SetAuthorName(const CFX_WideString& sName) override;
    238   void SetDateTime(FX_SYSTEMTIME time) override;
    239   void SetContents(const CFX_WideString& sContents) override;
    240   IPWL_NoteItem* CreateSubItem() override;
    241   int32_t CountSubItems() const override;
    242   IPWL_NoteItem* GetSubItems(int32_t index) const override;
    243   void DeleteSubItem(IPWL_NoteItem* pNoteItem) override;
    244   void SetFocus() override { SetNoteFocus(FALSE); }
    245   IPWL_NoteItem* GetParentItem() const override;
    246   void* GetPrivateData() const override;
    247   CFX_WideString GetAuthorName() const override;
    248   CPWL_Color GetBkColor() const override;
    249   CFX_WideString GetContents() const override;
    250   FX_SYSTEMTIME GetDateTime() const override;
    251   CFX_WideString GetSubjectName() const override;
    252   CPWL_Edit* GetEdit() const override;
    253 
    254  protected:
    255   // CPWL_Wnd
    256   FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag) override;
    257   FX_BOOL OnRButtonUp(const CPDF_Point& point, FX_DWORD nFlag) override;
    258   CFX_ByteString GetClassName() const override;
    259   void RePosChildWnd() override;
    260   void CreateChildWnd(const PWL_CREATEPARAM& cp) override;
    261   void OnNotify(CPWL_Wnd* pWnd,
    262                 FX_DWORD msg,
    263                 intptr_t wParam = 0,
    264                 intptr_t lParam = 0) override;
    265   FX_FLOAT GetItemHeight(FX_FLOAT fLimitWidth) override;
    266   FX_FLOAT GetItemLeftMargin() override;
    267   FX_FLOAT GetItemRightMargin() override;
    268 
    269   CPWL_NoteItem* CreateNoteItem();
    270   CPWL_NoteItem* GetParentNoteItem() const;
    271 
    272   void SetNoteFocus(FX_BOOL bLast);
    273   void PopupNoteItemMenu(const CPDF_Point& point);
    274 
    275   virtual const CPWL_Note* GetNote() const;
    276   virtual IPWL_NoteNotify* GetNoteNotify() const;
    277 
    278  protected:
    279   CPWL_Label* m_pSubject;
    280   CPWL_Label* m_pDateTime;
    281   CPWL_Note_Contents* m_pContents;
    282 
    283  private:
    284   void* m_pPrivateData;
    285   FX_SYSTEMTIME m_dtNote;
    286   CFX_WideString m_sAuthor;
    287 
    288   FX_FLOAT m_fOldItemHeight;
    289   FX_BOOL m_bSizeChanged;
    290   FX_BOOL m_bAllowModify;
    291 };
    292 
    293 class CPWL_Note : public CPWL_NoteItem {
    294  public:
    295   CPWL_Note(IPopup_Note* pPopupNote,
    296             IPWL_NoteNotify* pNoteNotify,
    297             IPWL_NoteHandler* pNoteHandler);
    298   ~CPWL_Note() override;
    299 
    300   IPWL_NoteItem* Reply();
    301   void EnableNotify(FX_BOOL bEnabled);
    302   void SetIconType(int32_t nType);
    303   void SetOptionsText(const CFX_WideString& sText);
    304   void EnableRead(FX_BOOL bEnabled);
    305   void EnableModify(FX_BOOL bEnabled);
    306 
    307   CFX_WideString GetReplyString() const;
    308   void SetReplyString(const CFX_WideString& string);
    309 
    310   // CPWL_NoteItem
    311   void SetSubjectName(const CFX_WideString& sName) override;
    312   void SetAuthorName(const CFX_WideString& sName) override;
    313   CFX_WideString GetAuthorName() const override;
    314   void SetBkColor(const CPWL_Color& color) override;
    315   void ResetSubjectName(int32_t nItemIndex) override {}
    316   FX_BOOL IsTopItem() const override { return TRUE; }
    317   const CPWL_Note* GetNote() const override;
    318   IPWL_NoteNotify* GetNoteNotify() const override;
    319   FX_BOOL OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag) override;
    320   FX_BOOL OnRButtonUp(const CPDF_Point& point, FX_DWORD nFlag) override;
    321   FX_BOOL OnMouseWheel(short zDelta,
    322                        const CPDF_Point& point,
    323                        FX_DWORD nFlag) override;
    324   void RePosChildWnd() override;
    325   void CreateChildWnd(const PWL_CREATEPARAM& cp) override;
    326   void OnNotify(CPWL_Wnd* pWnd,
    327                 FX_DWORD msg,
    328                 intptr_t wParam = 0,
    329                 intptr_t lParam = 0) override;
    330 
    331  protected:
    332   FX_BOOL ResetScrollBar();
    333   void RePosNoteChildren();
    334   FX_BOOL ScrollBarShouldVisible();
    335 
    336  private:
    337   CPWL_Label* m_pAuthor;
    338   CPWL_Note_Icon* m_pIcon;
    339   CPWL_Note_CloseBox* m_pCloseBox;
    340   CPWL_Note_LBBox* m_pLBBox;
    341   CPWL_Note_RBBox* m_pRBBox;
    342   CPWL_ScrollBar* m_pContentsBar;
    343   CPWL_Note_Options* m_pOptions;
    344   IPWL_NoteNotify* m_pNoteNotify;
    345   FX_BOOL m_bResizing;
    346   PWL_SCROLL_INFO m_OldScrollInfo;
    347   FX_BOOL m_bEnableNotify;
    348   CFX_WideString m_sReplyString;
    349 };
    350 
    351 #endif  // FPDFSDK_INCLUDE_PDFWINDOW_PWL_NOTE_H_
    352