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 #include <sal/config.h>
21 
22 #include <sdr/properties/measureproperties.hxx>
23 #include <svl/itemset.hxx>
24 #include <svl/style.hxx>
25 #include <svx/svddef.hxx>
26 #include <editeng/eeitem.hxx>
27 #include <svx/svdomeas.hxx>
28 #include <svx/xlineit0.hxx>
29 #include <svx/xlnstit.hxx>
30 #include <svx/xlnstwit.hxx>
31 #include <svx/xlnedit.hxx>
32 #include <svx/xlnedwit.hxx>
33 #include <svx/sdynitm.hxx>
34 #include <basegfx/point/b2dpoint.hxx>
35 #include <basegfx/polygon/b2dpolygon.hxx>
36 
37 
38 namespace sdr::properties
39 {
40         // create a new itemset
CreateObjectSpecificItemSet(SfxItemPool & rPool)41         SfxItemSet MeasureProperties::CreateObjectSpecificItemSet(SfxItemPool& rPool)
42         {
43             return SfxItemSet(
44                 rPool,
45                 svl::Items<
46                     // Ranges from SdrAttrObj, SdrMeasureObj:
47                     SDRATTR_START, SDRATTR_SHADOW_LAST,
48                     SDRATTR_MISC_FIRST, SDRATTR_MISC_LAST,
49                     SDRATTR_MEASURE_FIRST, SDRATTR_MEASURE_LAST,
50                     SDRATTR_TEXTDIRECTION, SDRATTR_TEXTDIRECTION,
51                     SDRATTR_TEXTCOLUMNS_FIRST, SDRATTR_TEXTCOLUMNS_LAST,
52                     // Range from SdrTextObj:
53                     EE_ITEMS_START, EE_ITEMS_END>{});
54         }
55 
MeasureProperties(SdrObject & rObj)56         MeasureProperties::MeasureProperties(SdrObject& rObj)
57         :   TextProperties(rObj)
58         {
59         }
60 
MeasureProperties(const MeasureProperties & rProps,SdrObject & rObj)61         MeasureProperties::MeasureProperties(const MeasureProperties& rProps, SdrObject& rObj)
62         :   TextProperties(rProps, rObj)
63         {
64         }
65 
~MeasureProperties()66         MeasureProperties::~MeasureProperties()
67         {
68         }
69 
Clone(SdrObject & rObj) const70         std::unique_ptr<BaseProperties> MeasureProperties::Clone(SdrObject& rObj) const
71         {
72             return std::unique_ptr<BaseProperties>(new MeasureProperties(*this, rObj));
73         }
74 
ItemSetChanged(const SfxItemSet & rSet)75         void MeasureProperties::ItemSetChanged(const SfxItemSet& rSet)
76         {
77             SdrMeasureObj& rObj = static_cast<SdrMeasureObj&>(GetSdrObject());
78 
79             // call parent
80             TextProperties::ItemSetChanged(rSet);
81 
82             // local changes
83             rObj.SetTextDirty();
84         }
85 
SetStyleSheet(SfxStyleSheet * pNewStyleSheet,bool bDontRemoveHardAttr)86         void MeasureProperties::SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr)
87         {
88             // call parent (always first thing to do, may create the SfxItemSet)
89             TextProperties::SetStyleSheet(pNewStyleSheet, bDontRemoveHardAttr);
90 
91             // local changes
92             // get access to dimension line object
93             SdrMeasureObj& rObj = static_cast<SdrMeasureObj&>(GetSdrObject());
94 
95             // mark dimension line text as changed (dirty) in the dimension line object
96             rObj.SetTextDirty();
97 
98             // tdf#98525 ask the dimension line object to redraw the changed text
99             rObj.UndirtyText();
100         }
101 
ForceDefaultAttributes()102         void MeasureProperties::ForceDefaultAttributes()
103         {
104             // call parent
105             TextProperties::ForceDefaultAttributes();
106 
107             // force ItemSet
108             GetObjectItemSet();
109 
110             //#71958# by default, the show units Bool-Item is set as hard
111             // attribute to sal_True to avoid confusion when copying SdrMeasureObj's
112             // from one application to another
113             mxItemSet->Put(SdrYesNoItem(SDRATTR_MEASURESHOWUNIT, true));
114 
115             basegfx::B2DPolygon aNewPolygon;
116             aNewPolygon.append(basegfx::B2DPoint(100.0, 0.0));
117             aNewPolygon.append(basegfx::B2DPoint(200.0, 400.0));
118             aNewPolygon.append(basegfx::B2DPoint(0.0, 400.0));
119             aNewPolygon.setClosed(true);
120 
121             mxItemSet->Put(XLineStartItem(OUString(), basegfx::B2DPolyPolygon(aNewPolygon)));
122             mxItemSet->Put(XLineStartWidthItem(200));
123             mxItemSet->Put(XLineEndItem(OUString(), basegfx::B2DPolyPolygon(aNewPolygon)));
124             mxItemSet->Put(XLineEndWidthItem(200));
125             mxItemSet->Put(XLineStyleItem(css::drawing::LineStyle_SOLID));
126         }
127 } // end of namespace
128 
129 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
130