summaryrefslogtreecommitdiffstats
path: root/svx/inc/sdr/contact/viewcontactofsdrpage.hxx
blob: 4168d1aa718a91d428146f5a46113f548b1ccba3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   Licensed to the Apache Software Foundation (ASF) under one or more
 *   contributor license agreements. See the NOTICE file distributed
 *   with this work for additional information regarding copyright
 *   ownership. The ASF licenses this file to you under the Apache
 *   License, Version 2.0 (the "License"); you may not use this file
 *   except in compliance with the License. You may obtain a copy of
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
 */

#ifndef INCLUDED_SVX_INC_SDR_CONTACT_VIEWCONTACTOFSDRPAGE_HXX
#define INCLUDED_SVX_INC_SDR_CONTACT_VIEWCONTACTOFSDRPAGE_HXX

#include <sal/types.h>
#include <svx/sdr/contact/viewcontact.hxx>

class SdrPage;

namespace sdr::contact {

class ViewContactOfSdrPage;

class ViewContactOfPageSubObject : public ViewContact
{
    ViewContactOfSdrPage&                       mrParentViewContactOfSdrPage;

public:
    explicit ViewContactOfPageSubObject(ViewContactOfSdrPage& rParentViewContactOfSdrPage);
    virtual ~ViewContactOfPageSubObject() override;

    virtual ViewContact* GetParentContact() const override;
    const SdrPage& getPage() const;
};

class ViewContactOfPageBackground final : public ViewContactOfPageSubObject
{
    virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;
    virtual drawinglayer::primitive2d::Primitive2DContainer createViewIndependentPrimitive2DSequence() const override;

public:
    explicit ViewContactOfPageBackground(ViewContactOfSdrPage& rParentViewContactOfSdrPage);
    virtual ~ViewContactOfPageBackground() override;
};

class ViewContactOfPageShadow final : public ViewContactOfPageSubObject
{
    virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;
    virtual drawinglayer::primitive2d::Primitive2DContainer createViewIndependentPrimitive2DSequence() const override;

public:
    explicit ViewContactOfPageShadow(ViewContactOfSdrPage& rParentViewContactOfSdrPage);
    virtual ~ViewContactOfPageShadow() override;
};

class ViewContactOfPageFill final : public ViewContactOfPageSubObject
{
    virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;
    virtual drawinglayer::primitive2d::Primitive2DContainer createViewIndependentPrimitive2DSequence() const override;

public:
    explicit ViewContactOfPageFill(ViewContactOfSdrPage& rParentViewContactOfSdrPage);
    virtual ~ViewContactOfPageFill() override;
};

class ViewContactOfMasterPage final : public ViewContactOfPageSubObject
{
    virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;
    virtual drawinglayer::primitive2d::Primitive2DContainer createViewIndependentPrimitive2DSequence() const override;

public:
    explicit ViewContactOfMasterPage(ViewContactOfSdrPage& rParentViewContactOfSdrPage);
    virtual ~ViewContactOfMasterPage() override;
};

class ViewContactOfOuterPageBorder final : public ViewContactOfPageSubObject
{
    virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;
    virtual drawinglayer::primitive2d::Primitive2DContainer createViewIndependentPrimitive2DSequence() const override;

public:
    explicit ViewContactOfOuterPageBorder(ViewContactOfSdrPage& rParentViewContactOfSdrPage);
    virtual ~ViewContactOfOuterPageBorder() override;
};

class ViewContactOfInnerPageBorder final : public ViewContactOfPageSubObject
{
    virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;
    virtual drawinglayer::primitive2d::Primitive2DContainer createViewIndependentPrimitive2DSequence() const override;

public:
    explicit ViewContactOfInnerPageBorder(ViewContactOfSdrPage& rParentViewContactOfSdrPage);
    virtual ~ViewContactOfInnerPageBorder() override;
};

/**
 * This view contact corresponds with all SdrObject instances in a single
 * SdrPage.  Its GetObjectCount() returns the number of SdrObject instances
 * in the SdrPage that it represents, and its GetViewContact() returns the
 * view contact of the SdrObject instance associated with the identifier
 * passed to the method.
 */
class ViewContactOfPageHierarchy final : public ViewContactOfPageSubObject
{
    virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;
    virtual drawinglayer::primitive2d::Primitive2DContainer createViewIndependentPrimitive2DSequence() const override;

public:
    explicit ViewContactOfPageHierarchy(ViewContactOfSdrPage& rParentViewContactOfSdrPage);
    virtual ~ViewContactOfPageHierarchy() override;

