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_sc.hxx"
26
27
28
29 #include "privsplt.hxx"
30
31 /*************************************************************************
32 #* Member: ScPrivatSplit Datum:13.10.97
33 #*------------------------------------------------------------------------
34 #*
35 #* Klasse: MD_Test
36 #*
37 #* Funktion: Konstruktor der Klasse ScPrivatSplit
38 #*
39 #* Input: ---
40 #*
41 #* Output: ---
42 #*
43 #************************************************************************/
44
ScPrivatSplit(Window * pParent,const ResId & rResId,SC_SPLIT_DIRECTION eSplit)45 ScPrivatSplit::ScPrivatSplit( Window* pParent, const ResId& rResId,
46 SC_SPLIT_DIRECTION eSplit):
47 Control( pParent, rResId )
48 {
49 Point aPos=GetPosPixel();
50 nOldX=(short)aPos.X();
51 nOldY=(short)aPos.Y();
52 nNewX=(short)aPos.X();
53 nNewY=(short)aPos.Y();
54 eScSplit=eSplit;
55 aXMovingRange.Min()=nNewX;
56 aXMovingRange.Max()=nNewX;
57 aYMovingRange.Min()=nNewY;
58 aYMovingRange.Max()=nNewY;
59
60 aWinPointer=GetPointer();
61
62 aMovingFlag=sal_False;
63 if(eScSplit==SC_SPLIT_HORZ)
64 {
65 aWinPointer=Pointer(POINTER_HSPLIT);
66 }
67 else
68 {
69 aWinPointer=Pointer(POINTER_VSPLIT);
70 }
71 SetPointer(aWinPointer);
72 }
73
74
75 /*************************************************************************
76 #* Member: MouseButtonDown Datum:13.10.97
77 #*------------------------------------------------------------------------
78 #*
79 #* Klasse: ScPrivatSplit
80 #*
81 #* Funktion: Reagiert auf einen einzelnen Mouse-Event. Nach Aufruf
82 #* werden alle Mauseingaben an dieses Control weitergeleitet.
83 #*
84 #* Input: ---
85 #*
86 #* Output: ---
87 #*
88 #************************************************************************/
89
MouseButtonDown(const MouseEvent & rMEvt)90 void ScPrivatSplit::MouseButtonDown( const MouseEvent& rMEvt )
91 {
92 Point aPos=LogicToPixel(rMEvt.GetPosPixel());
93
94 nOldX=(short)aPos.X();
95 nOldY=(short)aPos.Y();
96
97 CaptureMouse();
98 }
99
100 /*************************************************************************
101 #* Member: MouseButtonUp Datum:13.10.97
102 #*------------------------------------------------------------------------
103 #*
104 #* Klasse: ScPrivatSplit
105 #*
106 #* Funktion: Ende einer Benutzeraktion mit der Maus. Es werden
107 #* die aktuelle Maus- Koordinaten ermittelt und fuer
108 #* die Verschiebung des Fensters verwendet.
109 #*
110 #* Input: ---
111 #*
112 #* Output: ---
113 #*
114 #************************************************************************/
115
MouseButtonUp(const MouseEvent & rMEvt)116 void ScPrivatSplit::MouseButtonUp( const MouseEvent& rMEvt )
117 {
118 ReleaseMouse();
119
120 Point aPos=LogicToPixel(rMEvt.GetPosPixel());
121 Point a2Pos=GetPosPixel();
122 Point a3Pos=a2Pos;
123
124 if(eScSplit==SC_SPLIT_HORZ)
125 {
126 nNewX=(short)aPos.X();
127 nDeltaX=nNewX-nOldX;
128 a2Pos.X()+=nDeltaX;
129 if(a2Pos.X()<aXMovingRange.Min())
130 {
131 nDeltaX=(short)(aXMovingRange.Min()-a3Pos.X());
132 a2Pos.X()=aXMovingRange.Min();
133 }
134 else if(a2Pos.X()>aXMovingRange.Max())
135 {
136 nDeltaX=(short)(aXMovingRange.Max()-a3Pos.X());
137 a2Pos.X()=aXMovingRange.Max();
138 }
139 }
140 else
141 {
142 nNewY=(short)aPos.Y();
143 nDeltaY=nNewY-nOldY;
144 a2Pos.Y()+=nDeltaY;
145 if(a2Pos.Y()<aYMovingRange.Min())
146 {
147 nDeltaY=(short)(aYMovingRange.Min()-a3Pos.Y());
148 a2Pos.Y()=aYMovingRange.Min();
149 }
150 else if(a2Pos.Y()>aYMovingRange.Max())
151 {
152 nDeltaY=(short)(aYMovingRange.Max()-a3Pos.Y());
153 a2Pos.Y()=aYMovingRange.Max();
154 }
155 }
156 SetPosPixel(a2Pos);
157 Invalidate();
158 Update();
159 CtrModified();
160 }
161
162 /*************************************************************************
163 #* Member: MouseMove Datum:13.10.97
164 #*------------------------------------------------------------------------
165 #*
166 #* Klasse: ScPrivatSplit
167 #*
168 #* Funktion: Reagiert kontinuierlich auf Mausbewegungen. Es werden
169 #* die aktuelle Maus- Koordinaten ermittelt und fuer
170 #* die Verschiebung des Fensters verwendet.
171 #*
172 #* Input: ---
173 #*
174 #* Output: ---
175 #*
176 #************************************************************************/
177
MouseMove(const MouseEvent & rMEvt)178 void ScPrivatSplit::MouseMove( const MouseEvent& rMEvt )
179 {
180 Point aPos=LogicToPixel(rMEvt.GetPosPixel());
181 Point a2Pos=GetPosPixel();
182 Point a3Pos=a2Pos;
183 if(rMEvt.IsLeft())
184 {
185 if(eScSplit==SC_SPLIT_HORZ)
186 {
187 nNewX=(short)aPos.X();
188 nDeltaX=nNewX-nOldX;
189 a2Pos.X()+=nDeltaX;
190
191 if(a2Pos.X()<aXMovingRange.Min())
192 {
193 nDeltaX=(short)(aXMovingRange.Min()-a3Pos.X());
194 a2Pos.X()=aXMovingRange.Min();
195 }
196 else if(a2Pos.X()>aXMovingRange.Max())
197 {
198 nDeltaX=(short)(aXMovingRange.Max()-a3Pos.X());
199 a2Pos.X()=aXMovingRange.Max();
200 }
201 }
202 else
203 {
204 nNewY=(short)aPos.Y();
205 nDeltaY=nNewY-nOldY;
206 a2Pos.Y()+=nDeltaY;
207 if(a2Pos.Y()<aYMovingRange.Min())
208 {
209 nDeltaY=(short)(aYMovingRange.Min()-a3Pos.Y());
210 a2Pos.Y()=aYMovingRange.Min();
211 }
212 else if(a2Pos.Y()>aYMovingRange.Max())
213 {
214 nDeltaY=(short)(aYMovingRange.Max()-a3Pos.Y());
215 a2Pos.Y()=aYMovingRange.Max();
216 }
217 }
218
219 SetPosPixel(a2Pos);
220
221 CtrModified();
222 Invalidate();
223 Update();
224 }
225 }
226
227 /*************************************************************************
228 #* Member: SetYRange Datum:14.10.97
229 #*------------------------------------------------------------------------
230 #*
231 #* Klasse: ScPrivatSplit
232 #*
233 #* Funktion: Setzt den Range fuer die Y- Verschiebung
234 #*
235 #* Input: neuer Bereich
236 #*
237 #* Output: ---
238 #*
239 #************************************************************************/
SetYRange(Range cRgeY)240 void ScPrivatSplit::SetYRange(Range cRgeY)
241 {
242 aYMovingRange=cRgeY;
243 }
244
245
246
247 /*************************************************************************
248 #* Member: GetDeltaY Datum:13.10.97
249 #*------------------------------------------------------------------------
250 #*
251 #* Klasse: ScPrivatSplit
252 #*
253 #* Funktion: Liefert die relative x-Verschiebung zurueck
254 #*
255 #* Input: ---
256 #*
257 #* Output: ---
258 #*
259 #************************************************************************/
GetDeltaX()260 short ScPrivatSplit::GetDeltaX()
261 {
262 return nDeltaX;
263 }
264
265 /*************************************************************************
266 #* Member: GetDeltaY Datum:13.10.97
267 #*------------------------------------------------------------------------
268 #*
269 #* Klasse: ScPrivatSplit
270 #*
271 #* Funktion: Liefert die relative y-Verschiebung zurueck
272 #*
273 #* Input: ---
274 #*
275 #* Output: ---
276 #*
277 #************************************************************************/
GetDeltaY()278 short ScPrivatSplit::GetDeltaY()
279 {
280 return nDeltaY;
281 }
282
283 /*************************************************************************
284 #* Member: CtrModified Datum:13.10.97
285 #*------------------------------------------------------------------------
286 #*
287 #* Klasse: ScPrivatSplit
288 #*
289 #* Funktion: Teilt einem installierten Handler mit, dass
290 #* eine Veraenderung eingetreten ist.
291 #*
292 #* Input: ---
293 #*
294 #* Output: ---
295 #*
296 #************************************************************************/
CtrModified()297 void ScPrivatSplit::CtrModified()
298 {
299 aCtrModifiedLink.Call( this );
300 }
301
MoveSplitTo(Point aPos)302 void ScPrivatSplit::MoveSplitTo(Point aPos)
303 {
304 Point a2Pos=GetPosPixel();
305 nOldX=(short)a2Pos.X();
306 nOldY=(short)a2Pos.Y();
307 Point a3Pos=a2Pos;
308
309 if(eScSplit==SC_SPLIT_HORZ)
310 {
311 nNewX=(short)aPos.X();
312 nDeltaX=nNewX-nOldX;
313 a2Pos.X()+=nDeltaX;
314 if(a2Pos.X()<aXMovingRange.Min())
315 {
316 nDeltaX=(short)(aXMovingRange.Min()-a3Pos.X());
317 a2Pos.X()=aXMovingRange.Min();
318 }
319 else if(a2Pos.X()>aXMovingRange.Max())
320 {
321 nDeltaX=(short)(aXMovingRange.Max()-a3Pos.X());
322 a2Pos.X()=aXMovingRange.Max();
323 }
324 }
325 else
326 {
327 nNewY=(short)aPos.Y();
328 nDeltaY=nNewY-nOldY;
329 a2Pos.Y()+=nDeltaY;
330 if(a2Pos.Y()<aYMovingRange.Min())
331 {
332 nDeltaY=(short)(aYMovingRange.Min()-a3Pos.Y());
333 a2Pos.Y()=aYMovingRange.Min();
334 }
335 else if(a2Pos.Y()>aYMovingRange.Max())
336 {
337 nDeltaY=(short)(aYMovingRange.Max()-a3Pos.Y());
338 a2Pos.Y()=aYMovingRange.Max();
339 }
340 }
341 SetPosPixel(a2Pos);
342 Invalidate();
343 Update();
344 CtrModified();
345 }
346
347
ImplInitSettings(sal_Bool bFont,sal_Bool bForeground,sal_Bool bBackground)348 void ScPrivatSplit::ImplInitSettings( sal_Bool bFont, sal_Bool bForeground, sal_Bool bBackground )
349 {
350 const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
351
352 if ( bFont )
353 {
354 Font aFont = rStyleSettings.GetAppFont();
355 if ( IsControlFont() )
356 aFont.Merge( GetControlFont() );
357 SetFont( aFont );
358 }
359
360 if ( bFont || bForeground )
361 {
362 Color aTextColor = rStyleSettings.GetButtonTextColor();
363 if ( IsControlForeground() )
364 aTextColor = GetControlForeground();
365 SetTextColor( aTextColor );
366 }
367
368 if ( bBackground )
369 {
370 SetBackground( rStyleSettings.GetFaceColor());
371 }
372 if ( IsBackground() )
373 {
374 SetFillColor( GetBackground().GetColor() );
375 SetBackground();
376 }
377 Invalidate();
378 }
379
380 // -----------------------------------------------------------------------
381
StateChanged(StateChangedType nType)382 void ScPrivatSplit::StateChanged( StateChangedType nType )
383 {
384 if ( (nType == STATE_CHANGE_ZOOM) ||
385 (nType == STATE_CHANGE_CONTROLFONT) )
386 {
387 ImplInitSettings( sal_True, sal_False, sal_False );
388 Invalidate();
389 }
390 if ( nType == STATE_CHANGE_CONTROLFOREGROUND )
391 {
392 ImplInitSettings( sal_False, sal_True, sal_False );
393 Invalidate();
394 }
395 else if ( nType == STATE_CHANGE_CONTROLBACKGROUND )
396 {
397 ImplInitSettings( sal_False, sal_False, sal_True );
398 Invalidate();
399 }
400
401 Control::StateChanged( nType );
402 }
403
404 // -----------------------------------------------------------------------
405
DataChanged(const DataChangedEvent & rDCEvt)406 void ScPrivatSplit::DataChanged( const DataChangedEvent& rDCEvt )
407 {
408 if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
409 (rDCEvt.GetFlags() & SETTINGS_STYLE) )
410 {
411 ImplInitSettings( sal_True, sal_True, sal_True );
412 Invalidate();
413 }
414 else
415 Window::DataChanged( rDCEvt );
416 }
417
418
419