1*5900e8ecSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*5900e8ecSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*5900e8ecSAndrew Rist * or more contributor license agreements. See the NOTICE file
5*5900e8ecSAndrew Rist * distributed with this work for additional information
6*5900e8ecSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*5900e8ecSAndrew Rist * to you under the Apache License, Version 2.0 (the
8*5900e8ecSAndrew Rist * "License"); you may not use this file except in compliance
9*5900e8ecSAndrew Rist * with the License. You may obtain a copy of the License at
10*5900e8ecSAndrew Rist *
11*5900e8ecSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*5900e8ecSAndrew Rist *
13*5900e8ecSAndrew Rist * Unless required by applicable law or agreed to in writing,
14*5900e8ecSAndrew Rist * software distributed under the License is distributed on an
15*5900e8ecSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*5900e8ecSAndrew Rist * KIND, either express or implied. See the License for the
17*5900e8ecSAndrew Rist * specific language governing permissions and limitations
18*5900e8ecSAndrew Rist * under the License.
19*5900e8ecSAndrew Rist *
20*5900e8ecSAndrew Rist *************************************************************/
21*5900e8ecSAndrew Rist
22*5900e8ecSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_svtools.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #define _TASKBAR_CXX
28cdf0e10cSrcweir
29cdf0e10cSrcweir #include <tools/list.hxx>
30cdf0e10cSrcweir #include <tools/debug.hxx>
31cdf0e10cSrcweir #include <vcl/floatwin.hxx>
32cdf0e10cSrcweir
33cdf0e10cSrcweir #include <svtools/taskbar.hxx>
34cdf0e10cSrcweir
35cdf0e10cSrcweir // =======================================================================
36cdf0e10cSrcweir
37cdf0e10cSrcweir class ImplTaskBarFloat : public FloatingWindow
38cdf0e10cSrcweir {
39cdf0e10cSrcweir public:
40cdf0e10cSrcweir TaskBar* mpTaskBar;
41cdf0e10cSrcweir
42cdf0e10cSrcweir public:
43cdf0e10cSrcweir ImplTaskBarFloat( TaskBar* pTaskBar );
44cdf0e10cSrcweir };
45cdf0e10cSrcweir
46cdf0e10cSrcweir // -----------------------------------------------------------------------
47cdf0e10cSrcweir
ImplTaskBarFloat(TaskBar * pTaskBar)48cdf0e10cSrcweir ImplTaskBarFloat::ImplTaskBarFloat( TaskBar* pTaskBar ) :
49cdf0e10cSrcweir FloatingWindow( pTaskBar, 0 )
50cdf0e10cSrcweir {
51cdf0e10cSrcweir mpTaskBar = pTaskBar;
52cdf0e10cSrcweir }
53cdf0e10cSrcweir
54cdf0e10cSrcweir // =======================================================================
55cdf0e10cSrcweir
56cdf0e10cSrcweir #define TASKBAR_BORDER 2
57cdf0e10cSrcweir #define TASKBAR_OFFSIZE 3
58cdf0e10cSrcweir #define TASKBAR_OFFX 2
59cdf0e10cSrcweir #define TASKBAR_OFFY 1
60cdf0e10cSrcweir #define TASKBAR_BUTTONOFF 5
61cdf0e10cSrcweir #define TASKBAR_AUTOHIDE_HEIGHT 2
62cdf0e10cSrcweir
63cdf0e10cSrcweir // =======================================================================
64cdf0e10cSrcweir
TaskBar(Window * pParent,WinBits nWinStyle)65cdf0e10cSrcweir TaskBar::TaskBar( Window* pParent, WinBits nWinStyle ) :
66cdf0e10cSrcweir Window( pParent, WB_3DLOOK )
67cdf0e10cSrcweir {
68cdf0e10cSrcweir mpButtonBar = NULL;
69cdf0e10cSrcweir mpTaskToolBox = NULL;
70cdf0e10cSrcweir mpStatusBar = NULL;
71cdf0e10cSrcweir mnStatusWidth = 0;
72cdf0e10cSrcweir mnOldStatusWidth = 0;
73cdf0e10cSrcweir mnLines = 1;
74cdf0e10cSrcweir mnWinBits = nWinStyle;
75cdf0e10cSrcweir mbStatusText = sal_False;
76cdf0e10cSrcweir mbShowItems = sal_False;
77cdf0e10cSrcweir mbAutoHide = sal_False;
78cdf0e10cSrcweir
79cdf0e10cSrcweir ImplInitSettings();
80cdf0e10cSrcweir }
81cdf0e10cSrcweir
82cdf0e10cSrcweir // -----------------------------------------------------------------------
83cdf0e10cSrcweir
~TaskBar()84cdf0e10cSrcweir TaskBar::~TaskBar()
85cdf0e10cSrcweir {
86cdf0e10cSrcweir if ( mpButtonBar )
87cdf0e10cSrcweir delete mpButtonBar;
88cdf0e10cSrcweir if ( mpTaskToolBox )
89cdf0e10cSrcweir delete mpTaskToolBox;
90cdf0e10cSrcweir if ( mpStatusBar )
91cdf0e10cSrcweir delete mpStatusBar;
92cdf0e10cSrcweir }
93cdf0e10cSrcweir
94cdf0e10cSrcweir // -----------------------------------------------------------------------
95cdf0e10cSrcweir
ImplInitSettings()96cdf0e10cSrcweir void TaskBar::ImplInitSettings()
97cdf0e10cSrcweir {
98cdf0e10cSrcweir const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
99cdf0e10cSrcweir
100cdf0e10cSrcweir Color aColor;
101cdf0e10cSrcweir if ( IsControlBackground() )
102cdf0e10cSrcweir aColor = GetControlBackground();
103cdf0e10cSrcweir else if ( Window::GetStyle() & WB_3DLOOK )
104cdf0e10cSrcweir aColor = rStyleSettings.GetFaceColor();
105cdf0e10cSrcweir else
106cdf0e10cSrcweir aColor = rStyleSettings.GetWindowColor();
107cdf0e10cSrcweir SetBackground( aColor );
108cdf0e10cSrcweir }
109cdf0e10cSrcweir
110cdf0e10cSrcweir // -----------------------------------------------------------------------
111cdf0e10cSrcweir
ImplNewHeight(long nNewHeight)112cdf0e10cSrcweir void TaskBar::ImplNewHeight( long nNewHeight )
113cdf0e10cSrcweir {
114cdf0e10cSrcweir long nOldHeight = GetSizePixel().Height();
115cdf0e10cSrcweir if ( nNewHeight != nOldHeight )
116cdf0e10cSrcweir {
117cdf0e10cSrcweir long nY = GetPosPixel().Y()-(nNewHeight-nOldHeight);
118cdf0e10cSrcweir SetPosSizePixel( 0, nY, 0, nNewHeight,
119cdf0e10cSrcweir WINDOW_POSSIZE_Y | WINDOW_POSSIZE_HEIGHT );
120cdf0e10cSrcweir TaskResize();
121cdf0e10cSrcweir }
122cdf0e10cSrcweir }
123cdf0e10cSrcweir
124cdf0e10cSrcweir // -----------------------------------------------------------------------
125cdf0e10cSrcweir
TaskResize()126cdf0e10cSrcweir void TaskBar::TaskResize()
127cdf0e10cSrcweir {
128cdf0e10cSrcweir maTaskResizeHdl.Call( this );
129cdf0e10cSrcweir }
130cdf0e10cSrcweir
131cdf0e10cSrcweir // -----------------------------------------------------------------------
132cdf0e10cSrcweir
CreateButtonBar()133cdf0e10cSrcweir TaskButtonBar* TaskBar::CreateButtonBar()
134cdf0e10cSrcweir {
135cdf0e10cSrcweir return new TaskButtonBar( this );
136cdf0e10cSrcweir }
137cdf0e10cSrcweir
138cdf0e10cSrcweir // -----------------------------------------------------------------------
139cdf0e10cSrcweir
CreateTaskToolBox()140cdf0e10cSrcweir TaskToolBox* TaskBar::CreateTaskToolBox()
141cdf0e10cSrcweir {
142cdf0e10cSrcweir return new TaskToolBox( this );
143cdf0e10cSrcweir }
144cdf0e10cSrcweir
145cdf0e10cSrcweir // -----------------------------------------------------------------------
146cdf0e10cSrcweir
CreateTaskStatusBar()147cdf0e10cSrcweir TaskStatusBar* TaskBar::CreateTaskStatusBar()
148cdf0e10cSrcweir {
149cdf0e10cSrcweir return new TaskStatusBar( this );
150cdf0e10cSrcweir }
151cdf0e10cSrcweir
152cdf0e10cSrcweir // -----------------------------------------------------------------------
153cdf0e10cSrcweir
MouseMove(const MouseEvent & rMEvt)154cdf0e10cSrcweir void TaskBar::MouseMove( const MouseEvent& rMEvt )
155cdf0e10cSrcweir {
156cdf0e10cSrcweir if ( mnWinBits & WB_SIZEABLE )
157cdf0e10cSrcweir {
158cdf0e10cSrcweir TaskToolBox* pTempTaskToolBox = GetTaskToolBox();
159cdf0e10cSrcweir TaskStatusBar* pTempStatusBar = GetStatusBar();
160cdf0e10cSrcweir
161cdf0e10cSrcweir if ( pTempTaskToolBox && pTempStatusBar )
162cdf0e10cSrcweir {
163cdf0e10cSrcweir long nStatusX = pTempStatusBar->GetPosPixel().X()-TASKBAR_OFFSIZE-2;
164cdf0e10cSrcweir long nMouseX = rMEvt.GetPosPixel().X();
165cdf0e10cSrcweir PointerStyle ePtrStyle;
166cdf0e10cSrcweir if ( (nMouseX >= nStatusX-1) && (nMouseX <= nStatusX+3) )
167cdf0e10cSrcweir ePtrStyle = POINTER_HSIZEBAR;
168cdf0e10cSrcweir else
169cdf0e10cSrcweir ePtrStyle = POINTER_ARROW;
170cdf0e10cSrcweir Pointer aPtr( ePtrStyle );
171cdf0e10cSrcweir SetPointer( aPtr );
172cdf0e10cSrcweir }
173cdf0e10cSrcweir }
174cdf0e10cSrcweir }
175cdf0e10cSrcweir
176cdf0e10cSrcweir // -----------------------------------------------------------------------
177cdf0e10cSrcweir
MouseButtonDown(const MouseEvent & rMEvt)178cdf0e10cSrcweir void TaskBar::MouseButtonDown( const MouseEvent& rMEvt )
179cdf0e10cSrcweir {
180cdf0e10cSrcweir if ( rMEvt.IsLeft() && (mnWinBits & WB_SIZEABLE) )
181cdf0e10cSrcweir {
182cdf0e10cSrcweir TaskToolBox* pTempTaskToolBox = GetTaskToolBox();
183cdf0e10cSrcweir TaskStatusBar* pTempStatusBar = GetStatusBar();
184cdf0e10cSrcweir
185cdf0e10cSrcweir if ( pTempTaskToolBox && pTempStatusBar )
186cdf0e10cSrcweir {
187cdf0e10cSrcweir long nStatusX = pTempStatusBar->GetPosPixel().X()-TASKBAR_OFFSIZE-2;
188cdf0e10cSrcweir long nMouseX = rMEvt.GetPosPixel().X();
189cdf0e10cSrcweir if ( (nMouseX >= nStatusX-1) && (nMouseX <= nStatusX+3) )
190cdf0e10cSrcweir {
191cdf0e10cSrcweir if ( rMEvt.GetClicks() == 2 )
192cdf0e10cSrcweir {
193cdf0e10cSrcweir if ( mnStatusWidth )
194cdf0e10cSrcweir {
195cdf0e10cSrcweir mnStatusWidth = 0;
196cdf0e10cSrcweir Resize();
197cdf0e10cSrcweir }
198cdf0e10cSrcweir }
199cdf0e10cSrcweir else
200cdf0e10cSrcweir {
201cdf0e10cSrcweir StartTracking();
202cdf0e10cSrcweir mnOldStatusWidth = mnStatusWidth;
203cdf0e10cSrcweir mnMouseOff = nMouseX-nStatusX;
204cdf0e10cSrcweir }
205cdf0e10cSrcweir }
206cdf0e10cSrcweir }
207cdf0e10cSrcweir }
208cdf0e10cSrcweir }
209cdf0e10cSrcweir
210cdf0e10cSrcweir // -----------------------------------------------------------------------
211cdf0e10cSrcweir
Tracking(const TrackingEvent & rTEvt)212cdf0e10cSrcweir void TaskBar::Tracking( const TrackingEvent& rTEvt )
213cdf0e10cSrcweir {
214cdf0e10cSrcweir if ( rTEvt.IsTrackingEnded() )
215cdf0e10cSrcweir {
216cdf0e10cSrcweir if ( rTEvt.IsTrackingCanceled() )
217cdf0e10cSrcweir {
218cdf0e10cSrcweir mnStatusWidth = mnOldStatusWidth;
219cdf0e10cSrcweir Resize();
220cdf0e10cSrcweir Update();
221cdf0e10cSrcweir }
222cdf0e10cSrcweir }
223cdf0e10cSrcweir else
224cdf0e10cSrcweir {
225cdf0e10cSrcweir Size aSize = GetOutputSizePixel();
226cdf0e10cSrcweir
227cdf0e10cSrcweir long nMouseX = rTEvt.GetMouseEvent().GetPosPixel().X()-mnMouseOff;
228cdf0e10cSrcweir if ( nMouseX < 0 )
229cdf0e10cSrcweir nMouseX = 0;
230cdf0e10cSrcweir long nMaxX = aSize.Width()-TASKBAR_OFFX-TASKBAR_OFFSIZE-1;
231cdf0e10cSrcweir if ( nMouseX > nMaxX )
232cdf0e10cSrcweir nMouseX = nMaxX;
233cdf0e10cSrcweir mnStatusWidth = aSize.Width()-nMouseX-TASKBAR_OFFX-TASKBAR_OFFSIZE;
234cdf0e10cSrcweir Resize();
235cdf0e10cSrcweir Update();
236cdf0e10cSrcweir }
237cdf0e10cSrcweir }
238cdf0e10cSrcweir
239cdf0e10cSrcweir // -----------------------------------------------------------------------
240cdf0e10cSrcweir
Paint(const Rectangle & rRect)241cdf0e10cSrcweir void TaskBar::Paint( const Rectangle& rRect )
242cdf0e10cSrcweir {
243cdf0e10cSrcweir if ( mnWinBits & (WB_BORDER | WB_SIZEABLE) )
244cdf0e10cSrcweir {
245cdf0e10cSrcweir const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
246cdf0e10cSrcweir Size aSize = GetOutputSizePixel();
247cdf0e10cSrcweir long nY = 0;
248cdf0e10cSrcweir
249cdf0e10cSrcweir if ( mnWinBits & WB_BORDER )
250cdf0e10cSrcweir {
251cdf0e10cSrcweir SetLineColor( rStyleSettings.GetShadowColor() );
252cdf0e10cSrcweir DrawLine( Point( 0, 0 ), Point( aSize.Width()-1, 0 ) );
253cdf0e10cSrcweir SetLineColor( rStyleSettings.GetLightColor() );
254cdf0e10cSrcweir DrawLine( Point( 0, 1 ), Point( aSize.Width()-1, 1 ) );
255cdf0e10cSrcweir nY += 2;
256cdf0e10cSrcweir }
257cdf0e10cSrcweir
258cdf0e10cSrcweir if ( (mnWinBits & WB_SIZEABLE) )
259cdf0e10cSrcweir {
260cdf0e10cSrcweir //TaskButtonBar* pTempButtonBar = GetButtonBar();
261cdf0e10cSrcweir TaskToolBox* pTempTaskToolBox = GetTaskToolBox();
262cdf0e10cSrcweir TaskStatusBar* pTempStatusBar = GetStatusBar();
263cdf0e10cSrcweir
264cdf0e10cSrcweir if ( pTempTaskToolBox && pTempStatusBar )
265cdf0e10cSrcweir {
266cdf0e10cSrcweir long nStatusX = pTempStatusBar->GetPosPixel().X()-TASKBAR_OFFSIZE-2;
267cdf0e10cSrcweir if ( nStatusX > 0 )
268cdf0e10cSrcweir {
269cdf0e10cSrcweir SetLineColor( rStyleSettings.GetShadowColor() );
270cdf0e10cSrcweir DrawLine( Point( nStatusX, nY ), Point( nStatusX, aSize.Height()-1 ) );
271cdf0e10cSrcweir nStatusX++;
272cdf0e10cSrcweir SetLineColor( rStyleSettings.GetLightColor() );
273cdf0e10cSrcweir DrawLine( Point( nStatusX, nY ), Point( nStatusX, aSize.Height()-1 ) );
274cdf0e10cSrcweir }
275cdf0e10cSrcweir }
276cdf0e10cSrcweir }
277cdf0e10cSrcweir }
278cdf0e10cSrcweir
279cdf0e10cSrcweir Window::Paint( rRect );
280cdf0e10cSrcweir }
281cdf0e10cSrcweir
282cdf0e10cSrcweir // -----------------------------------------------------------------------
283cdf0e10cSrcweir
Resize()284cdf0e10cSrcweir void TaskBar::Resize()
285cdf0e10cSrcweir {
286cdf0e10cSrcweir if ( !IsReallyShown() )
287cdf0e10cSrcweir return;
288cdf0e10cSrcweir
289cdf0e10cSrcweir TaskButtonBar* pTempButtonBar = GetButtonBar();
290cdf0e10cSrcweir TaskToolBox* pTempTaskToolBox = GetTaskToolBox();
291cdf0e10cSrcweir TaskStatusBar* pTempStatusBar = GetStatusBar();
292cdf0e10cSrcweir Point aToolPos( TASKBAR_OFFX, 0 );
293cdf0e10cSrcweir Size aSize = GetOutputSizePixel();
294cdf0e10cSrcweir Size aStatusSize;
295cdf0e10cSrcweir Size aToolSize( aSize.Width()-(TASKBAR_OFFX*2), 0 );
296cdf0e10cSrcweir long nOldStatusX = -1;
297cdf0e10cSrcweir long nNewStatusX = -1;
298cdf0e10cSrcweir long nTaskHeight = aSize.Height() - (TASKBAR_OFFY*2);
299cdf0e10cSrcweir
300cdf0e10cSrcweir if ( mnWinBits & WB_BORDER )
301cdf0e10cSrcweir {
302cdf0e10cSrcweir nTaskHeight -= TASKBAR_BORDER;
303cdf0e10cSrcweir aToolPos.Y() += TASKBAR_BORDER;
304cdf0e10cSrcweir }
305cdf0e10cSrcweir
306cdf0e10cSrcweir if ( pTempButtonBar )
307cdf0e10cSrcweir {
308cdf0e10cSrcweir sal_uInt16 i = 0;
309cdf0e10cSrcweir sal_Bool bVisibleItems = sal_False;
310cdf0e10cSrcweir while ( i < pTempButtonBar->GetItemCount() )
311cdf0e10cSrcweir {
312cdf0e10cSrcweir if ( pTempButtonBar->IsItemVisible( pTempButtonBar->GetItemId( i ) ) )
313cdf0e10cSrcweir {
314cdf0e10cSrcweir bVisibleItems = sal_True;
315cdf0e10cSrcweir break;
316cdf0e10cSrcweir }
317cdf0e10cSrcweir i++;
318cdf0e10cSrcweir }
319cdf0e10cSrcweir if ( mbStatusText || !bVisibleItems )
320cdf0e10cSrcweir pTempButtonBar->Hide();
321cdf0e10cSrcweir else
322cdf0e10cSrcweir {
323cdf0e10cSrcweir Size aButtonBarSize = pTempButtonBar->CalcWindowSizePixel();
324cdf0e10cSrcweir if ( pTempButtonBar->GetItemCount() )
325cdf0e10cSrcweir nTaskHeight = aButtonBarSize.Height();
326cdf0e10cSrcweir else
327cdf0e10cSrcweir aButtonBarSize.Height() = nTaskHeight;
328cdf0e10cSrcweir Point aTempPos = aToolPos;
329cdf0e10cSrcweir aTempPos.Y() += (aSize.Height()-aButtonBarSize.Height()-aTempPos.Y())/2;
330cdf0e10cSrcweir pTempButtonBar->SetPosSizePixel( aTempPos, aButtonBarSize );
331cdf0e10cSrcweir pTempButtonBar->Show();
332cdf0e10cSrcweir aToolPos.X() += aButtonBarSize.Width()+TASKBAR_BUTTONOFF;
333cdf0e10cSrcweir }
334cdf0e10cSrcweir }
335cdf0e10cSrcweir
336cdf0e10cSrcweir if ( pTempStatusBar )
337cdf0e10cSrcweir {
338cdf0e10cSrcweir aStatusSize = pTempStatusBar->CalcWindowSizePixel();
339cdf0e10cSrcweir if ( mnStatusWidth )
340cdf0e10cSrcweir aStatusSize.Width() = mnStatusWidth;
341cdf0e10cSrcweir if ( !pTempTaskToolBox || mbStatusText )
342cdf0e10cSrcweir aStatusSize.Width() = aSize.Width();
343cdf0e10cSrcweir long nMaxHeight = aSize.Height()-(TASKBAR_OFFY*2);
344cdf0e10cSrcweir if ( mnWinBits & WB_BORDER )
345cdf0e10cSrcweir nMaxHeight -= TASKBAR_BORDER;
346cdf0e10cSrcweir if ( nMaxHeight+2 > aStatusSize.Height() )
347cdf0e10cSrcweir aStatusSize.Height() = nMaxHeight;
348cdf0e10cSrcweir Point aPos( aSize.Width()-aStatusSize.Width(), 0 );
349cdf0e10cSrcweir if ( pTempTaskToolBox && (mnWinBits & WB_SIZEABLE) && !mbStatusText )
350cdf0e10cSrcweir {
351cdf0e10cSrcweir long nMinToolWidth = aToolPos.X()+50;
352cdf0e10cSrcweir if ( aPos.X() < nMinToolWidth )
353cdf0e10cSrcweir {
354cdf0e10cSrcweir aStatusSize.Width() -= nMinToolWidth-aPos.X();
355cdf0e10cSrcweir aPos.X() = nMinToolWidth;
356cdf0e10cSrcweir }
357cdf0e10cSrcweir }
358cdf0e10cSrcweir if ( aPos.X() < 0 )
359cdf0e10cSrcweir {
360cdf0e10cSrcweir aStatusSize.Width() = aSize.Width();
361cdf0e10cSrcweir aPos.X() = 0;
362cdf0e10cSrcweir }
363cdf0e10cSrcweir if ( mnWinBits & WB_BORDER )
364cdf0e10cSrcweir aPos.Y() += TASKBAR_BORDER;
365cdf0e10cSrcweir aPos.Y() += (aSize.Height()-aStatusSize.Height()-aPos.Y())/2;
366cdf0e10cSrcweir if ( mnWinBits & WB_SIZEABLE )
367cdf0e10cSrcweir {
368cdf0e10cSrcweir if ( pTempTaskToolBox )
369cdf0e10cSrcweir {
370cdf0e10cSrcweir nOldStatusX = pTempStatusBar->GetPosPixel().X()-TASKBAR_OFFSIZE-2;
371cdf0e10cSrcweir nNewStatusX = aPos.X()-TASKBAR_OFFSIZE-2;
372cdf0e10cSrcweir }
373cdf0e10cSrcweir }
374cdf0e10cSrcweir pTempStatusBar->SetPosSizePixel( aPos, aStatusSize );
375cdf0e10cSrcweir pTempStatusBar->Show();
376cdf0e10cSrcweir aToolSize.Width() = aPos.X()-aToolPos.X()-TASKBAR_OFFX;
377cdf0e10cSrcweir if ( mnWinBits & WB_SIZEABLE )
378cdf0e10cSrcweir aToolSize.Width() -= (TASKBAR_OFFSIZE*2)-2;
379cdf0e10cSrcweir }
380cdf0e10cSrcweir
381cdf0e10cSrcweir if ( pTempTaskToolBox )
382cdf0e10cSrcweir {
383cdf0e10cSrcweir if ( aToolSize.Width() <= 24 )
384cdf0e10cSrcweir pTempTaskToolBox->Hide();
385cdf0e10cSrcweir else
386cdf0e10cSrcweir {
387cdf0e10cSrcweir aToolSize.Height() = pTempTaskToolBox->CalcWindowSizePixel().Height();
388cdf0e10cSrcweir if ( pTempTaskToolBox->GetItemCount() )
389cdf0e10cSrcweir nTaskHeight = aToolSize.Height();
390cdf0e10cSrcweir else
391cdf0e10cSrcweir aToolSize.Height() = nTaskHeight;
392cdf0e10cSrcweir aToolPos.Y() += (aSize.Height()-aToolSize.Height()-aToolPos.Y())/2;
393cdf0e10cSrcweir pTempTaskToolBox->SetPosSizePixel( aToolPos, aToolSize );
394cdf0e10cSrcweir pTempTaskToolBox->Show();
395cdf0e10cSrcweir }
396cdf0e10cSrcweir }
397cdf0e10cSrcweir
398cdf0e10cSrcweir if ( nOldStatusX != nNewStatusX )
399cdf0e10cSrcweir {
400cdf0e10cSrcweir if ( nOldStatusX > 0 )
401cdf0e10cSrcweir {
402cdf0e10cSrcweir Rectangle aRect( nOldStatusX, 0, nOldStatusX+2, aSize.Height()-1 );
403cdf0e10cSrcweir Invalidate( aRect );
404cdf0e10cSrcweir }
405cdf0e10cSrcweir if ( nNewStatusX > 0 )
406cdf0e10cSrcweir {
407cdf0e10cSrcweir Rectangle aRect( nNewStatusX, 0, nNewStatusX+2, aSize.Height()-1 );
408cdf0e10cSrcweir Invalidate( aRect );
409cdf0e10cSrcweir }
410cdf0e10cSrcweir }
411cdf0e10cSrcweir }
412cdf0e10cSrcweir
413cdf0e10cSrcweir // -----------------------------------------------------------------------
414cdf0e10cSrcweir
StateChanged(StateChangedType nType)415cdf0e10cSrcweir void TaskBar::StateChanged( StateChangedType nType )
416cdf0e10cSrcweir {
417cdf0e10cSrcweir Window::StateChanged( nType );
418cdf0e10cSrcweir
419cdf0e10cSrcweir if ( nType == STATE_CHANGE_INITSHOW )
420cdf0e10cSrcweir Format();
421cdf0e10cSrcweir else if ( nType == STATE_CHANGE_CONTROLBACKGROUND )
422cdf0e10cSrcweir {
423cdf0e10cSrcweir ImplInitSettings();
424cdf0e10cSrcweir Invalidate();
425cdf0e10cSrcweir }
426cdf0e10cSrcweir else if ( nType == STATE_CHANGE_FORMAT )
427cdf0e10cSrcweir {
428cdf0e10cSrcweir ImplInitSettings();
429cdf0e10cSrcweir ImplNewHeight( CalcWindowSizePixel().Height() );
430cdf0e10cSrcweir Format();
431cdf0e10cSrcweir Invalidate();
432cdf0e10cSrcweir }
433cdf0e10cSrcweir }
434cdf0e10cSrcweir
435cdf0e10cSrcweir // -----------------------------------------------------------------------
436cdf0e10cSrcweir
DataChanged(const DataChangedEvent & rDCEvt)437cdf0e10cSrcweir void TaskBar::DataChanged( const DataChangedEvent& rDCEvt )
438cdf0e10cSrcweir {
439cdf0e10cSrcweir Window::DataChanged( rDCEvt );
440cdf0e10cSrcweir
441cdf0e10cSrcweir if ( (rDCEvt.GetType() == DATACHANGED_FONTS) ||
442cdf0e10cSrcweir (rDCEvt.GetType() == DATACHANGED_FONTSUBSTITUTION) ||
443cdf0e10cSrcweir ((rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
444cdf0e10cSrcweir (rDCEvt.GetFlags() & SETTINGS_STYLE)) )
445cdf0e10cSrcweir {
446cdf0e10cSrcweir // Asyncronen StateChanged ausloesen, damit sich die
447cdf0e10cSrcweir // TaskBar an die neuen Groessen der Child-Fenster
448cdf0e10cSrcweir // orientieren kann
449cdf0e10cSrcweir PostStateChanged( STATE_CHANGE_FORMAT );
450cdf0e10cSrcweir }
451cdf0e10cSrcweir }
452cdf0e10cSrcweir
453cdf0e10cSrcweir // -----------------------------------------------------------------------
454cdf0e10cSrcweir
Format()455cdf0e10cSrcweir void TaskBar::Format()
456cdf0e10cSrcweir {
457cdf0e10cSrcweir ImplNewHeight( CalcWindowSizePixel().Height() );
458cdf0e10cSrcweir Resize();
459cdf0e10cSrcweir }
460cdf0e10cSrcweir
461cdf0e10cSrcweir // -----------------------------------------------------------------------
462cdf0e10cSrcweir
SetLines(sal_uInt16 nLines)463cdf0e10cSrcweir void TaskBar::SetLines( sal_uInt16 nLines )
464cdf0e10cSrcweir {
465cdf0e10cSrcweir mnLines = nLines;
466cdf0e10cSrcweir }
467cdf0e10cSrcweir
468cdf0e10cSrcweir // -----------------------------------------------------------------------
469cdf0e10cSrcweir
EnableAutoHide(sal_Bool bAutoHide)470cdf0e10cSrcweir void TaskBar::EnableAutoHide( sal_Bool bAutoHide )
471cdf0e10cSrcweir {
472cdf0e10cSrcweir mbAutoHide = bAutoHide;
473cdf0e10cSrcweir
474cdf0e10cSrcweir if ( mbAutoHide )
475cdf0e10cSrcweir {
476cdf0e10cSrcweir ImplNewHeight( TASKBAR_AUTOHIDE_HEIGHT );
477cdf0e10cSrcweir }
478cdf0e10cSrcweir else
479cdf0e10cSrcweir {
480cdf0e10cSrcweir ImplNewHeight( CalcWindowSizePixel().Height() );
481cdf0e10cSrcweir }
482cdf0e10cSrcweir }
483cdf0e10cSrcweir
484cdf0e10cSrcweir // -----------------------------------------------------------------------
485cdf0e10cSrcweir
ShowStatusText(const String & rText)486cdf0e10cSrcweir void TaskBar::ShowStatusText( const String& rText )
487cdf0e10cSrcweir {
488cdf0e10cSrcweir if ( mpStatusBar )
489cdf0e10cSrcweir {
490cdf0e10cSrcweir if ( !mbStatusText )
491cdf0e10cSrcweir {
492cdf0e10cSrcweir mbStatusText = sal_True;
493cdf0e10cSrcweir if ( mpStatusBar->AreItemsVisible() )
494cdf0e10cSrcweir {
495cdf0e10cSrcweir mbShowItems = sal_True;
496cdf0e10cSrcweir mpStatusBar->HideItems();
497cdf0e10cSrcweir }
498cdf0e10cSrcweir else
499cdf0e10cSrcweir mbShowItems = sal_True;
500cdf0e10cSrcweir maOldText = mpStatusBar->GetText();
501cdf0e10cSrcweir Resize();
502cdf0e10cSrcweir mpStatusBar->SetText( rText );
503cdf0e10cSrcweir Update();
504cdf0e10cSrcweir mpStatusBar->Update();
505cdf0e10cSrcweir }
506cdf0e10cSrcweir else
507cdf0e10cSrcweir mpStatusBar->SetText( rText );
508cdf0e10cSrcweir }
509cdf0e10cSrcweir }
510cdf0e10cSrcweir
511cdf0e10cSrcweir // -----------------------------------------------------------------------
512cdf0e10cSrcweir
HideStatusText()513cdf0e10cSrcweir void TaskBar::HideStatusText()
514cdf0e10cSrcweir {
515cdf0e10cSrcweir if ( mbStatusText && mpStatusBar )
516cdf0e10cSrcweir {
517cdf0e10cSrcweir mbStatusText = sal_False;
518cdf0e10cSrcweir mpStatusBar->SetText( maOldText );
519cdf0e10cSrcweir Resize();
520cdf0e10cSrcweir if ( mbShowItems )
521cdf0e10cSrcweir mpStatusBar->ShowItems();
522cdf0e10cSrcweir }
523cdf0e10cSrcweir }
524cdf0e10cSrcweir
525cdf0e10cSrcweir // -----------------------------------------------------------------------
526cdf0e10cSrcweir
CalcWindowSizePixel() const527cdf0e10cSrcweir Size TaskBar::CalcWindowSizePixel() const
528cdf0e10cSrcweir {
529cdf0e10cSrcweir TaskButtonBar* pTempButtonBar = GetButtonBar();
530cdf0e10cSrcweir TaskToolBox* pTempTaskToolBox = GetTaskToolBox();
531cdf0e10cSrcweir TaskStatusBar* pTempStatusBar = GetStatusBar();
532cdf0e10cSrcweir Size aSize;
533cdf0e10cSrcweir long nTempHeight;
534cdf0e10cSrcweir
535cdf0e10cSrcweir if ( pTempButtonBar && pTempButtonBar->GetItemCount() )
536cdf0e10cSrcweir aSize.Height() = pTempButtonBar->CalcWindowSizePixel().Height()+(TASKBAR_OFFY*2);
537cdf0e10cSrcweir if ( pTempTaskToolBox && pTempTaskToolBox->GetItemCount() )
538cdf0e10cSrcweir {
539cdf0e10cSrcweir nTempHeight = pTempTaskToolBox->CalcWindowSizePixel().Height()+(TASKBAR_OFFY*2);
540cdf0e10cSrcweir if ( nTempHeight > aSize.Height() )
541cdf0e10cSrcweir aSize.Height() = nTempHeight;
542cdf0e10cSrcweir }
543cdf0e10cSrcweir if ( pTempStatusBar )
544cdf0e10cSrcweir {
545cdf0e10cSrcweir nTempHeight = pTempStatusBar->GetSizePixel().Height();
546cdf0e10cSrcweir if ( nTempHeight > aSize.Height() )
547cdf0e10cSrcweir aSize.Height() = nTempHeight;
548cdf0e10cSrcweir }
549cdf0e10cSrcweir
550cdf0e10cSrcweir if ( mnWinBits & WB_BORDER )
551cdf0e10cSrcweir aSize.Height() += TASKBAR_BORDER;
552cdf0e10cSrcweir
553cdf0e10cSrcweir return aSize;
554cdf0e10cSrcweir }
555cdf0e10cSrcweir
556cdf0e10cSrcweir // -----------------------------------------------------------------------
557cdf0e10cSrcweir
GetButtonBar() const558cdf0e10cSrcweir TaskButtonBar* TaskBar::GetButtonBar() const
559cdf0e10cSrcweir {
560cdf0e10cSrcweir if ( !mpButtonBar )
561cdf0e10cSrcweir ((TaskBar*)this)->mpButtonBar = ((TaskBar*)this)->CreateButtonBar();
562cdf0e10cSrcweir return mpButtonBar;
563cdf0e10cSrcweir }
564cdf0e10cSrcweir
565cdf0e10cSrcweir // -----------------------------------------------------------------------
566cdf0e10cSrcweir
GetTaskToolBox() const567cdf0e10cSrcweir TaskToolBox* TaskBar::GetTaskToolBox() const
568cdf0e10cSrcweir {
569cdf0e10cSrcweir if ( !mpTaskToolBox )
570cdf0e10cSrcweir ((TaskBar*)this)->mpTaskToolBox = ((TaskBar*)this)->CreateTaskToolBox();
571cdf0e10cSrcweir return mpTaskToolBox;
572cdf0e10cSrcweir }
573cdf0e10cSrcweir
574cdf0e10cSrcweir // -----------------------------------------------------------------------
575cdf0e10cSrcweir
GetStatusBar() const576cdf0e10cSrcweir TaskStatusBar* TaskBar::GetStatusBar() const
577cdf0e10cSrcweir {
578cdf0e10cSrcweir if ( !mpStatusBar )
579cdf0e10cSrcweir {
580cdf0e10cSrcweir ((TaskBar*)this)->mpStatusBar = ((TaskBar*)this)->CreateTaskStatusBar();
581cdf0e10cSrcweir if ( mpStatusBar )
582cdf0e10cSrcweir mpStatusBar->mpNotifyTaskBar = (TaskBar*)this;
583cdf0e10cSrcweir }
584cdf0e10cSrcweir return mpStatusBar;
585cdf0e10cSrcweir }
586