/* -*- 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 #include #include #include #include #include #include #include #include #include #include #include "imapwrap.hxx" #include "tabvwsh.hxx" #include "viewdata.hxx" #include "tabview.hxx" #include "drwlayer.hxx" #include "userdat.hxx" #include "docsh.hxx" #include #include class SvxIMapDlg; void ScTabViewShell::ExecChildWin(SfxRequest& rReq) { sal_uInt16 nSlot = rReq.GetSlot(); switch(nSlot) { case SID_GALLERY: { // First make sure that the sidebar is visible GetViewFrame()->ShowChildWindow(SID_SIDEBAR); ::sfx2::sidebar::Sidebar::ShowPanel( "GalleryPanel", GetViewFrame()->GetFrame().GetFrameInterface()); } break; } } void ScTabViewShell::ExecGallery( SfxRequest& rReq ) { const SfxItemSet* pArgs = rReq.GetArgs(); SFX_ITEMSET_ARG( pArgs, pGalleryItem, SvxGalleryItem, SID_GALLERY_FORMATS, 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(); OUString aPath, aFilter; PasteGraphic( aPos, aGraphic, aPath, aFilter ); } else if ( nType == com::sun::star::gallery::GalleryItemType::MEDIA ) { // 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, SfxCallMode::SYNCHRON, &aMediaURLItem, 0L ); } } 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 = GetIMapDlg(); 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 = GetIMapDlg(); if ( ScIMapDlgGetObj(pDlg) == (void*) pSdrObj ) { const ImageMap& rImageMap = ScIMapDlgGetMap(pDlg); ScIMapInfo* pIMapInfo = ScDrawLayer::GetIMapInfo( pSdrObj ); if ( !pIMapInfo ) pSdrObj->AppendUserData( 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... bool bThere = false; SfxViewFrame* pThisFrame = GetViewFrame(); sal_uInt16 nId = ScIMapChildWindowId(); if ( pThisFrame->KnowsChildWindow(nId) ) if ( pThisFrame->HasChildWindow(nId) ) bThere = true; ObjectSelectionType eType=GetCurObjectSelectionType(); 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: { bool bDisable = true; SdrView* pDrView = GetSdrView(); if ( pDrView ) { const SdrMarkList& rMarkList = pDrView->GetMarkedObjectList(); if ( rMarkList.GetMarkCount() == 1 ) if ( ScIMapDlgGetObj(GetIMapDlg()) == (void*) rMarkList.GetMark(0)->GetMarkedSdrObj() ) bDisable = false; } rSet.Put( SfxBoolItem( SID_IMAP_EXEC, bDisable ) ); } break; } nWhich = aIter.NextWhich(); } } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */