1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_svx.hxx"
26
27 // include ---------------------------------------------------------------
28
29 #include <svx/svdomeas.hxx>
30 #include <svx/svdmodel.hxx>
31
32 #include "svx/measctrl.hxx"
33 #include <svx/dialmgr.hxx>
34 #include "svx/dlgutil.hxx"
35
36 /*************************************************************************
37 |*
38 |* Ctor SvxXMeasurePreview
39 |*
40 *************************************************************************/
41
SvxXMeasurePreview(Window * pParent,const ResId & rResId,const SfxItemSet & rInAttrs)42 SvxXMeasurePreview::SvxXMeasurePreview
43 (
44 Window* pParent,
45 const ResId& rResId,
46 const SfxItemSet& rInAttrs
47 ) :
48
49 Control ( pParent, rResId ),
50 rAttrs ( rInAttrs )
51
52 {
53 SetMapMode( MAP_100TH_MM );
54
55 Size aSize = GetOutputSize();
56
57 // Massstab: 1:2
58 MapMode aMapMode = GetMapMode();
59 aMapMode.SetScaleX( Fraction( 1, 2 ) );
60 aMapMode.SetScaleY( Fraction( 1, 2 ) );
61 SetMapMode( aMapMode );
62
63 aSize = GetOutputSize();
64 Rectangle aRect = Rectangle( Point(), aSize );
65 Point aPt1 = Point( aSize.Width() / 5, (long) ( aSize.Height() / 2 ) );
66 Point aPt2 = Point( aSize.Width() * 4 / 5, (long) ( aSize.Height() / 2 ) );
67
68 pMeasureObj = new SdrMeasureObj( aPt1, aPt2 );
69 pModel = new SdrModel();
70 pMeasureObj->SetModel( pModel );
71
72 //pMeasureObj->SetItemSetAndBroadcast(rInAttrs);
73 pMeasureObj->SetMergedItemSetAndBroadcast(rInAttrs);
74
75 SetDrawMode( GetSettings().GetStyleSettings().GetHighContrastMode() ? OUTPUT_DRAWMODE_CONTRAST : OUTPUT_DRAWMODE_COLOR );
76
77 Invalidate();
78 }
79
80 /*************************************************************************
81 |*
82 |* Dtor SvxXMeasurePreview
83 |*
84 *************************************************************************/
85
~SvxXMeasurePreview()86 SvxXMeasurePreview::~SvxXMeasurePreview()
87 {
88 // #111111#
89 // No one is deleting the MeasureObj? This is not only an error but also
90 // a memory leak (!). Main problem is that this object is still listening to
91 // a StyleSheet of the model which was set. Thus, if You want to keep the obnject,
92 // set the modfel to 0L, if object is not needed (seems to be the case here),
93 // delete it.
94 delete pMeasureObj;
95
96 delete pModel;
97 }
98
99 /*************************************************************************
100 |*
101 |* SvxXMeasurePreview: Paint()
102 |*
103 *************************************************************************/
104
Paint(const Rectangle &)105 void SvxXMeasurePreview::Paint( const Rectangle& )
106 {
107 pMeasureObj->SingleObjectPainter(*this); // #110094#-17
108 }
109
110 /*************************************************************************
111 |*
112 |* SvxXMeasurePreview: SetAttributes()
113 |*
114 *************************************************************************/
115
SetAttributes(const SfxItemSet & rInAttrs)116 void SvxXMeasurePreview::SetAttributes( const SfxItemSet& rInAttrs )
117 {
118 //pMeasureObj->SetItemSetAndBroadcast(rInAttrs);
119 pMeasureObj->SetMergedItemSetAndBroadcast(rInAttrs);
120
121 Invalidate();
122 }
123
124 /*************************************************************************
125 |*
126 |* SvxXMeasurePreview: SetAttributes()
127 |*
128 *************************************************************************/
129
MouseButtonDown(const MouseEvent & rMEvt)130 void SvxXMeasurePreview::MouseButtonDown( const MouseEvent& rMEvt )
131 {
132 sal_Bool bZoomIn = rMEvt.IsLeft() && !rMEvt.IsShift();
133 sal_Bool bZoomOut = rMEvt.IsRight() || rMEvt.IsShift();
134 sal_Bool bCtrl = rMEvt.IsMod1();
135
136 if( bZoomIn || bZoomOut )
137 {
138 MapMode aMapMode = GetMapMode();
139 Fraction aXFrac = aMapMode.GetScaleX();
140 Fraction aYFrac = aMapMode.GetScaleY();
141 Fraction* pMultFrac;
142
143 if( bZoomIn )
144 {
145 if( bCtrl )
146 pMultFrac = new Fraction( 3, 2 );
147 else
148 pMultFrac = new Fraction( 11, 10 );
149 }
150 else
151 {
152 if( bCtrl )
153 pMultFrac = new Fraction( 2, 3 );
154 else
155 pMultFrac = new Fraction( 10, 11 );
156 }
157
158 aXFrac *= *pMultFrac;
159 aYFrac *= *pMultFrac;
160 if( (double)aXFrac > 0.001 && (double)aXFrac < 1000.0 &&
161 (double)aYFrac > 0.001 && (double)aYFrac < 1000.0 )
162 {
163 aMapMode.SetScaleX( aXFrac );
164 aMapMode.SetScaleY( aYFrac );
165 SetMapMode( aMapMode );
166
167 Size aOutSize( GetOutputSize() );
168
169 Point aPt( aMapMode.GetOrigin() );
170 long nX = (long)( ( (double)aOutSize.Width() - ( (double)aOutSize.Width() * (double)*pMultFrac ) ) / 2.0 + 0.5 );
171 long nY = (long)( ( (double)aOutSize.Height() - ( (double)aOutSize.Height() * (double)*pMultFrac ) ) / 2.0 + 0.5 );
172 aPt.X() += nX;
173 aPt.Y() += nY;
174
175 aMapMode.SetOrigin( aPt );
176 SetMapMode( aMapMode );
177
178 Invalidate();
179 }
180 delete pMultFrac;
181 }
182 }
183
184 // -----------------------------------------------------------------------
185
DataChanged(const DataChangedEvent & rDCEvt)186 void SvxXMeasurePreview::DataChanged( const DataChangedEvent& rDCEvt )
187 {
188 Control::DataChanged( rDCEvt );
189
190 if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) && (rDCEvt.GetFlags() & SETTINGS_STYLE) )
191 {
192 SetDrawMode( GetSettings().GetStyleSettings().GetHighContrastMode() ? OUTPUT_DRAWMODE_CONTRAST : OUTPUT_DRAWMODE_COLOR );
193 }
194 }
195
196