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