| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_cui.hxx" |
| |
| // include --------------------------------------------------------------- |
| #include <vcl/settings.hxx> |
| #include <unotools/viewoptions.hxx> |
| #include "cuihyperdlg.hxx" |
| #include "hlinettp.hxx" |
| #include "hlmailtp.hxx" |
| #include "hldoctp.hxx" |
| #include "hldocntp.hxx" |
| #include "hyperdlg.hrc" |
| #include <svx/svxids.hrc> // SID_READONLY_MODE |
| |
| using ::com::sun::star::uno::Reference; |
| using ::com::sun::star::frame::XFrame; |
| |
| //######################################################################## |
| //# # |
| //# Childwindow-Wrapper-Class # |
| //# # |
| //######################################################################## |
| |
| SvxHlinkCtrl::SvxHlinkCtrl( sal_uInt16 _nId, SfxBindings & rBindings, SvxHpLinkDlg* pDlg ) |
| : SfxControllerItem ( _nId, rBindings ) |
| ,aOnlineForwarder ( SID_INTERNET_ONLINE , *this ) |
| ,aRdOnlyForwarder ( SID_READONLY_MODE, *this ) |
| { |
| pParent = pDlg; |
| } |
| |
| void SvxHlinkCtrl::StateChanged( sal_uInt16 nSID, SfxItemState eState, |
| const SfxPoolItem* pState ) |
| { |
| if ( eState == SFX_ITEM_AVAILABLE ) |
| { |
| switch ( nSID ) |
| { |
| case SID_INTERNET_ONLINE : |
| { |
| pParent->EnableInetBrowse( !( (SfxBoolItem*)pState)->GetValue() ); |
| } |
| break; |
| case SID_HYPERLINK_GETLINK : |
| { |
| pParent->SetPage ( (SvxHyperlinkItem*)pState); |
| } |
| break; |
| case SID_READONLY_MODE : |
| { |
| pParent->SetReadOnlyMode( ( (SfxBoolItem*)pState)->GetValue() == sal_True ); |
| } |
| break; |
| } |
| } |
| } |
| |
| |
| |
| // ----------------------------------------------------------------------- |
| |
| |
| |
| //######################################################################## |
| //# # |
| //# Hyperlink - Dialog # |
| //# # |
| //######################################################################## |
| |
| /************************************************************************* |
| |* |
| |* Contructor / Destructor |
| |* |
| |************************************************************************/ |
| |
| SvxHpLinkDlg::SvxHpLinkDlg (Window* pParent, SfxBindings* pBindings) |
| : IconChoiceDialog( pParent, CUI_RES ( RID_SVXDLG_NEWHYPERLINK ) ), |
| maCtrl ( SID_HYPERLINK_GETLINK, *pBindings, this ), |
| mpBindings ( pBindings ), |
| mbReadOnly ( sal_False ), |
| mbIsHTMLDoc ( sal_False ) |
| { |
| SetUniqueId( HID_HYPERLINK_DIALOG ); |
| mbGrabFocus = sal_True; |
| // insert pages |
| Image aImage; |
| Image aImageHC; |
| String aStrTitle; |
| SvxIconChoiceCtrlEntry* pEntry = NULL; |
| |
| aStrTitle = CUI_RESSTR( RID_SVXSTR_HYPERDLG_HLINETTP ); |
| aImage = Image( CUI_RES ( RID_SVXBMP_HLINETTP ) ); |
| aImageHC = Image( CUI_RES ( RID_SVXBMP_HLINETTP_H ) ); |
| pEntry = AddTabPage ( RID_SVXPAGE_HYPERLINK_INTERNET, aStrTitle, aImage, aImageHC, SvxHyperlinkInternetTp::Create ); |
| pEntry->SetQuickHelpText( CUI_RESSTR( RID_SVXSTR_HYPERDLG_HLINETTP_HELP ) ); |
| aStrTitle = CUI_RESSTR( RID_SVXSTR_HYPERDLG_HLMAILTP ); |
| aImage = Image( CUI_RES ( RID_SVXBMP_HLMAILTP ) ); |
| aImageHC = Image( CUI_RES ( RID_SVXBMP_HLMAILTP_H ) ); |
| pEntry = AddTabPage ( RID_SVXPAGE_HYPERLINK_MAIL, aStrTitle, aImage, aImageHC, SvxHyperlinkMailTp::Create ); |
| pEntry->SetQuickHelpText( CUI_RESSTR( RID_SVXSTR_HYPERDLG_HLMAILTP_HELP ) ); |
| aStrTitle = CUI_RESSTR( RID_SVXSTR_HYPERDLG_HLDOCTP ); |
| aImage = Image( CUI_RES ( RID_SVXBMP_HLDOCTP ) ); |
| aImageHC = Image( CUI_RES ( RID_SVXBMP_HLDOCTP_H ) ); |
| pEntry = AddTabPage ( RID_SVXPAGE_HYPERLINK_DOCUMENT, aStrTitle, aImage, aImageHC, SvxHyperlinkDocTp::Create ); |
| pEntry->SetQuickHelpText( CUI_RESSTR( RID_SVXSTR_HYPERDLG_HLDOCTP_HELP ) ); |
| aStrTitle = CUI_RESSTR( RID_SVXSTR_HYPERDLG_HLDOCNTP ); |
| aImage = Image( CUI_RES ( RID_SVXBMP_HLDOCNTP ) ); |
| aImageHC = Image( CUI_RES ( RID_SVXBMP_HLDOCNTP_H ) ); |
| pEntry = AddTabPage ( RID_SVXPAGE_HYPERLINK_NEWDOCUMENT, aStrTitle, aImage, aImageHC, SvxHyperlinkNewDocTp::Create ); |
| pEntry->SetQuickHelpText( CUI_RESSTR( RID_SVXSTR_HYPERDLG_HLDOCNTP_HELP ) ); |
| |
| // create itemset for tabpages |
| mpItemSet = new SfxItemSet( SFX_APP()->GetPool(), SID_HYPERLINK_GETLINK, |
| SID_HYPERLINK_SETLINK ); |
| |
| SvxHyperlinkItem aItem; |
| mpItemSet->Put (aItem, SID_HYPERLINK_GETLINK); |
| |
| SetInputSet (mpItemSet); |
| |
| // Init Dialog |
| Start (sal_False); |
| |
| pBindings->Update( SID_READONLY_MODE ); |
| |
| // set OK/Cancel - button |
| GetOKButton().SetText ( CUI_RESSTR(RID_SVXSTR_HYPDLG_APPLYBUT) ); |
| GetCancelButton().SetText ( CUI_RESSTR(RID_SVXSTR_HYPDLG_CLOSEBUT) ); |
| |
| GetOKButton().SetClickHdl ( LINK ( this, SvxHpLinkDlg, ClickApplyHdl_Impl ) ); |
| GetCancelButton().SetClickHdl( LINK ( this, SvxHpLinkDlg, ClickCloseHdl_Impl ) ); |
| } |
| |
| SvxHpLinkDlg::~SvxHpLinkDlg () |
| { |
| // delete config item, so the base class (IconChoiceDialog) can not load it on the next start |
| SvtViewOptions aViewOpt( E_TABDIALOG, String::CreateFromInt32( SID_HYPERLINK_DIALOG ) ); |
| aViewOpt.Delete(); |
| |
| delete mpItemSet; |
| } |
| |
| /************************************************************************* |
| |* |
| |* Close Dialog-Window |
| |* |
| |************************************************************************/ |
| |
| sal_Bool SvxHpLinkDlg::Close() |
| { |
| GetDispatcher()->Execute( SID_HYPERLINK_DIALOG, |
| SFX_CALLMODE_ASYNCHRON | |
| SFX_CALLMODE_RECORD); |
| return sal_True; |
| } |
| |
| /************************************************************************* |
| |* |
| |* When extrawindow is visible and its never moved by user, then move that |
| |* window, too. |
| |* |
| |************************************************************************/ |
| |
| void SvxHpLinkDlg::Move() |
| { |
| SvxHyperlinkTabPageBase* pCurrentPage = ( SvxHyperlinkTabPageBase* ) |
| GetTabPage ( GetCurPageId() ); |
| |
| if( pCurrentPage->IsMarkWndVisible () ) |
| { |
| // Pos&Size of this dialog-window |
| Point aDlgPos ( GetPosPixel () ); |
| Size aDlgSize ( GetSizePixel () ); |
| |
| // Size of Office-Main-Window |
| Size aWindowSize( SFX_APP()->GetTopWindow()->GetSizePixel() ); |
| |
| // Size of Extrawindow |
| Size aExtraWndSize( pCurrentPage->GetSizeExtraWnd() ); |
| |
| sal_Bool bDoInvalid ; |
| if( aDlgPos.X()+(1.02*aDlgSize.Width())+aExtraWndSize.Width() > aWindowSize.Width() ) |
| { |
| if( aDlgPos.X() - ( 0.02*aDlgSize.Width() ) - aExtraWndSize.Width() < 0 ) |
| { |
| // Pos Extrawindow anywhere |
| bDoInvalid = pCurrentPage->MoveToExtraWnd( Point( 1, long(1.1*aDlgPos.Y()) ), sal_True ); |
| } |
| else |
| { |
| // Pos Extrawindow on the left side of Dialog |
| bDoInvalid = pCurrentPage->MoveToExtraWnd( aDlgPos - |
| Point( long(0.02*aDlgSize.Width()), 0 ) - |
| Point( aExtraWndSize.Width(), 0 ) ); |
| } |
| } |
| else |
| { |
| // Pos Extrawindow on the right side of Dialog |
| bDoInvalid = pCurrentPage->MoveToExtraWnd ( aDlgPos + Point( long(1.02*aDlgSize.Width()), 0 ) ); |
| } |
| |
| if ( bDoInvalid ) |
| Invalidate(INVALIDATE_BACKGROUND); |
| } |
| |
| Window::Move(); |
| } |
| |
| /*long SvxHpLinkDlg::PreNotify( NotifyEvent& rNEvt ) |
| { |
| long nRet = 0; |
| |
| if( rNEvt.GetType() == EVENT_KEYINPUT ) |
| { |
| DBG_ASSERT( rNEvt.GetKeyEvent(), "-SvxHpLinkDlg::PreNotify(): no KeyEvent for key event?!" ); |
| |
| const KeyEvent* pKEvt = rNEvt.GetKeyEvent(); |
| |
| if( KEY_MOD2 == pKEvt->GetKeyCode().GetModifier() && pKEvt->GetCharCode() && HandleShortCutKey( *pKEvt ) ) |
| nRet = 1; |
| } |
| |
| if( !nRet ) |
| nRet = IconChoiceDialog::PreNotify( rNEvt ); |
| |
| return nRet; |
| }*/ |
| |
| /************************************************************************* |
| |* |
| |* Click on Apply-button |
| |* |
| |************************************************************************/ |
| |
| IMPL_LINK ( SvxHpLinkDlg, ClickApplyHdl_Impl, void *, EMPTYARG ) |
| { |
| SfxItemSet aItemSet( SFX_APP()->GetPool(), SID_HYPERLINK_GETLINK, |
| SID_HYPERLINK_SETLINK ); |
| |
| SvxHyperlinkTabPageBase* pCurrentPage = (SvxHyperlinkTabPageBase*) |
| GetTabPage ( GetCurPageId() ); |
| |
| if ( pCurrentPage->AskApply() ) |
| { |
| pCurrentPage->FillItemSet( aItemSet ); |
| |
| SvxHyperlinkItem *aItem = (SvxHyperlinkItem *) |
| aItemSet.GetItem (SID_HYPERLINK_SETLINK); |
| |
| String aStrEmpty; |
| if ( aItem->GetURL() != aStrEmpty ) |
| GetDispatcher()->Execute( SID_HYPERLINK_SETLINK, SFX_CALLMODE_ASYNCHRON | |
| SFX_CALLMODE_RECORD, aItem, 0L); |
| |
| ( (SvxHyperlinkTabPageBase*)GetTabPage ( GetCurPageId() ) )->DoApply(); |
| } |
| |
| return( 0L ); |
| } |
| |
| /************************************************************************* |
| |* |
| |* Click on Close-button |
| |* |
| |************************************************************************/ |
| |
| IMPL_LINK ( SvxHpLinkDlg, ClickCloseHdl_Impl, void *, EMPTYARG ) |
| { |
| Close(); |
| |
| return( 0L ); |
| } |
| |
| /************************************************************************* |
| |* |
| |* Set Page |
| |* |
| |************************************************************************/ |
| |
| sal_uInt16 SvxHpLinkDlg::SetPage ( SvxHyperlinkItem* pItem ) |
| { |
| sal_uInt16 nPageId = RID_SVXPAGE_HYPERLINK_INTERNET; |
| |
| String aStrURL ( pItem->GetURL() ); |
| INetURLObject aURL ( aStrURL ); |
| INetProtocol eProtocolTyp = aURL.GetProtocol(); |
| |
| switch ( eProtocolTyp ) |
| { |
| case INET_PROT_HTTP : |
| case INET_PROT_FTP : |
| case INET_PROT_TELNET : |
| nPageId = RID_SVXPAGE_HYPERLINK_INTERNET; |
| break; |
| case INET_PROT_FILE : |
| case INET_PROT_POP3 : |
| case INET_PROT_IMAP : |
| nPageId = RID_SVXPAGE_HYPERLINK_DOCUMENT; |
| break; |
| case INET_PROT_MAILTO : |
| case INET_PROT_NEWS : |
| nPageId = RID_SVXPAGE_HYPERLINK_MAIL; |
| break; |
| default : |
| sal_Char const sNewsSrvScheme[] = "news://"; |
| // TODO news:// is nonsense |
| |
| if ( aStrURL.SearchAscii( sNewsSrvScheme ) == 0 ) |
| nPageId = RID_SVXPAGE_HYPERLINK_DOCUMENT; |
| else |
| { |
| sal_Char const sHash[] = "#"; |
| if( aStrURL.SearchAscii( sHash ) == 0 ) |
| nPageId = RID_SVXPAGE_HYPERLINK_DOCUMENT; |
| else |
| { |
| eProtocolTyp = INET_PROT_NOT_VALID; |
| nPageId = GetCurPageId(); |
| } |
| } |
| break; |
| } |
| |
| ShowPage (nPageId); |
| |
| SvxHyperlinkTabPageBase* pCurrentPage = (SvxHyperlinkTabPageBase*)GetTabPage( nPageId ); |
| |
| mbIsHTMLDoc = (pItem->GetInsertMode() & HLINK_HTMLMODE) ? true : false; |
| |
| SfxItemSet& aPageSet = (SfxItemSet&)GetTabPage (nPageId)->GetItemSet (); |
| aPageSet.Put ( *pItem ); |
| |
| pCurrentPage->Reset( aPageSet ); |
| if ( mbGrabFocus ) |
| { |
| pCurrentPage->SetInitFocus(); // #92535# grab the focus only once at initialization |
| mbGrabFocus = sal_False; |
| } |
| return nPageId; |
| } |
| |
| /************************************************************************* |
| |* |
| |* Enable/Disable to browse targets in a html-doc |
| |* |
| |************************************************************************/ |
| |
| void SvxHpLinkDlg::EnableInetBrowse( sal_Bool bEnable ) |
| { |
| SvxHyperlinkTabPageBase* pCurrentPage = ( SvxHyperlinkTabPageBase* ) |
| GetTabPage ( GetCurPageId() ); |
| pCurrentPage->SetOnlineMode( bEnable ); |
| } |
| |
| /************************************************************************* |
| |* |
| |* Enable/Disable ReadOnly mode |
| |* |
| |************************************************************************/ |
| |
| void SvxHpLinkDlg::SetReadOnlyMode( sal_Bool bRdOnly ) |
| { |
| mbReadOnly = bRdOnly; |
| if ( bRdOnly ) |
| GetOKButton().Disable(); |
| else |
| GetOKButton().Enable(); |
| } |
| |
| /************************************************************************* |
| |* |
| |* late-initialization of newly created pages |
| |* |
| |************************************************************************/ |
| |
| void SvxHpLinkDlg::PageCreated( sal_uInt16 /*nId*/, IconChoicePage& rPage ) |
| { |
| SvxHyperlinkTabPageBase& rHyperlinkPage = dynamic_cast< SvxHyperlinkTabPageBase& >( rPage ); |
| Reference< XFrame > xDocumentFrame; |
| if ( mpBindings ) |
| xDocumentFrame = mpBindings->GetActiveFrame(); |
| OSL_ENSURE( xDocumentFrame.is(), "SvxHpLinkDlg::PageCreated: macro assignment functionality won't work with a proper frame!" ); |
| rHyperlinkPage.SetDocumentFrame( xDocumentFrame ); |
| } |