xref: /aoo41x/main/svx/source/dialog/hyprlink.cxx (revision f6e50924)
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