| /************************************************************** |
| * |
| * 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 <com/sun/star/frame/XDispatchProvider.hpp> |
| #include <com/sun/star/util/XURLTransformer.hpp> |
| #include <com/sun/star/frame/FrameSearchFlag.hpp> |
| #include <sfx2/request.hxx> |
| |
| #include <comphelper/processfactory.hxx> |
| #include <sfx2/viewfrm.hxx> |
| #include <unotools/pathoptions.hxx> |
| #include <unotools/moduleoptions.hxx> |
| |
| #include "hlmailtp.hxx" |
| #include "hyperdlg.hrc" |
| |
| using namespace ::rtl; |
| using namespace ::com::sun::star; |
| |
| /************************************************************************* |
| |* |
| |* Contructor / Destructor |
| |* |
| |************************************************************************/ |
| |
| SvxHyperlinkMailTp::SvxHyperlinkMailTp ( Window *pParent, const SfxItemSet& rItemSet) |
| : SvxHyperlinkTabPageBase ( pParent, CUI_RES( RID_SVXPAGE_HYPERLINK_MAIL ), |
| rItemSet ), |
| maGrpMailNews ( this, CUI_RES (GRP_MAILNEWS) ), |
| maRbtMail ( this, CUI_RES (RB_LINKTYP_MAIL) ), |
| maRbtNews ( this, CUI_RES (RB_LINKTYP_NEWS) ), |
| maFtReceiver ( this, CUI_RES (FT_RECEIVER) ), |
| maCbbReceiver ( this, INET_PROT_MAILTO ), |
| maBtAdrBook ( this, CUI_RES (BTN_ADRESSBOOK) ), |
| maFtSubject ( this, CUI_RES (FT_SUBJECT) ), |
| maEdSubject ( this, CUI_RES (ED_SUBJECT) ) |
| { |
| // Set HC bitmaps and disable display of bitmap names. |
| maBtAdrBook.SetModeImage( Image( CUI_RES( IMG_ADRESSBOOK_HC ) ), BMP_COLOR_HIGHCONTRAST ); |
| maBtAdrBook.EnableTextDisplay (sal_False); |
| |
| InitStdControls(); |
| FreeResource(); |
| |
| // Init URL-Box (pos&size, Open-Handler) |
| maCbbReceiver.SetPosSizePixel ( LogicToPixel( Point( COL_2, 25 ), MAP_APPFONT ), |
| LogicToPixel( Size ( 176 - COL_DIFF, 60), MAP_APPFONT ) ); |
| |
| maCbbReceiver.Show(); |
| maCbbReceiver.SetHelpId( HID_HYPERDLG_MAIL_PATH ); |
| |
| SetExchangeSupport (); |
| |
| // set defaults |
| maRbtMail.Check (); |
| |
| // overload handlers |
| maRbtMail.SetClickHdl ( LINK ( this, SvxHyperlinkMailTp, Click_SmartProtocol_Impl ) ); |
| maRbtNews.SetClickHdl ( LINK ( this, SvxHyperlinkMailTp, Click_SmartProtocol_Impl ) ); |
| maBtAdrBook.SetClickHdl ( LINK ( this, SvxHyperlinkMailTp, ClickAdrBookHdl_Impl ) ); |
| maCbbReceiver.SetModifyHdl ( LINK ( this, SvxHyperlinkMailTp, ModifiedReceiverHdl_Impl) ); |
| |
| if ( !SvtModuleOptions().IsModuleInstalled( SvtModuleOptions::E_SDATABASE ) ) |
| maBtAdrBook.Hide(); |
| |
| maBtAdrBook.SetAccessibleRelationMemberOf( &maGrpMailNews ); |
| maBtAdrBook.SetAccessibleRelationLabeledBy( &maFtReceiver ); |
| } |
| |
| SvxHyperlinkMailTp::~SvxHyperlinkMailTp () |
| { |
| } |
| |
| /************************************************************************* |
| |* |
| |* Fill the all dialog-controls except controls in groupbox "more..." |
| |* |
| |************************************************************************/ |
| |
| void SvxHyperlinkMailTp::FillDlgFields ( String& aStrURL ) |
| { |
| const sal_Char sMailtoScheme[] = INET_MAILTO_SCHEME; |
| |
| INetURLObject aURL( aStrURL ); |
| String aStrScheme = GetSchemeFromURL( aStrURL ); |
| |
| // set URL-field and additional controls |
| String aStrURLc ( aStrURL ); |
| // set additional controls for EMail: |
| if ( aStrScheme.SearchAscii( sMailtoScheme ) == 0 ) |
| { |
| // Find mail-subject |
| String aStrSubject, aStrTmp ( aStrURLc ); |
| |
| const sal_Char sSubject[] = "subject"; |
| xub_StrLen nPos = aStrTmp.ToLowerAscii().SearchAscii( sSubject, 0 ); |
| nPos = aStrTmp.Search( sal_Unicode( '=' ), nPos ); |
| |
| if ( nPos != STRING_NOTFOUND ) |
| aStrSubject = aStrURLc.Copy( nPos+1, aStrURLc.Len() ); |
| |
| nPos = aStrURLc.Search ( sal_Unicode( '?' ), 0); |
| |
| aStrURLc = aStrURLc.Copy( 0, ( nPos == STRING_NOTFOUND ? |
| aStrURLc.Len() : nPos ) ); |
| |
| maEdSubject.SetText ( aStrSubject ); |
| } |
| else |
| { |
| maEdSubject.SetText (aEmptyStr); |
| } |
| |
| maCbbReceiver.SetText ( aStrURLc ); |
| |
| SetScheme( aStrScheme ); |
| } |
| |
| /************************************************************************* |
| |* |
| |* retrieve and prepare data from dialog-fields |
| |* |
| |************************************************************************/ |
| |
| void SvxHyperlinkMailTp::GetCurentItemData ( String& aStrURL, String& aStrName, |
| String& aStrIntName, String& aStrFrame, |
| SvxLinkInsertMode& eMode ) |
| { |
| aStrURL = CreateAbsoluteURL(); |
| GetDataFromCommonFields( aStrName, aStrIntName, aStrFrame, eMode ); |
| } |
| |
| String SvxHyperlinkMailTp::CreateAbsoluteURL() const |
| { |
| String aStrURL = maCbbReceiver.GetText(); |
| INetURLObject aURL(aStrURL); |
| |
| if( aURL.GetProtocol() == INET_PROT_NOT_VALID ) |
| { |
| aURL.SetSmartProtocol( GetSmartProtocolFromButtons() ); |
| aURL.SetSmartURL(aStrURL); |
| } |
| |
| // subject for EMail-url |
| if( aURL.GetProtocol() == INET_PROT_MAILTO ) |
| { |
| if ( maEdSubject.GetText() != aEmptyStr ) |
| { |
| String aQuery = UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "subject=" ) ); |
| aQuery.Append( maEdSubject.GetText() ); |
| aURL.SetParam(aQuery); |
| } |
| } |
| |
| if ( aURL.GetProtocol() != INET_PROT_NOT_VALID ) |
| return aURL.GetMainURL( INetURLObject::DECODE_WITH_CHARSET ); |
| else //#105788# always create a URL even if it is not valid |
| return aStrURL; |
| } |
| |
| /************************************************************************* |
| |* |
| |* static method to create Tabpage |
| |* |
| |************************************************************************/ |
| |
| IconChoicePage* SvxHyperlinkMailTp::Create( Window* pWindow, const SfxItemSet& rItemSet ) |
| { |
| return( new SvxHyperlinkMailTp( pWindow, rItemSet ) ); |
| } |
| |
| /************************************************************************* |
| |* |
| |* Set initial focus |
| |* |
| |************************************************************************/ |
| |
| void SvxHyperlinkMailTp::SetInitFocus() |
| { |
| maCbbReceiver.GrabFocus(); |
| } |
| |
| /************************************************************************* |
| |************************************************************************/ |
| |
| void SvxHyperlinkMailTp::SetScheme( const String& aScheme ) |
| { |
| //if aScheme is empty or unknown the default beaviour is like it where MAIL |
| const sal_Char sNewsScheme[] = INET_NEWS_SCHEME; |
| |
| sal_Bool bMail = aScheme.SearchAscii( sNewsScheme ) != 0; |
| |
| //update protocol button selection: |
| maRbtMail.Check(bMail); |
| maRbtNews.Check(!bMail); |
| |
| //update target: |
| RemoveImproperProtocol(aScheme); |
| maCbbReceiver.SetSmartProtocol( GetSmartProtocolFromButtons() ); |
| |
| //show/hide special fields for MAIL: |
| maFtSubject.Enable(bMail); |
| maEdSubject.Enable(bMail); |
| } |
| |
| /************************************************************************* |
| |* |
| |* Remove protocol if it does not fit to the current button selection |
| |* |
| |************************************************************************/ |
| |
| void SvxHyperlinkMailTp::RemoveImproperProtocol(const String& aProperScheme) |
| { |
| String aStrURL ( maCbbReceiver.GetText() ); |
| if ( aStrURL != aEmptyStr ) |
| { |
| String aStrScheme = GetSchemeFromURL( aStrURL ); |
| if ( aStrScheme != aEmptyStr && aStrScheme != aProperScheme ) |
| { |
| aStrURL.Erase ( 0, aStrScheme.Len() ); |
| maCbbReceiver.SetText ( aStrURL ); |
| } |
| } |
| } |
| |
| String SvxHyperlinkMailTp::GetSchemeFromButtons() const |
| { |
| if( maRbtNews.IsChecked() ) |
| { |
| return String::CreateFromAscii( INET_NEWS_SCHEME ); |
| } |
| return String::CreateFromAscii( INET_MAILTO_SCHEME ); |
| } |
| |
| INetProtocol SvxHyperlinkMailTp::GetSmartProtocolFromButtons() const |
| { |
| if( maRbtNews.IsChecked() ) |
| { |
| return INET_PROT_NEWS; |
| } |
| return INET_PROT_MAILTO; |
| } |
| |
| /************************************************************************* |
| |* |
| |* Click on radiobutton : Type EMail |
| |* |
| |************************************************************************/ |
| |
| IMPL_LINK ( SvxHyperlinkMailTp, Click_SmartProtocol_Impl, void *, EMPTYARG ) |
| { |
| String aScheme = GetSchemeFromButtons(); |
| SetScheme( aScheme ); |
| return( 0L ); |
| } |
| |
| /************************************************************************* |
| |* |
| |* Contens of editfield "receiver" modified |
| |* |
| |************************************************************************/ |
| |
| IMPL_LINK ( SvxHyperlinkMailTp, ModifiedReceiverHdl_Impl, void *, EMPTYARG ) |
| { |
| String aScheme = GetSchemeFromURL( maCbbReceiver.GetText() ); |
| if(aScheme.Len()!=0) |
| SetScheme( aScheme ); |
| |
| return( 0L ); |
| } |
| |
| /************************************************************************* |
| |* |
| |* Click on imagebutton : addressbook |
| |* |
| |************************************************************************/ |
| |
| IMPL_LINK ( SvxHyperlinkMailTp, ClickAdrBookHdl_Impl, void *, EMPTYARG ) |
| { |
| SfxViewFrame* pViewFrame = SfxViewFrame::Current(); |
| if( pViewFrame ) |
| { |
| SfxItemPool &rPool = pViewFrame->GetPool(); |
| SfxRequest aReq(SID_VIEW_DATA_SOURCE_BROWSER, 0, rPool); |
| pViewFrame->ExecuteSlot( aReq, sal_True ); |
| } |
| |
| |
| /* uno::Reference< frame::XDispatchProvider > xProv( pViewFrame->GetFrame().GetFrameInterface(), uno::UNO_QUERY ); |
| if ( xProv.is() ) |
| { |
| !!! (pb) we need a new config item here |
| SfxAppIniManagerProperty aProp; |
| GetpApp()->Property( aProp ); |
| if( !aProp.GetIniManager() ) |
| return ( 0L ); |
| |
| String aAddressBook = aProp.GetIniManager()->Get( SFX_KEY_ADDRESSBOOK ); |
| INetURLObject aObj; |
| aObj.SetSmartProtocol( INET_PROT_FILE ); |
| aObj.SetURL( aAddressBook.GetToken( 0, sal_Unicode( ';' ) ) ); |
| |
| String aMark( RTL_CONSTASCII_USTRINGPARAM( "db:Table;" ) ); |
| aMark += aAddressBook.GetToken( 1, sal_Unicode( ';' ) ); |
| aObj.SetMark( aMark ); |
| |
| util::URL aURL; |
| aURL.Complete = ::rtl::OUString( aObj.GetMainURL( INetURLObject::NO_DECODE ) ); |
| |
| uno::Reference< lang::XMultiServiceFactory > xFactory( ::comphelper::getProcessServiceFactory() ); |
| if( xFactory.is() ) |
| { |
| uno::Reference< util::XURLTransformer > xTrans( xFactory->createInstance |
| ( OUString::createFromAscii( "com.sun.star.util.URLTransformer" ) ), |
| uno::UNO_QUERY); |
| xTrans->parseStrict( aURL ); |
| |
| uno::Reference< frame::XDispatch > aDisp = xProv->queryDispatch( aURL, |
| OUString::createFromAscii( "_beamer" ), |
| frame::FrameSearchFlag::GLOBAL | |
| frame::FrameSearchFlag::CREATE ); |
| if ( aDisp.is() ) |
| { |
| uno::Sequence< beans::PropertyValue > aArgs(1); |
| beans::PropertyValue* pArg = aArgs.getArray(); |
| pArg[0].Name = DEFINE_CONST_UNICODE("Referer"); |
| pArg[0].Value = uno::makeAny( OUString( DEFINE_CONST_UNICODE("private:user") ) ); |
| aDisp->dispatch( aURL, aArgs ); |
| } |
| } |
| } |
| */ |
| |
| return( 0L ); |
| } |
| |
| |