diff options
author | Yousuf Philips <philipz85@hotmail.com> | 2016-08-14 23:53:31 +0400 |
---|---|---|
committer | Katarina Behrens <Katarina.Behrens@cib.de> | 2016-08-15 12:39:55 +0000 |
commit | c2f95e69684948aa2db75b95afbf7a5eb77be953 (patch) | |
tree | 1ddd809b9907c45ed11891755db922a535c8525c /avmedia/source | |
parent | 3c82f7d762907c4bf9387bd2bc0680a58c1e2ca1 (diff) |
tdf#87794: Media Playback Panel
Change-Id: I2ad02ea031c2a1f558f76bd4c5dd816e400c5269
Reviewed-on: https://gerrit.libreoffice.org/27363
Reviewed-by: Yousuf Philips <philipz85@hotmail.com>
Tested-by: Yousuf Philips <philipz85@hotmail.com>
Reviewed-by: Katarina Behrens <Katarina.Behrens@cib.de>
Diffstat (limited to 'avmedia/source')
-rw-r--r-- | avmedia/source/framework/MediaControlBase.cxx | 273 | ||||
-rw-r--r-- | avmedia/source/framework/mediacontrol.cxx | 473 |
2 files changed, 385 insertions, 361 deletions
diff --git a/avmedia/source/framework/MediaControlBase.cxx b/avmedia/source/framework/MediaControlBase.cxx new file mode 100644 index 000000000000..ff6eaeb3833f --- /dev/null +++ b/avmedia/source/framework/MediaControlBase.cxx @@ -0,0 +1,273 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +#include <avmedia/MediaControlBase.hxx> +#include <avmedia/mediawindow.hxx> +#include <avmedia/mediaplayer.hxx> +#include <vcl/edit.hxx> +#include <vcl/slider.hxx> +#include <vcl/toolbox.hxx> +#include <avmedia/mediaitem.hxx> +#include <svtools/miscopt.hxx> +#include <tools/time.hxx> +#include <vcl/toolbox.hxx> +#include "mediacontrol.hrc" +#include "helpids.hrc" +#include "mediamisc.hxx" + +using ::rtl::OUString; + +namespace avmedia { + +MediaControlBase::MediaControlBase(): + maImageList( SvtMiscOptions().AreCurrentSymbolsLarge() ? AVMEDIA_RESID( AVMEDIA_IMGLST_L ) : AVMEDIA_RESID( AVMEDIA_IMGLST ) ) +{ +} + +void MediaControlBase::UpdateTimeField( MediaItem aMediaItem, double fTime ) +{ + if( !aMediaItem.getURL().isEmpty()) + { + OUString aTimeString; + + SvtSysLocale aSysLocale; + const LocaleDataWrapper& rLocaleData = aSysLocale.GetLocaleData(); + + aTimeString += rLocaleData.getDuration( tools::Time( 0, 0, static_cast< sal_uInt32 >( floor( fTime ) ) ) ) + + " / " + + rLocaleData.getDuration( tools::Time( 0, 0, static_cast< sal_uInt32 >( floor( aMediaItem.getDuration() ) )) ); + + if( mpTimeEdit->GetText() != aTimeString ) + mpTimeEdit->SetText( aTimeString ); + } +} + +void MediaControlBase::UpdateVolumeSlider( MediaItem aMediaItem ) +{ + if( aMediaItem.getURL().isEmpty() ) + mpVolumeSlider->Disable(); + else + { + mpVolumeSlider->Enable(); + const sal_Int32 nVolumeDB = aMediaItem.getVolumeDB(); + mpVolumeSlider->SetThumbPos( ::std::min( ::std::max( nVolumeDB, static_cast< sal_Int32 >( AVMEDIA_DB_RANGE ) ), + static_cast< sal_Int32 >( 0 ) ) ); + } +} + +void MediaControlBase::UpdateTimeSlider( MediaItem aMediaItem ) +{ + if( aMediaItem.getURL().isEmpty() ) + mpTimeSlider->Disable(); + else + { + mpTimeSlider->Enable(); + + const double fDuration = aMediaItem.getDuration(); + + if( fDuration > 0.0 ) + { + const double fTime = ::std::min( aMediaItem.getTime(), fDuration ); + + if( !mpTimeSlider->GetLineSize() ) + mpTimeSlider->SetLineSize( static_cast< sal_uInt32 >( AVMEDIA_TIME_RANGE * AVMEDIA_LINEINCREMENT / fDuration ) ); + + if( !mpTimeSlider->GetPageSize() ) + mpTimeSlider->SetPageSize( static_cast< sal_uInt32 >( AVMEDIA_TIME_RANGE * AVMEDIA_PAGEINCREMENT / fDuration ) ); + + mpTimeSlider->SetThumbPos( static_cast< sal_Int32 >( fTime / fDuration * AVMEDIA_TIME_RANGE ) ); + } + } +} + +void MediaControlBase::InitializeWidgets() +{ + mpPlayToolBox->InsertItem( AVMEDIA_TOOLBOXITEM_PLAY, GetImage( AVMEDIA_IMG_PLAY ), OUString( AVMEDIA_RESID( AVMEDIA_STR_PLAY ) ), ToolBoxItemBits::CHECKABLE ); + mpPlayToolBox->SetHelpId( AVMEDIA_TOOLBOXITEM_PLAY, HID_AVMEDIA_TOOLBOXITEM_PLAY ); + + mpPlayToolBox->InsertItem( AVMEDIA_TOOLBOXITEM_PAUSE, GetImage( AVMEDIA_IMG_PAUSE ), OUString( AVMEDIA_RESID( AVMEDIA_STR_PAUSE ) ), ToolBoxItemBits::CHECKABLE ); + mpPlayToolBox->SetHelpId( AVMEDIA_TOOLBOXITEM_PAUSE, HID_AVMEDIA_TOOLBOXITEM_PAUSE ); + + mpPlayToolBox->InsertItem( AVMEDIA_TOOLBOXITEM_STOP, GetImage( AVMEDIA_IMG_STOP ), OUString( AVMEDIA_RESID( AVMEDIA_STR_STOP ) ), ToolBoxItemBits::CHECKABLE ); + mpPlayToolBox->SetHelpId( AVMEDIA_TOOLBOXITEM_STOP, HID_AVMEDIA_TOOLBOXITEM_STOP ); + + mpPlayToolBox->InsertSeparator(); + + mpPlayToolBox->InsertItem( AVMEDIA_TOOLBOXITEM_LOOP, GetImage( AVMEDIA_IMG_ENDLESS ), OUString( AVMEDIA_RESID( AVMEDIA_STR_ENDLESS ) ) ); + mpPlayToolBox->SetHelpId( AVMEDIA_TOOLBOXITEM_LOOP, HID_AVMEDIA_TOOLBOXITEM_LOOP ); + + mpMuteToolBox->InsertItem( AVMEDIA_TOOLBOXITEM_MUTE, GetImage( AVMEDIA_IMG_MUTE ), OUString( AVMEDIA_RESID( AVMEDIA_STR_MUTE ) ) ); + mpMuteToolBox->SetHelpId( AVMEDIA_TOOLBOXITEM_MUTE, HID_AVMEDIA_TOOLBOXITEM_MUTE ); + + mpZoomListBox->InsertEntry( OUString( AVMEDIA_RESID( AVMEDIA_STR_ZOOM_50 ) ), AVMEDIA_ZOOMLEVEL_50 ); + mpZoomListBox->InsertEntry( OUString( AVMEDIA_RESID( AVMEDIA_STR_ZOOM_100 ) ), AVMEDIA_ZOOMLEVEL_100 ); + mpZoomListBox->InsertEntry( OUString( AVMEDIA_RESID( AVMEDIA_STR_ZOOM_200 ) ), AVMEDIA_ZOOMLEVEL_200 ); + mpZoomListBox->InsertEntry( OUString( AVMEDIA_RESID( AVMEDIA_STR_ZOOM_FIT ) ), AVMEDIA_ZOOMLEVEL_FIT ); + mpZoomListBox->SetHelpId( HID_AVMEDIA_ZOOMLISTBOX ); + + const OUString aTimeText( " 00:00:00/00:00:00 " ); + mpTimeEdit->SetText( aTimeText ); + mpTimeEdit->SetUpdateMode( true ); + mpTimeEdit->SetHelpId( HID_AVMEDIA_TIMEEDIT ); + mpTimeEdit->Disable(); + mpTimeEdit->Show(); + + mpVolumeSlider->SetRange( Range( AVMEDIA_DB_RANGE, 0 ) ); + mpVolumeSlider->SetUpdateMode( true ); + mpVolumeSlider->SetHelpId( HID_AVMEDIA_VOLUMESLIDER ); + + mpTimeSlider->SetRange( Range( 0, AVMEDIA_TIME_RANGE ) ); + mpTimeSlider->SetUpdateMode( true ); + mpTimeSlider->SetStyle(WB_HORZ | WB_DRAG | WB_3DLOOK | WB_SLIDERSET); +} + +void MediaControlBase::UpdateToolBoxes(MediaItem aMediaItem) +{ + const bool bValidURL = !aMediaItem.getURL().isEmpty(); + mpPlayToolBox->EnableItem( AVMEDIA_TOOLBOXITEM_PLAY, bValidURL ); + mpPlayToolBox->EnableItem( AVMEDIA_TOOLBOXITEM_PAUSE, bValidURL ); + mpPlayToolBox->EnableItem( AVMEDIA_TOOLBOXITEM_STOP, bValidURL ); + mpPlayToolBox->EnableItem( AVMEDIA_TOOLBOXITEM_LOOP, bValidURL ); + mpMuteToolBox->EnableItem( AVMEDIA_TOOLBOXITEM_MUTE, bValidURL ); + if( !bValidURL ) + { + mpZoomListBox->Disable(); + mpMuteToolBox->Disable(); + } + else + { + mpPlayToolBox->Enable(); + mpMuteToolBox->Enable(); + if( MediaState::Play == aMediaItem.getState() ) + { + mpPlayToolBox->CheckItem( AVMEDIA_TOOLBOXITEM_PLAY ); + mpPlayToolBox->CheckItem( AVMEDIA_TOOLBOXITEM_PAUSE, false ); + mpPlayToolBox->CheckItem( AVMEDIA_TOOLBOXITEM_STOP, false ); + } + else if( aMediaItem.getTime() > 0.0 && ( aMediaItem.getTime() < aMediaItem.getDuration() ) ) + { + mpPlayToolBox->CheckItem( AVMEDIA_TOOLBOXITEM_PLAY, false ); + mpPlayToolBox->CheckItem( AVMEDIA_TOOLBOXITEM_PAUSE ); + mpPlayToolBox->CheckItem( AVMEDIA_TOOLBOXITEM_STOP, false ); + } + else + { + mpPlayToolBox->CheckItem( AVMEDIA_TOOLBOXITEM_PLAY, false ); + mpPlayToolBox->CheckItem( AVMEDIA_TOOLBOXITEM_PAUSE, false ); + mpPlayToolBox->CheckItem( AVMEDIA_TOOLBOXITEM_STOP ); + } + mpPlayToolBox->CheckItem( AVMEDIA_TOOLBOXITEM_LOOP, aMediaItem.isLoop() ); + mpMuteToolBox->CheckItem( AVMEDIA_TOOLBOXITEM_MUTE, aMediaItem.isMute() ); + if( !mpZoomListBox->IsTravelSelect() && !mpZoomListBox->IsInDropDown() ) + { + sal_uInt16 nSelectEntryPos ; + + switch( aMediaItem.getZoom() ) + { + case( css::media::ZoomLevel_ZOOM_1_TO_2 ): + nSelectEntryPos = AVMEDIA_ZOOMLEVEL_50; + break; + case( css::media::ZoomLevel_ORIGINAL ): + nSelectEntryPos = AVMEDIA_ZOOMLEVEL_100; + break; + case( css::media::ZoomLevel_ZOOM_2_TO_1 ): + nSelectEntryPos = AVMEDIA_ZOOMLEVEL_200; + break; + case( css::media::ZoomLevel_FIT_TO_WINDOW_FIXED_ASPECT ): + nSelectEntryPos = AVMEDIA_ZOOMLEVEL_FIT; + break; + case( css::media::ZoomLevel_FIT_TO_WINDOW ): + nSelectEntryPos = AVMEDIA_ZOOMLEVEL_SCALED; + break; + + default: + nSelectEntryPos = AVMEDIA_ZOOMLEVEL_INVALID; + break; + } + + if( nSelectEntryPos != AVMEDIA_ZOOMLEVEL_INVALID ) + { + mpZoomListBox->Enable(); + mpZoomListBox->SelectEntryPos( nSelectEntryPos ); + } + else + mpZoomListBox->Disable(); + } + } +} + +void MediaControlBase::SelectPlayToolBoxItem( MediaItem& aExecItem, MediaItem aItem, sal_uInt16 nId) +{ + switch( nId ) + { + case AVMEDIA_TOOLBOXITEM_INSERT: + { + MediaFloater* pFloater = avmedia::getMediaFloater(); + + if( pFloater ) + pFloater->dispatchCurrentURL(); + } + break; + + case AVMEDIA_TOOLBOXITEM_PLAY: + { + aExecItem.setState( MediaState::Play ); + + if( aItem.getTime() == aItem.getDuration() ) + aExecItem.setTime( 0.0 ); + else + aExecItem.setTime( aItem.getTime() ); + } + break; + + case AVMEDIA_TOOLBOXITEM_PAUSE: + { + aExecItem.setState( MediaState::Pause ); + } + break; + + case AVMEDIA_TOOLBOXITEM_STOP: + { + aExecItem.setState( MediaState::Stop ); + aExecItem.setTime( 0.0 ); + } + break; + + case AVMEDIA_TOOLBOXITEM_MUTE: + { + aExecItem.setMute( !mpMuteToolBox->IsItemChecked( AVMEDIA_TOOLBOXITEM_MUTE ) ); + } + break; + + case AVMEDIA_TOOLBOXITEM_LOOP: + { + aExecItem.setLoop( !mpPlayToolBox->IsItemChecked( AVMEDIA_TOOLBOXITEM_LOOP ) ); + } + break; + + default: + break; + } +} + +Image MediaControlBase::GetImage( sal_Int32 nImageId) const +{ + return maImageList.GetImage( static_cast< sal_uInt16 >( nImageId ) ); +} + +}
\ No newline at end of file diff --git a/avmedia/source/framework/mediacontrol.cxx b/avmedia/source/framework/mediacontrol.cxx index a175bee62e53..c698992ff4f7 100644 --- a/avmedia/source/framework/mediacontrol.cxx +++ b/avmedia/source/framework/mediacontrol.cxx @@ -32,155 +32,77 @@ #include <sfx2/viewfrm.hxx> #include <math.h> #include <algorithm> - -#define AVMEDIA_TIME_RANGE 2048 -#define AVMEDIA_DB_RANGE -40 -#define AVMEDIA_LINEINCREMENT 1.0 -#define AVMEDIA_PAGEINCREMENT 10.0 - -#define AVMEDIA_TOOLBOXITEM_PLAY 0x0001 -#define AVMEDIA_TOOLBOXITEM_PAUSE 0x0004 -#define AVMEDIA_TOOLBOXITEM_STOP 0x0008 -#define AVMEDIA_TOOLBOXITEM_MUTE 0x0010 -#define AVMEDIA_TOOLBOXITEM_LOOP 0x0011 -#define AVMEDIA_TOOLBOXITEM_ZOOM 0x0012 -#define AVMEDIA_TOOLBOXITEM_OPEN 0x0014 -#define AVMEDIA_TOOLBOXITEM_INSERT 0x0018 - -#define AVMEDIA_ZOOMLEVEL_50 0 -#define AVMEDIA_ZOOMLEVEL_100 1 -#define AVMEDIA_ZOOMLEVEL_200 2 -#define AVMEDIA_ZOOMLEVEL_FIT 3 -#define AVMEDIA_ZOOMLEVEL_SCALED 4 -#define AVMEDIA_ZOOMLEVEL_INVALID 65535 +#include <avmedia/MediaControlBase.hxx> namespace avmedia { MediaControl::MediaControl( vcl::Window* pParent, MediaControlStyle eControlStyle ) : Control( pParent ), - maImageList( SvtMiscOptions().AreCurrentSymbolsLarge() ? AVMEDIA_RESID( AVMEDIA_IMGLST_L ) : AVMEDIA_RESID( AVMEDIA_IMGLST ) ), + MediaControlBase(), maIdle( "avmedia MediaControl Idle" ), maItem( 0, AVMediaSetMask::ALL ), - maPlayToolBox( VclPtr<ToolBox>::Create(this, WB_3DLOOK) ), - maTimeSlider( VclPtr<Slider>::Create(this, WB_HORZ | WB_DRAG | WB_3DLOOK | WB_SLIDERSET) ), - maMuteToolBox( VclPtr<ToolBox>::Create(this, WB_3DLOOK) ), - maVolumeSlider( VclPtr<Slider>::Create(this, WB_HORZ | WB_DRAG | WB_SLIDERSET) ), - maZoomToolBox( VclPtr<ToolBox>::Create(this, WB_3DLOOK) ), - mpZoomListBox( VclPtr<ListBox>::Create( maZoomToolBox.get(), WB_BORDER | WB_DROPDOWN | WB_AUTOHSCROLL | WB_3DLOOK ) ), - maTimeEdit( VclPtr<Edit>::Create(this, WB_CENTER | WB_READONLY | WB_BORDER | WB_3DLOOK ) ), - meControlStyle( eControlStyle ), - mbLocked( false ) + mbLocked( false ), + meControlStyle( eControlStyle ) { - const OUString aTimeText( " 00:00:00/00:00:00 " ); + mpPlayToolBox = VclPtr<ToolBox>::Create(this, WB_3DLOOK) ; + mpTimeSlider = VclPtr<Slider>::Create(this, WB_HORZ | WB_DRAG | WB_3DLOOK | WB_SLIDERSET) ; + mpMuteToolBox = VclPtr<ToolBox>::Create(this, WB_3DLOOK) ; + mpVolumeSlider = VclPtr<Slider>::Create(this, WB_HORZ | WB_DRAG | WB_SLIDERSET) ; + mpZoomToolBox = VclPtr<ToolBox>::Create(this, WB_3DLOOK) ; + mpZoomListBox = VclPtr<ListBox>::Create( mpZoomToolBox.get(), WB_BORDER | WB_DROPDOWN | WB_AUTOHSCROLL | WB_3DLOOK ) ; + mpTimeEdit = VclPtr<Edit>::Create(this, WB_CENTER | WB_READONLY | WB_BORDER | WB_3DLOOK ) ; SetBackground(); SetPaintTransparent( true ); SetParentClipMode( ParentClipMode::NoClip ); - if( MEDIACONTROLSTYLE_SINGLELINE != meControlStyle ) - { - maPlayToolBox->InsertItem( AVMEDIA_TOOLBOXITEM_OPEN, implGetImage( AVMEDIA_IMG_OPEN ), OUString( AVMEDIA_RESID( AVMEDIA_STR_OPEN ) ) ); - maPlayToolBox->SetHelpId( AVMEDIA_TOOLBOXITEM_OPEN, HID_AVMEDIA_TOOLBOXITEM_OPEN ); + InitializeWidgets(); - maPlayToolBox->InsertItem( AVMEDIA_TOOLBOXITEM_INSERT, implGetImage( AVMEDIA_IMG_INSERT ), OUString( AVMEDIA_RESID( AVMEDIA_STR_INSERT ) ) ); - maPlayToolBox->SetHelpId( AVMEDIA_TOOLBOXITEM_INSERT, HID_AVMEDIA_TOOLBOXITEM_INSERT ); + mpPlayToolBox->SetSelectHdl( LINK( this, MediaControl, implSelectHdl ) ); + mpPlayToolBox->SetSizePixel( mpPlayToolBox->CalcWindowSizePixel() ); + mpPlayToolBox->Show(); + maMinSize = mpPlayToolBox->GetSizePixel(); - maPlayToolBox->InsertSeparator(); - } - else - { - mpZoomListBox->SetBackground(); + mpTimeSlider->SetSlideHdl( LINK( this, MediaControl, implTimeHdl ) ); + mpTimeSlider->SetEndSlideHdl( LINK( this, MediaControl, implTimeEndHdl ) ); + mpTimeSlider->SetSizePixel( Size( 128, mpPlayToolBox->GetSizePixel().Height() ) ); + mpTimeSlider->Show(); + maMinSize.Width() += mpTimeSlider->GetSizePixel().Width(); - maZoomToolBox->SetBackground(); - maZoomToolBox->SetPaintTransparent( true ); - maPlayToolBox->SetBackground(); - maPlayToolBox->SetPaintTransparent( true ); - maMuteToolBox->SetBackground(); - maMuteToolBox->SetPaintTransparent( true ); - - } - - maPlayToolBox->InsertItem( AVMEDIA_TOOLBOXITEM_PLAY, implGetImage( AVMEDIA_IMG_PLAY ), OUString( AVMEDIA_RESID( AVMEDIA_STR_PLAY ) ), ToolBoxItemBits::CHECKABLE ); - maPlayToolBox->SetHelpId( AVMEDIA_TOOLBOXITEM_PLAY, HID_AVMEDIA_TOOLBOXITEM_PLAY ); - - maPlayToolBox->InsertItem( AVMEDIA_TOOLBOXITEM_PAUSE, implGetImage( AVMEDIA_IMG_PAUSE ), OUString( AVMEDIA_RESID( AVMEDIA_STR_PAUSE ) ), ToolBoxItemBits::CHECKABLE ); - maPlayToolBox->SetHelpId( AVMEDIA_TOOLBOXITEM_PAUSE, HID_AVMEDIA_TOOLBOXITEM_PAUSE ); - - maPlayToolBox->InsertItem( AVMEDIA_TOOLBOXITEM_STOP, implGetImage( AVMEDIA_IMG_STOP ), OUString( AVMEDIA_RESID( AVMEDIA_STR_STOP ) ), ToolBoxItemBits::CHECKABLE ); - maPlayToolBox->SetHelpId( AVMEDIA_TOOLBOXITEM_STOP, HID_AVMEDIA_TOOLBOXITEM_STOP ); + const OUString aTimeText( " 00:00:00/00:00:00 " ); + mpTimeEdit->SetSizePixel( Size( mpTimeEdit->GetTextWidth( aTimeText ) + 8, mpPlayToolBox->GetSizePixel().Height() ) ); + mpTimeEdit->SetControlBackground( Application::GetSettings().GetStyleSettings().GetWindowColor() ); + maMinSize.Width() += mpTimeEdit->GetSizePixel().Width(); - maPlayToolBox->InsertSeparator(); + mpMuteToolBox->SetSelectHdl( LINK( this, MediaControl, implSelectHdl ) ); + mpMuteToolBox->SetSizePixel( mpMuteToolBox->CalcWindowSizePixel() ); + mpMuteToolBox->Show(); + maMinSize.Width() += mpMuteToolBox->GetSizePixel().Width(); - maPlayToolBox->InsertItem( AVMEDIA_TOOLBOXITEM_LOOP, implGetImage( AVMEDIA_IMG_ENDLESS ), OUString( AVMEDIA_RESID( AVMEDIA_STR_ENDLESS ) ) ); - maPlayToolBox->SetHelpId( AVMEDIA_TOOLBOXITEM_LOOP, HID_AVMEDIA_TOOLBOXITEM_LOOP ); + mpVolumeSlider->SetSlideHdl( LINK( this, MediaControl, implVolumeHdl ) ); + mpVolumeSlider->SetSizePixel( Size( 48, mpPlayToolBox->GetSizePixel().Height() ) ); + mpVolumeSlider->Show(); + maMinSize.Width() += mpVolumeSlider->GetSizePixel().Width(); - if( MEDIACONTROLSTYLE_SINGLELINE == meControlStyle ) - maPlayToolBox->InsertSeparator(); - - maPlayToolBox->SetSelectHdl( LINK( this, MediaControl, implSelectHdl ) ); - maPlayToolBox->SetSizePixel( maPlayToolBox->CalcWindowSizePixel() ); - maPlayToolBox->Show(); - maMinSize = maPlayToolBox->GetSizePixel(); - - maTimeSlider->SetSlideHdl( LINK( this, MediaControl, implTimeHdl ) ); - maTimeSlider->SetEndSlideHdl( LINK( this, MediaControl, implTimeEndHdl ) ); - maTimeSlider->SetRange( Range( 0, AVMEDIA_TIME_RANGE ) ); - maTimeSlider->SetHelpId( HID_AVMEDIA_TIMESLIDER ); - maTimeSlider->SetUpdateMode( true ); - maTimeSlider->SetSizePixel( Size( 128, maPlayToolBox->GetSizePixel().Height() ) ); - maTimeSlider->Show(); - maMinSize.Width() += maTimeSlider->GetSizePixel().Width(); - - maTimeEdit->SetText( aTimeText ); - maTimeEdit->SetUpdateMode( true ); - maTimeEdit->SetSizePixel( Size( maTimeEdit->GetTextWidth( aTimeText ) + 8, maPlayToolBox->GetSizePixel().Height() ) ); - maTimeEdit->SetControlBackground( Application::GetSettings().GetStyleSettings().GetWindowColor() ); - maTimeEdit->SetHelpId( HID_AVMEDIA_TIMEEDIT ); - maTimeEdit->Disable(); - maTimeEdit->Show(); - maMinSize.Width() += maTimeEdit->GetSizePixel().Width(); - - if( MEDIACONTROLSTYLE_SINGLELINE == meControlStyle ) - maMuteToolBox->InsertSeparator(); - - maMuteToolBox->InsertItem( AVMEDIA_TOOLBOXITEM_MUTE, implGetImage( AVMEDIA_IMG_MUTE ), OUString( AVMEDIA_RESID( AVMEDIA_STR_MUTE ) ) ); - maMuteToolBox->SetHelpId( AVMEDIA_TOOLBOXITEM_MUTE, HID_AVMEDIA_TOOLBOXITEM_MUTE ); - - maMuteToolBox->SetSelectHdl( LINK( this, MediaControl, implSelectHdl ) ); - maMuteToolBox->SetSizePixel( maMuteToolBox->CalcWindowSizePixel() ); - maMuteToolBox->Show(); - maMinSize.Width() += maMuteToolBox->GetSizePixel().Width(); - - maVolumeSlider->SetSlideHdl( LINK( this, MediaControl, implVolumeHdl ) ); - maVolumeSlider->SetRange( Range( AVMEDIA_DB_RANGE, 0 ) ); - maVolumeSlider->SetUpdateMode( true ); - maVolumeSlider->SetHelpId( HID_AVMEDIA_VOLUMESLIDER ); - maVolumeSlider->SetSizePixel( Size( 48, maPlayToolBox->GetSizePixel().Height() ) ); - maVolumeSlider->Show(); - maMinSize.Width() += maVolumeSlider->GetSizePixel().Width(); - - mpZoomListBox->SetSizePixel( Size( maTimeEdit->GetSizePixel().Width(), 260 ) ); - mpZoomListBox->InsertEntry( OUString( AVMEDIA_RESID( AVMEDIA_STR_ZOOM_50 ) ), AVMEDIA_ZOOMLEVEL_50 ); - mpZoomListBox->InsertEntry( OUString( AVMEDIA_RESID( AVMEDIA_STR_ZOOM_100 ) ), AVMEDIA_ZOOMLEVEL_100 ); - mpZoomListBox->InsertEntry( OUString( AVMEDIA_RESID( AVMEDIA_STR_ZOOM_200 ) ), AVMEDIA_ZOOMLEVEL_200 ); - mpZoomListBox->InsertEntry( OUString( AVMEDIA_RESID( AVMEDIA_STR_ZOOM_FIT ) ), AVMEDIA_ZOOMLEVEL_FIT ); + mpZoomListBox->SetSizePixel( Size( mpTimeEdit->GetSizePixel().Width(), 260 ) ); mpZoomListBox->SetSelectHdl( LINK( this, MediaControl, implZoomSelectHdl ) ); - mpZoomListBox->SetHelpId( HID_AVMEDIA_ZOOMLISTBOX ); - maZoomToolBox->InsertItem( AVMEDIA_TOOLBOXITEM_ZOOM, OUString( AVMEDIA_RESID( AVMEDIA_STR_ZOOM ) ) ); - maZoomToolBox->SetHelpId( AVMEDIA_TOOLBOXITEM_ZOOM, HID_AVMEDIA_ZOOMLISTBOX ); + mpZoomToolBox->InsertItem( AVMEDIA_TOOLBOXITEM_ZOOM, OUString( AVMEDIA_RESID( AVMEDIA_STR_ZOOM ) ) ); + mpZoomToolBox->SetHelpId( AVMEDIA_TOOLBOXITEM_ZOOM, HID_AVMEDIA_ZOOMLISTBOX ); - maZoomToolBox->SetItemWindow( AVMEDIA_TOOLBOXITEM_ZOOM, mpZoomListBox ); - maZoomToolBox->SetSelectHdl( LINK( this, MediaControl, implSelectHdl ) ); - maZoomToolBox->SetSizePixel( maZoomToolBox->CalcWindowSizePixel() ); - maZoomToolBox->Show(); - maMinSize.Width() += maZoomToolBox->GetSizePixel().Width(); + mpZoomToolBox->SetItemWindow( AVMEDIA_TOOLBOXITEM_ZOOM, mpZoomListBox ); + mpZoomToolBox->SetSelectHdl( LINK( this, MediaControl, implSelectHdl ) ); + mpZoomToolBox->SetSizePixel( mpZoomToolBox->CalcWindowSizePixel() ); + mpZoomToolBox->Show(); + maMinSize.Width() += mpZoomToolBox->GetSizePixel().Width(); if( MEDIACONTROLSTYLE_MULTILINE == meControlStyle ) { maMinSize.Width() = 256; maMinSize.Height() = ( maMinSize.Height() << 1 ) + AVMEDIA_CONTROLOFFSET; + mpZoomToolBox->SetBackground(); + mpZoomToolBox->SetPaintTransparent( true ); } maIdle.SetPriority( SchedulerPriority::LOW ); @@ -188,86 +110,107 @@ MediaControl::MediaControl( vcl::Window* pParent, MediaControlStyle eControlStyl maIdle.Start(); } +void MediaControl::InitializeWidgets() +{ + if( MEDIACONTROLSTYLE_SINGLELINE != meControlStyle ) + { + mpPlayToolBox->InsertItem( AVMEDIA_TOOLBOXITEM_OPEN, GetImage( AVMEDIA_IMG_OPEN ), OUString( AVMEDIA_RESID( AVMEDIA_STR_OPEN ) ) ); + mpPlayToolBox->SetHelpId( AVMEDIA_TOOLBOXITEM_OPEN, HID_AVMEDIA_TOOLBOXITEM_OPEN ); + mpPlayToolBox->InsertItem( AVMEDIA_TOOLBOXITEM_INSERT, GetImage( AVMEDIA_IMG_INSERT ), OUString( AVMEDIA_RESID( AVMEDIA_STR_INSERT ) ) ); + mpPlayToolBox->SetHelpId( AVMEDIA_TOOLBOXITEM_INSERT, HID_AVMEDIA_TOOLBOXITEM_INSERT ); + mpPlayToolBox->InsertSeparator(); + } + else + { + mpZoomListBox->SetBackground(); + mpPlayToolBox->SetBackground(); + mpPlayToolBox->SetPaintTransparent( true ); + mpMuteToolBox->SetBackground(); + mpMuteToolBox->SetPaintTransparent( true ); + mpMuteToolBox->InsertSeparator(); + } + avmedia::MediaControlBase::InitializeWidgets(); + + if( meControlStyle == MEDIACONTROLSTYLE_SINGLELINE ) + mpPlayToolBox->InsertSeparator(); +} MediaControl::~MediaControl() { disposeOnce(); } - void MediaControl::dispose() { - maZoomToolBox->SetItemWindow( AVMEDIA_TOOLBOXITEM_ZOOM, nullptr ); + mpZoomToolBox->SetItemWindow( AVMEDIA_TOOLBOXITEM_ZOOM, nullptr ); mpZoomListBox.disposeAndClear(); - maTimeEdit.disposeAndClear(); - maZoomToolBox.disposeAndClear(); - maVolumeSlider.disposeAndClear(); - maMuteToolBox.disposeAndClear(); - maTimeSlider.disposeAndClear(); - maPlayToolBox.disposeAndClear(); + mpTimeEdit.disposeAndClear(); + mpZoomToolBox.disposeAndClear(); + mpVolumeSlider.disposeAndClear(); + mpMuteToolBox.disposeAndClear(); + mpTimeSlider.disposeAndClear(); + mpPlayToolBox.disposeAndClear(); Control::dispose(); } - const Size& MediaControl::getMinSizePixel() const { return maMinSize; } - void MediaControl::Resize() { Point aPos( 0, 0 ); - const sal_Int32 nPlayToolBoxWidth = maPlayToolBox->GetSizePixel().Width(); - const sal_Int32 nMuteToolBoxWidth = maMuteToolBox->GetSizePixel().Width(); - const sal_Int32 nVolumeSliderWidth = maVolumeSlider->GetSizePixel().Width(); - const sal_Int32 nZoomToolBoxWidth = maZoomToolBox->GetSizePixel().Width(); - const sal_Int32 nTimeEditWidth = maTimeEdit->GetSizePixel().Width(); - const sal_Int32 nTimeSliderHeight = maTimeSlider->GetSizePixel().Height(); + const sal_Int32 nPlayToolBoxWidth = mpPlayToolBox->GetSizePixel().Width(); + const sal_Int32 nMuteToolBoxWidth = mpMuteToolBox->GetSizePixel().Width(); + const sal_Int32 nVolumeSliderWidth = mpVolumeSlider->GetSizePixel().Width(); + const sal_Int32 nZoomToolBoxWidth = mpZoomToolBox->GetSizePixel().Width(); + const sal_Int32 nTimeEditWidth = mpTimeEdit->GetSizePixel().Width(); + const sal_Int32 nTimeSliderHeight = mpTimeSlider->GetSizePixel().Height(); if( MEDIACONTROLSTYLE_SINGLELINE == meControlStyle ) { const sal_Int32 nTimeSliderWidth = GetSizePixel().Width() - ( AVMEDIA_CONTROLOFFSET * 3 ) - nPlayToolBoxWidth - nMuteToolBoxWidth - nVolumeSliderWidth - nTimeEditWidth - nZoomToolBoxWidth; - maPlayToolBox->SetPosSizePixel( aPos, maPlayToolBox->GetSizePixel() ); + mpPlayToolBox->SetPosSizePixel( aPos, mpPlayToolBox->GetSizePixel() ); aPos.X() += nPlayToolBoxWidth; - maTimeSlider->SetPosSizePixel( aPos, Size( nTimeSliderWidth, nTimeSliderHeight ) ); + mpTimeSlider->SetPosSizePixel( aPos, Size( nTimeSliderWidth, nTimeSliderHeight ) ); aPos.X() += nTimeSliderWidth + AVMEDIA_CONTROLOFFSET; - maTimeEdit->SetPosSizePixel( aPos, maTimeEdit->GetSizePixel() ); + mpTimeEdit->SetPosSizePixel( aPos, mpTimeEdit->GetSizePixel() ); aPos.X() += nTimeEditWidth + AVMEDIA_CONTROLOFFSET; - maMuteToolBox->SetPosSizePixel( aPos, maMuteToolBox->GetSizePixel() ); + mpMuteToolBox->SetPosSizePixel( aPos, mpMuteToolBox->GetSizePixel() ); aPos.X() += nMuteToolBoxWidth; - maVolumeSlider->SetPosSizePixel( aPos, maVolumeSlider->GetSizePixel() ); + mpVolumeSlider->SetPosSizePixel( aPos, mpVolumeSlider->GetSizePixel() ); aPos.X() += nVolumeSliderWidth + AVMEDIA_CONTROLOFFSET; - maZoomToolBox->SetPosSizePixel( aPos, maZoomToolBox->GetSizePixel() ); + mpZoomToolBox->SetPosSizePixel( aPos, mpZoomToolBox->GetSizePixel() ); } else { const sal_Int32 nTimeSliderWidth = GetSizePixel().Width() - AVMEDIA_CONTROLOFFSET - nTimeEditWidth; - maTimeSlider->SetPosSizePixel( aPos, Size( nTimeSliderWidth, nTimeSliderHeight ) ); + mpTimeSlider->SetPosSizePixel( aPos, Size( nTimeSliderWidth, nTimeSliderHeight ) ); aPos.X() += nTimeSliderWidth + AVMEDIA_CONTROLOFFSET; - maTimeEdit->SetPosSizePixel( aPos, maTimeEdit->GetSizePixel() ); + mpTimeEdit->SetPosSizePixel( aPos, mpTimeEdit->GetSizePixel() ); aPos.X() = 0; aPos.Y() += nTimeSliderHeight + AVMEDIA_CONTROLOFFSET; - maPlayToolBox->SetPosSizePixel( aPos, maPlayToolBox->GetSizePixel() ); + mpPlayToolBox->SetPosSizePixel( aPos, mpPlayToolBox->GetSizePixel() ); aPos.X() = GetSizePixel().Width() - nVolumeSliderWidth - nMuteToolBoxWidth - nZoomToolBoxWidth - AVMEDIA_CONTROLOFFSET; - maMuteToolBox->SetPosSizePixel( aPos, maMuteToolBox->GetSizePixel() ); + mpMuteToolBox->SetPosSizePixel( aPos, mpMuteToolBox->GetSizePixel() ); aPos.X() += nMuteToolBoxWidth; - maVolumeSlider->SetPosSizePixel( aPos, maVolumeSlider->GetSizePixel() ); + mpVolumeSlider->SetPosSizePixel( aPos, mpVolumeSlider->GetSizePixel() ); aPos.X() = GetSizePixel().Width() - nZoomToolBoxWidth; - maZoomToolBox->SetPosSizePixel( aPos, maZoomToolBox->GetSizePixel() ); + mpZoomToolBox->SetPosSizePixel( aPos, mpZoomToolBox->GetSizePixel() ); } } @@ -277,161 +220,20 @@ void MediaControl::setState( const MediaItem& rItem ) if( !mbLocked ) { maItem.merge( rItem ); - - implUpdateToolboxes(); - implUpdateTimeSlider(); - implUpdateVolumeSlider(); - implUpdateTimeField( maItem.getTime() ); - } -} - - -void MediaControl::implUpdateToolboxes() -{ - const bool bValidURL = !maItem.getURL().isEmpty(); - - maPlayToolBox->EnableItem( AVMEDIA_TOOLBOXITEM_INSERT, bValidURL ); - maPlayToolBox->EnableItem( AVMEDIA_TOOLBOXITEM_PLAY, bValidURL ); - maPlayToolBox->EnableItem( AVMEDIA_TOOLBOXITEM_PAUSE, bValidURL ); - maPlayToolBox->EnableItem( AVMEDIA_TOOLBOXITEM_STOP, bValidURL ); - maPlayToolBox->EnableItem( AVMEDIA_TOOLBOXITEM_LOOP, bValidURL ); - maMuteToolBox->EnableItem( AVMEDIA_TOOLBOXITEM_MUTE, bValidURL ); - - if( !bValidURL || !IsEnabled() ) - { - mpZoomListBox->Disable(); - - if( MEDIACONTROLSTYLE_SINGLELINE == meControlStyle ) - maPlayToolBox->Disable(); - - maMuteToolBox->Disable(); - } - else - { - maPlayToolBox->Enable(); - maMuteToolBox->Enable(); - - if( MediaState::Play == maItem.getState() ) - { - maPlayToolBox->CheckItem( AVMEDIA_TOOLBOXITEM_PLAY ); - maPlayToolBox->CheckItem( AVMEDIA_TOOLBOXITEM_PAUSE, false ); - maPlayToolBox->CheckItem( AVMEDIA_TOOLBOXITEM_STOP, false ); - } - else if( maItem.getTime() > 0.0 && ( maItem.getTime() < maItem.getDuration() ) ) - { - maPlayToolBox->CheckItem( AVMEDIA_TOOLBOXITEM_PLAY, false ); - maPlayToolBox->CheckItem( AVMEDIA_TOOLBOXITEM_PAUSE ); - maPlayToolBox->CheckItem( AVMEDIA_TOOLBOXITEM_STOP, false ); - } - else - { - maPlayToolBox->CheckItem( AVMEDIA_TOOLBOXITEM_PLAY, false ); - maPlayToolBox->CheckItem( AVMEDIA_TOOLBOXITEM_PAUSE, false ); - maPlayToolBox->CheckItem( AVMEDIA_TOOLBOXITEM_STOP ); - } - - maPlayToolBox->CheckItem( AVMEDIA_TOOLBOXITEM_LOOP, maItem.isLoop() ); - maMuteToolBox->CheckItem( AVMEDIA_TOOLBOXITEM_MUTE, maItem.isMute() ); - - if( !mpZoomListBox->IsTravelSelect() && !mpZoomListBox->IsInDropDown() ) - { - sal_uInt16 nSelectEntryPos ; - - switch( maItem.getZoom() ) - { - case( css::media::ZoomLevel_ZOOM_1_TO_2 ): nSelectEntryPos = AVMEDIA_ZOOMLEVEL_50; break; - case( css::media::ZoomLevel_ORIGINAL ): nSelectEntryPos = AVMEDIA_ZOOMLEVEL_100; break; - case( css::media::ZoomLevel_ZOOM_2_TO_1 ): nSelectEntryPos = AVMEDIA_ZOOMLEVEL_200; break; - case( css::media::ZoomLevel_FIT_TO_WINDOW_FIXED_ASPECT ): nSelectEntryPos = AVMEDIA_ZOOMLEVEL_FIT; break; - case( css::media::ZoomLevel_FIT_TO_WINDOW ): nSelectEntryPos = AVMEDIA_ZOOMLEVEL_SCALED; break; - - default: nSelectEntryPos = AVMEDIA_ZOOMLEVEL_INVALID; break; - } - - if( nSelectEntryPos != AVMEDIA_ZOOMLEVEL_INVALID ) - { - mpZoomListBox->Enable(); - mpZoomListBox->SelectEntryPos( nSelectEntryPos ); - } - else - mpZoomListBox->Disable(); - } - } -} - - -void MediaControl::implUpdateTimeSlider() -{ - if( maItem.getURL().isEmpty() || !IsEnabled() ) - maTimeSlider->Disable(); - else - { - maTimeSlider->Enable(); - - const double fDuration = maItem.getDuration(); - - if( fDuration > 0.0 ) - { - const double fTime = ::std::min( maItem.getTime(), fDuration ); - - if( !maTimeSlider->GetLineSize() ) - maTimeSlider->SetLineSize( static_cast< sal_uInt32 >( AVMEDIA_TIME_RANGE * AVMEDIA_LINEINCREMENT / fDuration ) ); - - if( !maTimeSlider->GetPageSize() ) - maTimeSlider->SetPageSize( static_cast< sal_uInt32 >( AVMEDIA_TIME_RANGE * AVMEDIA_PAGEINCREMENT / fDuration ) ); - - maTimeSlider->SetThumbPos( static_cast< sal_Int32 >( fTime / fDuration * AVMEDIA_TIME_RANGE ) ); - } - } -} - - -void MediaControl::implUpdateVolumeSlider() -{ - if( maItem.getURL().isEmpty() || !IsEnabled() ) - maVolumeSlider->Disable(); - else - { - maVolumeSlider->Enable(); - - const sal_Int32 nVolumeDB = maItem.getVolumeDB(); - - maVolumeSlider->SetThumbPos( ::std::min( ::std::max( nVolumeDB, static_cast< sal_Int32 >( AVMEDIA_DB_RANGE ) ), - static_cast< sal_Int32 >( 0 ) ) ); - } -} - - -void MediaControl::implUpdateTimeField( double fCurTime ) -{ - if( !maItem.getURL().isEmpty() ) - { - OUString aTimeString; - - SvtSysLocale aSysLocale; - const LocaleDataWrapper& rLocaleData = aSysLocale.GetLocaleData(); - - aTimeString += rLocaleData.getDuration( tools::Time( 0, 0, static_cast< sal_uInt32 >( floor( fCurTime ) ) ) ) + - " / " + - rLocaleData.getDuration( tools::Time( 0, 0, static_cast< sal_uInt32 >( floor( maItem.getDuration() ) )) ); - - if( maTimeEdit->GetText() != aTimeString ) - maTimeEdit->SetText( aTimeString ); + if( rItem.getURL().isEmpty() && meControlStyle == MEDIACONTROLSTYLE_SINGLELINE ) + mpPlayToolBox->Disable(); + UpdateToolBoxes( maItem ); + UpdateTimeSlider( maItem ); + UpdateVolumeSlider( maItem ); + UpdateTimeField( maItem, maItem.getTime() ); } } - -Image MediaControl::implGetImage( sal_Int32 nImageId ) const -{ - return maImageList.GetImage( static_cast< sal_uInt16 >( nImageId ) ); -} - - IMPL_LINK_TYPED( MediaControl, implTimeHdl, Slider*, p, void ) { mbLocked = true; maIdle.Stop(); - implUpdateTimeField( p->GetThumbPos() * maItem.getDuration() / AVMEDIA_TIME_RANGE ); + UpdateTimeField( maItem, p->GetThumbPos() * maItem.getDuration() / AVMEDIA_TIME_RANGE ); } @@ -462,75 +264,24 @@ IMPL_LINK_TYPED( MediaControl, implSelectHdl, ToolBox*, p, void ) if( p ) { MediaItem aExecItem; - - switch( p->GetCurItemId() ) + if( p->GetCurItemId() == AVMEDIA_TOOLBOXITEM_OPEN ) { - case AVMEDIA_TOOLBOXITEM_OPEN: - { - OUString aURL; - - if (::avmedia::MediaWindow::executeMediaURLDialog( - GetParent(), aURL, nullptr)) - { - if( !::avmedia::MediaWindow::isMediaURL( aURL, ""/*TODO?*/, true ) ) - ::avmedia::MediaWindow::executeFormatErrorBox( this ); - else - { - aExecItem.setURL( aURL, "", ""/*TODO?*/ ); - aExecItem.setState( MediaState::Play ); - } - } - } - break; - - case AVMEDIA_TOOLBOXITEM_INSERT: - { - MediaFloater* pFloater = avmedia::getMediaFloater(); + OUString aURL; - if( pFloater ) - pFloater->dispatchCurrentURL(); - } - break; - - case AVMEDIA_TOOLBOXITEM_PLAY: - { - aExecItem.setState( MediaState::Play ); - - if( maItem.getTime() == maItem.getDuration() ) - aExecItem.setTime( 0.0 ); + if (MediaWindow::executeMediaURLDialog( + GetParent(), aURL, nullptr)) + { + if( !MediaWindow::isMediaURL( aURL, ""/*TODO?*/, true ) ) + MediaWindow::executeFormatErrorBox( this ); else - aExecItem.setTime( maItem.getTime() ); - } - break; - - case AVMEDIA_TOOLBOXITEM_PAUSE: - { - aExecItem.setState( MediaState::Pause ); - } - break; - - case AVMEDIA_TOOLBOXITEM_STOP: - { - aExecItem.setState( MediaState::Stop ); - aExecItem.setTime( 0.0 ); - } - break; - - case AVMEDIA_TOOLBOXITEM_MUTE: - { - aExecItem.setMute( !maMuteToolBox->IsItemChecked( AVMEDIA_TOOLBOXITEM_MUTE ) ); - } - break; - - case AVMEDIA_TOOLBOXITEM_LOOP: - { - aExecItem.setLoop( !maPlayToolBox->IsItemChecked( AVMEDIA_TOOLBOXITEM_LOOP ) ); + { + aExecItem.setURL( aURL, "", ""/*TODO?*/ ); + aExecItem.setState( MediaState::Play ); + } } - break; - - default: - break; } + else + SelectPlayToolBoxItem( aExecItem, maItem, p->GetCurItemId() ); if( aExecItem.getMaskSet() != AVMediaSetMask::NONE ) execute( aExecItem ); |