1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  *   Licensed to the Apache Software Foundation (ASF) under one or more
12  *   contributor license agreements. See the NOTICE file distributed
13  *   with this work for additional information regarding copyright
14  *   ownership. The ASF licenses this file to you under the Apache
15  *   License, Version 2.0 (the "License"); you may not use this file
16  *   except in compliance with the License. You may obtain a copy of
17  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 
20 #ifndef INCLUDED_SVX_INC_SDR_CONTACT_VIEWCONTACTOFSDRPAGE_HXX
21 #define INCLUDED_SVX_INC_SDR_CONTACT_VIEWCONTACTOFSDRPAGE_HXX
22 
23 #include <sal/types.h>
24 #include <svx/sdr/contact/viewcontact.hxx>
25 
26 class SdrPage;
27 
28 namespace sdr::contact {
29 
30 class ViewContactOfSdrPage;
31 
32 class ViewContactOfPageSubObject : public ViewContact
33 {
34     ViewContactOfSdrPage&                       mrParentViewContactOfSdrPage;
35 
36 public:
37     explicit ViewContactOfPageSubObject(ViewContactOfSdrPage& rParentViewContactOfSdrPage);
38     virtual ~ViewContactOfPageSubObject() override;
39 
40     virtual ViewContact* GetParentContact() const override;
41     const SdrPage& getPage() const;
42 };
43 
44 class ViewContactOfPageBackground final : public ViewContactOfPageSubObject
45 {
46     virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;
47     virtual drawinglayer::primitive2d::Primitive2DContainer createViewIndependentPrimitive2DSequence() const override;
48 
49 public:
50     explicit ViewContactOfPageBackground(ViewContactOfSdrPage& rParentViewContactOfSdrPage);
51     virtual ~ViewContactOfPageBackground() override;
52 };
53 
54 class ViewContactOfPageShadow final : public ViewContactOfPageSubObject
55 {
56     virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;
57     virtual drawinglayer::primitive2d::Primitive2DContainer createViewIndependentPrimitive2DSequence() const override;
58 
59 public:
60     explicit ViewContactOfPageShadow(ViewContactOfSdrPage& rParentViewContactOfSdrPage);
61     virtual ~ViewContactOfPageShadow() override;
62 };
63 
64 class ViewContactOfPageFill final : public ViewContactOfPageSubObject
65 {
66     virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;
67     virtual drawinglayer::primitive2d::Primitive2DContainer createViewIndependentPrimitive2DSequence() const override;
68 
69 public:
70     explicit ViewContactOfPageFill(ViewContactOfSdrPage& rParentViewContactOfSdrPage);
71     virtual ~ViewContactOfPageFill() override;
72 };
73 
74 class ViewContactOfMasterPage final : public ViewContactOfPageSubObject
75 {
76     virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;
77     virtual drawinglayer::primitive2d::Primitive2DContainer createViewIndependentPrimitive2DSequence() const override;
78 
79 public:
80     explicit ViewContactOfMasterPage(ViewContactOfSdrPage& rParentViewContactOfSdrPage);
81     virtual ~ViewContactOfMasterPage() override;
82 };
83 
84 class ViewContactOfOuterPageBorder final : public ViewContactOfPageSubObject
85 {
86     virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;
87     virtual drawinglayer::primitive2d::Primitive2DContainer createViewIndependentPrimitive2DSequence() const override;
88 
89 public:
90     explicit ViewContactOfOuterPageBorder(ViewContactOfSdrPage& rParentViewContactOfSdrPage);
91     virtual ~ViewContactOfOuterPageBorder() override;
92 };
93 
94 class ViewContactOfInnerPageBorder final : public ViewContactOfPageSubObject
95 {
96     virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;
97     virtual drawinglayer::primitive2d::Primitive2DContainer createViewIndependentPrimitive2DSequence() const override;
98 
99 public:
100     explicit ViewContactOfInnerPageBorder(ViewContactOfSdrPage& rParentViewContactOfSdrPage);
101     virtual ~ViewContactOfInnerPageBorder() override;
102 };
103 
104 /**
105  * This view contact corresponds with all SdrObject instances in a single
106  * SdrPage.  Its GetObjectCount() returns the number of SdrObject instances
107  * in the SdrPage that it represents, and its GetViewContact() returns the
108  * view contact of the SdrObject instance associated with the identifier
109  * passed to the method.
110  */
111 class ViewContactOfPageHierarchy final : public ViewContactOfPageSubObject
112 {
113     virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;
114     virtual drawinglayer::primitive2d::Primitive2DContainer createViewIndependentPrimitive2DSequence() const override;
115 
116 public:
117     explicit ViewContactOfPageHierarchy(ViewContactOfSdrPage& rParentViewContactOfSdrPage);
118     virtual ~ViewContactOfPageHierarchy() override;
119 
120     virtual sal_uInt32 GetObjectCount() const override;
121     virtual ViewContact& GetViewContact(sal_uInt32 nIndex) const override;
122 };
123 
124 class ViewContactOfGrid final : public ViewContactOfPageSubObject
125 {
126     bool                                        mbFront : 1;
127 
128     virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;
129     virtual drawinglayer::primitive2d::Primitive2DContainer createViewIndependentPrimitive2DSequence() const override;
130 
131 public:
132     ViewContactOfGrid(ViewContactOfSdrPage& rParentViewContactOfSdrPage, bool bFront);
133     virtual ~ViewContactOfGrid() override;
134 
getFront() const135     bool getFront() const { return mbFront; }
136 };
137 
138 class ViewContactOfHelplines final : public ViewContactOfPageSubObject
139 {
140     bool                                        mbFront : 1;
141 
142     virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;
143     virtual drawinglayer::primitive2d::Primitive2DContainer createViewIndependentPrimitive2DSequence() const override;
144 
145 public:
146     ViewContactOfHelplines(ViewContactOfSdrPage& rParentViewContactOfSdrPage, bool bFront);
147     virtual ~ViewContactOfHelplines() override;
148 
getFront() const149     bool getFront() const { return mbFront; }
150 };
151 
152 class ViewContactOfSdrPage : public ViewContact
153 {
154     // the owner of this ViewContact. Set from constructor and not
155     // to be changed in any way.
156     SdrPage&                                        mrPage;
157 
158     // helper viewContacts to build a clear paint hierarchy
159     ViewContactOfPageBackground                     maViewContactOfPageBackground;
160     ViewContactOfPageShadow                         maViewContactOfPageShadow;
161     ViewContactOfPageFill                           maViewContactOfPageFill;
162     ViewContactOfMasterPage                         maViewContactOfMasterPage;
163     ViewContactOfOuterPageBorder                    maViewContactOfOuterPageBorder;
164     ViewContactOfInnerPageBorder                    maViewContactOfInnerPageBorder;
165     ViewContactOfGrid                               maViewContactOfGridBack;
166     ViewContactOfHelplines                          maViewContactOfHelplinesBack;
167     ViewContactOfPageHierarchy                      maViewContactOfPageHierarchy;
168     ViewContactOfGrid                               maViewContactOfGridFront;
169     ViewContactOfHelplines                          maViewContactOfHelplinesFront;
170 
171 protected:
172     // Create an Object-Specific ViewObjectContact, set ViewContact and
173     // ObjectContact. Always needs to return something. Default is to create
174     // a standard ViewObjectContact containing the given ObjectContact and *this
175     virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;
176 
177 public:
178     // access to SdrObject
GetSdrPage() const179     SdrPage& GetSdrPage() const
180     {
181         return mrPage;
182     }
183 
184     // basic constructor, used from SdrPage.
185     explicit ViewContactOfSdrPage(SdrPage& rObj);
186     virtual ~ViewContactOfSdrPage() override;
187 
188     // Access to possible sub-hierarchy
189     virtual sal_uInt32 GetObjectCount() const override;
190     virtual ViewContact& GetViewContact(sal_uInt32 nIndex) const override;
191 
192     // React on changes of the object of this ViewContact
193     virtual void ActionChanged() override;
194 
195 protected:
196     // This method is responsible for creating the graphical visualisation data
197     // ONLY based on model data
198     virtual drawinglayer::primitive2d::Primitive2DContainer createViewIndependentPrimitive2DSequence() const override;
199 };
200 
201 }
202 
203 #endif // INCLUDED_SVX_INC_SDR_CONTACT_VIEWCONTACTOFSDRPAGE_HXX
204 
205 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
206