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