1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_cui.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir #include <linkdlg.hxx> 32*cdf0e10cSrcweir #include <vcl/svapp.hxx> 33*cdf0e10cSrcweir #include "helpid.hrc" 34*cdf0e10cSrcweir 35*cdf0e10cSrcweir #include <tools/urlobj.hxx> 36*cdf0e10cSrcweir #include <svtools/svmedit.hxx> 37*cdf0e10cSrcweir #include <svtools/filedlg.hxx> 38*cdf0e10cSrcweir #include <vcl/dialog.hxx> 39*cdf0e10cSrcweir #include <vcl/button.hxx> 40*cdf0e10cSrcweir #include <vcl/fixed.hxx> 41*cdf0e10cSrcweir #include <vcl/group.hxx> 42*cdf0e10cSrcweir #include <vcl/lstbox.hxx> 43*cdf0e10cSrcweir #include <vcl/msgbox.hxx> 44*cdf0e10cSrcweir #include <vcl/timer.hxx> 45*cdf0e10cSrcweir #include <svtools/svtabbx.hxx> 46*cdf0e10cSrcweir 47*cdf0e10cSrcweir #include <svuidlg.hrc> 48*cdf0e10cSrcweir #include <sfx2/linkmgr.hxx> 49*cdf0e10cSrcweir #include <sfx2/linksrc.hxx> 50*cdf0e10cSrcweir #include <svtools/soerr.hxx> 51*cdf0e10cSrcweir #include <sfx2/lnkbase.hxx> 52*cdf0e10cSrcweir #include <sfx2/objsh.hxx> 53*cdf0e10cSrcweir 54*cdf0e10cSrcweir #include <dialmgr.hxx> 55*cdf0e10cSrcweir 56*cdf0e10cSrcweir #define _SVSTDARR_USHORTS 57*cdf0e10cSrcweir #include <svl/svstdarr.hxx> 58*cdf0e10cSrcweir 59*cdf0e10cSrcweir #define MAX_FILENAME 18 60*cdf0e10cSrcweir #define MAX_LINKNAME 18 61*cdf0e10cSrcweir #define MAX_TYPENAME 15 62*cdf0e10cSrcweir #define MAX_UPDATENAME 10 63*cdf0e10cSrcweir 64*cdf0e10cSrcweir #define FILEOBJECT ( OBJECT_CLIENT_FILE & ~OBJECT_CLIENT_SO ) 65*cdf0e10cSrcweir 66*cdf0e10cSrcweir using namespace sfx2; 67*cdf0e10cSrcweir 68*cdf0e10cSrcweir SV_DECL_IMPL_REF_LIST(SvBaseLink,SvBaseLink*) 69*cdf0e10cSrcweir 70*cdf0e10cSrcweir // Achtung im Code wird dieses Array direkt (0, 1, ...) indiziert 71*cdf0e10cSrcweir static long nTabs[] = 72*cdf0e10cSrcweir { 4, // Number of Tabs 73*cdf0e10cSrcweir 0, 77, 144, 209 74*cdf0e10cSrcweir }; 75*cdf0e10cSrcweir 76*cdf0e10cSrcweir 77*cdf0e10cSrcweir SvBaseLinksDlg::SvBaseLinksDlg( Window * pParent, LinkManager* pMgr, sal_Bool bHtml ) 78*cdf0e10cSrcweir : ModalDialog( pParent, CUI_RES( MD_UPDATE_BASELINKS ) ), 79*cdf0e10cSrcweir aFtFiles( this, CUI_RES( FT_FILES ) ), 80*cdf0e10cSrcweir aFtLinks( this, CUI_RES( FT_LINKS ) ), 81*cdf0e10cSrcweir aFtType( this, CUI_RES( FT_TYPE ) ), 82*cdf0e10cSrcweir aFtStatus( this, CUI_RES( FT_STATUS ) ), 83*cdf0e10cSrcweir aTbLinks( this, CUI_RES(TB_LINKS ) ), 84*cdf0e10cSrcweir aFtFiles2( this, CUI_RES( FT_FILES2 ) ), 85*cdf0e10cSrcweir aFtFullFileName( this, CUI_RES( FT_FULL_FILE_NAME ) ), 86*cdf0e10cSrcweir aFtSource2( this, CUI_RES( FT_SOURCE2 ) ), 87*cdf0e10cSrcweir aFtFullSourceName( this, CUI_RES( FT_FULL_SOURCE_NAME ) ), 88*cdf0e10cSrcweir aFtType2( this, CUI_RES( FT_TYPE2 ) ), 89*cdf0e10cSrcweir aFtFullTypeName( this, CUI_RES( FT_FULL_TYPE_NAME ) ), 90*cdf0e10cSrcweir aFtUpdate( this, CUI_RES( FT_UPDATE ) ), 91*cdf0e10cSrcweir aRbAutomatic( this, CUI_RES( RB_AUTOMATIC ) ), 92*cdf0e10cSrcweir aRbManual( this, CUI_RES( RB_MANUAL ) ), 93*cdf0e10cSrcweir aCancelButton1( this, CUI_RES( 1 ) ), 94*cdf0e10cSrcweir aHelpButton1( this, CUI_RES( 1 ) ), 95*cdf0e10cSrcweir aPbUpdateNow( this, CUI_RES( PB_UPDATE_NOW ) ), 96*cdf0e10cSrcweir aPbOpenSource( this, CUI_RES( PB_OPEN_SOURCE ) ), 97*cdf0e10cSrcweir aPbChangeSource( this, CUI_RES( PB_CHANGE_SOURCE ) ), 98*cdf0e10cSrcweir aPbBreakLink( this, CUI_RES( PB_BREAK_LINK ) ), 99*cdf0e10cSrcweir aStrAutolink( CUI_RES( STR_AUTOLINK ) ), 100*cdf0e10cSrcweir aStrManuallink( CUI_RES( STR_MANUALLINK ) ), 101*cdf0e10cSrcweir aStrBrokenlink( CUI_RES( STR_BROKENLINK ) ), 102*cdf0e10cSrcweir aStrGraphiclink( CUI_RES( STR_GRAPHICLINK ) ), 103*cdf0e10cSrcweir aStrButtonclose( CUI_RES( STR_BUTTONCLOSE ) ), 104*cdf0e10cSrcweir aStrCloselinkmsg( CUI_RES( STR_CLOSELINKMSG ) ), 105*cdf0e10cSrcweir aStrCloselinkmsgMulti( CUI_RES( STR_CLOSELINKMSG_MULTI ) ), 106*cdf0e10cSrcweir aStrWaitinglink( CUI_RES( STR_WAITINGLINK ) ), 107*cdf0e10cSrcweir pLinkMgr( NULL ), 108*cdf0e10cSrcweir bHtmlMode(bHtml) 109*cdf0e10cSrcweir { 110*cdf0e10cSrcweir FreeResource(); 111*cdf0e10cSrcweir 112*cdf0e10cSrcweir aTbLinks.SetHelpId(HID_LINKDLG_TABLB); 113*cdf0e10cSrcweir aTbLinks.SetSelectionMode( MULTIPLE_SELECTION ); 114*cdf0e10cSrcweir aTbLinks.SetTabs( &nTabs[0], MAP_APPFONT ); 115*cdf0e10cSrcweir aTbLinks.Resize(); // OS: Hack fuer richtige Selektion 116*cdf0e10cSrcweir 117*cdf0e10cSrcweir //JP 24.02.99: UpdateTimer fuer DDE-/Grf-Links, auf die gewarted wird 118*cdf0e10cSrcweir aUpdateTimer.SetTimeoutHdl( LINK( this, SvBaseLinksDlg, UpdateWaitingHdl ) ); 119*cdf0e10cSrcweir aUpdateTimer.SetTimeout( 1000 ); 120*cdf0e10cSrcweir //IAccessibility2 Implementation 2009----- 121*cdf0e10cSrcweir // Set the ZOrder, and accessible name to the dialog's title 122*cdf0e10cSrcweir aTbLinks.SetZOrder(0, WINDOW_ZORDER_FIRST); 123*cdf0e10cSrcweir aTbLinks.SetAccessibleName(this->GetText()); 124*cdf0e10cSrcweir aTbLinks.SetAccessibleRelationLabeledBy(&aFtFiles); 125*cdf0e10cSrcweir //-----IAccessibility2 Implementation 2009 126*cdf0e10cSrcweir 127*cdf0e10cSrcweir OpenSource().Hide(); 128*cdf0e10cSrcweir 129*cdf0e10cSrcweir Links().SetSelectHdl( LINK( this, SvBaseLinksDlg, LinksSelectHdl ) ); 130*cdf0e10cSrcweir Links().SetDoubleClickHdl( LINK( this, SvBaseLinksDlg, LinksDoubleClickHdl ) ); 131*cdf0e10cSrcweir Automatic().SetClickHdl( LINK( this, SvBaseLinksDlg, AutomaticClickHdl ) ); 132*cdf0e10cSrcweir Manual().SetClickHdl( LINK( this, SvBaseLinksDlg, ManualClickHdl ) ); 133*cdf0e10cSrcweir UpdateNow().SetClickHdl( LINK( this, SvBaseLinksDlg, UpdateNowClickHdl ) ); 134*cdf0e10cSrcweir // OpenSource().SetClickHdl( LINK( this, SvBaseLinksDlg, OpenSourceClickHdl ) ); 135*cdf0e10cSrcweir ChangeSource().SetClickHdl( LINK( this, SvBaseLinksDlg, ChangeSourceClickHdl ) ); 136*cdf0e10cSrcweir if(!bHtmlMode) 137*cdf0e10cSrcweir BreakLink().SetClickHdl( LINK( this, SvBaseLinksDlg, BreakLinkClickHdl ) ); 138*cdf0e10cSrcweir else 139*cdf0e10cSrcweir BreakLink().Hide(); 140*cdf0e10cSrcweir 141*cdf0e10cSrcweir SetManager( pMgr ); 142*cdf0e10cSrcweir } 143*cdf0e10cSrcweir 144*cdf0e10cSrcweir SvBaseLinksDlg::~SvBaseLinksDlg() 145*cdf0e10cSrcweir { 146*cdf0e10cSrcweir } 147*cdf0e10cSrcweir 148*cdf0e10cSrcweir /************************************************************************* 149*cdf0e10cSrcweir |* SvBaseLinksDlg::Handler() 150*cdf0e10cSrcweir |* 151*cdf0e10cSrcweir |* Beschreibung 152*cdf0e10cSrcweir |* Ersterstellung MM 14.06.94 153*cdf0e10cSrcweir |* Letzte Aenderung JP 30.05.95 154*cdf0e10cSrcweir *************************************************************************/ 155*cdf0e10cSrcweir IMPL_LINK( SvBaseLinksDlg, LinksSelectHdl, SvTabListBox *, pSvTabListBox ) 156*cdf0e10cSrcweir { 157*cdf0e10cSrcweir sal_uInt16 nSelectionCount = pSvTabListBox ? 158*cdf0e10cSrcweir (sal_uInt16)pSvTabListBox->GetSelectionCount() : 0; 159*cdf0e10cSrcweir if(nSelectionCount > 1) 160*cdf0e10cSrcweir { 161*cdf0e10cSrcweir //bei Mehrfachselektion ggf. alte Eintraege deselektieren 162*cdf0e10cSrcweir SvLBoxEntry* pEntry = 0; 163*cdf0e10cSrcweir SvBaseLink* pLink = 0; 164*cdf0e10cSrcweir pEntry = pSvTabListBox->GetHdlEntry(); 165*cdf0e10cSrcweir pLink = (SvBaseLink*)pEntry->GetUserData(); 166*cdf0e10cSrcweir sal_uInt16 nObjectType = pLink->GetObjType(); 167*cdf0e10cSrcweir if((OBJECT_CLIENT_FILE & nObjectType) != OBJECT_CLIENT_FILE) 168*cdf0e10cSrcweir { 169*cdf0e10cSrcweir pSvTabListBox->SelectAll(sal_False); 170*cdf0e10cSrcweir pSvTabListBox->Select(pEntry); 171*cdf0e10cSrcweir nSelectionCount = 1; 172*cdf0e10cSrcweir } 173*cdf0e10cSrcweir else 174*cdf0e10cSrcweir { 175*cdf0e10cSrcweir for( sal_uInt16 i = 0; i < nSelectionCount; i++) 176*cdf0e10cSrcweir { 177*cdf0e10cSrcweir pEntry = i == 0 ? pSvTabListBox->FirstSelected() : 178*cdf0e10cSrcweir pSvTabListBox->NextSelected(pEntry); 179*cdf0e10cSrcweir DBG_ASSERT(pEntry, "Wo ist der Entry?"); 180*cdf0e10cSrcweir pLink = (SvBaseLink*)pEntry->GetUserData(); 181*cdf0e10cSrcweir DBG_ASSERT(pLink, "Wo ist der Link?"); 182*cdf0e10cSrcweir if( (OBJECT_CLIENT_FILE & pLink->GetObjType()) != OBJECT_CLIENT_FILE ) 183*cdf0e10cSrcweir pSvTabListBox->Select( pEntry, sal_False ); 184*cdf0e10cSrcweir 185*cdf0e10cSrcweir } 186*cdf0e10cSrcweir } 187*cdf0e10cSrcweir 188*cdf0e10cSrcweir UpdateNow().Enable(); 189*cdf0e10cSrcweir 190*cdf0e10cSrcweir Automatic().Disable(); 191*cdf0e10cSrcweir Manual().Check(); 192*cdf0e10cSrcweir Manual().Disable(); 193*cdf0e10cSrcweir } 194*cdf0e10cSrcweir else 195*cdf0e10cSrcweir { 196*cdf0e10cSrcweir sal_uInt16 nPos; 197*cdf0e10cSrcweir SvBaseLink* pLink = GetSelEntry( &nPos ); 198*cdf0e10cSrcweir if( !pLink ) 199*cdf0e10cSrcweir return 0; 200*cdf0e10cSrcweir 201*cdf0e10cSrcweir UpdateNow().Enable(); 202*cdf0e10cSrcweir 203*cdf0e10cSrcweir String sType, sLink; 204*cdf0e10cSrcweir String *pLinkNm = &sLink, *pFilter = 0; 205*cdf0e10cSrcweir 206*cdf0e10cSrcweir if( FILEOBJECT & pLink->GetObjType() ) 207*cdf0e10cSrcweir { 208*cdf0e10cSrcweir Automatic().Disable(); 209*cdf0e10cSrcweir Manual().Check(); 210*cdf0e10cSrcweir Manual().Disable(); 211*cdf0e10cSrcweir if( OBJECT_CLIENT_GRF == pLink->GetObjType() ) 212*cdf0e10cSrcweir pLinkNm = 0, pFilter = &sLink; 213*cdf0e10cSrcweir } 214*cdf0e10cSrcweir else 215*cdf0e10cSrcweir { 216*cdf0e10cSrcweir Automatic().Enable(); 217*cdf0e10cSrcweir Manual().Enable(); 218*cdf0e10cSrcweir 219*cdf0e10cSrcweir if( LINKUPDATE_ALWAYS == pLink->GetUpdateMode() ) 220*cdf0e10cSrcweir Automatic().Check(); 221*cdf0e10cSrcweir else 222*cdf0e10cSrcweir Manual().Check(); 223*cdf0e10cSrcweir } 224*cdf0e10cSrcweir 225*cdf0e10cSrcweir String aFileName; 226*cdf0e10cSrcweir pLinkMgr->GetDisplayNames( pLink, &sType, &aFileName, pLinkNm, pFilter ); 227*cdf0e10cSrcweir aFileName = INetURLObject::decode(aFileName, INET_HEX_ESCAPE, INetURLObject::DECODE_UNAMBIGUOUS); 228*cdf0e10cSrcweir FileName().SetText( aFileName ); 229*cdf0e10cSrcweir SourceName().SetText( sLink ); 230*cdf0e10cSrcweir TypeName().SetText( sType ); 231*cdf0e10cSrcweir } 232*cdf0e10cSrcweir return 0; 233*cdf0e10cSrcweir } 234*cdf0e10cSrcweir 235*cdf0e10cSrcweir IMPL_LINK_INLINE_START( SvBaseLinksDlg, LinksDoubleClickHdl, SvTabListBox *, pSvTabListBox ) 236*cdf0e10cSrcweir { 237*cdf0e10cSrcweir (void)pSvTabListBox; 238*cdf0e10cSrcweir 239*cdf0e10cSrcweir ChangeSourceClickHdl( 0 ); 240*cdf0e10cSrcweir return 0; 241*cdf0e10cSrcweir } 242*cdf0e10cSrcweir IMPL_LINK_INLINE_END( SvBaseLinksDlg, LinksDoubleClickHdl, SvTabListBox *, pSvTabListBox ) 243*cdf0e10cSrcweir 244*cdf0e10cSrcweir IMPL_LINK_INLINE_START( SvBaseLinksDlg, AutomaticClickHdl, RadioButton *, pRadioButton ) 245*cdf0e10cSrcweir { 246*cdf0e10cSrcweir (void)pRadioButton; 247*cdf0e10cSrcweir 248*cdf0e10cSrcweir sal_uInt16 nPos; 249*cdf0e10cSrcweir SvBaseLink* pLink = GetSelEntry( &nPos ); 250*cdf0e10cSrcweir if( pLink && !( FILEOBJECT & pLink->GetObjType() ) && 251*cdf0e10cSrcweir LINKUPDATE_ALWAYS != pLink->GetUpdateMode() ) 252*cdf0e10cSrcweir SetType( *pLink, nPos, LINKUPDATE_ALWAYS ); 253*cdf0e10cSrcweir return 0; 254*cdf0e10cSrcweir } 255*cdf0e10cSrcweir IMPL_LINK_INLINE_END( SvBaseLinksDlg, AutomaticClickHdl, RadioButton *, pRadioButton ) 256*cdf0e10cSrcweir 257*cdf0e10cSrcweir IMPL_LINK_INLINE_START( SvBaseLinksDlg, ManualClickHdl, RadioButton *, pRadioButton ) 258*cdf0e10cSrcweir { 259*cdf0e10cSrcweir (void)pRadioButton; 260*cdf0e10cSrcweir 261*cdf0e10cSrcweir sal_uInt16 nPos; 262*cdf0e10cSrcweir SvBaseLink* pLink = GetSelEntry( &nPos ); 263*cdf0e10cSrcweir if( pLink && !( FILEOBJECT & pLink->GetObjType() ) && 264*cdf0e10cSrcweir LINKUPDATE_ONCALL != pLink->GetUpdateMode()) 265*cdf0e10cSrcweir SetType( *pLink, nPos, LINKUPDATE_ONCALL ); 266*cdf0e10cSrcweir return 0; 267*cdf0e10cSrcweir } 268*cdf0e10cSrcweir IMPL_LINK_INLINE_END( SvBaseLinksDlg, ManualClickHdl, RadioButton *, pRadioButton ) 269*cdf0e10cSrcweir 270*cdf0e10cSrcweir IMPL_LINK( SvBaseLinksDlg, UpdateNowClickHdl, PushButton *, EMPTYARG ) 271*cdf0e10cSrcweir { 272*cdf0e10cSrcweir SvTabListBox& rListBox = Links(); 273*cdf0e10cSrcweir sal_uInt16 nSelCnt = (sal_uInt16)rListBox.GetSelectionCount(); 274*cdf0e10cSrcweir if( 255 < nSelCnt ) 275*cdf0e10cSrcweir nSelCnt = 255; 276*cdf0e10cSrcweir 277*cdf0e10cSrcweir std::vector< SvBaseLink* > aLnkArr; 278*cdf0e10cSrcweir std::vector< sal_uInt16 > aPosArr; 279*cdf0e10cSrcweir 280*cdf0e10cSrcweir SvLBoxEntry* pE = rListBox.FirstSelected(); 281*cdf0e10cSrcweir while( pE ) 282*cdf0e10cSrcweir { 283*cdf0e10cSrcweir sal_uInt16 nFndPos = (sal_uInt16)rListBox.GetModel()->GetAbsPos( pE ); 284*cdf0e10cSrcweir if( LISTBOX_ENTRY_NOTFOUND != nFndPos ) 285*cdf0e10cSrcweir { 286*cdf0e10cSrcweir aLnkArr.push_back( static_cast< SvBaseLink* >( pE->GetUserData() ) ); 287*cdf0e10cSrcweir aPosArr.push_back( nFndPos ); 288*cdf0e10cSrcweir } 289*cdf0e10cSrcweir pE = rListBox.NextSelected( pE ); 290*cdf0e10cSrcweir } 291*cdf0e10cSrcweir 292*cdf0e10cSrcweir if( !aLnkArr.empty() ) 293*cdf0e10cSrcweir { 294*cdf0e10cSrcweir for( sal_uInt16 n = 0; n < aLnkArr.size(); ++n ) 295*cdf0e10cSrcweir { 296*cdf0e10cSrcweir SvBaseLinkRef xLink = aLnkArr[ n ]; 297*cdf0e10cSrcweir 298*cdf0e10cSrcweir // suche erstmal im Array nach dem Eintrag 299*cdf0e10cSrcweir for( sal_uInt16 i = 0; i < pLinkMgr->GetLinks().Count(); ++i ) 300*cdf0e10cSrcweir if( &xLink == *pLinkMgr->GetLinks()[ i ] ) 301*cdf0e10cSrcweir { 302*cdf0e10cSrcweir xLink->SetUseCache( sal_False ); 303*cdf0e10cSrcweir SetType( *xLink, aPosArr[ n ], xLink->GetUpdateMode() ); 304*cdf0e10cSrcweir xLink->SetUseCache( sal_True ); 305*cdf0e10cSrcweir break; 306*cdf0e10cSrcweir } 307*cdf0e10cSrcweir } 308*cdf0e10cSrcweir 309*cdf0e10cSrcweir // falls jemand der Meinung ist, seine Links auszutauschen (SD) 310*cdf0e10cSrcweir LinkManager* pNewMgr = pLinkMgr; 311*cdf0e10cSrcweir pLinkMgr = 0; 312*cdf0e10cSrcweir SetManager( pNewMgr ); 313*cdf0e10cSrcweir 314*cdf0e10cSrcweir 315*cdf0e10cSrcweir if( 0 == (pE = rListBox.GetEntry( aPosArr[ 0 ] )) || 316*cdf0e10cSrcweir pE->GetUserData() != aLnkArr[ 0 ] ) 317*cdf0e10cSrcweir { 318*cdf0e10cSrcweir // suche mal den Link 319*cdf0e10cSrcweir pE = rListBox.First(); 320*cdf0e10cSrcweir while( pE ) 321*cdf0e10cSrcweir { 322*cdf0e10cSrcweir if( pE->GetUserData() == aLnkArr[ 0 ] ) 323*cdf0e10cSrcweir break; 324*cdf0e10cSrcweir pE = rListBox.Next( pE ); 325*cdf0e10cSrcweir } 326*cdf0e10cSrcweir 327*cdf0e10cSrcweir if( !pE ) 328*cdf0e10cSrcweir pE = rListBox.FirstSelected(); 329*cdf0e10cSrcweir } 330*cdf0e10cSrcweir 331*cdf0e10cSrcweir if( pE ) 332*cdf0e10cSrcweir { 333*cdf0e10cSrcweir SvLBoxEntry* pSelEntry = rListBox.FirstSelected(); 334*cdf0e10cSrcweir if( pE != pSelEntry ) 335*cdf0e10cSrcweir rListBox.Select( pSelEntry, sal_False ); 336*cdf0e10cSrcweir rListBox.Select( pE ); 337*cdf0e10cSrcweir rListBox.MakeVisible( pE ); 338*cdf0e10cSrcweir } 339*cdf0e10cSrcweir } 340*cdf0e10cSrcweir return 0; 341*cdf0e10cSrcweir } 342*cdf0e10cSrcweir 343*cdf0e10cSrcweir /* 344*cdf0e10cSrcweir IMPL_LINK_INLINE_START( SvBaseLinksDlg, OpenSourceClickHdl, PushButton *, pPushButton ) 345*cdf0e10cSrcweir { 346*cdf0e10cSrcweir DBG_ASSERT( !this, "Open noch nicht impl." ); 347*cdf0e10cSrcweir return 0; 348*cdf0e10cSrcweir } 349*cdf0e10cSrcweir IMPL_LINK_INLINE_END( SvBaseLinksDlg, OpenSourceClickHdl, PushButton *, pPushButton ) 350*cdf0e10cSrcweir */ 351*cdf0e10cSrcweir 352*cdf0e10cSrcweir IMPL_LINK( SvBaseLinksDlg, ChangeSourceClickHdl, PushButton *, pPushButton ) 353*cdf0e10cSrcweir { 354*cdf0e10cSrcweir (void)pPushButton; 355*cdf0e10cSrcweir 356*cdf0e10cSrcweir sal_uInt16 nSelectionCount = (sal_uInt16)Links().GetSelectionCount(); 357*cdf0e10cSrcweir if(nSelectionCount > 1) 358*cdf0e10cSrcweir { 359*cdf0e10cSrcweir PathDialog aPathDlg( this ); 360*cdf0e10cSrcweir String sType, sFile, sLinkName; 361*cdf0e10cSrcweir String sFilter; 362*cdf0e10cSrcweir SvLBoxEntry* pEntry = Links().FirstSelected(); 363*cdf0e10cSrcweir SvBaseLink* pLink = (SvBaseLink*)pEntry->GetUserData(); 364*cdf0e10cSrcweir pLinkMgr->GetDisplayNames( pLink, &sType, &sFile, 0, 0 ); 365*cdf0e10cSrcweir INetURLObject aUrl(sFile); 366*cdf0e10cSrcweir if(aUrl.GetProtocol() == INET_PROT_FILE) 367*cdf0e10cSrcweir { 368*cdf0e10cSrcweir rtl::OUString sOldPath(aUrl.PathToFileName()); 369*cdf0e10cSrcweir sal_Int32 nLen = aUrl.GetName().getLength(); 370*cdf0e10cSrcweir sOldPath = sOldPath.copy(0, sOldPath.getLength() - nLen); 371*cdf0e10cSrcweir aPathDlg.SetPath(sOldPath); 372*cdf0e10cSrcweir } 373*cdf0e10cSrcweir if(aPathDlg.Execute() == RET_OK) 374*cdf0e10cSrcweir { 375*cdf0e10cSrcweir String aPath = aPathDlg.GetPath(); 376*cdf0e10cSrcweir 377*cdf0e10cSrcweir for( sal_uInt16 i = 0; i < nSelectionCount; i++) 378*cdf0e10cSrcweir { 379*cdf0e10cSrcweir pEntry = i==0 ? 380*cdf0e10cSrcweir Links().FirstSelected() : 381*cdf0e10cSrcweir Links().NextSelected( pEntry ); 382*cdf0e10cSrcweir DBG_ASSERT(pEntry,"Wo ist der Entry"); 383*cdf0e10cSrcweir pLink = (SvBaseLink*)pEntry->GetUserData(); 384*cdf0e10cSrcweir DBG_ASSERT(pLink,"Wo ist der Link"); 385*cdf0e10cSrcweir pLinkMgr->GetDisplayNames( pLink, &sType, &sFile, &sLinkName, &sFilter ); 386*cdf0e10cSrcweir INetURLObject aUrl_(sFile); 387*cdf0e10cSrcweir INetURLObject aUrl2(aPath, INET_PROT_FILE); 388*cdf0e10cSrcweir aUrl2.insertName( aUrl_.getName() ); 389*cdf0e10cSrcweir String sNewLinkName; 390*cdf0e10cSrcweir MakeLnkName( sNewLinkName, 0 , 391*cdf0e10cSrcweir aUrl2.GetMainURL(INetURLObject::DECODE_TO_IURI), sLinkName, &sFilter); 392*cdf0e10cSrcweir pLink->SetLinkSourceName( sNewLinkName ); 393*cdf0e10cSrcweir pLink->Update(); 394*cdf0e10cSrcweir } 395*cdf0e10cSrcweir if( pLinkMgr->GetPersist() ) 396*cdf0e10cSrcweir pLinkMgr->GetPersist()->SetModified(); 397*cdf0e10cSrcweir LinkManager* pNewMgr = pLinkMgr; 398*cdf0e10cSrcweir pLinkMgr = 0; 399*cdf0e10cSrcweir SetManager( pNewMgr ); 400*cdf0e10cSrcweir } 401*cdf0e10cSrcweir } 402*cdf0e10cSrcweir else 403*cdf0e10cSrcweir { 404*cdf0e10cSrcweir sal_uInt16 nPos; 405*cdf0e10cSrcweir SvBaseLink* pLink = GetSelEntry( &nPos ); 406*cdf0e10cSrcweir if ( pLink && (pLink->GetLinkSourceName().Len() != 0) ) 407*cdf0e10cSrcweir pLink->Edit( this, LINK( this, SvBaseLinksDlg, EndEditHdl ) ); 408*cdf0e10cSrcweir } 409*cdf0e10cSrcweir return 0; 410*cdf0e10cSrcweir } 411*cdf0e10cSrcweir 412*cdf0e10cSrcweir IMPL_LINK( SvBaseLinksDlg, BreakLinkClickHdl, PushButton *, pPushButton ) 413*cdf0e10cSrcweir { 414*cdf0e10cSrcweir (void)pPushButton; 415*cdf0e10cSrcweir 416*cdf0e10cSrcweir sal_Bool bModified = sal_False; 417*cdf0e10cSrcweir if(Links().GetSelectionCount() <= 1) 418*cdf0e10cSrcweir { 419*cdf0e10cSrcweir sal_uInt16 nPos; 420*cdf0e10cSrcweir SvBaseLinkRef xLink = GetSelEntry( &nPos ); 421*cdf0e10cSrcweir if( !xLink.Is() ) 422*cdf0e10cSrcweir return 0; 423*cdf0e10cSrcweir 424*cdf0e10cSrcweir QueryBox aBox( this, WB_YES_NO | WB_DEF_YES, Closelinkmsg() ); 425*cdf0e10cSrcweir 426*cdf0e10cSrcweir if( RET_YES == aBox.Execute() ) 427*cdf0e10cSrcweir { 428*cdf0e10cSrcweir Links().GetModel()->Remove( Links().GetEntry( nPos ) ); 429*cdf0e10cSrcweir 430*cdf0e10cSrcweir // falls Object noch vorhanden, dann das schliessen 431*cdf0e10cSrcweir sal_Bool bNewLnkMgr = OBJECT_CLIENT_FILE == xLink->GetObjType(); 432*cdf0e10cSrcweir 433*cdf0e10cSrcweir // dem Link sagen, das er aufgeloest wird! 434*cdf0e10cSrcweir xLink->Closed(); 435*cdf0e10cSrcweir 436*cdf0e10cSrcweir // falls einer vergessen hat sich auszutragen 437*cdf0e10cSrcweir if( xLink.Is() ) 438*cdf0e10cSrcweir pLinkMgr->Remove( &xLink ); 439*cdf0e10cSrcweir 440*cdf0e10cSrcweir if( bNewLnkMgr ) 441*cdf0e10cSrcweir { 442*cdf0e10cSrcweir LinkManager* pNewMgr = pLinkMgr; 443*cdf0e10cSrcweir pLinkMgr = 0; 444*cdf0e10cSrcweir SetManager( pNewMgr ); 445*cdf0e10cSrcweir 446*cdf0e10cSrcweir SvLBoxEntry* pEntry = Links().GetEntry( nPos ? --nPos : 0 ); 447*cdf0e10cSrcweir if( pEntry ) 448*cdf0e10cSrcweir Links().SetCurEntry( pEntry ); 449*cdf0e10cSrcweir } 450*cdf0e10cSrcweir bModified = sal_True; 451*cdf0e10cSrcweir } 452*cdf0e10cSrcweir } 453*cdf0e10cSrcweir else 454*cdf0e10cSrcweir { 455*cdf0e10cSrcweir QueryBox aBox( this, WB_YES_NO | WB_DEF_YES, CloselinkmsgMulti() ); 456*cdf0e10cSrcweir 457*cdf0e10cSrcweir if( RET_YES == aBox.Execute() ) 458*cdf0e10cSrcweir { 459*cdf0e10cSrcweir 460*cdf0e10cSrcweir SvBaseLinkMemberList aLinkList; 461*cdf0e10cSrcweir SvLBoxEntry* pEntry = Links().FirstSelected(); 462*cdf0e10cSrcweir while ( pEntry ) 463*cdf0e10cSrcweir { 464*cdf0e10cSrcweir void * pUD = pEntry->GetUserData(); 465*cdf0e10cSrcweir if( pUD ) 466*cdf0e10cSrcweir aLinkList.Append( (SvBaseLink*)pUD ); 467*cdf0e10cSrcweir pEntry = Links().NextSelected(pEntry); 468*cdf0e10cSrcweir } 469*cdf0e10cSrcweir Links().RemoveSelection(); 470*cdf0e10cSrcweir for( sal_uLong i = 0; i < aLinkList.Count(); i++ ) 471*cdf0e10cSrcweir { 472*cdf0e10cSrcweir SvBaseLinkRef xLink = aLinkList.GetObject( i ); 473*cdf0e10cSrcweir // dem Link sagen, das er aufgeloest wird! 474*cdf0e10cSrcweir xLink->Closed(); 475*cdf0e10cSrcweir 476*cdf0e10cSrcweir // falls einer vergessen hat sich auszutragen 477*cdf0e10cSrcweir pLinkMgr->Remove( &xLink ); 478*cdf0e10cSrcweir bModified = sal_True; 479*cdf0e10cSrcweir } 480*cdf0e10cSrcweir //Danach alle selektierten Eintraege entfernen 481*cdf0e10cSrcweir } 482*cdf0e10cSrcweir } 483*cdf0e10cSrcweir if(bModified) 484*cdf0e10cSrcweir { 485*cdf0e10cSrcweir if( !Links().GetEntryCount() ) 486*cdf0e10cSrcweir { 487*cdf0e10cSrcweir // Der letzte macht das Licht aus 488*cdf0e10cSrcweir Automatic().Disable(); 489*cdf0e10cSrcweir Manual().Disable(); 490*cdf0e10cSrcweir UpdateNow().Disable(); 491*cdf0e10cSrcweir // OpenSource().Disable(); 492*cdf0e10cSrcweir ChangeSource().Disable(); 493*cdf0e10cSrcweir BreakLink().Disable(); 494*cdf0e10cSrcweir 495*cdf0e10cSrcweir String aEmpty; 496*cdf0e10cSrcweir SourceName().SetText( aEmpty ); 497*cdf0e10cSrcweir TypeName().SetText( aEmpty ); 498*cdf0e10cSrcweir } 499*cdf0e10cSrcweir if( pLinkMgr->GetPersist() ) 500*cdf0e10cSrcweir pLinkMgr->GetPersist()->SetModified(); 501*cdf0e10cSrcweir } 502*cdf0e10cSrcweir return 0; 503*cdf0e10cSrcweir } 504*cdf0e10cSrcweir 505*cdf0e10cSrcweir IMPL_LINK( SvBaseLinksDlg, UpdateWaitingHdl, Timer*, pTimer ) 506*cdf0e10cSrcweir { 507*cdf0e10cSrcweir (void)pTimer; 508*cdf0e10cSrcweir // for( SvLBoxEntry* pBox = Links().First(); pBox; 509*cdf0e10cSrcweir // pBox = Links().Next( pBox )) 510*cdf0e10cSrcweir 511*cdf0e10cSrcweir Links().SetUpdateMode(sal_False); 512*cdf0e10cSrcweir for( sal_uLong nPos = Links().GetEntryCount(); nPos; ) 513*cdf0e10cSrcweir { 514*cdf0e10cSrcweir SvLBoxEntry* pBox = Links().GetEntry( --nPos ); 515*cdf0e10cSrcweir SvBaseLinkRef xLink( (SvBaseLink*)pBox->GetUserData() ); 516*cdf0e10cSrcweir if( xLink.Is() ) 517*cdf0e10cSrcweir { 518*cdf0e10cSrcweir String sCur( ImplGetStateStr( *xLink ) ), 519*cdf0e10cSrcweir sOld( Links().GetEntryText( pBox, 3 ) ); 520*cdf0e10cSrcweir if( sCur != sOld ) 521*cdf0e10cSrcweir Links().SetEntryText( sCur, pBox, 3 ); 522*cdf0e10cSrcweir } 523*cdf0e10cSrcweir } 524*cdf0e10cSrcweir Links().SetUpdateMode(sal_True); 525*cdf0e10cSrcweir return 0; 526*cdf0e10cSrcweir } 527*cdf0e10cSrcweir 528*cdf0e10cSrcweir IMPL_LINK( SvBaseLinksDlg, EndEditHdl, sfx2::SvBaseLink*, _pLink ) 529*cdf0e10cSrcweir { 530*cdf0e10cSrcweir sal_uInt16 nPos; 531*cdf0e10cSrcweir GetSelEntry( &nPos ); 532*cdf0e10cSrcweir 533*cdf0e10cSrcweir if( _pLink && _pLink->WasLastEditOK() ) 534*cdf0e10cSrcweir { 535*cdf0e10cSrcweir // JP 09.01.98: 536*cdf0e10cSrcweir // StarImpress/Draw tauschen die LinkObjecte selbst aus! 537*cdf0e10cSrcweir // also suche den Link im Manager, wenn der nicht mehr existiert, 538*cdf0e10cSrcweir // dann setze fuelle die Liste komplett neu. Ansonsten braucht 539*cdf0e10cSrcweir // nur der editierte Linkt aktualisiert werden. 540*cdf0e10cSrcweir sal_Bool bLinkFnd = sal_False; 541*cdf0e10cSrcweir for( sal_uInt16 n = pLinkMgr->GetLinks().Count(); n; ) 542*cdf0e10cSrcweir if( _pLink == &(*pLinkMgr->GetLinks()[ --n ]) ) 543*cdf0e10cSrcweir { 544*cdf0e10cSrcweir bLinkFnd = sal_True; 545*cdf0e10cSrcweir break; 546*cdf0e10cSrcweir } 547*cdf0e10cSrcweir 548*cdf0e10cSrcweir if( bLinkFnd ) 549*cdf0e10cSrcweir { 550*cdf0e10cSrcweir Links().SetUpdateMode(sal_False); 551*cdf0e10cSrcweir Links().GetModel()->Remove( Links().GetEntry( nPos ) ); 552*cdf0e10cSrcweir SvLBoxEntry* pToUnselect = Links().FirstSelected(); 553*cdf0e10cSrcweir InsertEntry( *_pLink, nPos, sal_True ); 554*cdf0e10cSrcweir if(pToUnselect) 555*cdf0e10cSrcweir Links().Select(pToUnselect, sal_False); 556*cdf0e10cSrcweir Links().SetUpdateMode(sal_True); 557*cdf0e10cSrcweir } 558*cdf0e10cSrcweir else 559*cdf0e10cSrcweir { 560*cdf0e10cSrcweir LinkManager* pNewMgr = pLinkMgr; 561*cdf0e10cSrcweir pLinkMgr = 0; 562*cdf0e10cSrcweir SetManager( pNewMgr ); 563*cdf0e10cSrcweir } 564*cdf0e10cSrcweir if( pLinkMgr->GetPersist() ) 565*cdf0e10cSrcweir pLinkMgr->GetPersist()->SetModified(); 566*cdf0e10cSrcweir } 567*cdf0e10cSrcweir return 0; 568*cdf0e10cSrcweir } 569*cdf0e10cSrcweir 570*cdf0e10cSrcweir String SvBaseLinksDlg::ImplGetStateStr( const SvBaseLink& rLnk ) 571*cdf0e10cSrcweir { 572*cdf0e10cSrcweir String sRet; 573*cdf0e10cSrcweir if( !rLnk.GetObj() ) 574*cdf0e10cSrcweir sRet = Brokenlink(); 575*cdf0e10cSrcweir else if( rLnk.GetObj()->IsPending() ) 576*cdf0e10cSrcweir { 577*cdf0e10cSrcweir sRet = Waitinglink(); 578*cdf0e10cSrcweir StartUpdateTimer(); 579*cdf0e10cSrcweir } 580*cdf0e10cSrcweir else if( LINKUPDATE_ALWAYS == rLnk.GetUpdateMode() ) 581*cdf0e10cSrcweir sRet = Autolink(); 582*cdf0e10cSrcweir else 583*cdf0e10cSrcweir sRet = Manuallink(); 584*cdf0e10cSrcweir 585*cdf0e10cSrcweir return sRet; 586*cdf0e10cSrcweir } 587*cdf0e10cSrcweir 588*cdf0e10cSrcweir void SvBaseLinksDlg::SetManager( LinkManager* pNewMgr ) 589*cdf0e10cSrcweir { 590*cdf0e10cSrcweir if( pLinkMgr == pNewMgr ) 591*cdf0e10cSrcweir return; 592*cdf0e10cSrcweir 593*cdf0e10cSrcweir if( pNewMgr ) 594*cdf0e10cSrcweir // Update muss vor Clear gestoppt werden 595*cdf0e10cSrcweir Links().SetUpdateMode( sal_False ); 596*cdf0e10cSrcweir 597*cdf0e10cSrcweir Links().Clear(); 598*cdf0e10cSrcweir pLinkMgr = pNewMgr; 599*cdf0e10cSrcweir 600*cdf0e10cSrcweir if( pLinkMgr ) 601*cdf0e10cSrcweir { 602*cdf0e10cSrcweir SvBaseLinks& rLnks = (SvBaseLinks&)pLinkMgr->GetLinks(); 603*cdf0e10cSrcweir for( sal_uInt16 n = 0; n < rLnks.Count(); ++n ) 604*cdf0e10cSrcweir { 605*cdf0e10cSrcweir SvBaseLinkRef* pLinkRef = rLnks[ n ]; 606*cdf0e10cSrcweir if( !pLinkRef->Is() ) 607*cdf0e10cSrcweir { 608*cdf0e10cSrcweir rLnks.Remove( n, 1 ); 609*cdf0e10cSrcweir --n; 610*cdf0e10cSrcweir continue; 611*cdf0e10cSrcweir } 612*cdf0e10cSrcweir if( (*pLinkRef)->IsVisible() ) 613*cdf0e10cSrcweir InsertEntry( **pLinkRef ); 614*cdf0e10cSrcweir } 615*cdf0e10cSrcweir 616*cdf0e10cSrcweir if( rLnks.Count() ) 617*cdf0e10cSrcweir { 618*cdf0e10cSrcweir SvLBoxEntry* pEntry = Links().GetEntry( 0 ); 619*cdf0e10cSrcweir Links().SetCurEntry( pEntry ); 620*cdf0e10cSrcweir Links().Select( pEntry ); 621*cdf0e10cSrcweir LinksSelectHdl( 0 ); 622*cdf0e10cSrcweir } 623*cdf0e10cSrcweir Links().SetUpdateMode( sal_True ); 624*cdf0e10cSrcweir Links().Invalidate(); 625*cdf0e10cSrcweir } 626*cdf0e10cSrcweir } 627*cdf0e10cSrcweir 628*cdf0e10cSrcweir 629*cdf0e10cSrcweir void SvBaseLinksDlg::InsertEntry( const SvBaseLink& rLink, sal_uInt16 nPos, sal_Bool bSelect ) 630*cdf0e10cSrcweir { 631*cdf0e10cSrcweir String aEntry, sFileNm, sLinkNm, sTypeNm, sFilter; 632*cdf0e10cSrcweir 633*cdf0e10cSrcweir pLinkMgr->GetDisplayNames( (SvBaseLink*)&rLink, &sTypeNm, &sFileNm, &sLinkNm, &sFilter ); 634*cdf0e10cSrcweir 635*cdf0e10cSrcweir // GetTab(0) gibt die Position der von der TabListBox automatisch eingefuegten 636*cdf0e10cSrcweir // Bitmap. Die Breite der ersten Textspalte ergibt sich deshalb aus Tab(2)-Tab(1) 637*cdf0e10cSrcweir long nWidthPixel = Links().GetLogicTab( 2 ) - Links().GetLogicTab( 1 ); 638*cdf0e10cSrcweir nWidthPixel -= SV_TAB_BORDER; 639*cdf0e10cSrcweir XubString aTxt = Links().GetEllipsisString( sFileNm, nWidthPixel, TEXT_DRAW_PATHELLIPSIS ); 640*cdf0e10cSrcweir INetURLObject aPath( sFileNm, INET_PROT_FILE ); 641*cdf0e10cSrcweir String aFileName = aPath.getName(); 642*cdf0e10cSrcweir aFileName = INetURLObject::decode(aFileName, INET_HEX_ESCAPE, INetURLObject::DECODE_UNAMBIGUOUS); 643*cdf0e10cSrcweir 644*cdf0e10cSrcweir if( aFileName.Len() > aTxt.Len() ) 645*cdf0e10cSrcweir aTxt = aFileName; 646*cdf0e10cSrcweir else if( aTxt.Search( aFileName, aTxt.Len() - aFileName.Len() ) == STRING_NOTFOUND ) 647*cdf0e10cSrcweir // filename not in string 648*cdf0e10cSrcweir aTxt = aFileName; 649*cdf0e10cSrcweir 650*cdf0e10cSrcweir aEntry = aTxt; 651*cdf0e10cSrcweir aEntry += '\t'; 652*cdf0e10cSrcweir if( OBJECT_CLIENT_GRF == rLink.GetObjType() ) 653*cdf0e10cSrcweir aEntry += sFilter; 654*cdf0e10cSrcweir else 655*cdf0e10cSrcweir aEntry += sLinkNm; 656*cdf0e10cSrcweir aEntry += '\t'; 657*cdf0e10cSrcweir aEntry += sTypeNm; 658*cdf0e10cSrcweir aEntry += '\t'; 659*cdf0e10cSrcweir aEntry += ImplGetStateStr( rLink ); 660*cdf0e10cSrcweir 661*cdf0e10cSrcweir SvLBoxEntry * pE = Links().InsertEntryToColumn( aEntry, nPos ); 662*cdf0e10cSrcweir pE->SetUserData( (void*)&rLink ); 663*cdf0e10cSrcweir if(bSelect) 664*cdf0e10cSrcweir Links().Select(pE); 665*cdf0e10cSrcweir } 666*cdf0e10cSrcweir 667*cdf0e10cSrcweir SvBaseLink* SvBaseLinksDlg::GetSelEntry( sal_uInt16* pPos ) 668*cdf0e10cSrcweir { 669*cdf0e10cSrcweir SvLBoxEntry* pE = Links().FirstSelected(); 670*cdf0e10cSrcweir sal_uInt16 nPos; 671*cdf0e10cSrcweir if( pE && LISTBOX_ENTRY_NOTFOUND != 672*cdf0e10cSrcweir ( nPos = (sal_uInt16)Links().GetModel()->GetAbsPos( pE ) ) ) 673*cdf0e10cSrcweir { 674*cdf0e10cSrcweir DBG_ASSERT( pE, "wo kommt der leere Eintrag her?" ); 675*cdf0e10cSrcweir 676*cdf0e10cSrcweir if( pPos ) 677*cdf0e10cSrcweir *pPos = nPos; 678*cdf0e10cSrcweir return (SvBaseLink*)pE->GetUserData(); 679*cdf0e10cSrcweir } 680*cdf0e10cSrcweir return 0; 681*cdf0e10cSrcweir } 682*cdf0e10cSrcweir 683*cdf0e10cSrcweir void SvBaseLinksDlg::SetType( SvBaseLink& rLink, 684*cdf0e10cSrcweir sal_uInt16 nSelPos, 685*cdf0e10cSrcweir sal_uInt16 nType ) 686*cdf0e10cSrcweir { 687*cdf0e10cSrcweir rLink.SetUpdateMode( nType ); 688*cdf0e10cSrcweir rLink.Update(); 689*cdf0e10cSrcweir SvLBoxEntry* pBox = Links().GetEntry( nSelPos ); 690*cdf0e10cSrcweir Links().SetEntryText( ImplGetStateStr( rLink ), pBox, 3 ); 691*cdf0e10cSrcweir if( pLinkMgr->GetPersist() ) 692*cdf0e10cSrcweir pLinkMgr->GetPersist()->SetModified(); 693*cdf0e10cSrcweir } 694*cdf0e10cSrcweir 695*cdf0e10cSrcweir void SvBaseLinksDlg::SetActLink( SvBaseLink * pLink ) 696*cdf0e10cSrcweir { 697*cdf0e10cSrcweir if( pLinkMgr ) 698*cdf0e10cSrcweir { 699*cdf0e10cSrcweir const SvBaseLinks& rLnks = pLinkMgr->GetLinks(); 700*cdf0e10cSrcweir sal_uInt16 nSelect = 0; 701*cdf0e10cSrcweir for( sal_uInt16 n = 0; n < rLnks.Count(); ++n ) 702*cdf0e10cSrcweir { 703*cdf0e10cSrcweir SvBaseLinkRef* pLinkRef = rLnks[ n ]; 704*cdf0e10cSrcweir // #109573# only visible links have been inserted into the TreeListBox, 705*cdf0e10cSrcweir // invisible ones have to be skipped here 706*cdf0e10cSrcweir if( (*pLinkRef)->IsVisible() ) 707*cdf0e10cSrcweir { 708*cdf0e10cSrcweir if( pLink == *pLinkRef ) 709*cdf0e10cSrcweir { 710*cdf0e10cSrcweir Links().Select( Links().GetEntry( nSelect ) ); 711*cdf0e10cSrcweir LinksSelectHdl( 0 ); 712*cdf0e10cSrcweir return ; 713*cdf0e10cSrcweir } 714*cdf0e10cSrcweir nSelect++; 715*cdf0e10cSrcweir } 716*cdf0e10cSrcweir } 717*cdf0e10cSrcweir } 718*cdf0e10cSrcweir } 719*cdf0e10cSrcweir 720