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