/************************************************************** * * 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_sw.hxx" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "viewopt.hxx" #include "swmodule.hxx" #include "wrtsh.hxx" #include "cmdid.h" #include "globals.hrc" #include "helpid.h" #include "popup.hrc" #include "shells.hrc" #include "drwbassh.hxx" #include "drformsh.hxx" #include #include #include #include #define SwDrawFormShell #include #include "swslots.hxx" #include using namespace ::com::sun::star; using ::rtl::OUString; SFX_IMPL_INTERFACE(SwDrawFormShell, SwDrawBaseShell, SW_RES(STR_SHELLNAME_DRAWFORM)) { SFX_POPUPMENU_REGISTRATION(SW_RES(MN_DRAWFORM_POPUPMENU)); SFX_OBJECTBAR_REGISTRATION(SFX_OBJECTBAR_OBJECT, SW_RES(RID_TEXT_TOOLBOX)); } TYPEINIT1(SwDrawFormShell, SwDrawBaseShell) void SwDrawFormShell::Execute(SfxRequest &rReq) { SwWrtShell &rSh = GetShell(); const SfxPoolItem* pItem = 0; const SfxItemSet *pArgs = rReq.GetArgs(); switch ( rReq.GetSlot() ) { case SID_HYPERLINK_SETLINK: { if(pArgs) pArgs->GetItemState(SID_HYPERLINK_SETLINK, sal_False, &pItem); if(pItem) { SdrView *pSdrView = rSh.GetDrawView(); const SvxHyperlinkItem& rHLinkItem = *(const SvxHyperlinkItem *)pItem; bool bConvertToText = rHLinkItem.GetInsertMode() == HLINK_DEFAULT || rHLinkItem.GetInsertMode() == HLINK_FIELD; const SdrMarkList& rMarkList = pSdrView->GetMarkedObjectList(); if (rMarkList.GetMark(0)) { SdrUnoObj* pUnoCtrl = PTR_CAST(SdrUnoObj, rMarkList.GetMark(0)->GetMarkedSdrObj()); if (pUnoCtrl && FmFormInventor == pUnoCtrl->GetObjInventor()) { if(bConvertToText) { //remove object -> results in destruction of this! SwView& rTempView = GetView(); rTempView.GetViewFrame()->GetDispatcher()->Execute(SID_DELETE, SFX_CALLMODE_SYNCHRON ); rTempView.StopShellTimer(); //issue a new command to insert the link rTempView.GetViewFrame()->GetDispatcher()->Execute( SID_HYPERLINK_SETLINK, SFX_CALLMODE_ASYNCHRON, &rHLinkItem, 0); } else { uno::Reference< awt::XControlModel > xControlModel = pUnoCtrl->GetUnoControlModel(); ASSERT( xControlModel.is(), "UNO-Control ohne Model" ); if( !xControlModel.is() ) return; uno::Reference< beans::XPropertySet > xPropSet(xControlModel, uno::UNO_QUERY); // Darf man eine URL an dem Objekt setzen? OUString sTargetURL( C2U( "TargetURL" )); uno::Reference< beans::XPropertySetInfo > xPropInfoSet = xPropSet->getPropertySetInfo(); if( xPropInfoSet->hasPropertyByName( sTargetURL )) { beans::Property aProp = xPropInfoSet->getPropertyByName( sTargetURL ); if( aProp.Name.getLength() ) { uno::Any aTmp; // Ja! ::rtl::OUString sLabel(C2U("Label")); if( xPropInfoSet->hasPropertyByName(sLabel) ) { aTmp <<= OUString(rHLinkItem.GetName()); xPropSet->setPropertyValue(sLabel, aTmp ); } SfxMedium* pMedium = GetView().GetDocShell()->GetMedium(); INetURLObject aAbs; if( pMedium ) aAbs = pMedium->GetURLObject(); aTmp <<= OUString(URIHelper::SmartRel2Abs(aAbs, rHLinkItem.GetURL())); xPropSet->setPropertyValue( sTargetURL, aTmp ); if( rHLinkItem.GetTargetFrame().Len() ) { aTmp <<= OUString(rHLinkItem.GetTargetFrame()); xPropSet->setPropertyValue( C2U("TargetFrame"), aTmp ); } form::FormButtonType eButtonType = form::FormButtonType_URL; aTmp.setValue( &eButtonType, ::getCppuType((const form::FormButtonType*)0)); xPropSet->setPropertyValue( C2U("ButtonType"), aTmp ); } } } } } } } break; default: DBG_ASSERT(sal_False, "wrong dispatcher"); return; } } void SwDrawFormShell::GetState(SfxItemSet& rSet) { SwWrtShell &rSh = GetShell(); SfxWhichIter aIter( rSet ); sal_uInt16 nWhich = aIter.FirstWhich(); while( nWhich ) { switch( nWhich ) { case SID_HYPERLINK_GETLINK: { SdrView* pSdrView = rSh.GetDrawViewWithValidMarkList(); const SdrMarkList& rMarkList = pSdrView->GetMarkedObjectList(); SvxHyperlinkItem aHLinkItem; if (rMarkList.GetMark(0)) { SdrUnoObj* pUnoCtrl = PTR_CAST(SdrUnoObj, rMarkList.GetMark(0)->GetMarkedSdrObj()); if (pUnoCtrl && FmFormInventor == pUnoCtrl->GetObjInventor()) { uno::Reference< awt::XControlModel > xControlModel = pUnoCtrl->GetUnoControlModel(); ASSERT( xControlModel.is(), "UNO-Control ohne Model" ); if( !xControlModel.is() ) return; uno::Reference< beans::XPropertySet > xPropSet(xControlModel, uno::UNO_QUERY); uno::Any aTmp; uno::Reference< beans::XPropertySetInfo > xInfo = xPropSet->getPropertySetInfo(); if(xInfo->hasPropertyByName(C2U("ButtonType" ))) { form::FormButtonType eButtonType = form::FormButtonType_URL; aTmp = xPropSet->getPropertyValue( C2U("ButtonType") ); if( aTmp >>= eButtonType ) { // Label if(xInfo->hasPropertyByName( C2U("Label") )) { aTmp = xPropSet->getPropertyValue( C2U("Label") ); OUString sTmp; if( (aTmp >>= sTmp) && sTmp.getLength()) { aHLinkItem.SetName(sTmp); } } // URL if(xInfo->hasPropertyByName( C2U("TargetURL" ))) { aTmp = xPropSet->getPropertyValue( C2U("TargetURL") ); OUString sTmp; if( (aTmp >>= sTmp) && sTmp.getLength()) { aHLinkItem.SetURL(sTmp); } } // Target if(xInfo->hasPropertyByName( C2U("TargetFrame") )) { aTmp = xPropSet->getPropertyValue( C2U("TargetFrame") ); OUString sTmp; if( (aTmp >>= sTmp) && sTmp.getLength()) { aHLinkItem.SetTargetFrame(sTmp); } } aHLinkItem.SetInsertMode(HLINK_BUTTON); } } } } sal_uInt16 nHtmlMode = ::GetHtmlMode(GetView().GetDocShell()); aHLinkItem.SetInsertMode((SvxLinkInsertMode)(aHLinkItem.GetInsertMode() | ((nHtmlMode & HTMLMODE_ON) != 0 ? HLINK_HTMLMODE : 0))); rSet.Put(aHLinkItem); } break; } nWhich = aIter.NextWhich(); } } SwDrawFormShell::SwDrawFormShell(SwView &_rView) : SwDrawBaseShell(_rView) { SetHelpId(SW_DRAWFORMSHELL); GetShell().NoEdit(sal_True); SetName(String::CreateFromAscii("DrawForm")); SfxShell::SetContextName(sfx2::sidebar::EnumContext::GetContextName(sfx2::sidebar::EnumContext::Context_Form)); } SwDrawFormShell::~SwDrawFormShell() { }