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