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