xref: /aoo42x/main/svtools/source/control/taskbar.cxx (revision 79aad27f)
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