Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include <sfx2/frame.hxx>
21 : #include <sfx2/viewfrm.hxx>
22 : #include <sot/formats.hxx>
23 : #include <sfx2/sfxsids.hrc>
24 : #include <svl/macitem.hxx>
25 : #include <ucbhelper/content.hxx>
26 : #include <unotools/localfilehelper.hxx>
27 : #include "hyperdlg.hrc"
28 : #include "cuihyperdlg.hxx"
29 : #include "hltpbase.hxx"
30 : #include "macroass.hxx"
31 : #include <svx/svxdlg.hxx>
32 : #include <cuires.hrc>
33 :
34 : using namespace ::ucbhelper;
35 :
36 : //########################################################################
37 : //# #
38 : //# ComboBox-Control, which is filled with all current framenames #
39 : //# #
40 : //########################################################################
41 :
42 : /*************************************************************************
43 : |*
44 : |* Contructor / Destructor
45 : |*
46 : |************************************************************************/
47 :
48 0 : SvxFramesComboBox::SvxFramesComboBox ( Window* pParent, const ResId& rResId,
49 : SfxDispatcher* pDispatch )
50 0 : : ComboBox (pParent, rResId)
51 : {
52 0 : TargetList* pList = new TargetList;
53 0 : SfxViewFrame* pViewFrame = pDispatch ? pDispatch->GetFrame() : 0;
54 0 : SfxFrame* pFrame = pViewFrame ? &pViewFrame->GetTopFrame() : 0;
55 0 : if ( pFrame )
56 : {
57 0 : pFrame->GetTargetList(*pList);
58 0 : if( !pList->empty() )
59 : {
60 0 : size_t nCount = pList->size();
61 : size_t i;
62 0 : for ( i = 0; i < nCount; i++ )
63 : {
64 0 : InsertEntry( *pList->at( i ) );
65 : }
66 0 : for ( i = nCount; i; )
67 : {
68 0 : delete pList->at( --i );
69 : }
70 : }
71 0 : delete pList;
72 : }
73 0 : }
74 :
75 0 : SvxFramesComboBox::~SvxFramesComboBox ()
76 : {
77 0 : }
78 : //########################################################################
79 : //# #
80 : //# ComboBox-Control for URL's with History and Autocompletion #
81 : //# #
82 : //########################################################################
83 :
84 : /*************************************************************************
85 : |*
86 : |* Contructor / Destructor
87 : |*
88 : |************************************************************************/
89 :
90 0 : SvxHyperURLBox::SvxHyperURLBox( Window* pParent, INetProtocol eSmart )
91 : : SvtURLBox ( pParent, eSmart ),
92 0 : DropTargetHelper ( this )
93 : {
94 0 : }
95 :
96 0 : sal_Int8 SvxHyperURLBox::AcceptDrop( const AcceptDropEvent& /* rEvt */ )
97 : {
98 0 : return( IsDropFormatSupported( FORMAT_STRING ) ? DND_ACTION_COPY : DND_ACTION_NONE );
99 : }
100 :
101 0 : sal_Int8 SvxHyperURLBox::ExecuteDrop( const ExecuteDropEvent& rEvt )
102 : {
103 0 : TransferableDataHelper aDataHelper( rEvt.maDropEvent.Transferable );
104 0 : String aString;
105 0 : sal_Int8 nRet = DND_ACTION_NONE;
106 :
107 0 : if( aDataHelper.GetString( FORMAT_STRING, aString ) )
108 : {
109 0 : SetText( aString );
110 0 : nRet = DND_ACTION_COPY;
111 : }
112 :
113 0 : return nRet;
114 : }
115 :
116 0 : void SvxHyperURLBox::Select()
117 : {
118 0 : SvtURLBox::Select();
119 0 : }
120 0 : void SvxHyperURLBox::Modify()
121 : {
122 0 : SvtURLBox::Modify();
123 0 : }
124 0 : long SvxHyperURLBox::Notify( NotifyEvent& rNEvt )
125 : {
126 0 : return SvtURLBox::Notify( rNEvt );
127 : }
128 0 : long SvxHyperURLBox::PreNotify( NotifyEvent& rNEvt )
129 : {
130 0 : return SvtURLBox::PreNotify( rNEvt );
131 : }
132 :
133 : //########################################################################
134 : //# #
135 : //# Hyperlink-Dialog: Tabpages-Baseclass #
136 : //# #
137 : //########################################################################
138 :
139 : /*************************************************************************
140 : |*
141 : |* Con/Destructor, Initialize
142 : |*
143 : \************************************************************************/
144 :
145 0 : SvxHyperlinkTabPageBase::SvxHyperlinkTabPageBase ( Window *pParent,
146 : const ResId &rResId,
147 : const SfxItemSet& rItemSet )
148 : : IconChoicePage ( pParent, rResId, rItemSet ),
149 : mpGrpMore ( NULL ),
150 : mpFtFrame ( NULL ),
151 : mpCbbFrame ( NULL ),
152 : mpFtForm ( NULL ),
153 : mpLbForm ( NULL ),
154 : mpFtIndication ( NULL ),
155 : mpEdIndication ( NULL ),
156 : mpFtText ( NULL ),
157 : mpEdText ( NULL ),
158 : mpBtScript ( NULL ),
159 : mbIsCloseDisabled ( sal_False ),
160 : mpDialog ( pParent ),
161 : mbStdControlsInit ( sal_False ),
162 0 : aEmptyStr()
163 : {
164 : // create bookmark-window
165 0 : mpMarkWnd = new SvxHlinkDlgMarkWnd ( this );
166 0 : }
167 :
168 0 : SvxHyperlinkTabPageBase::~SvxHyperlinkTabPageBase ()
169 : {
170 0 : maTimer.Stop();
171 :
172 0 : if ( mbStdControlsInit )
173 : {
174 0 : delete mpGrpMore;
175 0 : delete mpFtFrame;
176 0 : delete mpCbbFrame;
177 0 : delete mpFtForm;
178 0 : delete mpLbForm;
179 0 : delete mpFtIndication;
180 0 : delete mpEdIndication;
181 0 : delete mpFtText;
182 0 : delete mpEdText ;
183 0 : delete mpBtScript;
184 : }
185 :
186 0 : delete mpMarkWnd;
187 0 : }
188 :
189 0 : void SvxHyperlinkTabPageBase::ActivatePage()
190 : {
191 0 : TabPage::ActivatePage();
192 0 : }
193 :
194 0 : void SvxHyperlinkTabPageBase::DeactivatePage()
195 : {
196 0 : TabPage::DeactivatePage();
197 0 : }
198 :
199 0 : sal_Bool SvxHyperlinkTabPageBase::QueryClose()
200 : {
201 0 : return !mbIsCloseDisabled;
202 : }
203 :
204 0 : void SvxHyperlinkTabPageBase::InitStdControls ()
205 : {
206 0 : if ( !mbStdControlsInit )
207 : {
208 0 : mpGrpMore = new FixedLine ( this, ResId (GRP_MORE, *m_pResMgr) );
209 0 : mpFtFrame = new FixedText ( this, ResId (FT_FRAME, *m_pResMgr) );
210 0 : mpCbbFrame = new SvxFramesComboBox ( this, ResId (CB_FRAME, *m_pResMgr), GetDispatcher() );
211 0 : mpFtForm = new FixedText ( this, ResId (FT_FORM, *m_pResMgr) );
212 0 : mpLbForm = new ListBox ( this, ResId (LB_FORM, *m_pResMgr) );
213 0 : mpFtIndication= new FixedText ( this, ResId (FT_INDICATION, *m_pResMgr) );
214 0 : mpEdIndication= new Edit ( this, ResId (ED_INDICATION, *m_pResMgr) );
215 0 : mpFtText = new FixedText ( this, ResId (FT_TEXT, *m_pResMgr) );
216 0 : mpEdText = new Edit ( this, ResId (ED_TEXT, *m_pResMgr) );
217 0 : mpBtScript = new ImageButton ( this, ResId (BTN_SCRIPT, *m_pResMgr) );
218 :
219 0 : mpBtScript->SetClickHdl ( LINK ( this, SvxHyperlinkTabPageBase, ClickScriptHdl_Impl ) );
220 0 : mpBtScript->EnableTextDisplay (sal_False);
221 :
222 0 : mpBtScript->SetAccessibleRelationMemberOf( mpGrpMore );
223 0 : mpBtScript->SetAccessibleRelationLabeledBy( mpFtForm );
224 : }
225 :
226 0 : mbStdControlsInit = sal_True;
227 0 : }
228 :
229 : /*************************************************************************
230 : |*
231 : |* Move Extra-Window
232 : |*
233 : \************************************************************************/
234 :
235 0 : sal_Bool SvxHyperlinkTabPageBase::MoveToExtraWnd( Point aNewPos, sal_Bool bDisConnectDlg )
236 : {
237 0 : sal_Bool bReturn = mpMarkWnd->MoveTo ( aNewPos );
238 :
239 0 : if( bDisConnectDlg )
240 0 : mpMarkWnd->ConnectToDialog( sal_False );
241 :
242 0 : return ( !bReturn && IsMarkWndVisible() );
243 : }
244 :
245 : /*************************************************************************
246 : |*
247 : |* Show Extra-Window
248 : |*
249 : \************************************************************************/
250 :
251 0 : void SvxHyperlinkTabPageBase::ShowMarkWnd ()
252 : {
253 0 : ( ( Window* ) mpMarkWnd )->Show();
254 :
255 : // Size of dialog-window in screen pixels
256 0 : Rectangle aDlgRect( mpDialog->GetWindowExtentsRelative( NULL ) );
257 0 : Point aDlgPos ( aDlgRect.TopLeft() );
258 0 : Size aDlgSize ( mpDialog->GetSizePixel () );
259 :
260 : // Absolute size of the screen
261 0 : Rectangle aScreen( mpDialog->GetDesktopRectPixel() );
262 :
263 : // Size of Extrawindow
264 0 : Size aExtraWndSize( mpMarkWnd->GetSizePixel () );
265 :
266 : // mpMarkWnd is a child of mpDialog, so coordinates for positioning must be relative to mpDialog
267 0 : if( aDlgPos.X()+(1.05*aDlgSize.Width())+aExtraWndSize.Width() > aScreen.Right() )
268 : {
269 0 : if( aDlgPos.X() - ( 0.05*aDlgSize.Width() ) - aExtraWndSize.Width() < 0 )
270 : {
271 : // Pos Extrawindow anywhere
272 0 : MoveToExtraWnd( Point(10,10) ); // very unlikely
273 0 : mpMarkWnd->ConnectToDialog( sal_False );
274 : }
275 : else
276 : {
277 : // Pos Extrawindow on the left side of Dialog
278 0 : MoveToExtraWnd( Point(0,0) - Point( long(0.05*aDlgSize.Width()), 0 ) - Point( aExtraWndSize.Width(), 0 ) );
279 : }
280 : }
281 : else
282 : {
283 : // Pos Extrawindow on the right side of Dialog
284 0 : MoveToExtraWnd ( Point( long(1.05*aDlgSize.getWidth()), 0 ) );
285 : }
286 :
287 : // Set size of Extra-Window
288 0 : mpMarkWnd->SetSizePixel( Size( aExtraWndSize.Width(), aDlgSize.Height() ) );
289 0 : }
290 :
291 : /*************************************************************************
292 : |*
293 : |* Fill Dialogfields
294 : |*
295 : \************************************************************************/
296 :
297 0 : void SvxHyperlinkTabPageBase::FillStandardDlgFields ( SvxHyperlinkItem* pHyperlinkItem )
298 : {
299 : // Frame
300 0 : sal_uInt16 nPos = mpCbbFrame->GetEntryPos ( pHyperlinkItem->GetTargetFrame() );
301 0 : if ( nPos != LISTBOX_ENTRY_NOTFOUND)
302 0 : mpCbbFrame->SetText ( pHyperlinkItem->GetTargetFrame() );
303 :
304 : // Form
305 0 : String aStrFormText = CUI_RESSTR( RID_SVXSTR_HYPERDLG_FROM_TEXT );
306 0 : String aStrFormButton = CUI_RESSTR( RID_SVXSTR_HYPERDLG_FORM_BUTTON );
307 :
308 0 : if( pHyperlinkItem->GetInsertMode() & HLINK_HTMLMODE )
309 : {
310 0 : mpLbForm->Clear();
311 0 : mpLbForm->InsertEntry( aStrFormText );
312 0 : mpLbForm->SelectEntryPos ( 0 );
313 : }
314 : else
315 : {
316 0 : mpLbForm->Clear();
317 0 : mpLbForm->InsertEntry( aStrFormText );
318 0 : mpLbForm->InsertEntry( aStrFormButton );
319 0 : mpLbForm->SelectEntryPos ( pHyperlinkItem->GetInsertMode() == HLINK_BUTTON ? 1 : 0 );
320 : }
321 :
322 : // URL
323 0 : mpEdIndication->SetText ( pHyperlinkItem->GetName() );
324 :
325 : // Name
326 0 : mpEdText->SetText ( pHyperlinkItem->GetIntName() );
327 :
328 : // Script-button
329 0 : if ( !pHyperlinkItem->GetMacroEvents() )
330 0 : mpBtScript->Disable();
331 : else
332 0 : mpBtScript->Enable();
333 0 : }
334 :
335 : /*************************************************************************
336 : |*
337 : |* Any action to do after apply-button is pressed
338 : |*
339 : \************************************************************************/
340 :
341 0 : void SvxHyperlinkTabPageBase::DoApply ()
342 : {
343 : // default-implemtation : do nothing
344 0 : }
345 :
346 : /*************************************************************************
347 : |*
348 : |* Ask page whether an insert is possible
349 : |*
350 : \************************************************************************/
351 :
352 0 : sal_Bool SvxHyperlinkTabPageBase::AskApply ()
353 : {
354 : // default-implementation
355 0 : return sal_True;
356 : }
357 :
358 : /*************************************************************************
359 : |*
360 : |* This method would be called from bookmark-window to set new mark-string
361 : |*
362 : \************************************************************************/
363 :
364 0 : void SvxHyperlinkTabPageBase::SetMarkStr ( String& /*aStrMark*/ )
365 : {
366 : // default-implemtation : do nothing
367 0 : }
368 :
369 : /*************************************************************************
370 : |*
371 : |* This method will be called from the dialog-class if the state off
372 : |* the online-mode has changed.
373 : |*
374 : \************************************************************************/
375 :
376 0 : void SvxHyperlinkTabPageBase::SetOnlineMode( sal_Bool /*bEnable*/ )
377 : {
378 : // default-implemtation : do nothing
379 0 : }
380 :
381 : /*************************************************************************
382 : |*
383 : |* Set initial focus
384 : |*
385 : |************************************************************************/
386 :
387 0 : void SvxHyperlinkTabPageBase::SetInitFocus()
388 : {
389 0 : GrabFocus();
390 0 : }
391 :
392 : /*************************************************************************
393 : |*
394 : |* Ask dialog whether the curretn doc is a HTML-doc
395 : |*
396 : |************************************************************************/
397 :
398 0 : sal_Bool SvxHyperlinkTabPageBase::IsHTMLDoc() const
399 : {
400 0 : return ((SvxHpLinkDlg*)mpDialog)->IsHTMLDoc();
401 : }
402 :
403 : /*************************************************************************
404 : |*
405 : |* retrieve dispatcher
406 : |*
407 : |************************************************************************/
408 :
409 0 : SfxDispatcher* SvxHyperlinkTabPageBase::GetDispatcher() const
410 : {
411 0 : return ((SvxHpLinkDlg*)mpDialog)->GetDispatcher();
412 : }
413 :
414 : /*************************************************************************
415 : |*
416 : |* Click on imagebutton : Script
417 : |*
418 : |************************************************************************/
419 :
420 0 : IMPL_LINK_NOARG(SvxHyperlinkTabPageBase, ClickScriptHdl_Impl)
421 : {
422 : SvxHyperlinkItem *pHyperlinkItem = (SvxHyperlinkItem *)
423 0 : GetItemSet().GetItem (SID_HYPERLINK_GETLINK);
424 :
425 0 : if ( pHyperlinkItem->GetMacroEvents() )
426 : {
427 : // get macros from itemset
428 0 : const SvxMacroTableDtor* pMacroTbl = pHyperlinkItem->GetMacroTbl();
429 0 : SvxMacroItem aItem ( GetWhich(SID_ATTR_MACROITEM) );
430 0 : if( pMacroTbl )
431 0 : aItem.SetMacroTable( *pMacroTbl );
432 :
433 : // create empty itemset for macro-dlg
434 0 : SfxItemSet* pItemSet = new SfxItemSet(SFX_APP()->GetPool(),
435 : SID_ATTR_MACROITEM,
436 0 : SID_ATTR_MACROITEM );
437 0 : pItemSet->Put ( aItem, SID_ATTR_MACROITEM );
438 :
439 : /* disable HyperLinkDlg for input while the MacroAssignDlg is working
440 : because if no JAVA is installed an error box occurs and then it is possible
441 : to close the HyperLinkDlg before its child (MacroAssignDlg) -> GPF
442 : */
443 0 : sal_Bool bIsInputEnabled = GetParent()->IsInputEnabled();
444 0 : if ( bIsInputEnabled )
445 0 : GetParent()->EnableInput( sal_False );
446 0 : SfxMacroAssignDlg aDlg( this, mxDocumentFrame, *pItemSet );
447 :
448 : // add events
449 0 : SfxMacroTabPage *pMacroPage = (SfxMacroTabPage*) aDlg.GetTabPage();
450 :
451 0 : if ( pHyperlinkItem->GetMacroEvents() & HYPERDLG_EVENT_MOUSEOVER_OBJECT )
452 0 : pMacroPage->AddEvent( String( CUI_RESSTR(RID_SVXSTR_HYPDLG_MACROACT1) ),
453 0 : SFX_EVENT_MOUSEOVER_OBJECT );
454 0 : if ( pHyperlinkItem->GetMacroEvents() & HYPERDLG_EVENT_MOUSECLICK_OBJECT )
455 0 : pMacroPage->AddEvent( String( CUI_RESSTR(RID_SVXSTR_HYPDLG_MACROACT2) ),
456 0 : SFX_EVENT_MOUSECLICK_OBJECT);
457 0 : if ( pHyperlinkItem->GetMacroEvents() & HYPERDLG_EVENT_MOUSEOUT_OBJECT )
458 0 : pMacroPage->AddEvent( String( CUI_RESSTR(RID_SVXSTR_HYPDLG_MACROACT3) ),
459 0 : SFX_EVENT_MOUSEOUT_OBJECT);
460 :
461 0 : if ( bIsInputEnabled )
462 0 : GetParent()->EnableInput( sal_True );
463 : // execute dlg
464 0 : DisableClose( sal_True );
465 0 : short nRet = aDlg.Execute();
466 0 : DisableClose( sal_False );
467 0 : if ( RET_OK == nRet )
468 : {
469 0 : const SfxItemSet* pOutSet = aDlg.GetOutputItemSet();
470 : const SfxPoolItem* pItem;
471 0 : if( SFX_ITEM_SET == pOutSet->GetItemState( SID_ATTR_MACROITEM, sal_False, &pItem ))
472 : {
473 0 : pHyperlinkItem->SetMacroTable( ((SvxMacroItem*)pItem)->GetMacroTable() );
474 : }
475 : }
476 0 : delete pItemSet;
477 : }
478 :
479 0 : return( 0L );
480 : }
481 :
482 : /*************************************************************************
483 : |*
484 : |* Get Macro-Infos
485 : |*
486 : |************************************************************************/
487 :
488 0 : sal_uInt16 SvxHyperlinkTabPageBase::GetMacroEvents()
489 : {
490 : SvxHyperlinkItem *pHyperlinkItem = (SvxHyperlinkItem *)
491 0 : GetItemSet().GetItem (SID_HYPERLINK_GETLINK);
492 :
493 0 : return pHyperlinkItem->GetMacroEvents();
494 : }
495 :
496 0 : SvxMacroTableDtor* SvxHyperlinkTabPageBase::GetMacroTable()
497 : {
498 : SvxHyperlinkItem *pHyperlinkItem = (SvxHyperlinkItem *)
499 0 : GetItemSet().GetItem (SID_HYPERLINK_GETLINK);
500 :
501 0 : return ( (SvxMacroTableDtor*)pHyperlinkItem->GetMacroTbl() );
502 : }
503 :
504 : /*************************************************************************
505 : |*
506 : |* try to detect the current protocol that is used in aStrURL
507 : |*
508 : |************************************************************************/
509 :
510 0 : String SvxHyperlinkTabPageBase::GetSchemeFromURL( String aStrURL )
511 : {
512 0 : String aStrScheme;
513 :
514 0 : INetURLObject aURL( aStrURL );
515 0 : INetProtocol aProtocol = aURL.GetProtocol();
516 :
517 : // #77696#
518 : // our new INetUrlObject now has the ability
519 : // to detect if an Url is valid or not :-(
520 0 : if ( aProtocol == INET_PROT_NOT_VALID )
521 : {
522 0 : if ( aStrURL.EqualsIgnoreCaseAscii( INET_HTTP_SCHEME, 0, 7 ) )
523 : {
524 0 : aStrScheme = rtl::OUString( INET_HTTP_SCHEME );
525 : }
526 0 : else if ( aStrURL.EqualsIgnoreCaseAscii( INET_HTTPS_SCHEME, 0, 8 ) )
527 : {
528 0 : aStrScheme = rtl::OUString( INET_HTTPS_SCHEME );
529 : }
530 0 : else if ( aStrURL.EqualsIgnoreCaseAscii( INET_FTP_SCHEME, 0, 6 ) )
531 : {
532 0 : aStrScheme = rtl::OUString( INET_FTP_SCHEME );
533 : }
534 0 : else if ( aStrURL.EqualsIgnoreCaseAscii( INET_MAILTO_SCHEME, 0, 7 ) )
535 : {
536 0 : aStrScheme = rtl::OUString( INET_MAILTO_SCHEME );
537 : }
538 0 : else if ( aStrURL.EqualsIgnoreCaseAscii( INET_NEWS_SCHEME, 0, 5 ) )
539 : {
540 0 : aStrScheme = rtl::OUString( INET_NEWS_SCHEME );
541 : }
542 : }
543 : else
544 0 : aStrScheme = INetURLObject::GetScheme( aProtocol );
545 0 : return aStrScheme;
546 : }
547 :
548 :
549 0 : void SvxHyperlinkTabPageBase::GetDataFromCommonFields( String& aStrName,
550 : String& aStrIntName, String& aStrFrame,
551 : SvxLinkInsertMode& eMode )
552 : {
553 0 : aStrIntName = mpEdText->GetText();
554 0 : aStrName = mpEdIndication->GetText();
555 0 : aStrFrame = mpCbbFrame->GetText();
556 0 : eMode = (SvxLinkInsertMode) (mpLbForm->GetSelectEntryPos()+1);
557 0 : if( IsHTMLDoc() )
558 0 : eMode = (SvxLinkInsertMode) ( sal_uInt16(eMode) | HLINK_HTMLMODE );
559 0 : }
560 :
561 : /*************************************************************************
562 : |*
563 : |* reset dialog-fields
564 : |*
565 : |************************************************************************/
566 :
567 0 : void SvxHyperlinkTabPageBase::Reset( const SfxItemSet& rItemSet)
568 : {
569 : ///////////////////////////////////////
570 : // Set dialog-fields from create-itemset
571 0 : maStrInitURL = aEmptyStr;
572 :
573 : SvxHyperlinkItem *pHyperlinkItem = (SvxHyperlinkItem *)
574 0 : rItemSet.GetItem (SID_HYPERLINK_GETLINK);
575 :
576 0 : if ( pHyperlinkItem )
577 : {
578 : // set dialog-fields
579 0 : FillStandardDlgFields (pHyperlinkItem);
580 :
581 : // set all other fields
582 0 : FillDlgFields ( (String&)pHyperlinkItem->GetURL() );
583 :
584 : // Store initial URL
585 0 : maStrInitURL = pHyperlinkItem->GetURL();
586 : }
587 0 : }
588 :
589 : /*************************************************************************
590 : |*
591 : |* Fill output-ItemSet
592 : |*
593 : |************************************************************************/
594 :
595 0 : sal_Bool SvxHyperlinkTabPageBase::FillItemSet( SfxItemSet& rOut)
596 : {
597 0 : String aStrURL, aStrName, aStrIntName, aStrFrame;
598 : SvxLinkInsertMode eMode;
599 :
600 0 : GetCurentItemData ( aStrURL, aStrName, aStrIntName, aStrFrame, eMode);
601 0 : if ( !aStrName.Len() ) //automatically create a visible name if the link is created without name
602 0 : aStrName = CreateUiNameFromURL(aStrURL);
603 :
604 0 : sal_uInt16 nEvents = GetMacroEvents();
605 0 : SvxMacroTableDtor* pTable = GetMacroTable();
606 :
607 : SvxHyperlinkItem aItem( SID_HYPERLINK_SETLINK, aStrName, aStrURL, aStrFrame,
608 0 : aStrIntName, eMode, nEvents, pTable );
609 0 : rOut.Put (aItem);
610 :
611 0 : return sal_True;
612 : }
613 :
614 0 : String SvxHyperlinkTabPageBase::CreateUiNameFromURL( const String& aStrURL )
615 : {
616 0 : String aStrUiURL;
617 0 : INetURLObject aURLObj( aStrURL );
618 :
619 0 : switch(aURLObj.GetProtocol())
620 : {
621 : case INET_PROT_FILE:
622 0 : utl::LocalFileHelper::ConvertURLToSystemPath( aURLObj.GetMainURL(INetURLObject::NO_DECODE), aStrUiURL );
623 0 : break;
624 : case INET_PROT_FTP :
625 : {
626 : //remove password from name
627 0 : INetURLObject aTmpURL(aURLObj);
628 0 : aTmpURL.SetPass(aEmptyStr);
629 0 : aStrUiURL = aTmpURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS );
630 : }
631 0 : break;
632 : default :
633 : {
634 0 : aStrUiURL = aURLObj.GetMainURL(INetURLObject::DECODE_UNAMBIGUOUS);
635 : }
636 : }
637 0 : if(!aStrUiURL.Len())
638 0 : return aStrURL;
639 0 : return aStrUiURL;
640 : }
641 :
642 : /*************************************************************************
643 : |*
644 : |* Activate / Deactivate Tabpage
645 : |*
646 : |************************************************************************/
647 :
648 0 : void SvxHyperlinkTabPageBase::ActivatePage( const SfxItemSet& rItemSet )
649 : {
650 : ///////////////////////////////////////
651 : // Set dialog-fields from input-itemset
652 : SvxHyperlinkItem *pHyperlinkItem = (SvxHyperlinkItem *)
653 0 : rItemSet.GetItem (SID_HYPERLINK_GETLINK);
654 :
655 0 : if ( pHyperlinkItem )
656 : {
657 : // standard-fields
658 0 : FillStandardDlgFields (pHyperlinkItem);
659 : }
660 :
661 : // show mark-window if it was open before
662 0 : if ( ShouldOpenMarkWnd () )
663 0 : ShowMarkWnd ();
664 0 : }
665 :
666 0 : int SvxHyperlinkTabPageBase::DeactivatePage( SfxItemSet* _pSet)
667 : {
668 : // hide mark-wnd
669 0 : SetMarkWndShouldOpen( IsMarkWndVisible () );
670 0 : HideMarkWnd ();
671 :
672 : // retrieve data of dialog
673 0 : String aStrURL, aStrName, aStrIntName, aStrFrame;
674 : SvxLinkInsertMode eMode;
675 :
676 0 : GetCurentItemData ( aStrURL, aStrName, aStrIntName, aStrFrame, eMode);
677 :
678 0 : sal_uInt16 nEvents = GetMacroEvents();
679 0 : SvxMacroTableDtor* pTable = GetMacroTable();
680 :
681 0 : if( _pSet )
682 : {
683 : SvxHyperlinkItem aItem( SID_HYPERLINK_GETLINK, aStrName, aStrURL, aStrFrame,
684 0 : aStrIntName, eMode, nEvents, pTable );
685 0 : _pSet->Put( aItem );
686 : }
687 :
688 0 : return( LEAVE_PAGE );
689 : }
690 :
691 0 : sal_Bool SvxHyperlinkTabPageBase::ShouldOpenMarkWnd()
692 : {
693 0 : return sal_False;
694 : }
695 :
696 0 : void SvxHyperlinkTabPageBase::SetMarkWndShouldOpen(sal_Bool)
697 : {
698 3 : }
699 :
700 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|