1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #include <avmedia/mediaplayer.hxx> 25 #include <avmedia/mediawindow.hxx> 26 #include <avmedia/mediaitem.hxx> 27 #include "mediamisc.hxx" 28 #include "mediacontrol.hrc" 29 #include "helpids.hrc" 30 31 #include <svl/stritem.hxx> 32 #include <sfx2/app.hxx> 33 #include <sfx2/sfxsids.hrc> 34 #include <sfx2/bindings.hxx> 35 #include <sfx2/dispatch.hxx> 36 37 namespace avmedia 38 { 39 40 // --------------- 41 // - MediaPlayer - 42 // --------------- 43 44 MediaPlayer::MediaPlayer( Window* _pParent, sal_uInt16 nId, SfxBindings* _pBindings, SfxChildWinInfo* pInfo ) : 45 SfxChildWindow( _pParent, nId ) 46 { 47 pWindow = new MediaFloater( _pBindings, this, _pParent ); 48 eChildAlignment = SFX_ALIGN_NOALIGNMENT; 49 static_cast< MediaFloater* >( pWindow )->Initialize( pInfo ); 50 }; 51 52 // ----------------------------------------------------------------------------- 53 54 MediaPlayer::~MediaPlayer() 55 { 56 } 57 58 // ----------------------------------------------------------------------------- 59 60 SFX_IMPL_DOCKINGWINDOW( MediaPlayer, SID_AVMEDIA_PLAYER ) 61 62 // ---------------- 63 // - MediaFloater - 64 // ---------------- 65 66 MediaFloater::MediaFloater( SfxBindings* _pBindings, SfxChildWindow* pCW, Window* pParent ) : 67 SfxDockingWindow( _pBindings, pCW, pParent, WB_CLOSEABLE | WB_MOVEABLE | WB_SIZEABLE | WB_DOCKABLE ), 68 mpMediaWindow( new MediaWindow( this, true ) ) 69 { 70 const Size aSize( 378, 256 ); 71 72 SetPosSizePixel( Point( 0, 0 ), aSize ); 73 SetMinOutputSizePixel( aSize ); 74 SetText( String( AVMEDIA_RESID( AVMEDIA_STR_MEDIAPLAYER ) ) ); 75 implInit(); 76 mpMediaWindow->show(); 77 } 78 79 // ----------------------------------------------------------------------------- 80 81 MediaFloater::~MediaFloater() 82 { 83 delete mpMediaWindow; 84 mpMediaWindow = NULL; 85 } 86 87 // ----------------------------------------------------------------------------- 88 89 void MediaFloater::implInit() 90 { 91 } 92 93 // ------------------------------------------------------------------------- 94 95 void MediaFloater::Resize() 96 { 97 SfxDockingWindow::Resize(); 98 99 if( mpMediaWindow ) 100 mpMediaWindow->setPosSize( Rectangle( Point(), GetOutputSizePixel() ) ); 101 } 102 103 // ----------------------------------------------------------------------------- 104 105 void MediaFloater::ToggleFloatingMode() 106 { 107 ::avmedia::MediaItem aRestoreItem; 108 109 mpMediaWindow->updateMediaItem( aRestoreItem ); 110 delete mpMediaWindow; 111 mpMediaWindow = NULL; 112 113 SfxDockingWindow::ToggleFloatingMode(); 114 115 mpMediaWindow = new MediaWindow( this, true ); 116 117 mpMediaWindow->setPosSize( Rectangle( Point(), GetOutputSizePixel() ) ); 118 mpMediaWindow->executeMediaItem( aRestoreItem ); 119 120 Window* pWindow = mpMediaWindow->getWindow(); 121 122 if( pWindow ) 123 pWindow->SetHelpId( HID_AVMEDIA_PLAYERWINDOW ); 124 125 mpMediaWindow->show(); 126 } 127 128 // ----------------------------------------------------------------------------- 129 130 void MediaFloater::setURL( const ::rtl::OUString& rURL, bool bPlayImmediately ) 131 { 132 if( mpMediaWindow ) 133 { 134 mpMediaWindow->setURL( rURL ); 135 136 if( mpMediaWindow->isValid() && bPlayImmediately ) 137 mpMediaWindow->start(); 138 } 139 } 140 141 // ----------------------------------------------------------------------------- 142 143 const ::rtl::OUString& MediaFloater::getURL() const 144 { 145 static const ::rtl::OUString aEmptyStr; 146 return( mpMediaWindow ? mpMediaWindow->getURL() : aEmptyStr ); 147 } 148 149 // ----------------------------------------------------------------------------- 150 151 void MediaFloater::dispatchCurrentURL() 152 { 153 SfxDispatcher* pDispatcher = GetBindings().GetDispatcher(); 154 155 if( pDispatcher ) 156 { 157 const SfxStringItem aMediaURLItem( SID_INSERT_AVMEDIA, getURL() ); 158 pDispatcher->Execute( SID_INSERT_AVMEDIA, SFX_CALLMODE_RECORD, &aMediaURLItem, 0L ); 159 } 160 } 161 162 } 163