1f39251c4SAndrew Rist /**************************************************************
2960b059cSmseidel  *
3f39251c4SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4f39251c4SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5f39251c4SAndrew Rist  * distributed with this work for additional information
6f39251c4SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7f39251c4SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8f39251c4SAndrew Rist  * "License"); you may not use this file except in compliance
9f39251c4SAndrew Rist  * with the License.  You may obtain a copy of the License at
10960b059cSmseidel  *
11f39251c4SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12960b059cSmseidel  *
13f39251c4SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14f39251c4SAndrew Rist  * software distributed under the License is distributed on an
15f39251c4SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16f39251c4SAndrew Rist  * KIND, either express or implied.  See the License for the
17f39251c4SAndrew Rist  * specific language governing permissions and limitations
18f39251c4SAndrew Rist  * under the License.
19960b059cSmseidel  *
20f39251c4SAndrew Rist  *************************************************************/
21f39251c4SAndrew Rist 
22f39251c4SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #include <stdio.h>
25cdf0e10cSrcweir 
26cdf0e10cSrcweir #include <avmedia/mediawindow.hxx>
27cdf0e10cSrcweir #include "mediawindow_impl.hxx"
28cdf0e10cSrcweir #include "mediamisc.hxx"
29cdf0e10cSrcweir #include "mediawindow.hrc"
30cdf0e10cSrcweir #include <tools/urlobj.hxx>
31cdf0e10cSrcweir #include <vcl/msgbox.hxx>
32cdf0e10cSrcweir #include <unotools/pathoptions.hxx>
33cdf0e10cSrcweir #include <sfx2/filedlghelper.hxx>
34cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
35cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp>
36cdf0e10cSrcweir #include <com/sun/star/media/XManager.hpp>
37cdf0e10cSrcweir #include "com/sun/star/ui/dialogs/TemplateDescription.hpp"
38cdf0e10cSrcweir 
39cdf0e10cSrcweir #define AVMEDIA_FRAMEGRABBER_DEFAULTFRAME_MEDIATIME 3.0
40cdf0e10cSrcweir 
41cdf0e10cSrcweir using namespace ::com::sun::star;
42cdf0e10cSrcweir 
43cdf0e10cSrcweir namespace avmedia {
44cdf0e10cSrcweir 
45cdf0e10cSrcweir // ---------------
46cdf0e10cSrcweir // - MediaWindow -
47cdf0e10cSrcweir // ---------------
48cdf0e10cSrcweir 
MediaWindow(Window * parent,bool bInternalMediaControl)49cdf0e10cSrcweir MediaWindow::MediaWindow( Window* parent, bool bInternalMediaControl ) :
50cdf0e10cSrcweir     mpImpl( new priv::MediaWindowImpl( parent, this, bInternalMediaControl ) )
51cdf0e10cSrcweir {
52cdf0e10cSrcweir     mpImpl->Show();
53cdf0e10cSrcweir }
54cdf0e10cSrcweir 
55cdf0e10cSrcweir // -------------------------------------------------------------------------
56cdf0e10cSrcweir 
~MediaWindow()57cdf0e10cSrcweir MediaWindow::~MediaWindow()
58cdf0e10cSrcweir {
59cdf0e10cSrcweir     mpImpl->cleanUp();
60cdf0e10cSrcweir     delete mpImpl;
61cdf0e10cSrcweir     mpImpl = NULL;
62cdf0e10cSrcweir }
63cdf0e10cSrcweir 
64cdf0e10cSrcweir // -------------------------------------------------------------------------
65cdf0e10cSrcweir 
setURL(const::rtl::OUString & rURL)66cdf0e10cSrcweir void MediaWindow::setURL( const ::rtl::OUString& rURL )
67cdf0e10cSrcweir {
68cdf0e10cSrcweir     if( mpImpl )
69cdf0e10cSrcweir         mpImpl->setURL( rURL );
70cdf0e10cSrcweir }
71cdf0e10cSrcweir 
72cdf0e10cSrcweir // -------------------------------------------------------------------------
73cdf0e10cSrcweir 
getURL() const74cdf0e10cSrcweir const ::rtl::OUString& MediaWindow::getURL() const
75cdf0e10cSrcweir {
76cdf0e10cSrcweir     return mpImpl->getURL();
77cdf0e10cSrcweir }
78cdf0e10cSrcweir 
79cdf0e10cSrcweir // -------------------------------------------------------------------------
80cdf0e10cSrcweir 
isValid() const81cdf0e10cSrcweir bool MediaWindow::isValid() const
82cdf0e10cSrcweir {
83cdf0e10cSrcweir     return( mpImpl != NULL && mpImpl->isValid() );
84cdf0e10cSrcweir }
85cdf0e10cSrcweir 
86cdf0e10cSrcweir // -------------------------------------------------------------------------
87cdf0e10cSrcweir 
MouseMove(const MouseEvent &)88cdf0e10cSrcweir void MediaWindow::MouseMove( const MouseEvent& /* rMEvt */ )
89cdf0e10cSrcweir {
90cdf0e10cSrcweir }
91cdf0e10cSrcweir 
92cdf0e10cSrcweir // ---------------------------------------------------------------------
93cdf0e10cSrcweir 
MouseButtonDown(const MouseEvent &)94cdf0e10cSrcweir void MediaWindow::MouseButtonDown( const MouseEvent& /* rMEvt */ )
95cdf0e10cSrcweir {
96cdf0e10cSrcweir }
97cdf0e10cSrcweir 
98cdf0e10cSrcweir // ---------------------------------------------------------------------
99cdf0e10cSrcweir 
MouseButtonUp(const MouseEvent &)100cdf0e10cSrcweir void MediaWindow::MouseButtonUp( const MouseEvent& /* rMEvt */ )
101cdf0e10cSrcweir {
102cdf0e10cSrcweir }
103cdf0e10cSrcweir 
104cdf0e10cSrcweir // -------------------------------------------------------------------------
105cdf0e10cSrcweir 
KeyInput(const KeyEvent &)106cdf0e10cSrcweir void MediaWindow::KeyInput( const KeyEvent& /* rKEvt */ )
107cdf0e10cSrcweir {
108cdf0e10cSrcweir }
109cdf0e10cSrcweir 
110cdf0e10cSrcweir // -------------------------------------------------------------------------
111cdf0e10cSrcweir 
KeyUp(const KeyEvent &)112cdf0e10cSrcweir void MediaWindow::KeyUp( const KeyEvent& /* rKEvt */ )
113cdf0e10cSrcweir {
114cdf0e10cSrcweir }
115cdf0e10cSrcweir 
116cdf0e10cSrcweir // -------------------------------------------------------------------------
117cdf0e10cSrcweir 
Command(const CommandEvent &)118cdf0e10cSrcweir void MediaWindow::Command( const CommandEvent& /* rCEvt */ )
119cdf0e10cSrcweir {
120cdf0e10cSrcweir }
121cdf0e10cSrcweir 
122cdf0e10cSrcweir // -------------------------------------------------------------------------
123cdf0e10cSrcweir 
AcceptDrop(const AcceptDropEvent &)124cdf0e10cSrcweir sal_Int8 MediaWindow::AcceptDrop( const AcceptDropEvent& /* rEvt */ )
125cdf0e10cSrcweir {
126cdf0e10cSrcweir     return 0;
127cdf0e10cSrcweir }
128cdf0e10cSrcweir 
129cdf0e10cSrcweir // -------------------------------------------------------------------------
130cdf0e10cSrcweir 
ExecuteDrop(const ExecuteDropEvent &)131cdf0e10cSrcweir sal_Int8 MediaWindow::ExecuteDrop( const ExecuteDropEvent& /* rEvt */ )
132cdf0e10cSrcweir {
133cdf0e10cSrcweir     return 0;
134cdf0e10cSrcweir }
135cdf0e10cSrcweir 
136cdf0e10cSrcweir // -------------------------------------------------------------------------
137cdf0e10cSrcweir 
StartDrag(sal_Int8,const Point &)138cdf0e10cSrcweir void MediaWindow::StartDrag( sal_Int8 /* nAction */, const Point& /* rPosPixel */ )
139cdf0e10cSrcweir {
140cdf0e10cSrcweir }
141cdf0e10cSrcweir 
142cdf0e10cSrcweir // -------------------------------------------------------------------------
143cdf0e10cSrcweir 
hasPreferredSize() const144cdf0e10cSrcweir bool MediaWindow::hasPreferredSize() const
145cdf0e10cSrcweir {
146cdf0e10cSrcweir     return( mpImpl != NULL && mpImpl->hasPreferredSize() );
147cdf0e10cSrcweir }
148cdf0e10cSrcweir 
149cdf0e10cSrcweir // -------------------------------------------------------------------------
150cdf0e10cSrcweir 
getPreferredSize() const151cdf0e10cSrcweir Size MediaWindow::getPreferredSize() const
152cdf0e10cSrcweir {
153cdf0e10cSrcweir     return mpImpl->getPreferredSize();
154cdf0e10cSrcweir }
155cdf0e10cSrcweir 
156cdf0e10cSrcweir // -------------------------------------------------------------------------
157cdf0e10cSrcweir 
setPosSize(const Rectangle & rNewRect)158cdf0e10cSrcweir void MediaWindow::setPosSize( const Rectangle& rNewRect )
159cdf0e10cSrcweir {
160cdf0e10cSrcweir     if( mpImpl )
161cdf0e10cSrcweir     {
162cdf0e10cSrcweir         mpImpl->setPosSize( rNewRect );
163cdf0e10cSrcweir     }
164cdf0e10cSrcweir }
165cdf0e10cSrcweir 
166cdf0e10cSrcweir // -------------------------------------------------------------------------
167cdf0e10cSrcweir 
getPosSize() const168cdf0e10cSrcweir Rectangle MediaWindow::getPosSize() const
169cdf0e10cSrcweir {
170cdf0e10cSrcweir     return Rectangle( mpImpl->GetPosPixel(), mpImpl->GetSizePixel() );
171cdf0e10cSrcweir }
172cdf0e10cSrcweir 
173cdf0e10cSrcweir // -------------------------------------------------------------------------
174cdf0e10cSrcweir 
setPointer(const Pointer & rPointer)175cdf0e10cSrcweir void MediaWindow::setPointer( const Pointer& rPointer )
176cdf0e10cSrcweir {
177cdf0e10cSrcweir     if( mpImpl )
178cdf0e10cSrcweir         mpImpl->setPointer( rPointer );
179cdf0e10cSrcweir }
180cdf0e10cSrcweir 
181cdf0e10cSrcweir // -------------------------------------------------------------------------
182cdf0e10cSrcweir 
getPointer() const183cdf0e10cSrcweir const Pointer& MediaWindow::getPointer() const
184cdf0e10cSrcweir {
185cdf0e10cSrcweir     return mpImpl->getPointer();
186cdf0e10cSrcweir }
187cdf0e10cSrcweir 
188cdf0e10cSrcweir // -------------------------------------------------------------------------
189cdf0e10cSrcweir 
setZoom(::com::sun::star::media::ZoomLevel eLevel)190cdf0e10cSrcweir bool MediaWindow::setZoom( ::com::sun::star::media::ZoomLevel eLevel )
191cdf0e10cSrcweir {
192cdf0e10cSrcweir     return( mpImpl != NULL && mpImpl->setZoom( eLevel ) );
193cdf0e10cSrcweir }
194cdf0e10cSrcweir 
195cdf0e10cSrcweir // -------------------------------------------------------------------------
196cdf0e10cSrcweir 
getZoom() const197cdf0e10cSrcweir ::com::sun::star::media::ZoomLevel MediaWindow::getZoom() const
198cdf0e10cSrcweir {
199cdf0e10cSrcweir     return mpImpl->getZoom();
200cdf0e10cSrcweir }
201cdf0e10cSrcweir 
202cdf0e10cSrcweir // -------------------------------------------------------------------------
203cdf0e10cSrcweir 
start()204cdf0e10cSrcweir bool MediaWindow::start()
205cdf0e10cSrcweir {
206cdf0e10cSrcweir     return( mpImpl != NULL && mpImpl->start() );
207cdf0e10cSrcweir }
208cdf0e10cSrcweir 
209cdf0e10cSrcweir // -------------------------------------------------------------------------
210cdf0e10cSrcweir 
stop()211cdf0e10cSrcweir void MediaWindow::stop()
212cdf0e10cSrcweir {
213cdf0e10cSrcweir     if( mpImpl )
214cdf0e10cSrcweir         mpImpl->stop();
215cdf0e10cSrcweir }
216cdf0e10cSrcweir 
217cdf0e10cSrcweir // -------------------------------------------------------------------------
218cdf0e10cSrcweir 
isPlaying() const219cdf0e10cSrcweir bool MediaWindow::isPlaying() const
220cdf0e10cSrcweir {
221cdf0e10cSrcweir     return( mpImpl != NULL && mpImpl->isPlaying() );
222cdf0e10cSrcweir }
223cdf0e10cSrcweir 
224cdf0e10cSrcweir // -------------------------------------------------------------------------
225cdf0e10cSrcweir 
getDuration() const226cdf0e10cSrcweir double MediaWindow::getDuration() const
227cdf0e10cSrcweir {
228cdf0e10cSrcweir     return mpImpl->getDuration();
229cdf0e10cSrcweir }
230cdf0e10cSrcweir 
231cdf0e10cSrcweir // -------------------------------------------------------------------------
232cdf0e10cSrcweir 
setMediaTime(double fTime)233cdf0e10cSrcweir void MediaWindow::setMediaTime( double fTime )
234cdf0e10cSrcweir {
235cdf0e10cSrcweir     if( mpImpl )
236cdf0e10cSrcweir         mpImpl->setMediaTime( fTime );
237cdf0e10cSrcweir }
238cdf0e10cSrcweir 
239cdf0e10cSrcweir // -------------------------------------------------------------------------
240cdf0e10cSrcweir 
getMediaTime() const241cdf0e10cSrcweir double MediaWindow::getMediaTime() const
242cdf0e10cSrcweir {
243cdf0e10cSrcweir     return mpImpl->getMediaTime();
244cdf0e10cSrcweir }
245cdf0e10cSrcweir 
246cdf0e10cSrcweir // -------------------------------------------------------------------------
247cdf0e10cSrcweir 
setStopTime(double fTime)248cdf0e10cSrcweir void MediaWindow::setStopTime( double fTime )
249cdf0e10cSrcweir {
250cdf0e10cSrcweir     if( mpImpl )
251cdf0e10cSrcweir         mpImpl->setStopTime( fTime );
252cdf0e10cSrcweir }
253cdf0e10cSrcweir 
254cdf0e10cSrcweir // -------------------------------------------------------------------------
255cdf0e10cSrcweir 
getStopTime() const256cdf0e10cSrcweir double MediaWindow::getStopTime() const
257cdf0e10cSrcweir {
258cdf0e10cSrcweir     return mpImpl->getStopTime();
259cdf0e10cSrcweir }
260cdf0e10cSrcweir 
261cdf0e10cSrcweir // -------------------------------------------------------------------------
262cdf0e10cSrcweir 
setRate(double fRate)263cdf0e10cSrcweir void MediaWindow::setRate( double fRate )
264cdf0e10cSrcweir {
265cdf0e10cSrcweir     if( mpImpl )
266cdf0e10cSrcweir         mpImpl->setRate( fRate );
267cdf0e10cSrcweir }
268cdf0e10cSrcweir 
269cdf0e10cSrcweir // -------------------------------------------------------------------------
270cdf0e10cSrcweir 
getRate() const271cdf0e10cSrcweir double MediaWindow::getRate() const
272cdf0e10cSrcweir {
273cdf0e10cSrcweir     return mpImpl->getRate();
274cdf0e10cSrcweir }
275cdf0e10cSrcweir 
276cdf0e10cSrcweir // -------------------------------------------------------------------------
277cdf0e10cSrcweir 
setPlaybackLoop(bool bSet)278cdf0e10cSrcweir void MediaWindow::setPlaybackLoop( bool bSet )
279cdf0e10cSrcweir {
280cdf0e10cSrcweir     if( mpImpl )
281cdf0e10cSrcweir         mpImpl->setPlaybackLoop( bSet );
282cdf0e10cSrcweir }
283cdf0e10cSrcweir 
284cdf0e10cSrcweir // -------------------------------------------------------------------------
285cdf0e10cSrcweir 
isPlaybackLoop() const286cdf0e10cSrcweir bool MediaWindow::isPlaybackLoop() const
287cdf0e10cSrcweir {
288cdf0e10cSrcweir     return mpImpl->isPlaybackLoop();
289cdf0e10cSrcweir }
290cdf0e10cSrcweir 
291cdf0e10cSrcweir // -------------------------------------------------------------------------
292cdf0e10cSrcweir 
setMute(bool bSet)293cdf0e10cSrcweir void MediaWindow::setMute( bool bSet )
294cdf0e10cSrcweir {
295cdf0e10cSrcweir     if( mpImpl )
296cdf0e10cSrcweir         mpImpl->setMute( bSet );
297cdf0e10cSrcweir }
298cdf0e10cSrcweir 
299cdf0e10cSrcweir // -------------------------------------------------------------------------
300cdf0e10cSrcweir 
isMute() const301cdf0e10cSrcweir bool MediaWindow::isMute() const
302cdf0e10cSrcweir {
303cdf0e10cSrcweir     return mpImpl->isMute();
304cdf0e10cSrcweir }
305cdf0e10cSrcweir 
306cdf0e10cSrcweir // -------------------------------------------------------------------------
307cdf0e10cSrcweir 
updateMediaItem(MediaItem & rItem) const308cdf0e10cSrcweir void MediaWindow::updateMediaItem( MediaItem& rItem ) const
309cdf0e10cSrcweir {
310cdf0e10cSrcweir     if( mpImpl )
311cdf0e10cSrcweir         mpImpl->updateMediaItem( rItem );
312cdf0e10cSrcweir }
313cdf0e10cSrcweir 
314cdf0e10cSrcweir // -------------------------------------------------------------------------
315cdf0e10cSrcweir 
executeMediaItem(const MediaItem & rItem)316cdf0e10cSrcweir void MediaWindow::executeMediaItem( const MediaItem& rItem )
317cdf0e10cSrcweir {
318cdf0e10cSrcweir     if( mpImpl )
319cdf0e10cSrcweir         mpImpl->executeMediaItem( rItem );
320cdf0e10cSrcweir }
321cdf0e10cSrcweir 
322cdf0e10cSrcweir // -------------------------------------------------------------------------
323cdf0e10cSrcweir 
show()324cdf0e10cSrcweir void MediaWindow::show()
325cdf0e10cSrcweir {
326cdf0e10cSrcweir     if( mpImpl )
327cdf0e10cSrcweir         mpImpl->Show();
328cdf0e10cSrcweir }
329cdf0e10cSrcweir 
330cdf0e10cSrcweir // -------------------------------------------------------------------------
331cdf0e10cSrcweir 
hide()332cdf0e10cSrcweir void MediaWindow::hide()
333cdf0e10cSrcweir {
334cdf0e10cSrcweir     if( mpImpl )
335cdf0e10cSrcweir         mpImpl->Hide();
336cdf0e10cSrcweir }
337cdf0e10cSrcweir 
338cdf0e10cSrcweir // -------------------------------------------------------------------------
339cdf0e10cSrcweir 
enable()340cdf0e10cSrcweir void MediaWindow::enable()
341cdf0e10cSrcweir {
342cdf0e10cSrcweir     if( mpImpl )
343cdf0e10cSrcweir         mpImpl->Enable();
344cdf0e10cSrcweir }
345cdf0e10cSrcweir 
346cdf0e10cSrcweir // -------------------------------------------------------------------------
347cdf0e10cSrcweir 
disable()348cdf0e10cSrcweir void MediaWindow::disable()
349cdf0e10cSrcweir {
350cdf0e10cSrcweir     if( mpImpl )
351cdf0e10cSrcweir         mpImpl->Disable();
352cdf0e10cSrcweir }
353cdf0e10cSrcweir 
354cdf0e10cSrcweir // -------------------------------------------------------------------------
355cdf0e10cSrcweir 
getWindow() const356cdf0e10cSrcweir Window* MediaWindow::getWindow() const
357cdf0e10cSrcweir {
358cdf0e10cSrcweir     return mpImpl;
359cdf0e10cSrcweir }
360cdf0e10cSrcweir 
361cdf0e10cSrcweir // -------------------------------------------------------------------------
362cdf0e10cSrcweir 
getMediaFilters(FilterNameVector & rFilterNameVector)363cdf0e10cSrcweir void MediaWindow::getMediaFilters( FilterNameVector& rFilterNameVector )
364cdf0e10cSrcweir {
365cdf0e10cSrcweir     static const char* pFilters[] = {   "AIF Audio", "aif;aiff",
366cdf0e10cSrcweir                                         "AU Audio", "au",
367cdf0e10cSrcweir                                         "AVI", "avi",
368cdf0e10cSrcweir                                         "CD Audio", "cda",
369a00e7f9fSAriel Constenla-Haile                                         "FLAC Audio", "flac",
370a00e7f9fSAriel Constenla-Haile                                         "Flash Video", "flv",
371cdf0e10cSrcweir                                         "Matroska Media", "mkv",
372cdf0e10cSrcweir                                         "MIDI Audio", "mid;midi",
373*e455bda5Smseidel                                         "MPEG Audio", "mp2;mp3;mpa;m4a",
374cdf0e10cSrcweir                                         "MPEG Video", "mpg;mpeg;mpv;mp4",
375a00e7f9fSAriel Constenla-Haile                                         "Ogg bitstream", "ogg;oga;ogv",
376cdf0e10cSrcweir                                         "Quicktime Video", "mov",
377cdf0e10cSrcweir                                         "Vivo Video", "viv",
378a00e7f9fSAriel Constenla-Haile                                         "WAVE Audio", "wav",
379a00e7f9fSAriel Constenla-Haile                                         "Windows Media Video", "wmv" };
380cdf0e10cSrcweir 
381cdf0e10cSrcweir     unsigned int i;
382cdf0e10cSrcweir 	for( i = 0; i < ( sizeof( pFilters ) / sizeof( char* ) ); i += 2 )
383cdf0e10cSrcweir     {
384cdf0e10cSrcweir         rFilterNameVector.push_back( ::std::make_pair< ::rtl::OUString, ::rtl::OUString >(
385cdf0e10cSrcweir                                         ::rtl::OUString::createFromAscii( pFilters[ i ] ),
386cdf0e10cSrcweir                                         ::rtl::OUString::createFromAscii( pFilters[ i + 1 ] ) ) );
387cdf0e10cSrcweir     }
388cdf0e10cSrcweir }
389cdf0e10cSrcweir 
390cdf0e10cSrcweir // -------------------------------------------------------------------------
391cdf0e10cSrcweir 
executeMediaURLDialog(Window *,::rtl::OUString & rURL,bool bInsertDialog)392cdf0e10cSrcweir bool MediaWindow::executeMediaURLDialog( Window* /* pParent */, ::rtl::OUString& rURL, bool bInsertDialog )
393cdf0e10cSrcweir {
394cdf0e10cSrcweir     ::sfx2::FileDialogHelper        aDlg( com::sun::star::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, 0 );
395cdf0e10cSrcweir     static const ::rtl::OUString    aWildcard( RTL_CONSTASCII_USTRINGPARAM( "*." ) );
396cdf0e10cSrcweir     FilterNameVector                aFilters;
397cdf0e10cSrcweir     const ::rtl::OUString           aSeparator( RTL_CONSTASCII_USTRINGPARAM( ";" ) );
398cdf0e10cSrcweir     ::rtl::OUString                 aAllTypes;
399cdf0e10cSrcweir 
400cdf0e10cSrcweir     aDlg.SetTitle( AVMEDIA_RESID( bInsertDialog ? AVMEDIA_STR_INSERTMEDIA_DLG : AVMEDIA_STR_OPENMEDIA_DLG ) );
401cdf0e10cSrcweir 
402cdf0e10cSrcweir     getMediaFilters( aFilters );
403cdf0e10cSrcweir 
404cdf0e10cSrcweir 	unsigned int i;
405cdf0e10cSrcweir     for( i = 0; i < aFilters.size(); ++i )
406cdf0e10cSrcweir     {
407cdf0e10cSrcweir         for( sal_Int32 nIndex = 0; nIndex >= 0; )
408cdf0e10cSrcweir         {
409144e4e62SHerbert Dürr             if( !aAllTypes.isEmpty() )
410cdf0e10cSrcweir                 aAllTypes += aSeparator;
411cdf0e10cSrcweir 
412cdf0e10cSrcweir             ( aAllTypes += aWildcard ) += aFilters[ i ].second.getToken( 0, ';', nIndex );
413cdf0e10cSrcweir         }
414cdf0e10cSrcweir     }
415cdf0e10cSrcweir 
416cdf0e10cSrcweir     // add filter for all media types
417cdf0e10cSrcweir     aDlg.AddFilter( AVMEDIA_RESID( AVMEDIA_STR_ALL_MEDIAFILES ), aAllTypes );
418cdf0e10cSrcweir 
419cdf0e10cSrcweir     for( i = 0; i < aFilters.size(); ++i )
420cdf0e10cSrcweir     {
421cdf0e10cSrcweir         ::rtl::OUString aTypes;
422cdf0e10cSrcweir 
423cdf0e10cSrcweir         for( sal_Int32 nIndex = 0; nIndex >= 0; )
424cdf0e10cSrcweir         {
425144e4e62SHerbert Dürr             if( !aTypes.isEmpty() )
426cdf0e10cSrcweir                 aTypes += aSeparator;
427cdf0e10cSrcweir 
428cdf0e10cSrcweir             ( aTypes += aWildcard ) += aFilters[ i ].second.getToken( 0, ';', nIndex );
429cdf0e10cSrcweir         }
430cdf0e10cSrcweir 
431cdf0e10cSrcweir         // add single filters
432cdf0e10cSrcweir         aDlg.AddFilter( aFilters[ i ].first, aTypes );
433cdf0e10cSrcweir     }
434cdf0e10cSrcweir 
435cdf0e10cSrcweir     // add filter for all types
436cdf0e10cSrcweir     aDlg.AddFilter( AVMEDIA_RESID( AVMEDIA_STR_ALL_FILES ), String( RTL_CONSTASCII_USTRINGPARAM( "*.*" ) ) );
437cdf0e10cSrcweir 
438cdf0e10cSrcweir     if( aDlg.Execute() == ERRCODE_NONE )
439cdf0e10cSrcweir     {
440cdf0e10cSrcweir         const INetURLObject aURL( aDlg.GetPath() );
441cdf0e10cSrcweir         rURL = aURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS );
442cdf0e10cSrcweir     }
443144e4e62SHerbert Dürr     else if( !rURL.isEmpty() )
444cdf0e10cSrcweir         rURL = ::rtl::OUString();
445cdf0e10cSrcweir 
446144e4e62SHerbert Dürr     return !rURL.isEmpty();
447cdf0e10cSrcweir }
448cdf0e10cSrcweir 
449cdf0e10cSrcweir // -------------------------------------------------------------------------
450cdf0e10cSrcweir 
executeFormatErrorBox(Window * pParent)451cdf0e10cSrcweir void MediaWindow::executeFormatErrorBox( Window* pParent )
452cdf0e10cSrcweir {
453cdf0e10cSrcweir     ErrorBox aErrBox( pParent, AVMEDIA_RESID( AVMEDIA_ERR_URL ) );
454cdf0e10cSrcweir 
455cdf0e10cSrcweir     aErrBox.Execute();
456cdf0e10cSrcweir }
457cdf0e10cSrcweir 
458cdf0e10cSrcweir // -------------------------------------------------------------------------
459cdf0e10cSrcweir 
isMediaURL(const::rtl::OUString & rURL,bool bDeep,Size * pPreferredSizePixel)460cdf0e10cSrcweir bool MediaWindow::isMediaURL( const ::rtl::OUString& rURL, bool bDeep, Size* pPreferredSizePixel )
461cdf0e10cSrcweir {
462cdf0e10cSrcweir     const INetURLObject aURL( rURL );
463cdf0e10cSrcweir     bool                bRet = false;
464cdf0e10cSrcweir 
465cdf0e10cSrcweir     if( aURL.GetProtocol() != INET_PROT_NOT_VALID )
466cdf0e10cSrcweir     {
467cdf0e10cSrcweir         if( bDeep || pPreferredSizePixel )
468cdf0e10cSrcweir         {
469cdf0e10cSrcweir             try
470cdf0e10cSrcweir             {
471cdf0e10cSrcweir                 sal_Bool bIsJavaBasedMediaWindow;
472cdf0e10cSrcweir     	        uno::Reference< media::XPlayer > xPlayer( priv::MediaWindowImpl::createPlayer(
473cdf0e10cSrcweir         	                                                aURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS ),
474cdf0e10cSrcweir                                                             bIsJavaBasedMediaWindow ) );
475cdf0e10cSrcweir 
476cdf0e10cSrcweir             	if( xPlayer.is() )
477cdf0e10cSrcweir                 {
478cdf0e10cSrcweir                     bRet = true;
479cdf0e10cSrcweir 
480cdf0e10cSrcweir                     if( pPreferredSizePixel )
481cdf0e10cSrcweir                     {
482cdf0e10cSrcweir                         const awt::Size aAwtSize( xPlayer->getPreferredPlayerWindowSize() );
483cdf0e10cSrcweir 
484cdf0e10cSrcweir                         pPreferredSizePixel->Width() = aAwtSize.Width;
485cdf0e10cSrcweir                         pPreferredSizePixel->Height() = aAwtSize.Height;
486cdf0e10cSrcweir                     }
487cdf0e10cSrcweir                 }
488cdf0e10cSrcweir             }
489cdf0e10cSrcweir             catch( ... )
490cdf0e10cSrcweir             {
491cdf0e10cSrcweir             }
492cdf0e10cSrcweir         }
493cdf0e10cSrcweir         else
494cdf0e10cSrcweir         {
495cdf0e10cSrcweir             FilterNameVector        aFilters;
496cdf0e10cSrcweir             const ::rtl::OUString   aExt( aURL.getExtension() );
497cdf0e10cSrcweir 
498cdf0e10cSrcweir             getMediaFilters( aFilters );
499cdf0e10cSrcweir 
500cdf0e10cSrcweir 			unsigned int i;
501cdf0e10cSrcweir             for( i = 0; ( i < aFilters.size() ) && !bRet; ++i )
502cdf0e10cSrcweir             {
503cdf0e10cSrcweir                 for( sal_Int32 nIndex = 0; nIndex >= 0 && !bRet; )
504cdf0e10cSrcweir                 {
505cdf0e10cSrcweir                     if( aExt.equalsIgnoreAsciiCase( aFilters[ i ].second.getToken( 0, ';', nIndex ) ) )
506cdf0e10cSrcweir                         bRet = true;
507cdf0e10cSrcweir                 }
508cdf0e10cSrcweir             }
509cdf0e10cSrcweir         }
510cdf0e10cSrcweir     }
511cdf0e10cSrcweir 
512cdf0e10cSrcweir     return bRet;
513cdf0e10cSrcweir }
514cdf0e10cSrcweir 
515cdf0e10cSrcweir // -------------------------------------------------------------------------
516cdf0e10cSrcweir 
createPlayer(const::rtl::OUString & rURL)517cdf0e10cSrcweir uno::Reference< media::XPlayer > MediaWindow::createPlayer( const ::rtl::OUString& rURL )
518cdf0e10cSrcweir {
519cdf0e10cSrcweir     sal_Bool bJavaBased = sal_False;
520cdf0e10cSrcweir     return priv::MediaWindowImpl::createPlayer( rURL, bJavaBased );
521cdf0e10cSrcweir }
522cdf0e10cSrcweir 
523cdf0e10cSrcweir // -------------------------------------------------------------------------
524cdf0e10cSrcweir 
grabFrame(const::rtl::OUString & rURL,bool bAllowToCreateReplacementGraphic,double fMediaTime)525cdf0e10cSrcweir uno::Reference< graphic::XGraphic > MediaWindow::grabFrame( const ::rtl::OUString& rURL,
526cdf0e10cSrcweir                                                             bool bAllowToCreateReplacementGraphic,
527cdf0e10cSrcweir                                                             double fMediaTime )
528cdf0e10cSrcweir {
529cdf0e10cSrcweir     uno::Reference< media::XPlayer >    xPlayer( createPlayer( rURL ) );
530cdf0e10cSrcweir     uno::Reference< graphic::XGraphic > xRet;
531cdf0e10cSrcweir     ::std::auto_ptr< Graphic >          apGraphic;
532cdf0e10cSrcweir 
533cdf0e10cSrcweir     if( xPlayer.is() )
534cdf0e10cSrcweir     {
535cdf0e10cSrcweir         uno::Reference< media::XFrameGrabber > xGrabber( xPlayer->createFrameGrabber() );
536cdf0e10cSrcweir 
537cdf0e10cSrcweir         if( xGrabber.is() )
538cdf0e10cSrcweir         {
539cdf0e10cSrcweir             if( AVMEDIA_FRAMEGRABBER_DEFAULTFRAME == fMediaTime )
540cdf0e10cSrcweir                 fMediaTime = AVMEDIA_FRAMEGRABBER_DEFAULTFRAME_MEDIATIME;
541cdf0e10cSrcweir 
542cdf0e10cSrcweir             if( fMediaTime >= xPlayer->getDuration() )
543cdf0e10cSrcweir                 fMediaTime = ( xPlayer->getDuration() * 0.5 );
544cdf0e10cSrcweir 
545cdf0e10cSrcweir             xRet = xGrabber->grabFrame( fMediaTime );
546cdf0e10cSrcweir         }
547cdf0e10cSrcweir 
548960b059cSmseidel         if( !xRet.is() && bAllowToCreateReplacementGraphic )
549cdf0e10cSrcweir         {
550cdf0e10cSrcweir             awt::Size aPrefSize( xPlayer->getPreferredPlayerWindowSize() );
551cdf0e10cSrcweir 
552cdf0e10cSrcweir             if( !aPrefSize.Width && !aPrefSize.Height )
553cdf0e10cSrcweir             {
554cdf0e10cSrcweir                 const BitmapEx aBmpEx( AVMEDIA_RESID( AVMEDIA_BMP_AUDIOLOGO ) );
555cdf0e10cSrcweir                 apGraphic.reset( new Graphic( aBmpEx ) );
556cdf0e10cSrcweir             }
557cdf0e10cSrcweir         }
558cdf0e10cSrcweir     }
559cdf0e10cSrcweir 
560cdf0e10cSrcweir     if( !xRet.is() && !apGraphic.get() && bAllowToCreateReplacementGraphic )
561cdf0e10cSrcweir     {
562cdf0e10cSrcweir         const BitmapEx aBmpEx( AVMEDIA_RESID( AVMEDIA_BMP_EMPTYLOGO ) );
563cdf0e10cSrcweir         apGraphic.reset( new Graphic( aBmpEx ) );
564cdf0e10cSrcweir     }
565cdf0e10cSrcweir 
566cdf0e10cSrcweir     if( apGraphic.get() )
567cdf0e10cSrcweir         xRet = apGraphic->GetXGraphic();
568cdf0e10cSrcweir 
569cdf0e10cSrcweir     return xRet;
570cdf0e10cSrcweir }
571cdf0e10cSrcweir 
572*e455bda5Smseidel } // namespace avmedia
573960b059cSmseidel 
574