1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 // MARKER(update_precomp.py): autogen include statement, do not remove 29 #include "precompiled_svx.hxx" 30 31 // include --------------------------------------------------------------- 32 33 #include <svx/svdomeas.hxx> 34 #include <svx/svdmodel.hxx> 35 36 #include "svx/measctrl.hxx" 37 #include <svx/dialmgr.hxx> 38 #include "svx/dlgutil.hxx" 39 40 /************************************************************************* 41 |* 42 |* Ctor SvxXMeasurePreview 43 |* 44 *************************************************************************/ 45 46 SvxXMeasurePreview::SvxXMeasurePreview 47 ( 48 Window* pParent, 49 const ResId& rResId, 50 const SfxItemSet& rInAttrs 51 ) : 52 53 Control ( pParent, rResId ), 54 rAttrs ( rInAttrs ) 55 56 { 57 SetMapMode( MAP_100TH_MM ); 58 59 Size aSize = GetOutputSize(); 60 61 // Massstab: 1:2 62 MapMode aMapMode = GetMapMode(); 63 aMapMode.SetScaleX( Fraction( 1, 2 ) ); 64 aMapMode.SetScaleY( Fraction( 1, 2 ) ); 65 SetMapMode( aMapMode ); 66 67 aSize = GetOutputSize(); 68 Rectangle aRect = Rectangle( Point(), aSize ); 69 Point aPt1 = Point( aSize.Width() / 5, (long) ( aSize.Height() / 2 ) ); 70 Point aPt2 = Point( aSize.Width() * 4 / 5, (long) ( aSize.Height() / 2 ) ); 71 72 pMeasureObj = new SdrMeasureObj( aPt1, aPt2 ); 73 pModel = new SdrModel(); 74 pMeasureObj->SetModel( pModel ); 75 76 //pMeasureObj->SetItemSetAndBroadcast(rInAttrs); 77 pMeasureObj->SetMergedItemSetAndBroadcast(rInAttrs); 78 79 SetDrawMode( GetSettings().GetStyleSettings().GetHighContrastMode() ? OUTPUT_DRAWMODE_CONTRAST : OUTPUT_DRAWMODE_COLOR ); 80 81 Invalidate(); 82 } 83 84 /************************************************************************* 85 |* 86 |* Dtor SvxXMeasurePreview 87 |* 88 *************************************************************************/ 89 90 SvxXMeasurePreview::~SvxXMeasurePreview() 91 { 92 // #111111# 93 // No one is deleting the MeasureObj? This is not only an error but also 94 // a memory leak (!). Main problem is that this object is still listening to 95 // a StyleSheet of the model which was set. Thus, if You want to keep the obnject, 96 // set the modfel to 0L, if object is not needed (seems to be the case here), 97 // delete it. 98 delete pMeasureObj; 99 100 delete pModel; 101 } 102 103 /************************************************************************* 104 |* 105 |* SvxXMeasurePreview: Paint() 106 |* 107 *************************************************************************/ 108 109 void SvxXMeasurePreview::Paint( const Rectangle& ) 110 { 111 pMeasureObj->SingleObjectPainter(*this); // #110094#-17 112 } 113 114 /************************************************************************* 115 |* 116 |* SvxXMeasurePreview: SetAttributes() 117 |* 118 *************************************************************************/ 119 120 void SvxXMeasurePreview::SetAttributes( const SfxItemSet& rInAttrs ) 121 { 122 //pMeasureObj->SetItemSetAndBroadcast(rInAttrs); 123 pMeasureObj->SetMergedItemSetAndBroadcast(rInAttrs); 124 125 Invalidate(); 126 } 127 128 /************************************************************************* 129 |* 130 |* SvxXMeasurePreview: SetAttributes() 131 |* 132 *************************************************************************/ 133 134 void SvxXMeasurePreview::MouseButtonDown( const MouseEvent& rMEvt ) 135 { 136 sal_Bool bZoomIn = rMEvt.IsLeft() && !rMEvt.IsShift(); 137 sal_Bool bZoomOut = rMEvt.IsRight() || rMEvt.IsShift(); 138 sal_Bool bCtrl = rMEvt.IsMod1(); 139 140 if( bZoomIn || bZoomOut ) 141 { 142 MapMode aMapMode = GetMapMode(); 143 Fraction aXFrac = aMapMode.GetScaleX(); 144 Fraction aYFrac = aMapMode.GetScaleY(); 145 Fraction* pMultFrac; 146 147 if( bZoomIn ) 148 { 149 if( bCtrl ) 150 pMultFrac = new Fraction( 3, 2 ); 151 else 152 pMultFrac = new Fraction( 11, 10 ); 153 } 154 else 155 { 156 if( bCtrl ) 157 pMultFrac = new Fraction( 2, 3 ); 158 else 159 pMultFrac = new Fraction( 10, 11 ); 160 } 161 162 aXFrac *= *pMultFrac; 163 aYFrac *= *pMultFrac; 164 if( (double)aXFrac > 0.001 && (double)aXFrac < 1000.0 && 165 (double)aYFrac > 0.001 && (double)aYFrac < 1000.0 ) 166 { 167 aMapMode.SetScaleX( aXFrac ); 168 aMapMode.SetScaleY( aYFrac ); 169 SetMapMode( aMapMode ); 170 171 Size aOutSize( GetOutputSize() ); 172 173 Point aPt( aMapMode.GetOrigin() ); 174 long nX = (long)( ( (double)aOutSize.Width() - ( (double)aOutSize.Width() * (double)*pMultFrac ) ) / 2.0 + 0.5 ); 175 long nY = (long)( ( (double)aOutSize.Height() - ( (double)aOutSize.Height() * (double)*pMultFrac ) ) / 2.0 + 0.5 ); 176 aPt.X() += nX; 177 aPt.Y() += nY; 178 179 aMapMode.SetOrigin( aPt ); 180 SetMapMode( aMapMode ); 181 182 Invalidate(); 183 } 184 delete pMultFrac; 185 } 186 } 187 188 // ----------------------------------------------------------------------- 189 190 void SvxXMeasurePreview::DataChanged( const DataChangedEvent& rDCEvt ) 191 { 192 Control::DataChanged( rDCEvt ); 193 194 if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) && (rDCEvt.GetFlags() & SETTINGS_STYLE) ) 195 { 196 SetDrawMode( GetSettings().GetStyleSettings().GetHighContrastMode() ? OUTPUT_DRAWMODE_CONTRAST : OUTPUT_DRAWMODE_COLOR ); 197 } 198 } 199 200