Use override in more classes in core/
[pdfium.git] / core / src / fpdfdoc / tagged_int.h
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 CORE_SRC_FPDFDOC_TAGGED_INT_H_
8 #define CORE_SRC_FPDFDOC_TAGGED_INT_H_
9
10 #include "../../include/fpdfdoc/fpdf_tagged.h"
11
12 class CPDF_StructElementImpl;
13
14 class CPDF_StructTreeImpl : public CPDF_StructTree {
15  public:
16   explicit CPDF_StructTreeImpl(const CPDF_Document* pDoc);
17   ~CPDF_StructTreeImpl() override;
18
19   // CPDF_StructTree
20   int CountTopElements() const override { return m_Kids.GetSize(); }
21   CPDF_StructElement* GetTopElement(int i) const override {
22     return (CPDF_StructElement*)m_Kids.GetAt(i);
23   }
24
25   void LoadDocTree();
26   void LoadPageTree(const CPDF_Dictionary* pPageDict);
27   CPDF_StructElementImpl* AddPageNode(CPDF_Dictionary* pElement,
28                                       CFX_MapPtrToPtr& map,
29                                       int nLevel = 0);
30   FX_BOOL AddTopLevelNode(CPDF_Dictionary* pDict,
31                           CPDF_StructElementImpl* pElement);
32
33  protected:
34   const CPDF_Dictionary* m_pTreeRoot;
35   const CPDF_Dictionary* m_pRoleMap;
36   const CPDF_Dictionary* m_pPage;
37   CFX_ArrayTemplate<CPDF_StructElementImpl*> m_Kids;
38   friend class CPDF_StructElementImpl;
39 };
40
41 class CPDF_StructElementImpl final : public CPDF_StructElement {
42  public:
43   CPDF_StructElementImpl(CPDF_StructTreeImpl* pTree,
44                          CPDF_StructElementImpl* pParent,
45                          CPDF_Dictionary* pDict);
46
47   // CPDF_StructTreeImpl
48   CPDF_StructTree* GetTree() const override { return m_pTree; }
49   const CFX_ByteString& GetType() const override { return m_Type; }
50   CPDF_StructElement* GetParent() const override { return m_pParent; }
51   CPDF_Dictionary* GetDict() const override { return m_pDict; }
52   int CountKids() const override { return m_Kids.GetSize(); }
53   const CPDF_StructKid& GetKid(int index) const override {
54     return m_Kids.GetData()[index];
55   }
56   CFX_PtrArray* GetObjectArray() override { return &m_ObjectArray; }
57   CPDF_Object* GetAttr(const CFX_ByteStringC& owner,
58                        const CFX_ByteStringC& name,
59                        FX_BOOL bInheritable = FALSE,
60                        FX_FLOAT fLevel = 0.0F) override;
61   CFX_ByteString GetName(const CFX_ByteStringC& owner,
62                          const CFX_ByteStringC& name,
63                          const CFX_ByteStringC& default_value,
64                          FX_BOOL bInheritable = FALSE,
65                          int subindex = -1) override;
66   FX_ARGB GetColor(const CFX_ByteStringC& owner,
67                    const CFX_ByteStringC& name,
68                    FX_ARGB default_value,
69                    FX_BOOL bInheritable = FALSE,
70                    int subindex = -1) override;
71   FX_FLOAT GetNumber(const CFX_ByteStringC& owner,
72                      const CFX_ByteStringC& name,
73                      FX_FLOAT default_value,
74                      FX_BOOL bInheritable = FALSE,
75                      int subindex = -1) override;
76   int GetInteger(const CFX_ByteStringC& owner,
77                  const CFX_ByteStringC& name,
78                  int default_value,
79                  FX_BOOL bInheritable = FALSE,
80                  int subindex = -1) override;
81
82   CFX_PtrArray m_ObjectArray;
83   void LoadKids(CPDF_Dictionary* pDict);
84   void LoadKid(FX_DWORD PageObjNum, CPDF_Object* pObj, CPDF_StructKid* pKid);
85   CPDF_Object* GetAttr(const CFX_ByteStringC& owner,
86                        const CFX_ByteStringC& name,
87                        FX_BOOL bInheritable,
88                        int subindex);
89   CPDF_StructElementImpl* Retain();
90   void Release();
91
92  protected:
93   ~CPDF_StructElementImpl() override;
94
95   CPDF_StructTreeImpl* m_pTree;
96   CFX_ByteString m_Type;
97   CPDF_StructElementImpl* m_pParent;
98   CPDF_Dictionary* m_pDict;
99   CFX_ArrayTemplate<CPDF_StructKid> m_Kids;
100   int m_RefCount;
101
102   friend class CPDF_StructTreeImpl;
103 };
104
105 #endif  // CORE_SRC_FPDFDOC_TAGGED_INT_H_