blob: 01f60bc503342eb8f7100f62cb08bc3b045d89b9 [file] [log] [blame]
/**************************************************************
*
* 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
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sc.hxx"
// INCLUDE ---------------------------------------------------------------
#include <svx/svdmark.hxx>
#include <svx/svdview.hxx>
#include <svx/galbrws.hxx>
#include <svx/gallery.hxx>
#include <svx/hlnkitem.hxx>
#include <sfx2/bindings.hxx>
#include <sfx2/request.hxx>
#include <sfx2/viewfrm.hxx>
#include <sfx2/dispatch.hxx>
#include <svl/whiter.hxx>
#include <avmedia/mediaplayer.hxx>
#include "tabvwsh.hxx"
#include "viewdata.hxx"
#include "tabview.hxx"
#include "drwlayer.hxx"
#include "userdat.hxx"
#include "docsh.hxx"
#include <svx/galleryitem.hxx>
#include <com/sun/star/gallery/GalleryItemType.hpp>
// forwards -> imapwrap.cxx (wg. CLOOKs)
class SvxIMapDlg;
sal_uInt16 ScIMapChildWindowId();
SvxIMapDlg* ScGetIMapDlg();
const void* ScIMapDlgGetObj( SvxIMapDlg* pDlg );
const ImageMap& ScIMapDlgGetMap( SvxIMapDlg* pDlg );
//------------------------------------------------------------------
void ScTabViewShell::ExecChildWin(SfxRequest& rReq)
{
sal_uInt16 nSlot = rReq.GetSlot();
switch(nSlot)
{
case SID_GALLERY:
{
SfxViewFrame* pThisFrame = GetViewFrame();
pThisFrame->ToggleChildWindow( GalleryChildWindow::GetChildWindowId() );
pThisFrame->GetBindings().Invalidate( SID_GALLERY );
rReq.Ignore();
}
break;
case SID_AVMEDIA_PLAYER:
{
SfxViewFrame* pThisFrame = GetViewFrame();
pThisFrame->ToggleChildWindow( ::avmedia::MediaPlayer::GetChildWindowId() );
pThisFrame->GetBindings().Invalidate( SID_AVMEDIA_PLAYER );
rReq.Ignore();
}
break;
}
}
void ScTabViewShell::GetChildWinState( SfxItemSet& rSet )
{
if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_GALLERY ) )
{
sal_uInt16 nId = GalleryChildWindow::GetChildWindowId();
rSet.Put( SfxBoolItem( SID_GALLERY, GetViewFrame()->HasChildWindow( nId ) ) );
}
else if( SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_AVMEDIA_PLAYER ) )
{
sal_uInt16 nId = ::avmedia::MediaPlayer::GetChildWindowId();
rSet.Put( SfxBoolItem( SID_AVMEDIA_PLAYER, GetViewFrame()->HasChildWindow( nId ) ) );
}
}
//------------------------------------------------------------------
void ScTabViewShell::ExecGallery( SfxRequest& rReq )
{
const SfxItemSet* pArgs = rReq.GetArgs();
SFX_ITEMSET_ARG( pArgs, pGalleryItem, SvxGalleryItem, SID_GALLERY_FORMATS, sal_False );
if ( !pGalleryItem )
return;
sal_Int8 nType( pGalleryItem->GetType() );
if ( nType == com::sun::star::gallery::GalleryItemType::GRAPHIC )
{
MakeDrawLayer();
Graphic aGraphic( pGalleryItem->GetGraphic() );
Point aPos = GetInsertPos();
String aPath, aFilter;
if ( pGalleryItem->IsLink() ) // als Link einfuegen?
{
aPath = pGalleryItem->GetURL();
aFilter = pGalleryItem->GetFilterName();
}
PasteGraphic( aPos, aGraphic, aPath, aFilter );
}
else if ( nType == com::sun::star::gallery::GalleryItemType::MEDIA )
{
// #98115# for sounds (linked or not), insert a hyperlink button,
// like in Impress and Writer
const SfxStringItem aMediaURLItem( SID_INSERT_AVMEDIA, pGalleryItem->GetURL() );
GetViewFrame()->GetDispatcher()->Execute( SID_INSERT_AVMEDIA, SFX_CALLMODE_SYNCHRON, &aMediaURLItem, 0L );
}
}
void ScTabViewShell::GetGalleryState( SfxItemSet& /* rSet */ )
{
}
//------------------------------------------------------------------
ScInputHandler* ScTabViewShell::GetInputHandler() const
{
return pInputHandler;
}
//------------------------------------------------------------------
String __EXPORT ScTabViewShell::GetDescription() const
{
return String::CreateFromAscii(RTL_CONSTASCII_STRINGPARAM(" ** Test ** "));
}
void ScTabViewShell::ExecImageMap( SfxRequest& rReq )
{
sal_uInt16 nSlot = rReq.GetSlot();
switch(nSlot)
{
case SID_IMAP:
{
SfxViewFrame* pThisFrame = GetViewFrame();
sal_uInt16 nId = ScIMapChildWindowId();
pThisFrame->ToggleChildWindow( nId );
GetViewFrame()->GetBindings().Invalidate( SID_IMAP );
if ( pThisFrame->HasChildWindow( nId ) )
{
SvxIMapDlg* pDlg = ScGetIMapDlg();
if ( pDlg )
{
SdrView* pDrView = GetSdrView();
if ( pDrView )
{
const SdrMarkList& rMarkList = pDrView->GetMarkedObjectList();
if ( rMarkList.GetMarkCount() == 1 )
UpdateIMap( rMarkList.GetMark( 0 )->GetMarkedSdrObj() );
}
}
}
rReq.Ignore();
}
break;
case SID_IMAP_EXEC:
{
SdrView* pDrView = GetSdrView();
SdrMark* pMark = pDrView ? pDrView->GetMarkedObjectList().GetMark(0) : 0;
if ( pMark )
{
SdrObject* pSdrObj = pMark->GetMarkedSdrObj();
SvxIMapDlg* pDlg = ScGetIMapDlg();
if ( ScIMapDlgGetObj(pDlg) == (void*) pSdrObj )
{
const ImageMap& rImageMap = ScIMapDlgGetMap(pDlg);
ScIMapInfo* pIMapInfo = ScDrawLayer::GetIMapInfo( pSdrObj );
if ( !pIMapInfo )
pSdrObj->InsertUserData( new ScIMapInfo( rImageMap ) );
else
pIMapInfo->SetImageMap( rImageMap );
GetViewData()->GetDocShell()->SetDrawModified();
}
}
}
break;
}
}
void ScTabViewShell::GetImageMapState( SfxItemSet& rSet )
{
SfxWhichIter aIter(rSet);
sal_uInt16 nWhich = aIter.FirstWhich();
while ( nWhich )
{
switch ( nWhich )
{
case SID_IMAP:
{
// Disabled wird nicht mehr...
sal_Bool bThere = sal_False;
SfxViewFrame* pThisFrame = GetViewFrame();
sal_uInt16 nId = ScIMapChildWindowId();
if ( pThisFrame->KnowsChildWindow(nId) )
if ( pThisFrame->HasChildWindow(nId) )
bThere = sal_True;
ObjectSelectionType eType=GetCurObjectSelectionType();
sal_Bool bEnable=(eType==OST_OleObject) ||(eType==OST_Graphic);
if(!bThere && !bEnable)
{
rSet.DisableItem( nWhich );
}
else
{
rSet.Put( SfxBoolItem( nWhich, bThere ) );
}
}
break;
case SID_IMAP_EXEC:
{
sal_Bool bDisable = sal_True;
SdrView* pDrView = GetSdrView();
if ( pDrView )
{
const SdrMarkList& rMarkList = pDrView->GetMarkedObjectList();
if ( rMarkList.GetMarkCount() == 1 )
if ( ScIMapDlgGetObj(ScGetIMapDlg()) ==
(void*) rMarkList.GetMark(0)->GetMarkedSdrObj() )
bDisable = sal_False;
}
rSet.Put( SfxBoolItem( SID_IMAP_EXEC, bDisable ) );
}
break;
}
nWhich = aIter.NextWhich();
}
}