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