1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_cui.hxx"
26
27 #include <sfx2/frame.hxx>
28 #include <sfx2/viewfrm.hxx>
29 #include <sot/formats.hxx>
30 #include <sfx2/sfxsids.hrc>
31 #include <svl/macitem.hxx>
32 #include <ucbhelper/content.hxx>
33 #include <unotools/localfilehelper.hxx>
34 #include "hyperdlg.hrc"
35 #include "cuihyperdlg.hxx" //CHINA001
36 #include "hltpbase.hxx"
37 #include "macroass.hxx"
38 #include <svx/svxdlg.hxx> //CHINA001
39 #include <cuires.hrc> //CHINA001
40
41 using namespace ::ucbhelper;
42
43 //########################################################################
44 //# #
45 //# ComboBox-Control, wich is filled with all current framenames #
46 //# #
47 //########################################################################
48
49 /*************************************************************************
50 |*
51 |* Contructor / Destructor
52 |*
53 |************************************************************************/
54
SvxFramesComboBox(Window * pParent,const ResId & rResId,SfxDispatcher * pDispatch)55 SvxFramesComboBox::SvxFramesComboBox ( Window* pParent, const ResId& rResId,
56 SfxDispatcher* pDispatch )
57 : ComboBox (pParent, rResId)
58 {
59 TargetList* pList = new TargetList;
60 SfxViewFrame* pViewFrame = pDispatch ? pDispatch->GetFrame() : 0;
61 SfxFrame* pFrame = pViewFrame ? &pViewFrame->GetTopFrame() : 0;
62 if ( pFrame )
63 {
64 pFrame->GetTargetList(*pList);
65 sal_uInt16 nCount = (sal_uInt16)pList->Count();
66 if( nCount )
67 {
68 sal_uInt16 i;
69 for ( i = 0; i < nCount; i++ )
70 {
71 InsertEntry(*pList->GetObject(i));
72 }
73 for ( i = nCount; i; i-- )
74 {
75 delete pList->GetObject( i - 1 );
76 }
77 }
78 delete pList;
79 }
80 }
81
~SvxFramesComboBox()82 SvxFramesComboBox::~SvxFramesComboBox ()
83 {
84 }
85 //########################################################################
86 //# #
87 //# ComboBox-Control for URL's with History and Autocompletion #
88 //# #
89 //########################################################################
90
91 /*************************************************************************
92 |*
93 |* Contructor / Destructor
94 |*
95 |************************************************************************/
96
SvxHyperURLBox(Window * pParent,INetProtocol eSmart,sal_Bool bAddresses)97 SvxHyperURLBox::SvxHyperURLBox( Window* pParent, INetProtocol eSmart, sal_Bool bAddresses )
98 : SvtURLBox ( pParent, eSmart ),
99 DropTargetHelper ( this ),
100 mbAccessAddress (bAddresses)
101 {
102 }
103
AcceptDrop(const AcceptDropEvent &)104 sal_Int8 SvxHyperURLBox::AcceptDrop( const AcceptDropEvent& /* rEvt */ )
105 {
106 return( IsDropFormatSupported( FORMAT_STRING ) ? DND_ACTION_COPY : DND_ACTION_NONE );
107 }
108
ExecuteDrop(const ExecuteDropEvent & rEvt)109 sal_Int8 SvxHyperURLBox::ExecuteDrop( const ExecuteDropEvent& rEvt )
110 {
111 TransferableDataHelper aDataHelper( rEvt.maDropEvent.Transferable );
112 String aString;
113 sal_Int8 nRet = DND_ACTION_NONE;
114
115 if( aDataHelper.GetString( FORMAT_STRING, aString ) )
116 {
117 SetText( aString );
118 nRet = DND_ACTION_COPY;
119 }
120
121 return nRet;
122 }
123
124 /*
125 Diese Methode parsed eine EMailadresse aus einem D&D-DataObjekt aus der Adre�datenbank heraus
126
127 #ifndef _OFF_OFADBMGR_HXX
128 #include <offmgr/ofadbmgr.hxx>
129 #endif
130 #ifndef _SFX_APP_HXX
131 #include <offmgr/app.hxx>
132 #endif
133 #ifndef _SDB_SDBCURS_HXX
134 #include <sdb/sdbcurs.hxx>
135 #endif
136
137 #define DB_DD_DELIM ((char)11)
138
139 String SvxHyperURLBox::GetAllEmailNamesFromDragItem( sal_uInt16 nItem )
140 {
141 #if !defined( ICC ) && !defined( SOLARIS )
142 String aAddress;
143
144 if ( DragServer::HasFormat( nItem, SOT_FORMATSTR_ID_SBA_DATAEXCHANGE ) )
145 {
146 sal_uLong nLen = DragServer::GetDataLen( nItem, SOT_FORMATSTR_ID_SBA_DATAEXCHANGE ) - 1;
147 sal_uInt16 i = 0;
148 String aTxt;
149 char *pTxt = aTxt.AllocStrBuf( (sal_uInt16)nLen );
150 DragServer::PasteData( nItem, pTxt, nLen, SOT_FORMATSTR_ID_SBA_DATAEXCHANGE );
151 String aDBName = aTxt.GetToken( i++, DB_DD_DELIM );
152 String aTableName = aTxt.GetToken( i++, DB_DD_DELIM );
153 i++; // Format"anderung
154 String aStatement = aTxt.GetToken( i++, DB_DD_DELIM );
155 if ( !aStatement )
156 {
157 aDBName += DB_DELIM;
158 aDBName += aTableName;
159 }
160 else
161 {
162 // use here another delimiter, because the OfaDBMgr uses two
163 // delimiters ( (char)11 and ; )
164 aDBName += ';';
165 aDBName += aStatement;
166 }
167 SbaSelectionListRef pSelectionList;
168 pSelectionList.Clear();
169 pSelectionList = new SbaSelectionList;
170 sal_uInt16 nTokCnt = aTxt.GetTokenCount( DB_DD_DELIM );
171
172 for ( ; i < nTokCnt; ++i )
173 pSelectionList->Insert(
174 (void*)(sal_uInt16)aTxt.GetToken( i, DB_DD_DELIM ), LIST_APPEND );
175
176 OfaDBMgr* pDBMgr = SFX_APP()->GetOfaDBMgr();
177 sal_Bool bBasic = DBMGR_STD;
178
179 if ( !pDBMgr->OpenDB( bBasic, aDBName ) )
180 return aAddress;
181
182 OfaDBParam& rParam = pDBMgr->GetDBData( bBasic );
183 pDBMgr->ChangeStatement( bBasic, aStatement );
184 rParam.pSelectionList->Clear();
185
186 if ( pSelectionList.Is() &&
187 (long)pSelectionList->GetObject(0) != -1L )
188 *rParam.pSelectionList = *pSelectionList;
189
190 if ( !pDBMgr->ToFirstSelectedRecord( bBasic ) )
191 {
192 pDBMgr->CloseAll();
193 return aAddress;
194 }
195
196 if ( pDBMgr->IsSuccessful( bBasic ) )
197 {
198 // Spaltenk"opfe
199 SbaDBDataDefRef aDBDef = pDBMgr->OpenColumnNames( bBasic );
200
201 if ( aDBDef.Is() )
202 {
203 SbaColumn* pCol = aDBDef->GetColumn("EMAIL");
204 sal_uLong nPos = 0;
205
206 if ( pCol )
207 nPos = aDBDef->GetOriginalColumns().GetPos( pCol ) + 1;
208 for ( i = 0 ; nPos && i < pSelectionList->Count(); ++i )
209 {
210 sal_uLong nIndex = (sal_uLong)pSelectionList->GetObject(i);
211
212 // N"achsten zu lesenden Datensatz ansteuern
213
214 sal_Bool bEnd = rParam.GetCursor()->IsOffRange();
215
216 if ( !bEnd )
217 {
218 const ODbRowRef aRow =
219 pDBMgr->GetSelectedRecord( bBasic, i );
220
221 if ( aRow.Is() )
222 {
223 aAddress += pDBMgr->
224 ImportDBField( (sal_uInt16)nPos, &aDBDef, aRow.getBodyPtr() );
225 aAddress += ',';
226 }
227 else
228 {
229 aAddress.Erase();
230 break;
231 }
232 }
233 else
234 break;
235 }
236 }
237 }
238 pDBMgr->CloseAll();
239 }
240 aAddress.EraseTrailingChars( ',' );
241 return aAddress;
242 #else
243 return String();
244 #endif
245 }
246 */
247
Select()248 void SvxHyperURLBox::Select()
249 {
250 SvtURLBox::Select();
251 }
Modify()252 void SvxHyperURLBox::Modify()
253 {
254 SvtURLBox::Modify();
255 }
Notify(NotifyEvent & rNEvt)256 long SvxHyperURLBox::Notify( NotifyEvent& rNEvt )
257 {
258 return SvtURLBox::Notify( rNEvt );
259 }
PreNotify(NotifyEvent & rNEvt)260 long SvxHyperURLBox::PreNotify( NotifyEvent& rNEvt )
261 {
262 return SvtURLBox::PreNotify( rNEvt );
263 }
264
265 //########################################################################
266 //# #
267 //# Hyperlink-Dialog: Tabpages-Baseclass #
268 //# #
269 //########################################################################
270
271 /*************************************************************************
272 |*
273 |* Con/Destructor, Initialize
274 |*
275 \************************************************************************/
276
SvxHyperlinkTabPageBase(Window * pParent,const ResId & rResId,const SfxItemSet & rItemSet)277 SvxHyperlinkTabPageBase::SvxHyperlinkTabPageBase ( Window *pParent,
278 const ResId &rResId,
279 const SfxItemSet& rItemSet )
280 : IconChoicePage ( pParent, rResId, rItemSet ),
281 mpGrpMore ( NULL ),
282 mpFtFrame ( NULL ),
283 mpCbbFrame ( NULL ),
284 mpFtForm ( NULL ),
285 mpLbForm ( NULL ),
286 mpFtIndication ( NULL ),
287 mpEdIndication ( NULL ),
288 mpFtText ( NULL ),
289 mpEdText ( NULL ),
290 mpBtScript ( NULL ),
291 mbIsCloseDisabled ( sal_False ),
292 mpDialog ( pParent ),
293 mbStdControlsInit ( sal_False ),
294 aEmptyStr()
295 {
296 // create bookmark-window
297 mpMarkWnd = new SvxHlinkDlgMarkWnd ( this );
298 }
299
~SvxHyperlinkTabPageBase()300 SvxHyperlinkTabPageBase::~SvxHyperlinkTabPageBase ()
301 {
302 maTimer.Stop();
303
304 if ( mbStdControlsInit )
305 {
306 delete mpGrpMore;
307 delete mpFtFrame;
308 delete mpCbbFrame;
309 delete mpFtForm;
310 delete mpLbForm;
311 delete mpFtIndication;
312 delete mpEdIndication;
313 delete mpFtText;
314 delete mpEdText ;
315 delete mpBtScript;
316 }
317
318 delete mpMarkWnd;
319 }
320
ActivatePage()321 void SvxHyperlinkTabPageBase::ActivatePage()
322 {
323 TabPage::ActivatePage();
324 }
325
DeactivatePage()326 void SvxHyperlinkTabPageBase::DeactivatePage()
327 {
328 TabPage::DeactivatePage();
329 }
330
QueryClose()331 sal_Bool SvxHyperlinkTabPageBase::QueryClose()
332 {
333 return !mbIsCloseDisabled;
334 }
335
InitStdControls()336 void SvxHyperlinkTabPageBase::InitStdControls ()
337 {
338 if ( !mbStdControlsInit )
339 {
340 mpGrpMore = new FixedLine ( this, ResId (GRP_MORE, *m_pResMgr) );
341 mpFtFrame = new FixedText ( this, ResId (FT_FRAME, *m_pResMgr) );
342 mpCbbFrame = new SvxFramesComboBox ( this, ResId (CB_FRAME, *m_pResMgr), GetDispatcher() );
343 mpFtForm = new FixedText ( this, ResId (FT_FORM, *m_pResMgr) );
344 mpLbForm = new ListBox ( this, ResId (LB_FORM, *m_pResMgr) );
345 mpFtIndication= new FixedText ( this, ResId (FT_INDICATION, *m_pResMgr) );
346 mpEdIndication= new Edit ( this, ResId (ED_INDICATION, *m_pResMgr) );
347 mpFtText = new FixedText ( this, ResId (FT_TEXT, *m_pResMgr) );
348 mpEdText = new Edit ( this, ResId (ED_TEXT, *m_pResMgr) );
349 mpBtScript = new ImageButton ( this, ResId (BTN_SCRIPT, *m_pResMgr) );
350
351 mpBtScript->SetClickHdl ( LINK ( this, SvxHyperlinkTabPageBase, ClickScriptHdl_Impl ) );
352
353 mpBtScript->SetModeImage( Image( ResId( IMG_SCRIPT_HC, *m_pResMgr ) ), BMP_COLOR_HIGHCONTRAST );
354 mpBtScript->EnableTextDisplay (sal_False);
355
356 mpBtScript->SetAccessibleRelationMemberOf( mpGrpMore );
357 mpBtScript->SetAccessibleRelationLabeledBy( mpFtForm );
358 }
359
360 mbStdControlsInit = sal_True;
361 }
362
363 /*************************************************************************
364 |*
365 |* Move Extra-Window
366 |*
367 \************************************************************************/
368
MoveToExtraWnd(Point aNewPos,sal_Bool bDisConnectDlg)369 sal_Bool SvxHyperlinkTabPageBase::MoveToExtraWnd( Point aNewPos, sal_Bool bDisConnectDlg )
370 {
371 sal_Bool bReturn = mpMarkWnd->MoveTo ( aNewPos );
372
373 if( bDisConnectDlg )
374 mpMarkWnd->ConnectToDialog( sal_False );
375
376 return ( !bReturn && IsMarkWndVisible() );
377 }
378
379 /*************************************************************************
380 |*
381 |* Show Extra-Window
382 |*
383 \************************************************************************/
384
ShowMarkWnd()385 void SvxHyperlinkTabPageBase::ShowMarkWnd ()
386 {
387 ( ( Window* ) mpMarkWnd )->Show();
388
389 // Size of dialog-window in screen pixels
390 Rectangle aDlgRect( mpDialog->GetWindowExtentsRelative( NULL ) );
391 Point aDlgPos ( aDlgRect.TopLeft() );
392 Size aDlgSize ( mpDialog->GetSizePixel () );
393
394 // Absolute size of the screen
395 Rectangle aScreen( mpDialog->GetDesktopRectPixel() );
396
397 // Size of Extrawindow
398 Size aExtraWndSize( mpMarkWnd->GetSizePixel () );
399
400 // mpMarkWnd is a child of mpDialog, so coordinates for positioning must be relative to mpDialog
401 if( aDlgPos.X()+(1.05*aDlgSize.Width())+aExtraWndSize.Width() > aScreen.Right() )
402 {
403 if( aDlgPos.X() - ( 0.05*aDlgSize.Width() ) - aExtraWndSize.Width() < 0 )
404 {
405 // Pos Extrawindow anywhere
406 MoveToExtraWnd( Point(10,10) ); // very unlikely
407 mpMarkWnd->ConnectToDialog( sal_False );
408 }
409 else
410 {
411 // Pos Extrawindow on the left side of Dialog
412 MoveToExtraWnd( Point(0,0) - Point( long(0.05*aDlgSize.Width()), 0 ) - Point( aExtraWndSize.Width(), 0 ) );
413 }
414 }
415 else
416 {
417 // Pos Extrawindow on the right side of Dialog
418 MoveToExtraWnd ( Point( long(1.05*aDlgSize.getWidth()), 0 ) );
419 }
420
421 // Set size of Extra-Window
422 mpMarkWnd->SetSizePixel( Size( aExtraWndSize.Width(), aDlgSize.Height() ) );
423 }
424
425 /*************************************************************************
426 |*
427 |* Fill Dialogfields
428 |*
429 \************************************************************************/
430
FillStandardDlgFields(SvxHyperlinkItem * pHyperlinkItem)431 void SvxHyperlinkTabPageBase::FillStandardDlgFields ( SvxHyperlinkItem* pHyperlinkItem )
432 {
433 // Frame
434 sal_uInt16 nPos = mpCbbFrame->GetEntryPos ( pHyperlinkItem->GetTargetFrame() );
435 if ( nPos != LISTBOX_ENTRY_NOTFOUND)
436 mpCbbFrame->SetText ( pHyperlinkItem->GetTargetFrame() );
437
438 // Form
439 String aStrFormText = CUI_RESSTR( RID_SVXSTR_HYPERDLG_FROM_TEXT );
440 String aStrFormButton = CUI_RESSTR( RID_SVXSTR_HYPERDLG_FORM_BUTTON );
441
442 if( pHyperlinkItem->GetInsertMode() & HLINK_HTMLMODE )
443 {
444 mpLbForm->Clear();
445 mpLbForm->InsertEntry( aStrFormText );
446 mpLbForm->SelectEntryPos ( 0 );
447 }
448 else
449 {
450 mpLbForm->Clear();
451 mpLbForm->InsertEntry( aStrFormText );
452 mpLbForm->InsertEntry( aStrFormButton );
453 mpLbForm->SelectEntryPos ( pHyperlinkItem->GetInsertMode() == HLINK_BUTTON ? 1 : 0 );
454 }
455
456 // URL
457 mpEdIndication->SetText ( pHyperlinkItem->GetName() );
458
459 // Name
460 mpEdText->SetText ( pHyperlinkItem->GetIntName() );
461
462 // Script-button
463 if ( !pHyperlinkItem->GetMacroEvents() )
464 mpBtScript->Disable();
465 else
466 mpBtScript->Enable();
467 }
468
469 /*************************************************************************
470 |*
471 |* Any action to do after apply-button is pressed
472 |*
473 \************************************************************************/
474
DoApply()475 void SvxHyperlinkTabPageBase::DoApply ()
476 {
477 // default-implemtation : do nothing
478 }
479
480 /*************************************************************************
481 |*
482 |* Ask page whether an insert is possible
483 |*
484 \************************************************************************/
485
AskApply()486 sal_Bool SvxHyperlinkTabPageBase::AskApply ()
487 {
488 // default-implementation
489 return sal_True;
490 }
491
492 /*************************************************************************
493 |*
494 |* This method would be called from bookmark-window to set new mark-string
495 |*
496 \************************************************************************/
497
SetMarkStr(String &)498 void SvxHyperlinkTabPageBase::SetMarkStr ( String& /*aStrMark*/ )
499 {
500 // default-implemtation : do nothing
501 }
502
503 /*************************************************************************
504 |*
505 |* This method will be called from the dialog-class if the state off
506 |* the online-mode has changed.
507 |*
508 \************************************************************************/
509
SetOnlineMode(sal_Bool)510 void SvxHyperlinkTabPageBase::SetOnlineMode( sal_Bool /*bEnable*/ )
511 {
512 // default-implemtation : do nothing
513 }
514
515 /*************************************************************************
516 |*
517 |* Set initial focus
518 |*
519 |************************************************************************/
520
SetInitFocus()521 void SvxHyperlinkTabPageBase::SetInitFocus()
522 {
523 GrabFocus();
524 }
525
526 /*************************************************************************
527 |*
528 |* Ask dialog whether the curretn doc is a HTML-doc
529 |*
530 |************************************************************************/
531
IsHTMLDoc() const532 sal_Bool SvxHyperlinkTabPageBase::IsHTMLDoc() const
533 {
534 return ((SvxHpLinkDlg*)mpDialog)->IsHTMLDoc();
535 }
536
537 /*************************************************************************
538 |*
539 |* retrieve dispatcher
540 |*
541 |************************************************************************/
542
GetDispatcher() const543 SfxDispatcher* SvxHyperlinkTabPageBase::GetDispatcher() const
544 {
545 return ((SvxHpLinkDlg*)mpDialog)->GetDispatcher();
546 }
547
548 /*************************************************************************
549 |*
550 |* Click on imagebutton : Script
551 |*
552 |************************************************************************/
553
IMPL_LINK(SvxHyperlinkTabPageBase,ClickScriptHdl_Impl,void *,EMPTYARG)554 IMPL_LINK ( SvxHyperlinkTabPageBase, ClickScriptHdl_Impl, void *, EMPTYARG )
555 {
556 SvxHyperlinkItem *pHyperlinkItem = (SvxHyperlinkItem *)
557 GetItemSet().GetItem (SID_HYPERLINK_GETLINK);
558
559 if ( pHyperlinkItem->GetMacroEvents() )
560 {
561 // get macros from itemset
562 const SvxMacroTableDtor* pMacroTbl = pHyperlinkItem->GetMacroTbl();
563 SvxMacroItem aItem ( GetWhich(SID_ATTR_MACROITEM) );
564 if( pMacroTbl )
565 aItem.SetMacroTable( *pMacroTbl );
566
567 // create empty itemset for macro-dlg
568 SfxItemSet* pItemSet = new SfxItemSet(SFX_APP()->GetPool(),
569 SID_ATTR_MACROITEM,
570 SID_ATTR_MACROITEM );
571 pItemSet->Put ( aItem, SID_ATTR_MACROITEM );
572
573 // --> PB 2006-01-13 #123474#
574 /* disable HyperLinkDlg for input while the MacroAssignDlg is working
575 because if no JAVA is installed an error box occurs and then it is possible
576 to close the HyperLinkDlg before its child (MacroAssignDlg) -> GPF
577 */
578 sal_Bool bIsInputEnabled = GetParent()->IsInputEnabled();
579 if ( bIsInputEnabled )
580 GetParent()->EnableInput( sal_False );
581 // <--
582 SfxMacroAssignDlg aDlg( this, mxDocumentFrame, *pItemSet );
583
584 // add events
585 SfxMacroTabPage *pMacroPage = (SfxMacroTabPage*) aDlg.GetTabPage();
586
587 if ( pHyperlinkItem->GetMacroEvents() & HYPERDLG_EVENT_MOUSEOVER_OBJECT )
588 pMacroPage->AddEvent( String( CUI_RESSTR(RID_SVXSTR_HYPDLG_MACROACT1) ),
589 SFX_EVENT_MOUSEOVER_OBJECT );
590 if ( pHyperlinkItem->GetMacroEvents() & HYPERDLG_EVENT_MOUSECLICK_OBJECT )
591 pMacroPage->AddEvent( String( CUI_RESSTR(RID_SVXSTR_HYPDLG_MACROACT2) ),
592 SFX_EVENT_MOUSECLICK_OBJECT);
593 if ( pHyperlinkItem->GetMacroEvents() & HYPERDLG_EVENT_MOUSEOUT_OBJECT )
594 pMacroPage->AddEvent( String( CUI_RESSTR(RID_SVXSTR_HYPDLG_MACROACT3) ),
595 SFX_EVENT_MOUSEOUT_OBJECT);
596
597 // --> PB 2006-01-13 #123474#
598 if ( bIsInputEnabled )
599 GetParent()->EnableInput( sal_True );
600 // <--
601 // execute dlg
602 DisableClose( sal_True );
603 short nRet = aDlg.Execute();
604 DisableClose( sal_False );
605 if ( RET_OK == nRet )
606 {
607 const SfxItemSet* pOutSet = aDlg.GetOutputItemSet();
608 const SfxPoolItem* pItem;
609 if( SFX_ITEM_SET == pOutSet->GetItemState( SID_ATTR_MACROITEM, sal_False, &pItem ))
610 {
611 pHyperlinkItem->SetMacroTable( ((SvxMacroItem*)pItem)->GetMacroTable() );
612 }
613 }
614 delete pItemSet;
615 }
616
617 return( 0L );
618 }
619
620 /*************************************************************************
621 |*
622 |* Get Macro-Infos
623 |*
624 |************************************************************************/
625
GetMacroEvents()626 sal_uInt16 SvxHyperlinkTabPageBase::GetMacroEvents()
627 {
628 SvxHyperlinkItem *pHyperlinkItem = (SvxHyperlinkItem *)
629 GetItemSet().GetItem (SID_HYPERLINK_GETLINK);
630
631 return pHyperlinkItem->GetMacroEvents();
632 }
633
GetMacroTable()634 SvxMacroTableDtor* SvxHyperlinkTabPageBase::GetMacroTable()
635 {
636 SvxHyperlinkItem *pHyperlinkItem = (SvxHyperlinkItem *)
637 GetItemSet().GetItem (SID_HYPERLINK_GETLINK);
638
639 return ( (SvxMacroTableDtor*)pHyperlinkItem->GetMacroTbl() );
640 }
641
642 /*************************************************************************
643 |*
644 |* Does the given file exists ?
645 |*
646 |************************************************************************/
647
FileExists(const INetURLObject & rURL)648 sal_Bool SvxHyperlinkTabPageBase::FileExists( const INetURLObject& rURL )
649 {
650 sal_Bool bRet = sal_False;
651
652 if( rURL.GetFull().getLength() > 0 )
653 {
654 try
655 {
656 Content aCnt( rURL.GetMainURL( INetURLObject::NO_DECODE ), ::com::sun::star::uno::Reference< ::com::sun::star::ucb::XCommandEnvironment >() );
657 ::rtl::OUString aTitle;
658
659 aCnt.getPropertyValue( ::rtl::OUString::createFromAscii( "Title" ) ) >>= aTitle;
660 bRet = ( aTitle.getLength() > 0 );
661 }
662 catch( ... )
663 {
664 DBG_ERROR( "FileExists: ucb error" );
665 }
666 }
667
668 return bRet;
669 }
670
671 /*************************************************************************
672 |*
673 |* try to detect the current protocol that is used in aStrURL
674 |*
675 |************************************************************************/
676
GetSchemeFromURL(String aStrURL)677 String SvxHyperlinkTabPageBase::GetSchemeFromURL( String aStrURL )
678 {
679 String aStrScheme;
680
681 INetURLObject aURL( aStrURL );
682 INetProtocol aProtocol = aURL.GetProtocol();
683
684 // #77696#
685 // our new INetUrlObject now has the ability
686 // to detect if an Url is valid or not :-(
687 if ( aProtocol == INET_PROT_NOT_VALID )
688 {
689 if ( aStrURL.EqualsIgnoreCaseAscii( INET_HTTP_SCHEME, 0, 7 ) )
690 {
691 aStrScheme = String::CreateFromAscii( INET_HTTP_SCHEME );
692 }
693 else if ( aStrURL.EqualsIgnoreCaseAscii( INET_HTTPS_SCHEME, 0, 8 ) )
694 {
695 aStrScheme = String::CreateFromAscii( INET_HTTPS_SCHEME );
696 }
697 else if ( aStrURL.EqualsIgnoreCaseAscii( INET_FTP_SCHEME, 0, 6 ) )
698 {
699 aStrScheme = String::CreateFromAscii( INET_FTP_SCHEME );
700 }
701 else if ( aStrURL.EqualsIgnoreCaseAscii( INET_MAILTO_SCHEME, 0, 7 ) )
702 {
703 aStrScheme = String::CreateFromAscii( INET_MAILTO_SCHEME );
704 }
705 else if ( aStrURL.EqualsIgnoreCaseAscii( INET_NEWS_SCHEME, 0, 5 ) )
706 {
707 aStrScheme = String::CreateFromAscii( INET_NEWS_SCHEME );
708 }
709 else if ( aStrURL.EqualsIgnoreCaseAscii( INET_TELNET_SCHEME, 0, 9 ) )
710 {
711 aStrScheme = String::CreateFromAscii( INET_TELNET_SCHEME );
712 }
713 }
714 else
715 aStrScheme = INetURLObject::GetScheme( aProtocol );
716 return aStrScheme;
717 }
718
719
GetDataFromCommonFields(String & aStrName,String & aStrIntName,String & aStrFrame,SvxLinkInsertMode & eMode)720 void SvxHyperlinkTabPageBase::GetDataFromCommonFields( String& aStrName,
721 String& aStrIntName, String& aStrFrame,
722 SvxLinkInsertMode& eMode )
723 {
724 aStrIntName = mpEdText->GetText();
725 aStrName = mpEdIndication->GetText();
726 aStrFrame = mpCbbFrame->GetText();
727 eMode = (SvxLinkInsertMode) (mpLbForm->GetSelectEntryPos()+1);
728 if( IsHTMLDoc() )
729 eMode = (SvxLinkInsertMode) ( sal_uInt16(eMode) | HLINK_HTMLMODE );
730 }
731
732 /*************************************************************************
733 |*
734 |* reset dialog-fields
735 |*
736 |************************************************************************/
737
Reset(const SfxItemSet & rItemSet)738 void SvxHyperlinkTabPageBase::Reset( const SfxItemSet& rItemSet)
739 {
740 ///////////////////////////////////////
741 // Set dialog-fields from create-itemset
742 maStrInitURL = aEmptyStr;
743
744 SvxHyperlinkItem *pHyperlinkItem = (SvxHyperlinkItem *)
745 rItemSet.GetItem (SID_HYPERLINK_GETLINK);
746
747 if ( pHyperlinkItem )
748 {
749 // set dialog-fields
750 FillStandardDlgFields (pHyperlinkItem);
751
752 // set all other fields
753 FillDlgFields ( (String&)pHyperlinkItem->GetURL() );
754
755 // Store initial URL
756 maStrInitURL = pHyperlinkItem->GetURL();
757 }
758 }
759
760 /*************************************************************************
761 |*
762 |* Fill output-ItemSet
763 |*
764 |************************************************************************/
765
FillItemSet(SfxItemSet & rOut)766 sal_Bool SvxHyperlinkTabPageBase::FillItemSet( SfxItemSet& rOut)
767 {
768 String aStrURL, aStrName, aStrIntName, aStrFrame;
769 SvxLinkInsertMode eMode;
770
771 GetCurentItemData ( aStrURL, aStrName, aStrIntName, aStrFrame, eMode);
772 if ( !aStrName.Len() ) //automatically create a visible name if the link is created without name
773 aStrName = CreateUiNameFromURL(aStrURL);
774
775 sal_uInt16 nEvents = GetMacroEvents();
776 SvxMacroTableDtor* pTable = GetMacroTable();
777
778 SvxHyperlinkItem aItem( SID_HYPERLINK_SETLINK, aStrName, aStrURL, aStrFrame,
779 aStrIntName, eMode, nEvents, pTable );
780 rOut.Put (aItem);
781
782 return sal_True;
783 }
784
CreateUiNameFromURL(const String & aStrURL)785 String SvxHyperlinkTabPageBase::CreateUiNameFromURL( const String& aStrURL )
786 {
787 String aStrUiURL;
788 INetURLObject aURLObj( aStrURL );
789
790 switch(aURLObj.GetProtocol())
791 {
792 case INET_PROT_FILE:
793 utl::LocalFileHelper::ConvertURLToSystemPath( aURLObj.GetMainURL(INetURLObject::NO_DECODE), aStrUiURL );
794 break;
795 case INET_PROT_FTP :
796 {
797 //remove password from name
798 INetURLObject aTmpURL(aURLObj);
799 aTmpURL.SetPass(aEmptyStr);
800 aStrUiURL = aTmpURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS );
801 }
802 break;
803 default :
804 {
805 aStrUiURL = aURLObj.GetMainURL(INetURLObject::DECODE_UNAMBIGUOUS);
806 }
807 }
808 if(!aStrUiURL.Len())
809 return aStrURL;
810 return aStrUiURL;
811 }
812
813 /*************************************************************************
814 |*
815 |* Activate / Deactivate Tabpage
816 |*
817 |************************************************************************/
818
ActivatePage(const SfxItemSet & rItemSet)819 void SvxHyperlinkTabPageBase::ActivatePage( const SfxItemSet& rItemSet )
820 {
821 ///////////////////////////////////////
822 // Set dialog-fields from input-itemset
823 SvxHyperlinkItem *pHyperlinkItem = (SvxHyperlinkItem *)
824 rItemSet.GetItem (SID_HYPERLINK_GETLINK);
825
826 if ( pHyperlinkItem )
827 {
828 // standard-fields
829 FillStandardDlgFields (pHyperlinkItem);
830 }
831
832 // show mark-window if it was open before
833 if ( ShouldOpenMarkWnd () )
834 ShowMarkWnd ();
835 }
836
DeactivatePage(SfxItemSet * _pSet)837 int SvxHyperlinkTabPageBase::DeactivatePage( SfxItemSet* _pSet)
838 {
839 // hide mark-wnd
840 SetMarkWndShouldOpen( IsMarkWndVisible () );
841 HideMarkWnd ();
842
843 // retrieve data of dialog
844 String aStrURL, aStrName, aStrIntName, aStrFrame;
845 SvxLinkInsertMode eMode;
846
847 GetCurentItemData ( aStrURL, aStrName, aStrIntName, aStrFrame, eMode);
848
849 sal_uInt16 nEvents = GetMacroEvents();
850 SvxMacroTableDtor* pTable = GetMacroTable();
851
852 if( _pSet )
853 {
854 SvxHyperlinkItem aItem( SID_HYPERLINK_GETLINK, aStrName, aStrURL, aStrFrame,
855 aStrIntName, eMode, nEvents, pTable );
856 _pSet->Put( aItem );
857 }
858
859 return( LEAVE_PAGE );
860 }
861
ShouldOpenMarkWnd()862 sal_Bool SvxHyperlinkTabPageBase::ShouldOpenMarkWnd()
863 {
864 return sal_False;
865 }
866
SetMarkWndShouldOpen(sal_Bool)867 void SvxHyperlinkTabPageBase::SetMarkWndShouldOpen(sal_Bool)
868 {
869 }
870