Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : : #include "privsplt.hxx"
30 : :
31 : : /*************************************************************************
32 : : #* Member: ScPrivatSplit
33 : : #*------------------------------------------------------------------------
34 : : #*
35 : : #* Klasse: MD_Test
36 : : #*
37 : : #* Funktion: Konstruktor der Klasse ScPrivatSplit
38 : : #*
39 : : #* Input: ---
40 : : #*
41 : : #* Output: ---
42 : : #*
43 : : #************************************************************************/
44 : :
45 : 0 : ScPrivatSplit::ScPrivatSplit( Window* pParent, const ResId& rResId,
46 : : SC_SPLIT_DIRECTION eSplit):
47 [ # # ]: 0 : Control( pParent, rResId )
48 : : {
49 [ # # ]: 0 : Point aPos=GetPosPixel();
50 : 0 : nOldX=(short)aPos.X();
51 : 0 : nOldY=(short)aPos.Y();
52 : 0 : nNewX=(short)aPos.X();
53 : 0 : nNewY=(short)aPos.Y();
54 : 0 : eScSplit=eSplit;
55 : 0 : aXMovingRange.Min()=nNewX;
56 : 0 : aXMovingRange.Max()=nNewX;
57 : 0 : aYMovingRange.Min()=nNewY;
58 : 0 : aYMovingRange.Max()=nNewY;
59 : :
60 [ # # ]: 0 : aWinPointer=GetPointer();
61 : :
62 : 0 : aMovingFlag=false;
63 [ # # ]: 0 : if(eScSplit==SC_SPLIT_HORZ)
64 : : {
65 : 0 : aWinPointer=Pointer(POINTER_HSPLIT);
66 : : }
67 : : else
68 : : {
69 : 0 : aWinPointer=Pointer(POINTER_VSPLIT);
70 : : }
71 [ # # ]: 0 : SetPointer(aWinPointer);
72 : 0 : }
73 : :
74 : :
75 : : /*************************************************************************
76 : : #* Member: MouseButtonDown
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 : :
90 : 0 : void ScPrivatSplit::MouseButtonDown( const MouseEvent& rMEvt )
91 : : {
92 [ # # ]: 0 : Point aPos=LogicToPixel(rMEvt.GetPosPixel());
93 : :
94 : 0 : nOldX=(short)aPos.X();
95 : 0 : nOldY=(short)aPos.Y();
96 : :
97 [ # # ]: 0 : CaptureMouse();
98 : 0 : }
99 : :
100 : : /*************************************************************************
101 : : #* Member: MouseButtonUp
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 : :
116 : 0 : void ScPrivatSplit::MouseButtonUp( const MouseEvent& rMEvt )
117 : : {
118 [ # # ]: 0 : ReleaseMouse();
119 : :
120 [ # # ]: 0 : Point aPos=LogicToPixel(rMEvt.GetPosPixel());
121 [ # # ]: 0 : Point a2Pos=GetPosPixel();
122 : 0 : Point a3Pos=a2Pos;
123 : :
124 [ # # ]: 0 : if(eScSplit==SC_SPLIT_HORZ)
125 : : {
126 : 0 : nNewX=(short)aPos.X();
127 : 0 : nDeltaX=nNewX-nOldX;
128 : 0 : a2Pos.X()+=nDeltaX;
129 [ # # ]: 0 : if(a2Pos.X()<aXMovingRange.Min())
130 : : {
131 : 0 : nDeltaX=(short)(aXMovingRange.Min()-a3Pos.X());
132 : 0 : a2Pos.X()=aXMovingRange.Min();
133 : : }
134 [ # # ]: 0 : else if(a2Pos.X()>aXMovingRange.Max())
135 : : {
136 : 0 : nDeltaX=(short)(aXMovingRange.Max()-a3Pos.X());
137 : 0 : a2Pos.X()=aXMovingRange.Max();
138 : : }
139 : : }
140 : : else
141 : : {
142 : 0 : nNewY=(short)aPos.Y();
143 : 0 : nDeltaY=nNewY-nOldY;
144 : 0 : a2Pos.Y()+=nDeltaY;
145 [ # # ]: 0 : if(a2Pos.Y()<aYMovingRange.Min())
146 : : {
147 : 0 : nDeltaY=(short)(aYMovingRange.Min()-a3Pos.Y());
148 : 0 : a2Pos.Y()=aYMovingRange.Min();
149 : : }
150 [ # # ]: 0 : else if(a2Pos.Y()>aYMovingRange.Max())
151 : : {
152 : 0 : nDeltaY=(short)(aYMovingRange.Max()-a3Pos.Y());
153 : 0 : a2Pos.Y()=aYMovingRange.Max();
154 : : }
155 : : }
156 [ # # ]: 0 : SetPosPixel(a2Pos);
157 [ # # ]: 0 : Invalidate();
158 [ # # ]: 0 : Update();
159 [ # # ]: 0 : CtrModified();
160 : 0 : }
161 : :
162 : : /*************************************************************************
163 : : #* Member: MouseMove
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 : :
178 : 0 : void ScPrivatSplit::MouseMove( const MouseEvent& rMEvt )
179 : : {
180 [ # # ]: 0 : Point aPos=LogicToPixel(rMEvt.GetPosPixel());
181 [ # # ]: 0 : Point a2Pos=GetPosPixel();
182 : 0 : Point a3Pos=a2Pos;
183 [ # # ]: 0 : if(rMEvt.IsLeft())
184 : : {
185 [ # # ]: 0 : if(eScSplit==SC_SPLIT_HORZ)
186 : : {
187 : 0 : nNewX=(short)aPos.X();
188 : 0 : nDeltaX=nNewX-nOldX;
189 : 0 : a2Pos.X()+=nDeltaX;
190 : :
191 [ # # ]: 0 : if(a2Pos.X()<aXMovingRange.Min())
192 : : {
193 : 0 : nDeltaX=(short)(aXMovingRange.Min()-a3Pos.X());
194 : 0 : a2Pos.X()=aXMovingRange.Min();
195 : : }
196 [ # # ]: 0 : else if(a2Pos.X()>aXMovingRange.Max())
197 : : {
198 : 0 : nDeltaX=(short)(aXMovingRange.Max()-a3Pos.X());
199 : 0 : a2Pos.X()=aXMovingRange.Max();
200 : : }
201 : : }
202 : : else
203 : : {
204 : 0 : nNewY=(short)aPos.Y();
205 : 0 : nDeltaY=nNewY-nOldY;
206 : 0 : a2Pos.Y()+=nDeltaY;
207 [ # # ]: 0 : if(a2Pos.Y()<aYMovingRange.Min())
208 : : {
209 : 0 : nDeltaY=(short)(aYMovingRange.Min()-a3Pos.Y());
210 : 0 : a2Pos.Y()=aYMovingRange.Min();
211 : : }
212 [ # # ]: 0 : else if(a2Pos.Y()>aYMovingRange.Max())
213 : : {
214 : 0 : nDeltaY=(short)(aYMovingRange.Max()-a3Pos.Y());
215 : 0 : a2Pos.Y()=aYMovingRange.Max();
216 : : }
217 : : }
218 : :
219 [ # # ]: 0 : SetPosPixel(a2Pos);
220 : :
221 [ # # ]: 0 : CtrModified();
222 [ # # ]: 0 : Invalidate();
223 [ # # ]: 0 : Update();
224 : : }
225 : 0 : }
226 : :
227 : : /*************************************************************************
228 : : #* Member: SetYRange
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 : : #************************************************************************/
240 : 0 : void ScPrivatSplit::SetYRange(Range cRgeY)
241 : : {
242 : 0 : aYMovingRange=cRgeY;
243 : 0 : }
244 : :
245 : :
246 : :
247 : : /*************************************************************************
248 : : #* Member: GetDeltaY
249 : : #*------------------------------------------------------------------------
250 : : #*
251 : : #* Klasse: ScPrivatSplit
252 : : #*
253 : : #* Funktion: Liefert die relative x-Verschiebung zurueck
254 : : #*
255 : : #* Input: ---
256 : : #*
257 : : #* Output: ---
258 : : #*
259 : : #************************************************************************/
260 : 0 : short ScPrivatSplit::GetDeltaX()
261 : : {
262 : 0 : return nDeltaX;
263 : : }
264 : :
265 : : /*************************************************************************
266 : : #* Member: GetDeltaY
267 : : #*------------------------------------------------------------------------
268 : : #*
269 : : #* Klasse: ScPrivatSplit
270 : : #*
271 : : #* Funktion: Liefert die relative y-Verschiebung zurueck
272 : : #*
273 : : #* Input: ---
274 : : #*
275 : : #* Output: ---
276 : : #*
277 : : #************************************************************************/
278 : 0 : short ScPrivatSplit::GetDeltaY()
279 : : {
280 : 0 : return nDeltaY;
281 : : }
282 : :
283 : : /*************************************************************************
284 : : #* Member: CtrModified
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 : : #************************************************************************/
297 : 0 : void ScPrivatSplit::CtrModified()
298 : : {
299 : 0 : aCtrModifiedLink.Call( this );
300 : 0 : }
301 : :
302 : 0 : void ScPrivatSplit::MoveSplitTo(Point aPos)
303 : : {
304 [ # # ]: 0 : Point a2Pos=GetPosPixel();
305 : 0 : nOldX=(short)a2Pos.X();
306 : 0 : nOldY=(short)a2Pos.Y();
307 : 0 : Point a3Pos=a2Pos;
308 : :
309 [ # # ]: 0 : if(eScSplit==SC_SPLIT_HORZ)
310 : : {
311 : 0 : nNewX=(short)aPos.X();
312 : 0 : nDeltaX=nNewX-nOldX;
313 : 0 : a2Pos.X()+=nDeltaX;
314 [ # # ]: 0 : if(a2Pos.X()<aXMovingRange.Min())
315 : : {
316 : 0 : nDeltaX=(short)(aXMovingRange.Min()-a3Pos.X());
317 : 0 : a2Pos.X()=aXMovingRange.Min();
318 : : }
319 [ # # ]: 0 : else if(a2Pos.X()>aXMovingRange.Max())
320 : : {
321 : 0 : nDeltaX=(short)(aXMovingRange.Max()-a3Pos.X());
322 : 0 : a2Pos.X()=aXMovingRange.Max();
323 : : }
324 : : }
325 : : else
326 : : {
327 : 0 : nNewY=(short)aPos.Y();
328 : 0 : nDeltaY=nNewY-nOldY;
329 : 0 : a2Pos.Y()+=nDeltaY;
330 [ # # ]: 0 : if(a2Pos.Y()<aYMovingRange.Min())
331 : : {
332 : 0 : nDeltaY=(short)(aYMovingRange.Min()-a3Pos.Y());
333 : 0 : a2Pos.Y()=aYMovingRange.Min();
334 : : }
335 [ # # ]: 0 : else if(a2Pos.Y()>aYMovingRange.Max())
336 : : {
337 : 0 : nDeltaY=(short)(aYMovingRange.Max()-a3Pos.Y());
338 : 0 : a2Pos.Y()=aYMovingRange.Max();
339 : : }
340 : : }
341 [ # # ]: 0 : SetPosPixel(a2Pos);
342 [ # # ]: 0 : Invalidate();
343 [ # # ]: 0 : Update();
344 [ # # ]: 0 : CtrModified();
345 : 0 : }
346 : :
347 : :
348 : 0 : void ScPrivatSplit::ImplInitSettings( sal_Bool bFont, sal_Bool bForeground, sal_Bool bBackground )
349 : : {
350 : 0 : const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
351 : :
352 [ # # ]: 0 : if ( bFont )
353 : : {
354 [ # # ]: 0 : Font aFont = rStyleSettings.GetAppFont();
355 [ # # ][ # # ]: 0 : if ( IsControlFont() )
356 [ # # ][ # # ]: 0 : aFont.Merge( GetControlFont() );
[ # # ]
357 [ # # ][ # # ]: 0 : SetFont( aFont );
358 : : }
359 : :
360 [ # # ][ # # ]: 0 : if ( bFont || bForeground )
361 : : {
362 : 0 : Color aTextColor = rStyleSettings.GetButtonTextColor();
363 [ # # ][ # # ]: 0 : if ( IsControlForeground() )
364 [ # # ]: 0 : aTextColor = GetControlForeground();
365 [ # # ]: 0 : SetTextColor( aTextColor );
366 : : }
367 : :
368 [ # # ]: 0 : if ( bBackground )
369 : : {
370 [ # # ]: 0 : SetBackground( rStyleSettings.GetFaceColor());
371 : : }
372 [ # # ]: 0 : if ( IsBackground() )
373 : : {
374 : 0 : SetFillColor( GetBackground().GetColor() );
375 : 0 : SetBackground();
376 : : }
377 : 0 : Invalidate();
378 : 0 : }
379 : :
380 : : // -----------------------------------------------------------------------
381 : :
382 : 0 : void ScPrivatSplit::StateChanged( StateChangedType nType )
383 : : {
384 [ # # ][ # # ]: 0 : if ( (nType == STATE_CHANGE_ZOOM) ||
385 : : (nType == STATE_CHANGE_CONTROLFONT) )
386 : : {
387 : 0 : ImplInitSettings( sal_True, false, false );
388 : 0 : Invalidate();
389 : : }
390 [ # # ]: 0 : if ( nType == STATE_CHANGE_CONTROLFOREGROUND )
391 : : {
392 : 0 : ImplInitSettings( false, sal_True, false );
393 : 0 : Invalidate();
394 : : }
395 [ # # ]: 0 : else if ( nType == STATE_CHANGE_CONTROLBACKGROUND )
396 : : {
397 : 0 : ImplInitSettings( false, false, sal_True );
398 : 0 : Invalidate();
399 : : }
400 : :
401 : 0 : Control::StateChanged( nType );
402 : 0 : }
403 : :
404 : : // -----------------------------------------------------------------------
405 : :
406 : 0 : void ScPrivatSplit::DataChanged( const DataChangedEvent& rDCEvt )
407 : : {
408 [ # # # # ]: 0 : if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
[ # # ]
409 : 0 : (rDCEvt.GetFlags() & SETTINGS_STYLE) )
410 : : {
411 : 0 : ImplInitSettings( sal_True, sal_True, sal_True );
412 : 0 : Invalidate();
413 : : }
414 : : else
415 : 0 : Window::DataChanged( rDCEvt );
416 : 0 : }
417 : :
418 : :
419 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|