summaryrefslogtreecommitdiff
path: root/fpdfsdk/pdfwindow/PWL_Note.h
diff options
context:
space:
mode:
Diffstat (limited to 'fpdfsdk/pdfwindow/PWL_Note.h')
-rw-r--r--fpdfsdk/pdfwindow/PWL_Note.h351
1 files changed, 351 insertions, 0 deletions
diff --git a/fpdfsdk/pdfwindow/PWL_Note.h b/fpdfsdk/pdfwindow/PWL_Note.h
new file mode 100644
index 0000000000..e8fdbb89f7
--- /dev/null
+++ b/fpdfsdk/pdfwindow/PWL_Note.h
@@ -0,0 +1,351 @@
+// Copyright 2014 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef FPDFSDK_PDFWINDOW_PWL_NOTE_H_
+#define FPDFSDK_PDFWINDOW_PWL_NOTE_H_
+
+#include "fpdfsdk/pdfwindow/PWL_Button.h"
+#include "fpdfsdk/pdfwindow/PWL_Edit.h"
+#include "fpdfsdk/pdfwindow/PWL_ListCtrl.h"
+#include "fpdfsdk/pdfwindow/PWL_ScrollBar.h"
+#include "fpdfsdk/pdfwindow/PWL_Wnd.h"
+
+class CPWL_Label;
+class CPWL_Note;
+class CPWL_NoteItem;
+class CPWL_Note_CloseBox;
+class CPWL_Note_Contents;
+class CPWL_Note_Edit;
+class CPWL_Note_Icon;
+class CPWL_Note_LBBox;
+class CPWL_Note_Options;
+class CPWL_Note_RBBox;
+class IPWL_NoteHandler;
+class IPWL_NoteItem;
+class IPWL_NoteNotify;
+class IPopup_Note;
+
+class IPWL_NoteNotify {
+ public:
+ virtual ~IPWL_NoteNotify() {}
+ virtual void OnNoteMove(const FX_RECT& rtWin) = 0;
+ virtual void OnNoteShow(FX_BOOL bShow) = 0;
+ virtual void OnNoteActivate(FX_BOOL bActive) = 0;
+ virtual void OnNoteClose() = 0;
+ virtual void OnItemCreate(IPWL_NoteItem* pItem) = 0;
+ virtual void OnItemDelete(IPWL_NoteItem* pItem) = 0;
+ virtual void OnSetAuthorName(IPWL_NoteItem* pItem) = 0;
+ virtual void OnSetBkColor(IPWL_NoteItem* pItem) = 0;
+ virtual void OnSetContents(IPWL_NoteItem* pItem) = 0;
+ virtual void OnSetDateTime(IPWL_NoteItem* pItem) = 0;
+ virtual void OnSetSubjectName(IPWL_NoteItem* pItem) = 0;
+ virtual void OnPopupMenu(int32_t x, int32_t y) = 0;
+ virtual void OnPopupMenu(IPWL_NoteItem* pItem, int32_t x, int32_t y) = 0;
+};
+
+class IPWL_NoteHandler {
+ public:
+ virtual ~IPWL_NoteHandler() {}
+ virtual void OnNoteColorChanged(const CPWL_Color& color) = 0;
+};
+
+class IPWL_NoteItem {
+ public:
+ virtual ~IPWL_NoteItem() {}
+ virtual void SetPrivateData(void* pData) = 0;
+ virtual void SetBkColor(const CPWL_Color& color) = 0;
+ virtual void SetSubjectName(const CFX_WideString& sName) = 0;
+ virtual void SetAuthorName(const CFX_WideString& sName) = 0;
+ virtual void SetDateTime(FX_SYSTEMTIME time) = 0;
+ virtual void SetContents(const CFX_WideString& sContents) = 0;
+
+ virtual IPWL_NoteItem* CreateSubItem() = 0;
+ virtual int32_t CountSubItems() const = 0;
+ virtual IPWL_NoteItem* GetSubItems(int32_t index) const = 0;
+ virtual void DeleteSubItem(IPWL_NoteItem* pNoteItem) = 0;
+ virtual void SetFocus() = 0;
+
+ virtual IPWL_NoteItem* GetParentItem() const = 0;
+ virtual void* GetPrivateData() const = 0;
+ virtual CFX_WideString GetAuthorName() const = 0;
+ virtual CPWL_Color GetBkColor() const = 0;
+ virtual CFX_WideString GetContents() const = 0;
+ virtual FX_SYSTEMTIME GetDateTime() const = 0;
+ virtual CFX_WideString GetSubjectName() const = 0;
+
+ virtual CPWL_Edit* GetEdit() const = 0;
+};
+
+class CPWL_Note_Icon : public CPWL_Wnd {
+ public:
+ CPWL_Note_Icon();
+ ~CPWL_Note_Icon() override;
+
+ void SetIconType(int32_t nType);
+
+ protected:
+ // CPWL_Wnd
+ void DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CFX_Matrix* pUser2Device) override;
+
+ private:
+ int32_t m_nType;
+};
+
+class CPWL_Note_CloseBox : public CPWL_Button {
+ public:
+ CPWL_Note_CloseBox();
+ ~CPWL_Note_CloseBox() override;
+
+ protected:
+ // CPWL_Button
+ void DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CFX_Matrix* pUser2Device) override;
+ FX_BOOL OnLButtonDown(const CFX_FloatPoint& point, FX_DWORD nFlag) override;
+ FX_BOOL OnLButtonUp(const CFX_FloatPoint& point, FX_DWORD nFlag) override;
+
+ private:
+ FX_BOOL m_bMouseDown;
+};
+
+class CPWL_Note_LBBox : public CPWL_Wnd {
+ public:
+ CPWL_Note_LBBox();
+ ~CPWL_Note_LBBox() override;
+
+ protected:
+ // CPWL_Wnd
+ void DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CFX_Matrix* pUser2Device) override;
+};
+
+class CPWL_Note_RBBox : public CPWL_Wnd {
+ public:
+ CPWL_Note_RBBox();
+ ~CPWL_Note_RBBox() override;
+
+ protected:
+ // CPWL_Wnd
+ void DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CFX_Matrix* pUser2Device) override;
+};
+
+class CPWL_Note_Edit : public CPWL_Edit {
+ public:
+ CPWL_Note_Edit();
+ ~CPWL_Note_Edit() override;
+
+ void EnableNotify(FX_BOOL bEnable) { m_bEnableNotify = bEnable; }
+
+ // CPWL_Edit
+ FX_FLOAT GetItemLeftMargin() override;
+ FX_FLOAT GetItemRightMargin() override;
+ FX_FLOAT GetItemHeight(FX_FLOAT fLimitWidth) override;
+ void SetText(const FX_WCHAR* csText) override;
+ void OnNotify(CPWL_Wnd* pWnd,
+ FX_DWORD msg,
+ intptr_t wParam = 0,
+ intptr_t lParam = 0) override;
+ void RePosChildWnd() override;
+ void OnSetFocus() override;
+ void OnKillFocus() override;
+
+ private:
+ FX_BOOL m_bEnableNotify;
+ FX_FLOAT m_fOldItemHeight;
+ FX_BOOL m_bSizeChanged;
+ FX_FLOAT m_fOldMin;
+ FX_FLOAT m_fOldMax;
+};
+
+class CPWL_Note_Options : public CPWL_Wnd {
+ public:
+ CPWL_Note_Options();
+ ~CPWL_Note_Options() override;
+
+ CFX_FloatRect GetContentRect() const;
+ void SetText(const CFX_WideString& sText);
+
+ // CPWL_Wnd
+ void RePosChildWnd() override;
+ void CreateChildWnd(const PWL_CREATEPARAM& cp) override;
+ void DrawThisAppearance(CFX_RenderDevice* pDevice,
+ CFX_Matrix* pUser2Device) override;
+ void SetTextColor(const CPWL_Color& color) override;
+
+ private:
+ CPWL_Label* m_pText;
+};
+
+class CPWL_Note_Contents : public CPWL_ListCtrl {
+ public:
+ CPWL_Note_Contents();
+ ~CPWL_Note_Contents() override;
+
+ void SetEditFocus(FX_BOOL bLast);
+ CPWL_Edit* GetEdit() const;
+
+ void SetText(const CFX_WideString& sText);
+ CFX_WideString GetText() const;
+
+ CPWL_NoteItem* CreateSubItem();
+ void DeleteSubItem(IPWL_NoteItem* pNoteItem);
+ int32_t CountSubItems() const;
+ IPWL_NoteItem* GetSubItems(int32_t index) const;
+
+ virtual IPWL_NoteItem* GetHitNoteItem(const CFX_FloatPoint& point);
+ void EnableRead(FX_BOOL bEnabled);
+ void EnableModify(FX_BOOL bEnabled);
+
+ // CPWL_ListCtrl
+ CFX_ByteString GetClassName() const override;
+ void OnNotify(CPWL_Wnd* pWnd,
+ FX_DWORD msg,
+ intptr_t wParam = 0,
+ intptr_t lParam = 0) override;
+ FX_BOOL OnLButtonDown(const CFX_FloatPoint& point, FX_DWORD nFlag) override;
+ void CreateChildWnd(const PWL_CREATEPARAM& cp) override;
+
+ private:
+ CPWL_Note_Edit* m_pEdit;
+};
+
+class CPWL_NoteItem : public CPWL_Wnd, public IPWL_NoteItem {
+ public:
+ CPWL_NoteItem();
+ ~CPWL_NoteItem() override;
+
+ virtual IPWL_NoteItem* GetHitNoteItem(const CFX_FloatPoint& point);
+ virtual IPWL_NoteItem* GetFocusedNoteItem() const;
+
+ virtual FX_BOOL IsTopItem() const { return FALSE; }
+
+ virtual void ResetSubjectName(int32_t nItemIndex);
+ void EnableRead(FX_BOOL bEnabled);
+ void EnableModify(FX_BOOL bEnabled);
+
+ void OnContentsValidate();
+ void OnCreateNoteItem();
+
+ // IPWL_NoteItem
+ void SetPrivateData(void* pData) override;
+ void SetBkColor(const CPWL_Color& color) override;
+ void SetSubjectName(const CFX_WideString& sName) override;
+ void SetAuthorName(const CFX_WideString& sName) override;
+ void SetDateTime(FX_SYSTEMTIME time) override;
+ void SetContents(const CFX_WideString& sContents) override;
+ IPWL_NoteItem* CreateSubItem() override;
+ int32_t CountSubItems() const override;
+ IPWL_NoteItem* GetSubItems(int32_t index) const override;
+ void DeleteSubItem(IPWL_NoteItem* pNoteItem) override;
+ void SetFocus() override { SetNoteFocus(FALSE); }
+ IPWL_NoteItem* GetParentItem() const override;
+ void* GetPrivateData() const override;
+ CFX_WideString GetAuthorName() const override;
+ CPWL_Color GetBkColor() const override;
+ CFX_WideString GetContents() const override;
+ FX_SYSTEMTIME GetDateTime() const override;
+ CFX_WideString GetSubjectName() const override;
+ CPWL_Edit* GetEdit() const override;
+
+ protected:
+ // CPWL_Wnd
+ FX_BOOL OnLButtonDown(const CFX_FloatPoint& point, FX_DWORD nFlag) override;
+ FX_BOOL OnRButtonUp(const CFX_FloatPoint& point, FX_DWORD nFlag) override;
+ CFX_ByteString GetClassName() const override;
+ void RePosChildWnd() override;
+ void CreateChildWnd(const PWL_CREATEPARAM& cp) override;
+ void OnNotify(CPWL_Wnd* pWnd,
+ FX_DWORD msg,
+ intptr_t wParam = 0,
+ intptr_t lParam = 0) override;
+ FX_FLOAT GetItemHeight(FX_FLOAT fLimitWidth) override;
+ FX_FLOAT GetItemLeftMargin() override;
+ FX_FLOAT GetItemRightMargin() override;
+
+ CPWL_NoteItem* CreateNoteItem();
+ CPWL_NoteItem* GetParentNoteItem() const;
+
+ void SetNoteFocus(FX_BOOL bLast);
+ void PopupNoteItemMenu(const CFX_FloatPoint& point);
+
+ virtual const CPWL_Note* GetNote() const;
+ virtual IPWL_NoteNotify* GetNoteNotify() const;
+
+ protected:
+ CPWL_Label* m_pSubject;
+ CPWL_Label* m_pDateTime;
+ CPWL_Note_Contents* m_pContents;
+
+ private:
+ void* m_pPrivateData;
+ FX_SYSTEMTIME m_dtNote;
+ CFX_WideString m_sAuthor;
+
+ FX_FLOAT m_fOldItemHeight;
+ FX_BOOL m_bSizeChanged;
+ FX_BOOL m_bAllowModify;
+};
+
+class CPWL_Note : public CPWL_NoteItem {
+ public:
+ CPWL_Note(IPopup_Note* pPopupNote,
+ IPWL_NoteNotify* pNoteNotify,
+ IPWL_NoteHandler* pNoteHandler);
+ ~CPWL_Note() override;
+
+ IPWL_NoteItem* Reply();
+ void EnableNotify(FX_BOOL bEnabled);
+ void SetIconType(int32_t nType);
+ void SetOptionsText(const CFX_WideString& sText);
+ void EnableRead(FX_BOOL bEnabled);
+ void EnableModify(FX_BOOL bEnabled);
+
+ CFX_WideString GetReplyString() const;
+ void SetReplyString(const CFX_WideString& str);
+
+ // CPWL_NoteItem
+ void SetSubjectName(const CFX_WideString& sName) override;
+ void SetAuthorName(const CFX_WideString& sName) override;
+ CFX_WideString GetAuthorName() const override;
+ void SetBkColor(const CPWL_Color& color) override;
+ void ResetSubjectName(int32_t nItemIndex) override {}
+ FX_BOOL IsTopItem() const override { return TRUE; }
+ const CPWL_Note* GetNote() const override;
+ IPWL_NoteNotify* GetNoteNotify() const override;
+ FX_BOOL OnLButtonDown(const CFX_FloatPoint& point, FX_DWORD nFlag) override;
+ FX_BOOL OnRButtonUp(const CFX_FloatPoint& point, FX_DWORD nFlag) override;
+ FX_BOOL OnMouseWheel(short zDelta,
+ const CFX_FloatPoint& point,
+ FX_DWORD nFlag) override;
+ void RePosChildWnd() override;
+ void CreateChildWnd(const PWL_CREATEPARAM& cp) override;
+ void OnNotify(CPWL_Wnd* pWnd,
+ FX_DWORD msg,
+ intptr_t wParam = 0,
+ intptr_t lParam = 0) override;
+
+ protected:
+ FX_BOOL ResetScrollBar();
+ void RePosNoteChildren();
+ FX_BOOL ScrollBarShouldVisible();
+
+ private:
+ CPWL_Label* m_pAuthor;
+ CPWL_Note_Icon* m_pIcon;
+ CPWL_Note_CloseBox* m_pCloseBox;
+ CPWL_Note_LBBox* m_pLBBox;
+ CPWL_Note_RBBox* m_pRBBox;
+ CPWL_ScrollBar* m_pContentsBar;
+ CPWL_Note_Options* m_pOptions;
+ IPWL_NoteNotify* m_pNoteNotify;
+ FX_BOOL m_bResizing;
+ PWL_SCROLL_INFO m_OldScrollInfo;
+ FX_BOOL m_bEnableNotify;
+ CFX_WideString m_sReplyString;
+};
+
+#endif // FPDFSDK_PDFWINDOW_PWL_NOTE_H_