1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 #include "mediacontrol.hxx" 29 #include "mediacontrol.hrc" 30 #include "mediamisc.hxx" 31 #include <avmedia/mediawindow.hxx> 32 #include <avmedia/mediaplayer.hxx> 33 #include "helpids.hrc" 34 #include <tools/time.hxx> 35 #include <vcl/svapp.hxx> 36 #include <vcl/lstbox.hxx> 37 #include <unotools/syslocale.hxx> 38 #include <sfx2/viewfrm.hxx> 39 #include <math.h> 40 #include <algorithm> 41 42 #define AVMEDIA_TIMEOUT 100 43 #define AVMEDIA_TIME_RANGE 2048 44 #define AVMEDIA_DB_RANGE -40 45 #define AVMEDIA_LINEINCREMENT 1.0 46 #define AVMEDIA_PAGEINCREMENT 10.0 47 48 #define AVMEDIA_TOOLBOXITEM_PLAY 0x0001 49 #define AVMEDIA_TOOLBOXITEM_PLAYFFW 0x0002 50 #define AVMEDIA_TOOLBOXITEM_PAUSE 0x0004 51 #define AVMEDIA_TOOLBOXITEM_STOP 0x0008 52 #define AVMEDIA_TOOLBOXITEM_MUTE 0x0010 53 #define AVMEDIA_TOOLBOXITEM_LOOP 0x0011 54 #define AVMEDIA_TOOLBOXITEM_ZOOM 0x0012 55 #define AVMEDIA_TOOLBOXITEM_OPEN 0x0014 56 #define AVMEDIA_TOOLBOXITEM_INSERT 0x0018 57 58 #define AVMEDIA_ZOOMLEVEL_50 0 59 #define AVMEDIA_ZOOMLEVEL_100 1 60 #define AVMEDIA_ZOOMLEVEL_200 2 61 #define AVMEDIA_ZOOMLEVEL_FIT 3 62 #define AVMEDIA_ZOOMLEVEL_SCALED 4 63 #define AVMEDIA_ZOOMLEVEL_INVALID 65535 64 65 namespace avmedia 66 { 67 68 // ---------------- 69 // - MediaControl - 70 // --------------- 71 72 MediaControl::MediaControl( Window* pParent, MediaControlStyle eControlStyle ) : 73 Control( pParent ), 74 maImageList( AVMEDIA_RESID( AVMEDIA_IMGLST ) ), 75 maItem( 0, AVMEDIA_SETMASK_ALL ), 76 maPlayToolBox( this, WB_3DLOOK ), 77 maTimeSlider( this, WB_HORZ | WB_DRAG | WB_3DLOOK | WB_SLIDERSET ), 78 maMuteToolBox( this, WB_3DLOOK ), 79 maVolumeSlider( this, WB_HORZ | WB_DRAG | WB_SLIDERSET ), 80 maZoomToolBox( this, WB_3DLOOK ), 81 mpZoomListBox( new ListBox( &maZoomToolBox, WB_BORDER | WB_DROPDOWN | WB_AUTOHSCROLL | WB_3DLOOK ) ), 82 maTimeEdit( this, WB_CENTER | WB_READONLY | WB_BORDER | WB_3DLOOK | WB_READONLY ), 83 meControlStyle( eControlStyle ), 84 mbLocked( false ) 85 { 86 const String aTimeText( RTL_CONSTASCII_USTRINGPARAM( " 00:00:00/00:00:00 " ) ); 87 88 SetBackground(); 89 SetPaintTransparent( sal_True ); 90 SetParentClipMode( PARENTCLIPMODE_NOCLIP ); 91 92 if( MEDIACONTROLSTYLE_SINGLELINE != meControlStyle ) 93 { 94 maPlayToolBox.InsertItem( AVMEDIA_TOOLBOXITEM_OPEN, implGetImage( AVMEDIA_IMG_OPEN ), String( AVMEDIA_RESID( AVMEDIA_STR_OPEN ) ) ); 95 maPlayToolBox.SetHelpId( AVMEDIA_TOOLBOXITEM_OPEN, HID_AVMEDIA_TOOLBOXITEM_OPEN ); 96 97 maPlayToolBox.InsertItem( AVMEDIA_TOOLBOXITEM_INSERT, implGetImage( AVMEDIA_IMG_INSERT ), String( AVMEDIA_RESID( AVMEDIA_STR_INSERT ) ) ); 98 maPlayToolBox.SetHelpId( AVMEDIA_TOOLBOXITEM_INSERT, HID_AVMEDIA_TOOLBOXITEM_INSERT ); 99 100 maPlayToolBox.InsertSeparator(); 101 } 102 else 103 { 104 mpZoomListBox->SetBackground(); 105 106 maZoomToolBox.SetBackground(); 107 maZoomToolBox.SetPaintTransparent( sal_True ); 108 maPlayToolBox.SetBackground(); 109 maPlayToolBox.SetPaintTransparent( sal_True ); 110 maMuteToolBox.SetBackground(); 111 maMuteToolBox.SetPaintTransparent( sal_True ); 112 113 } 114 115 maPlayToolBox.InsertItem( AVMEDIA_TOOLBOXITEM_PLAY, implGetImage( AVMEDIA_IMG_PLAY ), String( AVMEDIA_RESID( AVMEDIA_STR_PLAY ) ), TIB_CHECKABLE ); 116 maPlayToolBox.SetHelpId( AVMEDIA_TOOLBOXITEM_PLAY, HID_AVMEDIA_TOOLBOXITEM_PLAY ); 117 118 maPlayToolBox.InsertItem( AVMEDIA_TOOLBOXITEM_PAUSE, implGetImage( AVMEDIA_IMG_PAUSE ), String( AVMEDIA_RESID( AVMEDIA_STR_PAUSE ) ), TIB_CHECKABLE ); 119 maPlayToolBox.SetHelpId( AVMEDIA_TOOLBOXITEM_PAUSE, HID_AVMEDIA_TOOLBOXITEM_PAUSE ); 120 121 maPlayToolBox.InsertItem( AVMEDIA_TOOLBOXITEM_STOP, implGetImage( AVMEDIA_IMG_STOP ), String( AVMEDIA_RESID( AVMEDIA_STR_STOP ) ), TIB_CHECKABLE ); 122 maPlayToolBox.SetHelpId( AVMEDIA_TOOLBOXITEM_STOP, HID_AVMEDIA_TOOLBOXITEM_STOP ); 123 124 maPlayToolBox.InsertSeparator(); 125 126 maPlayToolBox.InsertItem( AVMEDIA_TOOLBOXITEM_LOOP, implGetImage( AVMEDIA_IMG_ENDLESS ), String( AVMEDIA_RESID( AVMEDIA_STR_ENDLESS ) ) ); 127 maPlayToolBox.SetHelpId( AVMEDIA_TOOLBOXITEM_LOOP, HID_AVMEDIA_TOOLBOXITEM_LOOP ); 128 129 if( MEDIACONTROLSTYLE_SINGLELINE == meControlStyle ) 130 maPlayToolBox.InsertSeparator(); 131 132 maPlayToolBox.SetSelectHdl( LINK( this, MediaControl, implSelectHdl ) ); 133 maPlayToolBox.SetSizePixel( maPlayToolBox.CalcWindowSizePixel() ); 134 maPlayToolBox.Show(); 135 maMinSize = maPlayToolBox.GetSizePixel(); 136 137 maTimeSlider.SetSlideHdl( LINK( this, MediaControl, implTimeHdl ) ); 138 maTimeSlider.SetEndSlideHdl( LINK( this, MediaControl, implTimeEndHdl ) ); 139 maTimeSlider.SetRange( Range( 0, AVMEDIA_TIME_RANGE ) ); 140 maTimeSlider.SetHelpId( HID_AVMEDIA_TIMESLIDER ); 141 maTimeSlider.SetUpdateMode( true ); 142 maTimeSlider.SetSizePixel( Size( 128, maPlayToolBox.GetSizePixel().Height() ) ); 143 maTimeSlider.Show(); 144 maMinSize.Width() += maTimeSlider.GetSizePixel().Width(); 145 146 maTimeEdit.SetText( aTimeText ); 147 maTimeEdit.SetUpdateMode( true ); 148 maTimeEdit.SetSizePixel( Size( maTimeEdit.GetTextWidth( aTimeText ) + 8, maPlayToolBox.GetSizePixel().Height() ) ); 149 maTimeEdit.SetControlBackground( Application::GetSettings().GetStyleSettings().GetWindowColor() ); 150 maTimeEdit.SetHelpId( HID_AVMEDIA_TIMEEDIT ); 151 maTimeEdit.Disable(); 152 maTimeEdit.Show(); 153 maMinSize.Width() += maTimeEdit.GetSizePixel().Width(); 154 155 if( MEDIACONTROLSTYLE_SINGLELINE == meControlStyle ) 156 maMuteToolBox.InsertSeparator(); 157 158 maMuteToolBox.InsertItem( AVMEDIA_TOOLBOXITEM_MUTE, implGetImage( AVMEDIA_IMG_MUTE ), String( AVMEDIA_RESID( AVMEDIA_STR_MUTE ) ) ); 159 maMuteToolBox.SetHelpId( AVMEDIA_TOOLBOXITEM_MUTE, HID_AVMEDIA_TOOLBOXITEM_MUTE ); 160 161 maMuteToolBox.SetSelectHdl( LINK( this, MediaControl, implSelectHdl ) ); 162 maMuteToolBox.SetSizePixel( maMuteToolBox.CalcWindowSizePixel() ); 163 maMuteToolBox.Show(); 164 maMinSize.Width() += maMuteToolBox.GetSizePixel().Width(); 165 166 maVolumeSlider.SetSlideHdl( LINK( this, MediaControl, implVolumeHdl ) ); 167 maVolumeSlider.SetEndSlideHdl( LINK( this, MediaControl, implVolumeEndHdl ) ); 168 maVolumeSlider.SetRange( Range( AVMEDIA_DB_RANGE, 0 ) ); 169 maVolumeSlider.SetUpdateMode( true ); 170 maVolumeSlider.SetHelpId( HID_AVMEDIA_VOLUMESLIDER ); 171 maVolumeSlider.SetSizePixel( Size( 48, maPlayToolBox.GetSizePixel().Height() ) ); 172 maVolumeSlider.Show(); 173 maMinSize.Width() += maVolumeSlider.GetSizePixel().Width(); 174 175 mpZoomListBox->SetSizePixel( Size( maTimeEdit.GetSizePixel().Width(), 260 ) ); 176 mpZoomListBox->InsertEntry( String( AVMEDIA_RESID( AVMEDIA_STR_ZOOM_50 ) ), AVMEDIA_ZOOMLEVEL_50 ); 177 mpZoomListBox->InsertEntry( String( AVMEDIA_RESID( AVMEDIA_STR_ZOOM_100 ) ), AVMEDIA_ZOOMLEVEL_100 ); 178 mpZoomListBox->InsertEntry( String( AVMEDIA_RESID( AVMEDIA_STR_ZOOM_200 ) ), AVMEDIA_ZOOMLEVEL_200 ); 179 mpZoomListBox->InsertEntry( String( AVMEDIA_RESID( AVMEDIA_STR_ZOOM_FIT ) ), AVMEDIA_ZOOMLEVEL_FIT ); 180 mpZoomListBox->SetSelectHdl( LINK( this, MediaControl, implZoomSelectHdl ) ); 181 mpZoomListBox->SetHelpId( HID_AVMEDIA_ZOOMLISTBOX ); 182 183 maZoomToolBox.InsertItem( AVMEDIA_TOOLBOXITEM_ZOOM, String( AVMEDIA_RESID( AVMEDIA_STR_ZOOM ) ) ); 184 maZoomToolBox.SetHelpId( AVMEDIA_TOOLBOXITEM_ZOOM, HID_AVMEDIA_ZOOMLISTBOX ); 185 186 maZoomToolBox.SetItemWindow( AVMEDIA_TOOLBOXITEM_ZOOM, mpZoomListBox ); 187 maZoomToolBox.SetSelectHdl( LINK( this, MediaControl, implSelectHdl ) ); 188 maZoomToolBox.SetSizePixel( maZoomToolBox.CalcWindowSizePixel() ); 189 maZoomToolBox.Show(); 190 maMinSize.Width() += maZoomToolBox.GetSizePixel().Width(); 191 192 if( MEDIACONTROLSTYLE_MULTILINE == meControlStyle ) 193 { 194 maMinSize.Width() = 256; 195 maMinSize.Height() = ( maMinSize.Height() << 1 ) + AVMEDIA_CONTROLOFFSET; 196 } 197 198 maTimer.SetTimeout( AVMEDIA_TIMEOUT ); 199 maTimer.SetTimeoutHdl( LINK( this, MediaControl, implTimeoutHdl ) ); 200 maTimer.Start(); 201 } 202 203 // ------------------------------------------------------------------------------ 204 205 MediaControl::~MediaControl() 206 { 207 maZoomToolBox.SetItemWindow( AVMEDIA_TOOLBOXITEM_ZOOM, NULL ); 208 delete mpZoomListBox; 209 } 210 211 // ------------------------------------------------------------------------------ 212 213 const Size& MediaControl::getMinSizePixel() const 214 { 215 return maMinSize; 216 } 217 218 // ------------------------------------------------------------------------------ 219 220 void MediaControl::Resize() 221 { 222 Point aPos( 0, 0 ); 223 const sal_Int32 nPlayToolBoxWidth = maPlayToolBox.GetSizePixel().Width(); 224 const sal_Int32 nMuteToolBoxWidth = maMuteToolBox.GetSizePixel().Width(); 225 const sal_Int32 nVolumeSliderWidth = maVolumeSlider.GetSizePixel().Width(); 226 const sal_Int32 nZoomToolBoxWidth = maZoomToolBox.GetSizePixel().Width(); 227 const sal_Int32 nTimeEditWidth = maTimeEdit.GetSizePixel().Width(); 228 const sal_Int32 nTimeSliderHeight = maTimeSlider.GetSizePixel().Height(); 229 230 if( MEDIACONTROLSTYLE_SINGLELINE == meControlStyle ) 231 { 232 const sal_Int32 nTimeSliderWidth = GetSizePixel().Width() - ( AVMEDIA_CONTROLOFFSET * 3 ) - 233 nPlayToolBoxWidth - nMuteToolBoxWidth - nVolumeSliderWidth - nTimeEditWidth - nZoomToolBoxWidth; 234 235 maPlayToolBox.SetPosSizePixel( aPos, maPlayToolBox.GetSizePixel() ); 236 237 aPos.X() += nPlayToolBoxWidth; 238 maTimeSlider.SetPosSizePixel( aPos, Size( nTimeSliderWidth, nTimeSliderHeight ) ); 239 240 aPos.X() += nTimeSliderWidth + AVMEDIA_CONTROLOFFSET; 241 maTimeEdit.SetPosSizePixel( aPos, maTimeEdit.GetSizePixel() ); 242 243 aPos.X() += nTimeEditWidth + AVMEDIA_CONTROLOFFSET; 244 maMuteToolBox.SetPosSizePixel( aPos, maMuteToolBox.GetSizePixel() ); 245 246 aPos.X() += nMuteToolBoxWidth; 247 maVolumeSlider.SetPosSizePixel( aPos, maVolumeSlider.GetSizePixel() ); 248 249 aPos.X() += nVolumeSliderWidth + AVMEDIA_CONTROLOFFSET; 250 maZoomToolBox.SetPosSizePixel( aPos, maZoomToolBox.GetSizePixel() ); 251 } 252 else 253 { 254 const sal_Int32 nTimeSliderWidth = GetSizePixel().Width() - AVMEDIA_CONTROLOFFSET - nTimeEditWidth; 255 256 maTimeSlider.SetPosSizePixel( aPos, Size( nTimeSliderWidth, nTimeSliderHeight ) ); 257 258 aPos.X() += nTimeSliderWidth + AVMEDIA_CONTROLOFFSET; 259 maTimeEdit.SetPosSizePixel( aPos, maTimeEdit.GetSizePixel() ); 260 261 aPos.X() = 0; 262 aPos.Y() += nTimeSliderHeight + AVMEDIA_CONTROLOFFSET; 263 maPlayToolBox.SetPosSizePixel( aPos, maPlayToolBox.GetSizePixel() ); 264 265 aPos.X() = GetSizePixel().Width() - nVolumeSliderWidth - nMuteToolBoxWidth - nZoomToolBoxWidth - AVMEDIA_CONTROLOFFSET; 266 maMuteToolBox.SetPosSizePixel( aPos, maMuteToolBox.GetSizePixel() ); 267 268 aPos.X() += nMuteToolBoxWidth; 269 maVolumeSlider.SetPosSizePixel( aPos, maVolumeSlider.GetSizePixel() ); 270 271 aPos.X() = GetSizePixel().Width() - nZoomToolBoxWidth; 272 maZoomToolBox.SetPosSizePixel( aPos, maZoomToolBox.GetSizePixel() ); 273 } 274 } 275 276 // ------------------------------------------------------------------------------ 277 278 void MediaControl::setState( const MediaItem& rItem ) 279 { 280 if( !mbLocked ) 281 { 282 maItem.merge( rItem ); 283 284 implUpdateToolboxes(); 285 implUpdateTimeSlider(); 286 implUpdateVolumeSlider(); 287 implUpdateTimeField( maItem.getTime() ); 288 } 289 } 290 291 // ------------------------------------------------------------------------------ 292 293 void MediaControl::getState( MediaItem& rItem ) const 294 { 295 rItem.merge( maItem ); 296 } 297 298 // ------------------------------------------------------------------------------ 299 300 void MediaControl::update() 301 { 302 } 303 304 // ------------------------------------------------------------------------------ 305 306 void MediaControl::execute( const MediaItem& ) 307 { 308 } 309 310 // ------------------------------------------------------------------------------ 311 312 void MediaControl::implUpdateToolboxes() 313 { 314 const bool bValidURL = ( maItem.getURL().getLength() > 0 ); 315 316 maPlayToolBox.EnableItem( AVMEDIA_TOOLBOXITEM_INSERT, bValidURL ); 317 maPlayToolBox.EnableItem( AVMEDIA_TOOLBOXITEM_PLAY, bValidURL ); 318 maPlayToolBox.EnableItem( AVMEDIA_TOOLBOXITEM_PLAYFFW, bValidURL ); 319 maPlayToolBox.EnableItem( AVMEDIA_TOOLBOXITEM_PAUSE, bValidURL ); 320 maPlayToolBox.EnableItem( AVMEDIA_TOOLBOXITEM_STOP, bValidURL ); 321 maPlayToolBox.EnableItem( AVMEDIA_TOOLBOXITEM_LOOP, bValidURL ); 322 maMuteToolBox.EnableItem( AVMEDIA_TOOLBOXITEM_MUTE, bValidURL ); 323 324 if( !bValidURL || !IsEnabled() ) 325 { 326 mpZoomListBox->Disable(); 327 328 if( MEDIACONTROLSTYLE_SINGLELINE == meControlStyle ) 329 maPlayToolBox.Disable(); 330 331 maMuteToolBox.Disable(); 332 } 333 else 334 { 335 maPlayToolBox.Enable(); 336 maMuteToolBox.Enable(); 337 338 if( MEDIASTATE_PLAY == maItem.getState() || MEDIASTATE_PLAYFFW == maItem.getState() ) 339 { 340 maPlayToolBox.CheckItem( AVMEDIA_TOOLBOXITEM_PLAY, true ); 341 maPlayToolBox.CheckItem( AVMEDIA_TOOLBOXITEM_PLAYFFW, MEDIASTATE_PLAYFFW == maItem.getState() ); 342 maPlayToolBox.CheckItem( AVMEDIA_TOOLBOXITEM_PAUSE, false ); 343 maPlayToolBox.CheckItem( AVMEDIA_TOOLBOXITEM_STOP, false ); 344 } 345 else if( maItem.getTime() > 0.0 && ( maItem.getTime() < maItem.getDuration() ) ) 346 { 347 maPlayToolBox.CheckItem( AVMEDIA_TOOLBOXITEM_PLAY, false ); 348 maPlayToolBox.CheckItem( AVMEDIA_TOOLBOXITEM_PLAYFFW, false ); 349 maPlayToolBox.CheckItem( AVMEDIA_TOOLBOXITEM_PAUSE, true ); 350 maPlayToolBox.CheckItem( AVMEDIA_TOOLBOXITEM_STOP, false ); 351 } 352 else 353 { 354 maPlayToolBox.CheckItem( AVMEDIA_TOOLBOXITEM_PLAY, false ); 355 maPlayToolBox.CheckItem( AVMEDIA_TOOLBOXITEM_PLAYFFW, false ); 356 maPlayToolBox.CheckItem( AVMEDIA_TOOLBOXITEM_PAUSE, false ); 357 maPlayToolBox.CheckItem( AVMEDIA_TOOLBOXITEM_STOP, true ); 358 } 359 360 maPlayToolBox.CheckItem( AVMEDIA_TOOLBOXITEM_LOOP, maItem.isLoop() ); 361 maMuteToolBox.CheckItem( AVMEDIA_TOOLBOXITEM_MUTE, maItem.isMute() ); 362 363 if( !mpZoomListBox->IsTravelSelect() && !mpZoomListBox->IsInDropDown() ) 364 { 365 sal_uInt16 nSelectEntryPos ; 366 367 switch( maItem.getZoom() ) 368 { 369 case( ::com::sun::star::media::ZoomLevel_ZOOM_1_TO_2 ): nSelectEntryPos = AVMEDIA_ZOOMLEVEL_50; break; 370 case( ::com::sun::star::media::ZoomLevel_ORIGINAL ): nSelectEntryPos = AVMEDIA_ZOOMLEVEL_100; break; 371 case( ::com::sun::star::media::ZoomLevel_ZOOM_2_TO_1 ): nSelectEntryPos = AVMEDIA_ZOOMLEVEL_200; break; 372 case( ::com::sun::star::media::ZoomLevel_FIT_TO_WINDOW_FIXED_ASPECT ): nSelectEntryPos = AVMEDIA_ZOOMLEVEL_FIT; break; 373 case( ::com::sun::star::media::ZoomLevel_FIT_TO_WINDOW ): nSelectEntryPos = AVMEDIA_ZOOMLEVEL_SCALED; break; 374 375 default: nSelectEntryPos = AVMEDIA_ZOOMLEVEL_INVALID; break; 376 } 377 378 if( nSelectEntryPos != AVMEDIA_ZOOMLEVEL_INVALID ) 379 { 380 mpZoomListBox->Enable(); 381 mpZoomListBox->SelectEntryPos( nSelectEntryPos ); 382 } 383 else 384 mpZoomListBox->Disable(); 385 } 386 } 387 } 388 389 // ------------------------------------------------------------------------------ 390 391 void MediaControl::implUpdateTimeSlider() 392 { 393 if( !maItem.getURL().getLength() || !IsEnabled() ) 394 maTimeSlider.Disable(); 395 else 396 { 397 maTimeSlider.Enable(); 398 399 const double fDuration = maItem.getDuration(); 400 401 if( fDuration > 0.0 ) 402 { 403 const double fTime = ::std::min( maItem.getTime(), fDuration ); 404 405 if( !maTimeSlider.GetLineSize() ) 406 maTimeSlider.SetLineSize( static_cast< sal_uInt32 >( AVMEDIA_TIME_RANGE * AVMEDIA_LINEINCREMENT / fDuration ) ); 407 408 if( !maTimeSlider.GetPageSize() ) 409 maTimeSlider.SetPageSize( static_cast< sal_uInt32 >( AVMEDIA_TIME_RANGE * AVMEDIA_PAGEINCREMENT / fDuration ) ); 410 411 maTimeSlider.SetThumbPos( static_cast< sal_Int32 >( fTime / fDuration * AVMEDIA_TIME_RANGE ) ); 412 } 413 } 414 } 415 416 // ------------------------------------------------------------------------------ 417 418 void MediaControl::implUpdateVolumeSlider() 419 { 420 if( !maItem.getURL().getLength() || !IsEnabled() ) 421 maVolumeSlider.Disable(); 422 else 423 { 424 maVolumeSlider.Enable(); 425 426 const sal_Int32 nVolumeDB = maItem.getVolumeDB(); 427 428 maVolumeSlider.SetThumbPos( ::std::min( ::std::max( nVolumeDB, static_cast< sal_Int32 >( AVMEDIA_DB_RANGE ) ), 429 static_cast< sal_Int32 >( 0 ) ) ); 430 } 431 } 432 433 // ------------------------------------------------------------------------------ 434 435 void MediaControl::implUpdateTimeField( double fCurTime ) 436 { 437 if( maItem.getURL().getLength() > 0 ) 438 { 439 String aTimeString; 440 441 SvtSysLocale aSysLocale; 442 const LocaleDataWrapper& rLocaleData = aSysLocale.GetLocaleData(); 443 444 aTimeString += rLocaleData.getDuration( Time( 0, 0, static_cast< sal_uInt32 >( floor( fCurTime ) ) ) ); 445 aTimeString.AppendAscii( RTL_CONSTASCII_STRINGPARAM( " / " )); 446 aTimeString += rLocaleData.getDuration( Time( 0, 0, static_cast< sal_uInt32 >( floor( maItem.getDuration() ) )) ); 447 448 if( maTimeEdit.GetText() != aTimeString ) 449 maTimeEdit.SetText( aTimeString ); 450 } 451 } 452 453 // ------------------------------------------------------------------------------ 454 455 Image MediaControl::implGetImage( sal_Int32 nImageId ) const 456 { 457 return maImageList.GetImage( static_cast< sal_uInt16 >( nImageId ) ); 458 } 459 460 // ------------------------------------------------------------------------------ 461 462 IMPL_LINK( MediaControl, implTimeHdl, Slider*, p ) 463 { 464 mbLocked = true; 465 maTimer.Stop(); 466 implUpdateTimeField( p->GetThumbPos() * maItem.getDuration() / AVMEDIA_TIME_RANGE ); 467 468 return 0; 469 } 470 471 // ------------------------------------------------------------------------------ 472 473 IMPL_LINK( MediaControl, implTimeEndHdl, Slider*, p ) 474 { 475 MediaItem aExecItem; 476 477 aExecItem.setTime( p->GetThumbPos() * maItem.getDuration() / AVMEDIA_TIME_RANGE ); 478 execute( aExecItem ); 479 update(); 480 maTimer.Start(); 481 mbLocked = false; 482 483 return 0; 484 } 485 486 // ------------------------------------------------------------------------------ 487 488 IMPL_LINK( MediaControl, implVolumeHdl, Slider*, p ) 489 { 490 MediaItem aExecItem; 491 492 aExecItem.setVolumeDB( static_cast< sal_Int16 >( p->GetThumbPos() ) ); 493 execute( aExecItem ); 494 update(); 495 496 return 0; 497 } 498 499 // ------------------------------------------------------------------------------ 500 501 IMPL_LINK( MediaControl, implVolumeEndHdl, Slider*, EMPTYARG ) 502 { 503 return 0; 504 } 505 506 // ------------------------------------------------------------------------------ 507 508 IMPL_LINK( MediaControl, implSelectHdl, ToolBox*, p ) 509 { 510 if( p ) 511 { 512 MediaItem aExecItem; 513 514 switch( p->GetCurItemId() ) 515 { 516 case( AVMEDIA_TOOLBOXITEM_OPEN ): 517 { 518 ::rtl::OUString aURL; 519 520 if( ::avmedia::MediaWindow::executeMediaURLDialog( GetParent(), aURL, false ) ) 521 { 522 if( !::avmedia::MediaWindow::isMediaURL( aURL, true ) ) 523 ::avmedia::MediaWindow::executeFormatErrorBox( this ); 524 else 525 { 526 aExecItem.setURL( aURL ); 527 aExecItem.setState( MEDIASTATE_PLAY ); 528 } 529 } 530 } 531 break; 532 533 case( AVMEDIA_TOOLBOXITEM_INSERT ): 534 { 535 MediaFloater* pFloater = AVMEDIA_MEDIAWINDOW(); 536 537 if( pFloater ) 538 pFloater->dispatchCurrentURL(); 539 } 540 break; 541 542 case( AVMEDIA_TOOLBOXITEM_PLAY ): 543 case( AVMEDIA_TOOLBOXITEM_PLAYFFW ): 544 { 545 aExecItem.setState( ( AVMEDIA_TOOLBOXITEM_PLAYFFW == p->GetCurItemId() ) ? MEDIASTATE_PLAYFFW : MEDIASTATE_PLAY ); 546 547 if( maItem.getTime() == maItem.getDuration() ) 548 aExecItem.setTime( 0.0 ); 549 else 550 aExecItem.setTime( maItem.getTime() ); 551 } 552 break; 553 554 case( AVMEDIA_TOOLBOXITEM_PAUSE ): 555 { 556 aExecItem.setState( MEDIASTATE_PAUSE ); 557 } 558 break; 559 560 case( AVMEDIA_TOOLBOXITEM_STOP ): 561 { 562 aExecItem.setState( MEDIASTATE_STOP ); 563 aExecItem.setTime( 0.0 ); 564 } 565 break; 566 567 case( AVMEDIA_TOOLBOXITEM_MUTE ): 568 { 569 aExecItem.setMute( !maMuteToolBox.IsItemChecked( AVMEDIA_TOOLBOXITEM_MUTE ) ); 570 } 571 break; 572 573 case( AVMEDIA_TOOLBOXITEM_LOOP ): 574 { 575 aExecItem.setLoop( !maPlayToolBox.IsItemChecked( AVMEDIA_TOOLBOXITEM_LOOP ) ); 576 } 577 break; 578 579 default: 580 break; 581 } 582 583 if( aExecItem.getMaskSet() != AVMEDIA_SETMASK_NONE ) 584 execute( aExecItem ); 585 } 586 587 update(); 588 p->Invalidate( INVALIDATE_UPDATE ); 589 590 return 0; 591 } 592 593 // ------------------------------------------------------------------------------ 594 595 IMPL_LINK( MediaControl, implZoomSelectHdl, ListBox*, p ) 596 { 597 if( p ) 598 { 599 MediaItem aExecItem; 600 ::com::sun::star::media::ZoomLevel eLevel; 601 602 switch( p->GetSelectEntryPos() ) 603 { 604 case( AVMEDIA_ZOOMLEVEL_50 ): eLevel = ::com::sun::star::media::ZoomLevel_ZOOM_1_TO_2; break; 605 case( AVMEDIA_ZOOMLEVEL_100 ): eLevel = ::com::sun::star::media::ZoomLevel_ORIGINAL; break; 606 case( AVMEDIA_ZOOMLEVEL_200 ): eLevel = ::com::sun::star::media::ZoomLevel_ZOOM_2_TO_1; break; 607 case( AVMEDIA_ZOOMLEVEL_FIT ): eLevel = ::com::sun::star::media::ZoomLevel_FIT_TO_WINDOW_FIXED_ASPECT; break; 608 case( AVMEDIA_ZOOMLEVEL_SCALED ): eLevel = ::com::sun::star::media::ZoomLevel_FIT_TO_WINDOW; break; 609 610 default: eLevel = ::com::sun::star::media::ZoomLevel_NOT_AVAILABLE; break; 611 } 612 613 aExecItem.setZoom( eLevel ); 614 execute( aExecItem ); 615 update(); 616 } 617 618 return 0; 619 } 620 621 // ------------------------------------------------------------------------------ 622 623 IMPL_LINK( MediaControl, implTimeoutHdl, Timer*, EMPTYARG ) 624 { 625 update(); 626 maTimer.Start(); 627 628 return 0; 629 } 630 631 } 632