    virtual sal_uInt32 GetObjectCount() const override;
    virtual ViewContact& GetViewContact(sal_uInt32 nIndex) const override;
};

class ViewContactOfGrid final : public ViewContactOfPageSubObject
{
    bool                                        mbFront : 1;

    virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;
    virtual drawinglayer::primitive2d::Primitive2DContainer createViewIndependentPrimitive2DSequence() const override;

public:
    ViewContactOfGrid(ViewContactOfSdrPage& rParentViewContactOfSdrPage, bool bFront);
    virtual ~ViewContactOfGrid() override;

    bool getFront() const { return mbFront; }
};

class ViewContactOfHelplines final : public ViewContactOfPageSubObject
{
    bool                                        mbFront : 1;

    virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;
    virtual drawinglayer::primitive2d::Primitive2DContainer createViewIndependentPrimitive2DSequence() const override;

public:
    ViewContactOfHelplines(ViewContactOfSdrPage& rParentViewContactOfSdrPage, bool bFront);
    virtual ~ViewContactOfHelplines() override;

    bool getFront() const { return mbFront; }
};

class ViewContactOfSdrPage : public ViewContact
{
    // the owner of this ViewContact. Set from constructor and not
    // to be changed in any way.
    SdrPage&                                        mrPage;

    // helper viewContacts to build a clear paint hierarchy
    ViewContactOfPageBackground                     maViewContactOfPageBackground;
    ViewContactOfPageShadow                         maViewContactOfPageShadow;
    ViewContactOfPageFill                           maViewContactOfPageFill;
    ViewContactOfMasterPage                         maViewContactOfMasterPage;
    ViewContactOfOuterPageBorder                    maViewContactOfOuterPageBorder;
    ViewContactOfInnerPageBorder                    maViewContactOfInnerPageBorder;
    ViewContactOfGrid                               maViewContactOfGridBack;
    ViewContactOfHelplines                          maViewContactOfHelplinesBack;
    ViewContactOfPageHierarchy                      maViewContactOfPageHierarchy;
    ViewContactOfGrid                               maViewContactOfGridFront;
    ViewContactOfHelplines                          maViewContactOfHelplinesFront;

protected:
    // Create an Object-Specific ViewObjectContact, set ViewContact and
    // ObjectContact. Always needs to return something. Default is to create
    // a standard ViewObjectContact containing the given ObjectContact and *this
    virtual ViewObjectContact& CreateObjectSpecificViewObjectContact(ObjectContact& rObjectContact) override;

public:
    // access to SdrObject
    SdrPage& GetSdrPage() const
    {
        return mrPage;
    }

    // basic constructor, used from SdrPage.
    explicit ViewContactOfSdrPage(SdrPage& rObj);
    virtual ~ViewContactOfSdrPage() override;

    // Access to possible sub-hierarchy
    virtual sal_uInt32 GetObjectCount() const override;
    virtual ViewContact& GetViewContact(sal_uInt32 nIndex) const override;

    // React on changes of the object of this ViewContact
    virtual void ActionChanged() override;

protected:
    // This method is responsible for creating the graphical visualisation data
    // ONLY based on model data
    virtual drawinglayer::primitive2d::Primitive2DContainer createViewIndependentPrimitive2DSequence() const override;
};

}

#endif // INCLUDED_SVX_INC_SDR_CONTACT_VIEWCONTACTOFSDRPAGE_HXX

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */