1*f6e50924SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*f6e50924SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*f6e50924SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*f6e50924SAndrew Rist * distributed with this work for additional information 6*f6e50924SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*f6e50924SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*f6e50924SAndrew Rist * "License"); you may not use this file except in compliance 9*f6e50924SAndrew Rist * with the License. You may obtain a copy of the License at 10*f6e50924SAndrew Rist * 11*f6e50924SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*f6e50924SAndrew Rist * 13*f6e50924SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*f6e50924SAndrew Rist * software distributed under the License is distributed on an 15*f6e50924SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*f6e50924SAndrew Rist * KIND, either express or implied. See the License for the 17*f6e50924SAndrew Rist * specific language governing permissions and limitations 18*f6e50924SAndrew Rist * under the License. 19*f6e50924SAndrew Rist * 20*f6e50924SAndrew Rist *************************************************************/ 21*f6e50924SAndrew Rist 22*f6e50924SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_svx.hxx" 26cdf0e10cSrcweir #include <tools/urlobj.hxx> 27cdf0e10cSrcweir #include <vcl/msgbox.hxx> 28cdf0e10cSrcweir #include <unotools/configitem.hxx> 29cdf0e10cSrcweir #include <unotools/cmdoptions.hxx> 30cdf0e10cSrcweir #include <svtools/inetimg.hxx> 31cdf0e10cSrcweir #include <svl/urlbmk.hxx> 32cdf0e10cSrcweir #include <svl/eitem.hxx> 33cdf0e10cSrcweir #include <svl/stritem.hxx> 34cdf0e10cSrcweir #include <sfx2/viewfrm.hxx> 35cdf0e10cSrcweir #include <sfx2/docfile.hxx> 36cdf0e10cSrcweir #include <sfx2/imgmgr.hxx> 37cdf0e10cSrcweir #include <sfx2/dispatch.hxx> 38cdf0e10cSrcweir #include <svl/urihelper.hxx> 39cdf0e10cSrcweir #include <sfx2/objsh.hxx> 40cdf0e10cSrcweir #include <comphelper/processfactory.hxx> 41cdf0e10cSrcweir 42cdf0e10cSrcweir #include "svx/hlnkitem.hxx" 43cdf0e10cSrcweir #include <svx/dialogs.hrc> 44cdf0e10cSrcweir #include "hyprlink.hrc" 45cdf0e10cSrcweir #include <svx/dialmgr.hxx> 46cdf0e10cSrcweir #include "svx/hyprlink.hxx" 47cdf0e10cSrcweir #include "hyprdlg.hxx" 48cdf0e10cSrcweir 49cdf0e10cSrcweir using namespace ::rtl; 50cdf0e10cSrcweir using namespace ::com::sun::star; 51cdf0e10cSrcweir 52cdf0e10cSrcweir // ----------------------------------------------------------------------- 53cdf0e10cSrcweir 54cdf0e10cSrcweir class SearchDefaultConfigItem_Impl : public ::utl::ConfigItem 55cdf0e10cSrcweir { 56cdf0e10cSrcweir OUString sDefaultEngine; 57cdf0e10cSrcweir public: 58cdf0e10cSrcweir SearchDefaultConfigItem_Impl(); 59cdf0e10cSrcweir ~SearchDefaultConfigItem_Impl(); 60cdf0e10cSrcweir 61cdf0e10cSrcweir const OUString& GetDefaultSearchEngine(){ return sDefaultEngine;} 62cdf0e10cSrcweir virtual void Notify( const com::sun::star::uno::Sequence< rtl::OUString >& aPropertyNames ); 63cdf0e10cSrcweir virtual void Commit(); 64cdf0e10cSrcweir }; 65cdf0e10cSrcweir 66cdf0e10cSrcweir /*-- 11.11.2003 14:20:59--------------------------------------------------- 67cdf0e10cSrcweir 68cdf0e10cSrcweir -----------------------------------------------------------------------*/ 69cdf0e10cSrcweir SearchDefaultConfigItem_Impl::SearchDefaultConfigItem_Impl() : 70cdf0e10cSrcweir ConfigItem(OUString::createFromAscii("Inet/DefaultSearchEngine")) 71cdf0e10cSrcweir { 72cdf0e10cSrcweir uno::Sequence<OUString> aNames(1); 73cdf0e10cSrcweir aNames.getArray()[0] = OUString::createFromAscii("Name"); 74cdf0e10cSrcweir uno::Sequence< uno::Any > aValues = GetProperties(aNames); 75cdf0e10cSrcweir aValues.getConstArray()[0] >>= sDefaultEngine; 76cdf0e10cSrcweir } 77cdf0e10cSrcweir /*-- 11.11.2003 14:21:00--------------------------------------------------- 78cdf0e10cSrcweir 79cdf0e10cSrcweir -----------------------------------------------------------------------*/ 80cdf0e10cSrcweir SearchDefaultConfigItem_Impl::~SearchDefaultConfigItem_Impl() 81cdf0e10cSrcweir { 82cdf0e10cSrcweir } 83cdf0e10cSrcweir 84cdf0e10cSrcweir void SearchDefaultConfigItem_Impl::Notify( const com::sun::star::uno::Sequence< rtl::OUString >& ) 85cdf0e10cSrcweir { 86cdf0e10cSrcweir } 87cdf0e10cSrcweir 88cdf0e10cSrcweir void SearchDefaultConfigItem_Impl::Commit() 89cdf0e10cSrcweir { 90cdf0e10cSrcweir } 91cdf0e10cSrcweir 92cdf0e10cSrcweir /************************************************************************* 93cdf0e10cSrcweir |* 94cdf0e10cSrcweir |* Dialog zum Einf"ugen/"Andern eines Hyperlink 95cdf0e10cSrcweir |* 96cdf0e10cSrcweir \************************************************************************/ 97cdf0e10cSrcweir 98cdf0e10cSrcweir SvxHyperlinkDlg::SvxHyperlinkDlg( SfxBindings *_pBindings, Window* pParent) : 99cdf0e10cSrcweir 100cdf0e10cSrcweir ToolBox ( pParent, SVX_RES( RID_SVXDLG_HYPERLINK ) ), 101cdf0e10cSrcweir SfxControllerItem ( SID_HYPERLINK_SETLINK, *_pBindings ), 102cdf0e10cSrcweir 103cdf0e10cSrcweir aForwarder ( SID_HYPERLINK_GETLINK, *this ), 104cdf0e10cSrcweir aHyperlinkDlgForward( SID_HYPERLINK_DIALOG , *this), 105cdf0e10cSrcweir 106cdf0e10cSrcweir aNameCB ( this, SVX_RES( CB_NAME ) ), 107cdf0e10cSrcweir aUrlFT ( this, SVX_RES( FT_URL ) ), 108cdf0e10cSrcweir aUrlCB ( this, SVX_RES( CB_URL ) ), 109cdf0e10cSrcweir aSearchConfig (sal_True), 110cdf0e10cSrcweir sAddress ( SVX_RES( STR_ADDRESS ) ), 111cdf0e10cSrcweir sExplorer ( SVX_RES( STR_EXPLORER ) ), 112cdf0e10cSrcweir sSearchTitle ( SVX_RES( STR_BOOKMARK_SEARCH ) ), 113cdf0e10cSrcweir aLinkPopup ( SVX_RES( RID_SVXMN_HYPERLINK ) ), 114cdf0e10cSrcweir pTargetMenu ( NULL ), 115cdf0e10cSrcweir 116cdf0e10cSrcweir bNoDoc ( sal_True ), 117cdf0e10cSrcweir bSend ( sal_False ), 118cdf0e10cSrcweir bHasOldName ( sal_False ), 119cdf0e10cSrcweir bHtmlMode ( sal_False ) 120cdf0e10cSrcweir 121cdf0e10cSrcweir { 122cdf0e10cSrcweir FreeResource(); 123cdf0e10cSrcweir 124cdf0e10cSrcweir mpManager = SfxImageManager::GetImageManager( 0 ); 125cdf0e10cSrcweir mpManager->RegisterToolBox( this ); 126cdf0e10cSrcweir 127cdf0e10cSrcweir SetImages(); 128cdf0e10cSrcweir 129cdf0e10cSrcweir // save initial size 130cdf0e10cSrcweir nMaxWidth = GetSizePixel().Width(); 131cdf0e10cSrcweir nMaxHeight = GetSizePixel().Height(); 132cdf0e10cSrcweir 133cdf0e10cSrcweir 134cdf0e10cSrcweir InsertSeparator( 0 ); 135cdf0e10cSrcweir InsertWindow( CB_URL, &aUrlCB, 0, 0 ); 136cdf0e10cSrcweir // we need an item text for accessibility 137cdf0e10cSrcweir String sItemText = aUrlCB.GetText(); 138cdf0e10cSrcweir if ( sItemText.Len() == 0 ) 139cdf0e10cSrcweir sItemText = aUrlCB.GetQuickHelpText(); 140cdf0e10cSrcweir if ( sItemText.Len() > 0 ) 141cdf0e10cSrcweir { 142cdf0e10cSrcweir SetItemText( CB_URL, sItemText ); 143cdf0e10cSrcweir sItemText.Erase(); 144cdf0e10cSrcweir } 145cdf0e10cSrcweir InsertWindow( FT_URL, &aUrlFT, 0, 0 ); 146cdf0e10cSrcweir InsertSeparator( 0 ); 147cdf0e10cSrcweir InsertWindow( CB_NAME, &aNameCB, 0, 0 ); 148cdf0e10cSrcweir sItemText = aNameCB.GetText(); 149cdf0e10cSrcweir if ( sItemText.Len() == 0 ) 150cdf0e10cSrcweir sItemText = aNameCB.GetQuickHelpText(); 151cdf0e10cSrcweir if ( sItemText.Len() > 0 ) 152cdf0e10cSrcweir SetItemText( CB_NAME, sItemText ); 153cdf0e10cSrcweir 154cdf0e10cSrcweir SetSizePixel(CalcWindowSizePixel()); // Groesse initialisieren 155cdf0e10cSrcweir 156cdf0e10cSrcweir nMaxHeight = GetSizePixel().Height(); // Hoehe nochmal merken, da sie veraendert wurde 157cdf0e10cSrcweir // SetSizePixel ruft Resize-Handler! 158cdf0e10cSrcweir 159cdf0e10cSrcweir Show(); 160cdf0e10cSrcweir Resize(); 161cdf0e10cSrcweir 162cdf0e10cSrcweir long nUrlWidth = aUrlCB.GetResizeWidth(); 163cdf0e10cSrcweir long nNameWidth = aNameCB.GetResizeWidth(); 164cdf0e10cSrcweir long nSum = nUrlWidth + nNameWidth; 165cdf0e10cSrcweir 166cdf0e10cSrcweir aUrlCB.SetRatio((nUrlWidth * 100L) / nSum); 167cdf0e10cSrcweir aNameCB.SetRatio((nNameWidth * 100L) / nSum); 168cdf0e10cSrcweir 169cdf0e10cSrcweir SetClickHdl( LINK( this, SvxHyperlinkDlg, TBClickHdl ) ); 170cdf0e10cSrcweir SetSelectHdl( LINK( this, SvxHyperlinkDlg, TBSelectHdl ) ); 171cdf0e10cSrcweir SetDropdownClickHdl( LINK( this, SvxHyperlinkDlg, DropdownClick ) ); 172cdf0e10cSrcweir 173cdf0e10cSrcweir SetItemBits( BTN_TARGET, GetItemBits( BTN_TARGET ) | TIB_DROPDOWNONLY ); 174cdf0e10cSrcweir SetItemBits( BTN_INET_SEARCH, GetItemBits( BTN_INET_SEARCH ) | TIB_DROPDOWN ); 175cdf0e10cSrcweir SetItemBits( BTN_INET_SEARCH, GetItemBits( BTN_TARGET ) | TIB_DROPDOWNONLY ); 176cdf0e10cSrcweir 177cdf0e10cSrcweir aLinkPopup.SetSelectHdl(LINK(this, SvxHyperlinkDlg, LinkPopupSelectHdl)); 178cdf0e10cSrcweir 179cdf0e10cSrcweir Link aLk = LINK(this, SvxHyperlinkDlg, ComboSelectHdl); 180cdf0e10cSrcweir aNameCB.SetSelectHdl(aLk); 181cdf0e10cSrcweir aUrlCB.SetSelectHdl(aLk); 182cdf0e10cSrcweir 183cdf0e10cSrcweir aLk = LINK(this, SvxHyperlinkDlg, ComboModifyHdl); 184cdf0e10cSrcweir aNameCB.SetModifyHdl(aLk); 185cdf0e10cSrcweir aUrlCB.SetModifyHdl(aLk); 186cdf0e10cSrcweir 187cdf0e10cSrcweir // Accessibility: Set the quick help text as accessible name for the 188cdf0e10cSrcweir // drop down lists. 189cdf0e10cSrcweir aNameCB.SetAccessibleName (aNameCB.GetQuickHelpText()); 190cdf0e10cSrcweir aUrlCB.SetAccessibleName (aUrlCB.GetQuickHelpText()); 191cdf0e10cSrcweir 192cdf0e10cSrcweir // Hide button according to config item. 193cdf0e10cSrcweir SvtCommandOptions aCmdOpts; 194cdf0e10cSrcweir if ( aCmdOpts.Lookup( SvtCommandOptions::CMDOPTION_DISABLED, 195cdf0e10cSrcweir rtl::OUString( 196cdf0e10cSrcweir RTL_CONSTASCII_USTRINGPARAM( 197cdf0e10cSrcweir "InternetSearch" ) ) ) ) 198cdf0e10cSrcweir HideItem( BTN_INET_SEARCH ); 199cdf0e10cSrcweir } 200cdf0e10cSrcweir 201cdf0e10cSrcweir /*-------------------------------------------------------------------- 202cdf0e10cSrcweir Beschreibung: 203cdf0e10cSrcweir --------------------------------------------------------------------*/ 204cdf0e10cSrcweir 205cdf0e10cSrcweir SvxHyperlinkDlg::~SvxHyperlinkDlg() 206cdf0e10cSrcweir { 207cdf0e10cSrcweir SfxImageManager::GetImageManager( 0 )->ReleaseToolBox(this); 208cdf0e10cSrcweir 209cdf0e10cSrcweir if (pTargetMenu != NULL) 210cdf0e10cSrcweir delete pTargetMenu; 211cdf0e10cSrcweir } 212cdf0e10cSrcweir 213cdf0e10cSrcweir /*-------------------------------------------------------------------- 214cdf0e10cSrcweir Beschreibung: Leiste so resizen, dass die Comboboxen automatisch mit 215cdf0e10cSrcweir verkleinert werden 216cdf0e10cSrcweir --------------------------------------------------------------------*/ 217cdf0e10cSrcweir 218cdf0e10cSrcweir void SvxHyperlinkDlg::Resize() 219cdf0e10cSrcweir { 220cdf0e10cSrcweir long nWidth = GetSizePixel().Width(); 221cdf0e10cSrcweir 222cdf0e10cSrcweir ToolBox::Resize(); 223cdf0e10cSrcweir 224cdf0e10cSrcweir if (nWidth) // nWidth ist manchmal 0 225cdf0e10cSrcweir { 226cdf0e10cSrcweir long nDeltaW = nMaxWidth - nWidth + aUrlCB.LogicToPixel(Size(3, 1)).Width() + 1; 227cdf0e10cSrcweir 228cdf0e10cSrcweir long nNewUrlWidth = aUrlCB.CalcResizeWidth(nDeltaW); 229cdf0e10cSrcweir long nNewNameWidth = aNameCB.CalcResizeWidth(nDeltaW); 230cdf0e10cSrcweir 231cdf0e10cSrcweir if (nNewUrlWidth && nNewNameWidth) // Flackern reduzieren 232cdf0e10cSrcweir { 233cdf0e10cSrcweir SetUpdateMode(sal_False); 234cdf0e10cSrcweir 235cdf0e10cSrcweir // Comboboxen resizen 236cdf0e10cSrcweir aUrlCB.DoResize(nNewUrlWidth); 237cdf0e10cSrcweir aNameCB.DoResize(nNewNameWidth); 238cdf0e10cSrcweir RecalcItems(); // Alle Elemente neu anordnen 239cdf0e10cSrcweir 240cdf0e10cSrcweir SetUpdateMode(sal_True); 241cdf0e10cSrcweir } 242cdf0e10cSrcweir } 243cdf0e10cSrcweir } 244cdf0e10cSrcweir 245cdf0e10cSrcweir /*-------------------------------------------------------------------- 246cdf0e10cSrcweir Beschreibung: 247cdf0e10cSrcweir --------------------------------------------------------------------*/ 248cdf0e10cSrcweir 249cdf0e10cSrcweir void SvxHyperlinkDlg::Resizing(Size& rSize) 250cdf0e10cSrcweir { 251cdf0e10cSrcweir if (rSize.Height() > nMaxHeight) 252cdf0e10cSrcweir rSize.Height() = nMaxHeight; 253cdf0e10cSrcweir 254cdf0e10cSrcweir if (rSize.Width() > nMaxWidth) 255cdf0e10cSrcweir rSize.Width() = nMaxWidth; 256cdf0e10cSrcweir 257cdf0e10cSrcweir ToolBox::Resizing(rSize); 258cdf0e10cSrcweir } 259cdf0e10cSrcweir 260cdf0e10cSrcweir /*-------------------------------------------------------------------- 261cdf0e10cSrcweir Beschreibung: Im Dokument selektierten Hyperlink in Leiste anzeigen 262cdf0e10cSrcweir --------------------------------------------------------------------*/ 263cdf0e10cSrcweir 264cdf0e10cSrcweir void SvxHyperlinkDlg::StateChanged( sal_uInt16 nSID, SfxItemState eState, 265cdf0e10cSrcweir const SfxPoolItem* pState ) 266cdf0e10cSrcweir { 267cdf0e10cSrcweir if ( nSID == SID_HYPERLINK_DIALOG ) 268cdf0e10cSrcweir { 269cdf0e10cSrcweir if( eState != SFX_ITEM_DISABLED) 270cdf0e10cSrcweir { 271cdf0e10cSrcweir EnableItem( BTN_OPENDIALOG, sal_True ); 272cdf0e10cSrcweir 273cdf0e10cSrcweir sal_Bool bItem = sal_False; 274cdf0e10cSrcweir if ( pState && eState == SFX_ITEM_AVAILABLE ) 275cdf0e10cSrcweir bItem = ((SfxBoolItem*)pState)->GetValue(); 276cdf0e10cSrcweir SetItemState ( BTN_OPENDIALOG, bItem ? STATE_CHECK : STATE_NOCHECK ); 277cdf0e10cSrcweir } 278cdf0e10cSrcweir else 279cdf0e10cSrcweir { 280cdf0e10cSrcweir SetItemState ( BTN_OPENDIALOG, STATE_NOCHECK ); 281cdf0e10cSrcweir EnableItem( BTN_OPENDIALOG, sal_False ); 282cdf0e10cSrcweir } 283cdf0e10cSrcweir } 284cdf0e10cSrcweir 285cdf0e10cSrcweir if (nSID == SID_HYPERLINK_SETLINK) 286cdf0e10cSrcweir { 287cdf0e10cSrcweir if (eState == SFX_ITEM_DISABLED) 288cdf0e10cSrcweir bNoDoc = sal_True; 289cdf0e10cSrcweir else 290cdf0e10cSrcweir bNoDoc = sal_False; 291cdf0e10cSrcweir EnableItem(BTN_TARGET, !bNoDoc); 292cdf0e10cSrcweir EnableLink(); 293cdf0e10cSrcweir } 294cdf0e10cSrcweir 295cdf0e10cSrcweir if (nSID == SID_HYPERLINK_GETLINK) 296cdf0e10cSrcweir { 297cdf0e10cSrcweir if (eState == SFX_ITEM_AVAILABLE) 298cdf0e10cSrcweir { 299cdf0e10cSrcweir const SvxHyperlinkItem& rHLnkItem = *((const SvxHyperlinkItem*)pState); 300cdf0e10cSrcweir 301cdf0e10cSrcweir sal_uInt16 nNamePos = aNameCB.GetEntryPos(aNameCB.GetText()); 302cdf0e10cSrcweir sal_uInt16 nUrlPos = aUrlCB.GetEntryPos(aUrlCB.GetText()); 303cdf0e10cSrcweir sal_uInt16 nNotFound = COMBOBOX_ENTRY_NOTFOUND; 304cdf0e10cSrcweir 305cdf0e10cSrcweir if (!bHasOldName && 306cdf0e10cSrcweir (nNamePos == nNotFound || nUrlPos == nNotFound)) 307cdf0e10cSrcweir { 308cdf0e10cSrcweir sOldName = aNameCB.GetText(); 309cdf0e10cSrcweir bHasOldName = sal_True; 310cdf0e10cSrcweir } 311cdf0e10cSrcweir if (rHLnkItem.GetName().Len()) 312cdf0e10cSrcweir { 313cdf0e10cSrcweir aNameCB.SetText(rHLnkItem.GetName()); 314cdf0e10cSrcweir ComboModifyHdl(&aNameCB); 315cdf0e10cSrcweir } 316cdf0e10cSrcweir if (rHLnkItem.GetURL().Len() || rHLnkItem.GetName().Len()) 317cdf0e10cSrcweir { 318cdf0e10cSrcweir String sUrl = INetURLObject(rHLnkItem.GetURL()).GetURLNoPass(); 319cdf0e10cSrcweir aUrlCB.SetText(sUrl); 320cdf0e10cSrcweir } 321cdf0e10cSrcweir else if (aUrlCB.GetEntryCount()) 322cdf0e10cSrcweir { // Letzten Eintrag wieder selektieren 323cdf0e10cSrcweir aNameCB.SetText(aNameCB.GetEntry(0)); 324cdf0e10cSrcweir aUrlCB.SetText(aUrlCB.GetEntry(0)); 325cdf0e10cSrcweir } 326cdf0e10cSrcweir 327cdf0e10cSrcweir TargetMenu(rHLnkItem.GetTargetFrame(), sal_False); 328cdf0e10cSrcweir bHtmlMode = (rHLnkItem.GetInsertMode() & HLINK_HTMLMODE) != 0; 329cdf0e10cSrcweir } 330cdf0e10cSrcweir else 331cdf0e10cSrcweir return; 332cdf0e10cSrcweir 333cdf0e10cSrcweir ComboModifyHdl(&aUrlCB); 334cdf0e10cSrcweir } 335cdf0e10cSrcweir } 336cdf0e10cSrcweir 337cdf0e10cSrcweir /*-------------------------------------------------------------------- 338cdf0e10cSrcweir Beschreibung: 339cdf0e10cSrcweir --------------------------------------------------------------------*/ 340cdf0e10cSrcweir 341cdf0e10cSrcweir IMPL_LINK( SvxHyperlinkDlg, TBClickHdl, ToolBox *, pBox ) 342cdf0e10cSrcweir { 343cdf0e10cSrcweir switch (pBox->GetCurItemId()) 344cdf0e10cSrcweir { 345cdf0e10cSrcweir case BTN_LINK: 346cdf0e10cSrcweir { 347cdf0e10cSrcweir if (!bSend) // Link ins Dokument einfuegen 348cdf0e10cSrcweir SendToApp(HLINK_DEFAULT); 349cdf0e10cSrcweir } 350cdf0e10cSrcweir break; 351cdf0e10cSrcweir 352cdf0e10cSrcweir case BTN_OPENDIALOG: 353cdf0e10cSrcweir { 354cdf0e10cSrcweir GetBindings().GetDispatcher()->Execute( SID_HYPERLINK_DIALOG ); 355cdf0e10cSrcweir } 356cdf0e10cSrcweir break; 357cdf0e10cSrcweir } 358cdf0e10cSrcweir 359cdf0e10cSrcweir return sal_True; 360cdf0e10cSrcweir } 361cdf0e10cSrcweir 362cdf0e10cSrcweir /*-------------------------------------------------------------------- 363cdf0e10cSrcweir Beschreibung: 364cdf0e10cSrcweir --------------------------------------------------------------------*/ 365cdf0e10cSrcweir 366cdf0e10cSrcweir IMPL_LINK( SvxHyperlinkDlg, TBSelectHdl, ToolBox *, pBox ) 367cdf0e10cSrcweir { 368cdf0e10cSrcweir switch (pBox->GetCurItemId()) 369cdf0e10cSrcweir { 370cdf0e10cSrcweir // Link als Bookmark im Explorer eintragen 371cdf0e10cSrcweir // Soll erst im Loslassen der Maus gerufen werden, daher im Select-Hdl 372cdf0e10cSrcweir case BTN_INSERT_BOOKMARK: 373cdf0e10cSrcweir { 374cdf0e10cSrcweir String sName = aNameCB.GetText(); 375cdf0e10cSrcweir if ( !sName.Len() ) 376cdf0e10cSrcweir sName = aUrlCB.GetText(); 377cdf0e10cSrcweir 378cdf0e10cSrcweir String aBase = GetBindings().GetDispatcher()->GetFrame()->GetObjectShell()->GetMedium()->GetBaseURL(); 379cdf0e10cSrcweir SfxStringItem aName( SID_BOOKMARK_TITLE, sName ); 380cdf0e10cSrcweir SfxStringItem aURL( SID_BOOKMARK_URL, 381cdf0e10cSrcweir URIHelper::SmartRel2Abs( INetURLObject(aBase), aUrlCB.GetText(), URIHelper::GetMaybeFileHdl(), true, false, 382cdf0e10cSrcweir INetURLObject::WAS_ENCODED, 383cdf0e10cSrcweir INetURLObject::DECODE_UNAMBIGUOUS ) ); 384cdf0e10cSrcweir GetBindings().GetDispatcher()->Execute( 385cdf0e10cSrcweir SID_CREATELINK, SFX_CALLMODE_ASYNCHRON, &aName, &aURL, 0L ); 386cdf0e10cSrcweir } 387cdf0e10cSrcweir break; 388cdf0e10cSrcweir } 389cdf0e10cSrcweir 390cdf0e10cSrcweir return sal_True; 391cdf0e10cSrcweir } 392cdf0e10cSrcweir 393cdf0e10cSrcweir IMPL_LINK( SvxHyperlinkDlg, DropdownClick, ToolBox *, pBox ) 394cdf0e10cSrcweir { 395cdf0e10cSrcweir switch (pBox->GetCurItemId()) 396cdf0e10cSrcweir { 397cdf0e10cSrcweir case BTN_LINK: 398cdf0e10cSrcweir { 399cdf0e10cSrcweir // Link-Popup anstossen 400cdf0e10cSrcweir EndSelection(); // Vor dem Execute, damit Popup den Focus bekommt 401cdf0e10cSrcweir aLinkPopup.EnableItem(MN_BUTTON, !bHtmlMode); 402cdf0e10cSrcweir aLinkPopup.Execute( this, GetItemRect( BTN_LINK ), FLOATWIN_POPUPMODE_DOWN ); 403cdf0e10cSrcweir } 404cdf0e10cSrcweir break; 405cdf0e10cSrcweir 406cdf0e10cSrcweir case BTN_INET_SEARCH: 407cdf0e10cSrcweir { 408cdf0e10cSrcweir // Search-Engines per Popup auswaehlen 409cdf0e10cSrcweir PopupMenu *pMenu = new PopupMenu; 410cdf0e10cSrcweir pMenu->SetSelectHdl(LINK(this, SvxHyperlinkDlg, SearchPopupSelectHdl)); 411cdf0e10cSrcweir SearchDefaultConfigItem_Impl aDefaultEngine; 412cdf0e10cSrcweir String sDefault(aDefaultEngine.GetDefaultSearchEngine()); 413cdf0e10cSrcweir sDefault.ToLowerAscii(); 414cdf0e10cSrcweir const bool bHasDefault = sDefault.Len() > 0; 415cdf0e10cSrcweir 416cdf0e10cSrcweir sal_uInt16 nCount = aSearchConfig.Count(); 417cdf0e10cSrcweir String sFound; 418cdf0e10cSrcweir for (sal_uInt16 i = 0; i < nCount; i++) 419cdf0e10cSrcweir { 420cdf0e10cSrcweir const SvxSearchEngineData& rData = aSearchConfig.GetData(i); 421cdf0e10cSrcweir //check if it's the configured default search engine 422cdf0e10cSrcweir String sTest(rData.sEngineName); 423cdf0e10cSrcweir sTest.ToLowerAscii(); 424cdf0e10cSrcweir bool bIsDefaultEngine = bHasDefault && STRING_NOTFOUND != sTest.Search( sDefault ); 425cdf0e10cSrcweir //then put it at the top 426cdf0e10cSrcweir if(i && bIsDefaultEngine) 427cdf0e10cSrcweir { 428cdf0e10cSrcweir pMenu->InsertItem( i + 1, rData.sEngineName, 0, 0); 429cdf0e10cSrcweir pMenu->InsertSeparator(1); 430cdf0e10cSrcweir } 431cdf0e10cSrcweir else 432cdf0e10cSrcweir { 433cdf0e10cSrcweir if (i) 434cdf0e10cSrcweir pMenu->InsertSeparator(); 435cdf0e10cSrcweir pMenu->InsertItem( i + 1, rData.sEngineName); 436cdf0e10cSrcweir } 437cdf0e10cSrcweir } 438cdf0e10cSrcweir pBox->SetItemDown(BTN_INET_SEARCH, sal_True, sal_True); 439cdf0e10cSrcweir pMenu->Execute( this, GetItemRect( BTN_INET_SEARCH ), FLOATWIN_POPUPMODE_DOWN ); 440cdf0e10cSrcweir pBox->SetItemDown(BTN_INET_SEARCH, sal_False, sal_True); 441cdf0e10cSrcweir EndSelection(); 442cdf0e10cSrcweir delete pMenu; 443cdf0e10cSrcweir } 444cdf0e10cSrcweir break; 445cdf0e10cSrcweir 446cdf0e10cSrcweir case BTN_TARGET: 447cdf0e10cSrcweir { 448cdf0e10cSrcweir // Target Frame einstellen 449cdf0e10cSrcweir TargetMenu(GetSelTarget(), sal_True); 450cdf0e10cSrcweir EndSelection(); 451cdf0e10cSrcweir } 452cdf0e10cSrcweir break; 453cdf0e10cSrcweir } 454cdf0e10cSrcweir 455cdf0e10cSrcweir return sal_True; 456cdf0e10cSrcweir } 457cdf0e10cSrcweir 458cdf0e10cSrcweir /*-------------------------------------------------------------------- 459cdf0e10cSrcweir Beschreibung: 460cdf0e10cSrcweir --------------------------------------------------------------------*/ 461cdf0e10cSrcweir 462cdf0e10cSrcweir void SvxHyperlinkDlg::TargetMenu(const String& rSelEntry, sal_Bool bExecute) 463cdf0e10cSrcweir { 464cdf0e10cSrcweir if (pTargetMenu && !bExecute) 465cdf0e10cSrcweir { 466cdf0e10cSrcweir for (sal_uInt16 i = 1; i <= pTargetMenu->GetItemCount(); i++) 467cdf0e10cSrcweir { 468cdf0e10cSrcweir if (pTargetMenu->GetItemText(i) == rSelEntry) 469cdf0e10cSrcweir { 470cdf0e10cSrcweir pTargetMenu->CheckItem(i); 471cdf0e10cSrcweir return; 472cdf0e10cSrcweir } 473cdf0e10cSrcweir } 474cdf0e10cSrcweir } 475cdf0e10cSrcweir 476cdf0e10cSrcweir SfxViewFrame* pVwFrm = SfxViewFrame::Current(); 477cdf0e10cSrcweir 478cdf0e10cSrcweir if (pVwFrm) // Alle moeglichen Target Frames zusammensammeln und anzeigen 479cdf0e10cSrcweir { 480cdf0e10cSrcweir TargetList aList; 481cdf0e10cSrcweir pVwFrm->GetTopFrame().GetTargetList(aList); 482cdf0e10cSrcweir 483cdf0e10cSrcweir sal_uInt16 nCount = (sal_uInt16)aList.Count(); 484cdf0e10cSrcweir if( nCount ) 485cdf0e10cSrcweir { 486cdf0e10cSrcweir sal_Bool bChecked = sal_False; 487cdf0e10cSrcweir 488cdf0e10cSrcweir if (pTargetMenu != NULL) 489cdf0e10cSrcweir delete pTargetMenu; 490cdf0e10cSrcweir 491cdf0e10cSrcweir pTargetMenu = new PopupMenu; 492cdf0e10cSrcweir pTargetMenu->SetMenuFlags( pTargetMenu->GetMenuFlags() | 493cdf0e10cSrcweir MENU_FLAG_NOAUTOMNEMONICS ); 494cdf0e10cSrcweir sal_uInt16 i; 495cdf0e10cSrcweir for ( i = 0; i < nCount; i++ ) 496cdf0e10cSrcweir { 497cdf0e10cSrcweir String sEntry(*aList.GetObject(i)); 498cdf0e10cSrcweir pTargetMenu->InsertItem(i + 1, sEntry, MIB_RADIOCHECK|MIB_AUTOCHECK); 499cdf0e10cSrcweir 500cdf0e10cSrcweir if (sEntry == rSelEntry) 501cdf0e10cSrcweir { 502cdf0e10cSrcweir pTargetMenu->CheckItem(i + 1); 503cdf0e10cSrcweir bChecked = sal_True; 504cdf0e10cSrcweir } 505cdf0e10cSrcweir } 506cdf0e10cSrcweir for ( i = nCount; i; i-- ) 507cdf0e10cSrcweir delete aList.GetObject( i - 1 ); 508cdf0e10cSrcweir 509cdf0e10cSrcweir if (!bChecked) 510cdf0e10cSrcweir pTargetMenu->CheckItem(1); 511cdf0e10cSrcweir 512cdf0e10cSrcweir if (bExecute) 513cdf0e10cSrcweir { 514cdf0e10cSrcweir sal_uInt16 nEntry = pTargetMenu->Execute( 515cdf0e10cSrcweir this, GetItemRect( BTN_TARGET ), FLOATWIN_POPUPMODE_DOWN ); 516cdf0e10cSrcweir if ( nEntry ) 517cdf0e10cSrcweir pTargetMenu->CheckItem( nEntry ); 518cdf0e10cSrcweir } 519cdf0e10cSrcweir } 520cdf0e10cSrcweir } 521cdf0e10cSrcweir } 522cdf0e10cSrcweir 523cdf0e10cSrcweir /*-------------------------------------------------------------------- 524cdf0e10cSrcweir Beschreibung: 525cdf0e10cSrcweir --------------------------------------------------------------------*/ 526cdf0e10cSrcweir 527cdf0e10cSrcweir IMPL_LINK( SvxHyperlinkDlg, LinkPopupSelectHdl, Menu *, pMenu ) 528cdf0e10cSrcweir { 529cdf0e10cSrcweir switch (pMenu->GetCurItemId()) 530cdf0e10cSrcweir { 531cdf0e10cSrcweir case MN_FIELD: // URL als Hyperlink ins Dok einfuegen 532cdf0e10cSrcweir SendToApp(HLINK_FIELD); 533cdf0e10cSrcweir break; 534cdf0e10cSrcweir case MN_BUTTON: // URL als Button ins Dok einfuegen 535cdf0e10cSrcweir SendToApp(HLINK_BUTTON); 536cdf0e10cSrcweir break; 537cdf0e10cSrcweir } 538cdf0e10cSrcweir 539cdf0e10cSrcweir return sal_True; 540cdf0e10cSrcweir } 541cdf0e10cSrcweir 542cdf0e10cSrcweir /*-------------------------------------------------------------------- 543cdf0e10cSrcweir Beschreibung: 544cdf0e10cSrcweir --------------------------------------------------------------------*/ 545cdf0e10cSrcweir 546cdf0e10cSrcweir IMPL_LINK( SvxHyperlinkDlg, SearchPopupSelectHdl, Menu *, pMenu ) 547cdf0e10cSrcweir { 548cdf0e10cSrcweir const SvxSearchEngineData& rData = aSearchConfig.GetData(pMenu->GetCurItemId() - 1); 549cdf0e10cSrcweir String sText(aNameCB.GetText()); 550cdf0e10cSrcweir sText.EraseLeadingChars().EraseTrailingChars(); 551cdf0e10cSrcweir 552cdf0e10cSrcweir rtl::OUString sPrefix; 553cdf0e10cSrcweir rtl::OUString sSuffix; 554cdf0e10cSrcweir rtl::OUString sSeparator; 555cdf0e10cSrcweir sal_Int32 nCaseMatch; 556cdf0e10cSrcweir sal_Unicode cToken = 0; 557cdf0e10cSrcweir 558cdf0e10cSrcweir if (sText.Search(' ') != STRING_NOTFOUND) 559cdf0e10cSrcweir { 560cdf0e10cSrcweir sPrefix = rData.sExactPrefix; 561cdf0e10cSrcweir sSuffix = rData.sExactSuffix; 562cdf0e10cSrcweir sSeparator = rData.sExactSeparator; 563cdf0e10cSrcweir nCaseMatch = rData.nExactCaseMatch; 564cdf0e10cSrcweir cToken = ' '; 565cdf0e10cSrcweir } 566cdf0e10cSrcweir else if (sText.Search('+') != STRING_NOTFOUND) 567cdf0e10cSrcweir { 568cdf0e10cSrcweir sPrefix = rData.sAndPrefix; 569cdf0e10cSrcweir sSuffix = rData.sAndSuffix; 570cdf0e10cSrcweir sSeparator = rData.sAndSeparator; 571cdf0e10cSrcweir nCaseMatch = rData.nAndCaseMatch; 572cdf0e10cSrcweir cToken = '+'; 573cdf0e10cSrcweir } 574cdf0e10cSrcweir else if (sText.Search(',') != STRING_NOTFOUND) 575cdf0e10cSrcweir { 576cdf0e10cSrcweir sPrefix = rData.sOrPrefix; 577cdf0e10cSrcweir sSuffix = rData.sOrSuffix; 578cdf0e10cSrcweir sSeparator = rData.sOrSeparator; 579cdf0e10cSrcweir nCaseMatch = rData.nOrCaseMatch; 580cdf0e10cSrcweir cToken = ','; 581cdf0e10cSrcweir } 582cdf0e10cSrcweir else 583cdf0e10cSrcweir { 584cdf0e10cSrcweir sPrefix = rData.sExactPrefix; 585cdf0e10cSrcweir sSuffix = rData.sExactSuffix; 586cdf0e10cSrcweir nCaseMatch = rData.nExactCaseMatch; 587cdf0e10cSrcweir cToken = 0; 588cdf0e10cSrcweir } 589cdf0e10cSrcweir 590cdf0e10cSrcweir String sURL = sPrefix; 591cdf0e10cSrcweir xub_StrLen nTok; 592cdf0e10cSrcweir 593cdf0e10cSrcweir if(1 == nCaseMatch) 594cdf0e10cSrcweir sText.ToUpperAscii(); 595cdf0e10cSrcweir else if(2 == nCaseMatch) 596cdf0e10cSrcweir sText.ToLowerAscii(); 597cdf0e10cSrcweir 598cdf0e10cSrcweir if ((nTok = sText.GetTokenCount(cToken)) > 1) 599cdf0e10cSrcweir { 600cdf0e10cSrcweir for (sal_uInt16 i = 0; i < nTok; i++) 601cdf0e10cSrcweir { 602cdf0e10cSrcweir sURL += sText.GetToken(i, cToken); 603cdf0e10cSrcweir if(i < nTok -1) 604cdf0e10cSrcweir sURL += (String)sSeparator; 605cdf0e10cSrcweir } 606cdf0e10cSrcweir sURL += (String)sSuffix; 607cdf0e10cSrcweir } 608cdf0e10cSrcweir else 609cdf0e10cSrcweir { 610cdf0e10cSrcweir sURL += sText; 611cdf0e10cSrcweir sURL += (String)sSuffix; 612cdf0e10cSrcweir } 613cdf0e10cSrcweir sURL.EraseAllChars(); // remove all spaces 614cdf0e10cSrcweir SfxViewFrame* pViewFrame = SfxViewFrame::Current(); 615cdf0e10cSrcweir if ( pViewFrame ) 616cdf0e10cSrcweir pViewFrame = pViewFrame->GetTopViewFrame(); 617cdf0e10cSrcweir OpenDoc( sURL, pViewFrame ); 618cdf0e10cSrcweir 619cdf0e10cSrcweir return sal_True; 620cdf0e10cSrcweir } 621cdf0e10cSrcweir 622cdf0e10cSrcweir /*-------------------------------------------------------------------- 623cdf0e10cSrcweir Beschreibung: 624cdf0e10cSrcweir --------------------------------------------------------------------*/ 625cdf0e10cSrcweir 626cdf0e10cSrcweir IMPL_LINK( SvxHyperlinkDlg, BookmarkFoundHdl, String *, pUrl ) 627cdf0e10cSrcweir { 628cdf0e10cSrcweir if (pUrl && pUrl->Len()) 629cdf0e10cSrcweir { 630cdf0e10cSrcweir aUrlCB.SetText(*pUrl); 631cdf0e10cSrcweir ComboModifyHdl(&aUrlCB); 632cdf0e10cSrcweir } 633cdf0e10cSrcweir 634cdf0e10cSrcweir return sal_True; 635cdf0e10cSrcweir } 636cdf0e10cSrcweir /*-------------------------------------------------------------------- 637cdf0e10cSrcweir Beschreibung: Link-Button enablen/disablen 638cdf0e10cSrcweir --------------------------------------------------------------------*/ 639cdf0e10cSrcweir 640cdf0e10cSrcweir void SvxHyperlinkDlg::EnableLink() 641cdf0e10cSrcweir { 642cdf0e10cSrcweir sal_Bool bEnable = aUrlCB.GetText().Len() != 0; 643cdf0e10cSrcweir 644cdf0e10cSrcweir EnableItem(BTN_LINK, (!bNoDoc) & bEnable); 645cdf0e10cSrcweir } 646cdf0e10cSrcweir 647cdf0e10cSrcweir /*-------------------------------------------------------------------- 648cdf0e10cSrcweir Beschreibung: URL im Dokument einfuegen 649cdf0e10cSrcweir --------------------------------------------------------------------*/ 650cdf0e10cSrcweir 651cdf0e10cSrcweir void SvxHyperlinkDlg::SendToApp(sal_uInt16 nType) 652cdf0e10cSrcweir { 653cdf0e10cSrcweir sal_Bool bIsFile = sal_False; 654cdf0e10cSrcweir bSend = sal_True; 655cdf0e10cSrcweir String sURL( aUrlCB.GetText() ); 656cdf0e10cSrcweir 657cdf0e10cSrcweir if ( !sURL.Len() ) 658cdf0e10cSrcweir return; 659cdf0e10cSrcweir 660cdf0e10cSrcweir String aBase = GetBindings().GetDispatcher()->GetFrame()->GetObjectShell()->GetMedium()->GetBaseURL(); 661cdf0e10cSrcweir INetURLObject aObj( URIHelper::SmartRel2Abs( INetURLObject(aBase), sURL, URIHelper::GetMaybeFileHdl(), true, false, 662cdf0e10cSrcweir INetURLObject::WAS_ENCODED, 663cdf0e10cSrcweir INetURLObject::DECODE_UNAMBIGUOUS ) ); 664cdf0e10cSrcweir sURL = aObj.GetMainURL( INetURLObject::NO_DECODE ); 665cdf0e10cSrcweir if ( aObj.GetProtocol() == INET_PROT_FILE ) 666cdf0e10cSrcweir bIsFile = sal_True; 667cdf0e10cSrcweir 668cdf0e10cSrcweir if ( bIsFile ) 669cdf0e10cSrcweir { 670cdf0e10cSrcweir EnterWait(); 671cdf0e10cSrcweir SfxMedium aMedium( sURL, STREAM_STD_READ, sal_True ); 672cdf0e10cSrcweir if ( aMedium.Exists( sal_False ) == sal_False ) 673cdf0e10cSrcweir { 674cdf0e10cSrcweir LeaveWait(); 675cdf0e10cSrcweir QueryBox aBox( this, SVX_RES( RID_SVXQB_DONTEXIST ) ); 676cdf0e10cSrcweir if ( aBox.Execute() == RET_NO ) 677cdf0e10cSrcweir return; 678cdf0e10cSrcweir } 679cdf0e10cSrcweir else 680cdf0e10cSrcweir LeaveWait(); 681cdf0e10cSrcweir } 682cdf0e10cSrcweir 683cdf0e10cSrcweir SvxHyperlinkItem aItem( SID_HYPERLINK_SETLINK ); 684cdf0e10cSrcweir 685cdf0e10cSrcweir if (aNameCB.GetText().Len()) 686cdf0e10cSrcweir aItem.SetName( aNameCB.GetText() ); 687cdf0e10cSrcweir else 688cdf0e10cSrcweir aItem.SetName( sURL ); 689cdf0e10cSrcweir 690cdf0e10cSrcweir sOldName = aNameCB.GetText(); 691cdf0e10cSrcweir 692cdf0e10cSrcweir aItem.SetURL(sURL); 693cdf0e10cSrcweir aItem.SetInsertMode( (SvxLinkInsertMode)nType ); 694cdf0e10cSrcweir aItem.SetTargetFrame( GetSelTarget() ); 695cdf0e10cSrcweir 696cdf0e10cSrcweir GetBindings().GetDispatcher()->Execute( 697cdf0e10cSrcweir SID_HYPERLINK_SETLINK, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, &aItem, 0L ); 698cdf0e10cSrcweir 699cdf0e10cSrcweir AddToHistory( aNameCB.GetText(), sURL ); 700cdf0e10cSrcweir 701cdf0e10cSrcweir if ( sURL != aUrlCB.GetText() ) 702cdf0e10cSrcweir aUrlCB.SetText( sURL ); 703cdf0e10cSrcweir } 704cdf0e10cSrcweir 705cdf0e10cSrcweir /*-------------------------------------------------------------------- 706cdf0e10cSrcweir Beschreibung: Selektierten Target Frame Eintrag im Popup ermitteln 707cdf0e10cSrcweir --------------------------------------------------------------------*/ 708cdf0e10cSrcweir 709cdf0e10cSrcweir String SvxHyperlinkDlg::GetSelTarget() 710cdf0e10cSrcweir { 711cdf0e10cSrcweir String sTarget; 712cdf0e10cSrcweir 713cdf0e10cSrcweir if (pTargetMenu != NULL) 714cdf0e10cSrcweir { 715cdf0e10cSrcweir for (sal_uInt16 i = 1; i <= pTargetMenu->GetItemCount(); i++) 716cdf0e10cSrcweir { 717cdf0e10cSrcweir if (pTargetMenu->IsItemChecked(i)) 718cdf0e10cSrcweir { 719cdf0e10cSrcweir sTarget = pTargetMenu->GetItemText(i); 720cdf0e10cSrcweir break; 721cdf0e10cSrcweir } 722cdf0e10cSrcweir } 723cdf0e10cSrcweir } 724cdf0e10cSrcweir 725cdf0e10cSrcweir return sTarget; 726cdf0e10cSrcweir } 727cdf0e10cSrcweir 728cdf0e10cSrcweir /*-------------------------------------------------------------------- 729cdf0e10cSrcweir Beschreibung: URL in History der Leiste aufnehmen 730cdf0e10cSrcweir --------------------------------------------------------------------*/ 731cdf0e10cSrcweir 732cdf0e10cSrcweir void SvxHyperlinkDlg::AddToHistory(const String& rName, const String& rURL) 733cdf0e10cSrcweir { 734cdf0e10cSrcweir String sName(rName); 735cdf0e10cSrcweir 736cdf0e10cSrcweir if (bHasOldName && sOldName.Len()) 737cdf0e10cSrcweir { 738cdf0e10cSrcweir sName = sOldName; 739cdf0e10cSrcweir bHasOldName = sal_False; 740cdf0e10cSrcweir } 741cdf0e10cSrcweir 742cdf0e10cSrcweir if (!sName.Len()) 743cdf0e10cSrcweir sName = rURL; 744cdf0e10cSrcweir 745cdf0e10cSrcweir if (rURL.Len()) 746cdf0e10cSrcweir { 747cdf0e10cSrcweir sal_uInt16 nNamePos = aNameCB.GetEntryPos(sName); 748cdf0e10cSrcweir sal_uInt16 nUrlPos = aUrlCB.GetEntryPos(rURL); 749cdf0e10cSrcweir sal_uInt16 nPos = COMBOBOX_ENTRY_NOTFOUND; 750cdf0e10cSrcweir 751cdf0e10cSrcweir if (nNamePos != COMBOBOX_ENTRY_NOTFOUND) 752cdf0e10cSrcweir nPos = nNamePos; 753cdf0e10cSrcweir else 754cdf0e10cSrcweir nPos = nUrlPos; 755cdf0e10cSrcweir 756cdf0e10cSrcweir // Alten Eintrag durch neuen Eintrag ersetzen 757cdf0e10cSrcweir if (nPos != COMBOBOX_ENTRY_NOTFOUND) 758cdf0e10cSrcweir { 759cdf0e10cSrcweir aNameCB.RemoveEntry(nPos); 760cdf0e10cSrcweir aUrlCB.RemoveEntry(nPos); 761cdf0e10cSrcweir aNameCB.SetText(rName); 762cdf0e10cSrcweir aUrlCB.SetText(rURL); 763cdf0e10cSrcweir } 764cdf0e10cSrcweir 765cdf0e10cSrcweir aNameCB.InsertEntry(sName, 0); 766cdf0e10cSrcweir aUrlCB.InsertEntry(rURL, 0); 767cdf0e10cSrcweir } 768cdf0e10cSrcweir } 769cdf0e10cSrcweir 770cdf0e10cSrcweir /*-------------------------------------------------------------------- 771cdf0e10cSrcweir Beschreibung: Bookmark und Search-Button enablen/disablen 772cdf0e10cSrcweir --------------------------------------------------------------------*/ 773cdf0e10cSrcweir 774cdf0e10cSrcweir IMPL_LINK( SvxHyperlinkDlg, ComboSelectHdl, ComboBox *, pCombo ) 775cdf0e10cSrcweir { 776cdf0e10cSrcweir sal_uInt16 nPos = pCombo->GetEntryPos(pCombo->GetText()); 777cdf0e10cSrcweir 778cdf0e10cSrcweir if (nPos != COMBOBOX_ENTRY_NOTFOUND) 779cdf0e10cSrcweir { 780cdf0e10cSrcweir aNameCB.SetText(aNameCB.GetEntry(nPos)); 781cdf0e10cSrcweir aUrlCB.SetText(aUrlCB.GetEntry(nPos)); 782cdf0e10cSrcweir 783cdf0e10cSrcweir EnableLink(); 784cdf0e10cSrcweir EnableItem(BTN_INSERT_BOOKMARK, sal_True); 785cdf0e10cSrcweir EnableItem(BTN_INET_SEARCH, sal_True); 786cdf0e10cSrcweir } 787cdf0e10cSrcweir return sal_True; 788cdf0e10cSrcweir } 789cdf0e10cSrcweir 790cdf0e10cSrcweir /*-------------------------------------------------------------------- 791cdf0e10cSrcweir Beschreibung: 792cdf0e10cSrcweir --------------------------------------------------------------------*/ 793cdf0e10cSrcweir 794cdf0e10cSrcweir IMPL_LINK( SvxHyperlinkDlg, ComboModifyHdl, ComboBox *, pCombo ) 795cdf0e10cSrcweir { 796cdf0e10cSrcweir sal_Bool bEnable = sal_True; 797cdf0e10cSrcweir 798cdf0e10cSrcweir if (!pCombo->GetText().Len()) 799cdf0e10cSrcweir bEnable = sal_False; 800cdf0e10cSrcweir 801cdf0e10cSrcweir if (pCombo == &aNameCB) 802cdf0e10cSrcweir { 803cdf0e10cSrcweir if (IsItemEnabled(BTN_INET_SEARCH) != bEnable) 804cdf0e10cSrcweir EnableItem(BTN_INET_SEARCH, bEnable); 805cdf0e10cSrcweir } 806cdf0e10cSrcweir 807cdf0e10cSrcweir EnableLink(); 808cdf0e10cSrcweir 809cdf0e10cSrcweir if (aUrlCB.GetText().Len()) 810cdf0e10cSrcweir bEnable = sal_True; 811cdf0e10cSrcweir else 812cdf0e10cSrcweir bEnable = sal_False; 813cdf0e10cSrcweir 814cdf0e10cSrcweir if (IsItemEnabled(BTN_INSERT_BOOKMARK) != bEnable) 815cdf0e10cSrcweir EnableItem(BTN_INSERT_BOOKMARK, bEnable); 816cdf0e10cSrcweir 817cdf0e10cSrcweir return sal_True; 818cdf0e10cSrcweir } 819cdf0e10cSrcweir 820cdf0e10cSrcweir // -------------------------------------------------------------------- 821cdf0e10cSrcweir 822cdf0e10cSrcweir void SvxHyperlinkDlg::DataChanged( const DataChangedEvent& rDCEvt ) 823cdf0e10cSrcweir { 824cdf0e10cSrcweir ToolBox::DataChanged( rDCEvt ); 825cdf0e10cSrcweir 826cdf0e10cSrcweir if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) && (rDCEvt.GetFlags() & SETTINGS_STYLE)) 827cdf0e10cSrcweir SetImages(); 828cdf0e10cSrcweir } 829cdf0e10cSrcweir 830cdf0e10cSrcweir // -------------------------------------------------------------------- 831cdf0e10cSrcweir 832cdf0e10cSrcweir void SvxHyperlinkDlg::SetImages() 833cdf0e10cSrcweir { 834cdf0e10cSrcweir bool bHighContrast = GetSettings().GetStyleSettings().GetHighContrastMode(); 835cdf0e10cSrcweir 836cdf0e10cSrcweir SetItemImage( BTN_LINK, mpManager->GetImage( BTN_LINK, bHighContrast ) ); 837cdf0e10cSrcweir SetItemImage( BTN_INSERT_BOOKMARK, mpManager->GetImage( BTN_INSERT_BOOKMARK, bHighContrast ) ); 838cdf0e10cSrcweir SetItemImage( BTN_INET_SEARCH, mpManager->GetImage( BTN_INET_SEARCH, bHighContrast ) ); 839cdf0e10cSrcweir SetItemImage( BTN_TARGET, mpManager->GetImage( BTN_TARGET, bHighContrast ) ); 840cdf0e10cSrcweir SetItemImage( BTN_OPENDIALOG, mpManager->GetImage( BTN_OPENDIALOG, bHighContrast ) ); 841cdf0e10cSrcweir } 842cdf0e10cSrcweir 843cdf0e10cSrcweir /*-------------------------------------------------------------------- 844cdf0e10cSrcweir Beschreibung: Comboboxen 845cdf0e10cSrcweir --------------------------------------------------------------------*/ 846cdf0e10cSrcweir 847cdf0e10cSrcweir HyperCombo::HyperCombo( SvxHyperlinkDlg* pDialog, const ResId& rResId ) : 848cdf0e10cSrcweir ComboBox( (Window *)pDialog, rResId ) 849cdf0e10cSrcweir { 850cdf0e10cSrcweir pDlg = pDialog; 851cdf0e10cSrcweir 852cdf0e10cSrcweir nMaxWidth = GetSizePixel().Width(); 853cdf0e10cSrcweir if (this == &pDlg->aUrlCB) 854cdf0e10cSrcweir nMinWidth = GetTextWidth(String::CreateFromAscii("http://www.stardiv.dewww")); 855cdf0e10cSrcweir else 856cdf0e10cSrcweir nMinWidth = GetTextWidth(String::CreateFromAscii("StarDivision GmbHwww")); 857cdf0e10cSrcweir } 858cdf0e10cSrcweir 859cdf0e10cSrcweir /*-------------------------------------------------------------------- 860cdf0e10cSrcweir Beschreibung: Comboboxen KeyInput 861cdf0e10cSrcweir --------------------------------------------------------------------*/ 862cdf0e10cSrcweir 863cdf0e10cSrcweir long HyperCombo::Notify( NotifyEvent& rNEvt ) 864cdf0e10cSrcweir { 865cdf0e10cSrcweir long nHandled = 0; 866cdf0e10cSrcweir static sal_Bool bLocked = sal_False; 867cdf0e10cSrcweir 868cdf0e10cSrcweir if (bLocked) // Keine weiteren RETURNs annehmen (nicht Reentrant!) 869cdf0e10cSrcweir return nHandled; 870cdf0e10cSrcweir 871cdf0e10cSrcweir bLocked = sal_True; 872cdf0e10cSrcweir 873cdf0e10cSrcweir if ( rNEvt.GetType() == EVENT_KEYINPUT ) 874cdf0e10cSrcweir { 875cdf0e10cSrcweir const KeyEvent* pKEvt = rNEvt.GetKeyEvent(); 876cdf0e10cSrcweir const KeyCode aKeyCode = pKEvt->GetKeyCode(); 877cdf0e10cSrcweir 878cdf0e10cSrcweir if (aKeyCode.GetCode() == KEY_RETURN) 879cdf0e10cSrcweir { 880cdf0e10cSrcweir pDlg->SendToApp(HLINK_DEFAULT); 881cdf0e10cSrcweir nHandled = 1; 882cdf0e10cSrcweir } 883cdf0e10cSrcweir } 884cdf0e10cSrcweir if (this == &pDlg->aNameCB) 885cdf0e10cSrcweir pDlg->sOldName = GetText(); 886cdf0e10cSrcweir 887cdf0e10cSrcweir if (!nHandled) 888cdf0e10cSrcweir nHandled = ComboBox::Notify( rNEvt ); 889cdf0e10cSrcweir 890cdf0e10cSrcweir bLocked = sal_False; 891cdf0e10cSrcweir 892cdf0e10cSrcweir return nHandled; 893cdf0e10cSrcweir } 894cdf0e10cSrcweir 895cdf0e10cSrcweir /*-------------------------------------------------------------------- 896cdf0e10cSrcweir Beschreibung: Drag&Drop vor dem Combo-Edit abfangen und weiterleiten 897cdf0e10cSrcweir --------------------------------------------------------------------*/ 898cdf0e10cSrcweir 899cdf0e10cSrcweir long HyperCombo::PreNotify( NotifyEvent& rNEvt ) 900cdf0e10cSrcweir { 901cdf0e10cSrcweir long nHandled = 0; 902cdf0e10cSrcweir 903cdf0e10cSrcweir nHandled = ComboBox::PreNotify( rNEvt ); 904cdf0e10cSrcweir 905cdf0e10cSrcweir return nHandled; 906cdf0e10cSrcweir } 907cdf0e10cSrcweir 908cdf0e10cSrcweir /*-------------------------------------------------------------------- 909cdf0e10cSrcweir Beschreibung: 910cdf0e10cSrcweir --------------------------------------------------------------------*/ 911cdf0e10cSrcweir 912cdf0e10cSrcweir long HyperCombo::CalcResizeWidth( long nW ) 913cdf0e10cSrcweir { 914cdf0e10cSrcweir long nNewWidth = Max(nMaxWidth - nW * GetRatio() / 100L, nMinWidth); 915cdf0e10cSrcweir 916cdf0e10cSrcweir if (nNewWidth > nMaxWidth) 917cdf0e10cSrcweir nNewWidth = nMaxWidth; 918cdf0e10cSrcweir 919cdf0e10cSrcweir if (nNewWidth != GetSizePixel().Width()) 920cdf0e10cSrcweir return nNewWidth; 921cdf0e10cSrcweir else 922cdf0e10cSrcweir return 0; // Kein Resize notwendig 923cdf0e10cSrcweir } 924cdf0e10cSrcweir 925cdf0e10cSrcweir /*-------------------------------------------------------------------- 926cdf0e10cSrcweir Beschreibung: 927cdf0e10cSrcweir --------------------------------------------------------------------*/ 928cdf0e10cSrcweir 929cdf0e10cSrcweir void HyperCombo::DoResize( long nNewWidth ) 930cdf0e10cSrcweir { 931cdf0e10cSrcweir SetSizePixel(Size(nNewWidth, GetSizePixel().Height())); 932cdf0e10cSrcweir } 933cdf0e10cSrcweir 934cdf0e10cSrcweir /*-------------------------------------------------------------------- 935cdf0e10cSrcweir Beschreibung: FixedText 936cdf0e10cSrcweir --------------------------------------------------------------------*/ 937cdf0e10cSrcweir 938cdf0e10cSrcweir HyperFixedText::HyperFixedText( SvxHyperlinkDlg* pDialog, const ResId& rResId ) : 939cdf0e10cSrcweir FixedInfo( (Window *)pDialog, rResId ) 940cdf0e10cSrcweir { 941cdf0e10cSrcweir pDlg = pDialog; 942cdf0e10cSrcweir } 943cdf0e10cSrcweir 944cdf0e10cSrcweir /*-------------------------------------------------------------------- 945cdf0e10cSrcweir Beschreibung: Webseite der Search-Engine mit Suchergebnissen anzeigen 946cdf0e10cSrcweir --------------------------------------------------------------------*/ 947cdf0e10cSrcweir void SvxHyperlinkDlg::OpenDoc( const String& rURL, SfxViewFrame* pViewFrame ) 948cdf0e10cSrcweir { 949cdf0e10cSrcweir SfxStringItem aName( SID_FILE_NAME, rURL ); 950cdf0e10cSrcweir SfxStringItem aReferer( SID_REFERER, String::CreateFromAscii("private:user") ); 951cdf0e10cSrcweir SfxBoolItem aNewView( SID_OPEN_NEW_VIEW, sal_True ); 952cdf0e10cSrcweir SfxBoolItem aSilent( SID_SILENT, sal_True ); 953cdf0e10cSrcweir SfxBoolItem aReadOnly( SID_DOC_READONLY, sal_True ); 954cdf0e10cSrcweir SfxBoolItem aExternal( SID_BROWSE, sal_True ); 955cdf0e10cSrcweir SfxDispatcher* pDisp = SfxViewFrame::Current() ? SfxViewFrame::Current()->GetDispatcher() : NULL; 956cdf0e10cSrcweir 957cdf0e10cSrcweir if ( pViewFrame ) 958cdf0e10cSrcweir { 959cdf0e10cSrcweir SfxFrameItem aView( SID_DOCFRAME, pViewFrame ? &pViewFrame->GetFrame() : NULL ); 960cdf0e10cSrcweir if ( pDisp ) 961cdf0e10cSrcweir pDisp->Execute( SID_OPENDOC, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, 962cdf0e10cSrcweir &aName, &aView, &aNewView, &aSilent, &aReadOnly, &aReferer, &aExternal, 0L ); 963cdf0e10cSrcweir } 964cdf0e10cSrcweir else if ( pDisp ) 965cdf0e10cSrcweir pDisp->Execute( SID_OPENDOC, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD, 966cdf0e10cSrcweir &aName, &aNewView, &aSilent, &aReadOnly, &aReferer, 0L ); 967cdf0e10cSrcweir } 968cdf0e10cSrcweir // class SvxHyperlinkDialogWrapper ------------------------------------------ 969cdf0e10cSrcweir 970cdf0e10cSrcweir SFX_IMPL_CHILDWINDOW(SvxHyperlinkDlgWrapper, SID_HYPERLINK_INSERT) 971cdf0e10cSrcweir 972cdf0e10cSrcweir /*-------------------------------------------------------------------- 973cdf0e10cSrcweir Beschreibung: Wrapper fuer Hyperlinkleiste 974cdf0e10cSrcweir --------------------------------------------------------------------*/ 975cdf0e10cSrcweir 976cdf0e10cSrcweir SvxHyperlinkDlgWrapper::SvxHyperlinkDlgWrapper( Window* _pParent, sal_uInt16 nId, 977cdf0e10cSrcweir SfxBindings* _pBindings, SfxChildWinInfo* /*pInfo*/ ) : 978cdf0e10cSrcweir 979cdf0e10cSrcweir SfxChildWindow( _pParent, nId ) 980cdf0e10cSrcweir 981cdf0e10cSrcweir { 982cdf0e10cSrcweir pWindow = new SvxHyperlinkDlg( _pBindings, _pParent ); 983cdf0e10cSrcweir eChildAlignment = SFX_ALIGN_TOP; 984cdf0e10cSrcweir } 985cdf0e10cSrcweir 986cdf0e10cSrcweir /*-------------------------------------------------------------------- 987cdf0e10cSrcweir Beschreibung: 988cdf0e10cSrcweir --------------------------------------------------------------------*/ 989cdf0e10cSrcweir 990cdf0e10cSrcweir SfxChildWinInfo SvxHyperlinkDlgWrapper::GetInfo() const 991cdf0e10cSrcweir { 992cdf0e10cSrcweir SfxChildWinInfo aInfo = SfxChildWindow::GetInfo(); 993cdf0e10cSrcweir return aInfo; 994cdf0e10cSrcweir } 995cdf0e10cSrcweir 996