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