LCOV - code coverage report
Current view: top level - cui/source/dialogs - hlinettp.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 0 182 0.0 %
Date: 2014-11-03 Functions: 0 32 0.0 %
Legend: Lines: hit not hit

          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 <unotools/pathoptions.hxx>
      21             : #include <unotools/useroptions.hxx>
      22             : #include <svl/adrparse.hxx>
      23             : 
      24             : #include "hlinettp.hxx"
      25             : #include "hlmarkwn_def.hxx"
      26             : 
      27             : sal_Char const sAnonymous[]    = "anonymous";
      28             : sal_Char const sHTTPScheme[]   = INET_HTTP_SCHEME;
      29             : sal_Char const sFTPScheme[]    = INET_FTP_SCHEME;
      30             : 
      31             : /*************************************************************************
      32             : |*
      33             : |* Constructor / Destructor
      34             : |*
      35             : |************************************************************************/
      36             : 
      37           0 : SvxHyperlinkInternetTp::SvxHyperlinkInternetTp ( vcl::Window *pParent,
      38             :                                                  IconChoiceDialog* pDlg,
      39             :                                                  const SfxItemSet& rItemSet)
      40             : :   SvxHyperlinkTabPageBase ( pParent, pDlg, "HyperlinkInternetPage", "cui/ui/hyperlinkinternetpage.ui",
      41             :                               rItemSet ) ,
      42           0 :     mbMarkWndOpen           ( false )
      43             : {
      44           0 :     get(m_pRbtLinktypInternet, "linktyp_internet");
      45           0 :     get(m_pRbtLinktypFTP, "linktyp_ftp");
      46           0 :     get(m_pCbbTarget, "target");
      47           0 :     m_pCbbTarget->SetSmartProtocol(INET_PROT_HTTP);
      48           0 :     get(m_pBtBrowse, "browse");
      49           0 :     m_pBtBrowse->SetModeImage(Image(CUI_RES (RID_SVXBMP_BROWSE)));
      50           0 :     get(m_pFtLogin, "login_label");
      51           0 :     get(m_pEdLogin, "login");
      52           0 :     get(m_pFtPassword, "password_label");
      53           0 :     get(m_pEdPassword, "password");
      54           0 :     get(m_pCbAnonymous, "anonymous");
      55             : 
      56             :     // Disable display of bitmap names.
      57           0 :     m_pBtBrowse->EnableTextDisplay (false);
      58             : 
      59           0 :     InitStdControls();
      60             : 
      61           0 :     m_pCbbTarget->Show();
      62           0 :     m_pCbbTarget->SetHelpId( HID_HYPERDLG_INET_PATH );
      63             : 
      64           0 :     SetExchangeSupport ();
      65             : 
      66             : 
      67             :     // set defaults
      68           0 :     m_pRbtLinktypInternet->Check ();
      69           0 :     m_pBtBrowse->Enable( true );
      70             : 
      71             : 
      72             :     // overload handlers
      73           0 :     Link aLink( LINK ( this, SvxHyperlinkInternetTp, Click_SmartProtocol_Impl ) );
      74           0 :     m_pRbtLinktypInternet->SetClickHdl( aLink );
      75           0 :     m_pRbtLinktypFTP->SetClickHdl     ( aLink );
      76           0 :     m_pCbAnonymous->SetClickHdl       ( LINK ( this, SvxHyperlinkInternetTp, ClickAnonymousHdl_Impl ) );
      77           0 :     m_pBtBrowse->SetClickHdl          ( LINK ( this, SvxHyperlinkInternetTp, ClickBrowseHdl_Impl ) );
      78           0 :     m_pEdLogin->SetModifyHdl          ( LINK ( this, SvxHyperlinkInternetTp, ModifiedLoginHdl_Impl ) );
      79           0 :     m_pCbbTarget->SetLoseFocusHdl     ( LINK ( this, SvxHyperlinkInternetTp, LostFocusTargetHdl_Impl ) );
      80           0 :     m_pCbbTarget->SetModifyHdl        ( LINK ( this, SvxHyperlinkInternetTp, ModifiedTargetHdl_Impl ) );
      81           0 :     maTimer.SetTimeoutHdl           ( LINK ( this, SvxHyperlinkInternetTp, TimeoutHdl_Impl ) );
      82           0 : }
      83             : 
      84           0 : SvxHyperlinkInternetTp::~SvxHyperlinkInternetTp ()
      85             : {
      86           0 : }
      87             : 
      88             : /*************************************************************************
      89             : |*
      90             : |* Fill the all dialog-controls except controls in groupbox "more..."
      91             : |*
      92             : |************************************************************************/
      93             : 
      94           0 : void SvxHyperlinkInternetTp::FillDlgFields(const OUString& rStrURL)
      95             : {
      96           0 :     INetURLObject aURL(rStrURL);
      97           0 :     OUString aStrScheme(GetSchemeFromURL(rStrURL));
      98             : 
      99             :     // set additional controls for FTP: Username / Password
     100           0 :     if (aStrScheme.startsWith(sFTPScheme))
     101             :     {
     102           0 :         if ( aURL.GetUser().toAsciiLowerCase().startsWith( sAnonymous ) )
     103           0 :             setAnonymousFTPUser();
     104             :         else
     105           0 :             setFTPUser(aURL.GetUser(), aURL.GetPass());
     106             : 
     107             :         //do not show password and user in url
     108           0 :         if(!aURL.GetUser().isEmpty() || !aURL.GetPass().isEmpty() )
     109           0 :             aURL.SetUserAndPass(aEmptyStr,aEmptyStr);
     110             :     }
     111             : 
     112             :     // set URL-field
     113             :     // Show the scheme, #72740
     114           0 :     if ( aURL.GetProtocol() != INET_PROT_NOT_VALID )
     115           0 :         m_pCbbTarget->SetText( aURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS ) );
     116             :     else
     117           0 :         m_pCbbTarget->SetText(rStrURL); // #77696#
     118             : 
     119           0 :     SetScheme(aStrScheme);
     120           0 : }
     121             : 
     122           0 : void SvxHyperlinkInternetTp::setAnonymousFTPUser()
     123             : {
     124           0 :     m_pEdLogin->SetText(OUString(sAnonymous));
     125           0 :     SvAddressParser aAddress( SvtUserOptions().GetEmail() );
     126           0 :     m_pEdPassword->SetText( aAddress.Count() ? aAddress.GetEmailAddress(0) : OUString() );
     127             : 
     128           0 :     m_pFtLogin->Disable ();
     129           0 :     m_pFtPassword->Disable ();
     130           0 :     m_pEdLogin->Disable ();
     131           0 :     m_pEdPassword->Disable ();
     132           0 :     m_pCbAnonymous->Check();
     133           0 : }
     134             : 
     135           0 : void SvxHyperlinkInternetTp::setFTPUser(const OUString& rUser, const OUString& rPassword)
     136             : {
     137           0 :     m_pEdLogin->SetText ( rUser );
     138           0 :     m_pEdPassword->SetText ( rPassword );
     139             : 
     140           0 :     m_pFtLogin->Enable ();
     141           0 :     m_pFtPassword->Enable ();
     142           0 :     m_pEdLogin->Enable ();
     143           0 :     m_pEdPassword->Enable ();
     144           0 :     m_pCbAnonymous->Check(false);
     145           0 : }
     146             : 
     147             : /*************************************************************************
     148             : |*
     149             : |* retrieve and prepare data from dialog-fields
     150             : |*
     151             : |************************************************************************/
     152             : 
     153           0 : void SvxHyperlinkInternetTp::GetCurentItemData ( OUString& rStrURL, OUString& aStrName,
     154             :                                                  OUString& aStrIntName, OUString& aStrFrame,
     155             :                                                  SvxLinkInsertMode& eMode )
     156             : {
     157           0 :     rStrURL = CreateAbsoluteURL();
     158           0 :     GetDataFromCommonFields( aStrName, aStrIntName, aStrFrame, eMode );
     159           0 : }
     160             : 
     161           0 : OUString SvxHyperlinkInternetTp::CreateAbsoluteURL() const
     162             : {
     163             :     // erase leading and trailing whitespaces
     164           0 :     OUString aStrURL( m_pCbbTarget->GetText().trim() );
     165             : 
     166           0 :     INetURLObject aURL(aStrURL);
     167             : 
     168           0 :     if( aURL.GetProtocol() == INET_PROT_NOT_VALID )
     169             :     {
     170           0 :         aURL.SetSmartProtocol( GetSmartProtocolFromButtons() );
     171           0 :         aURL.SetSmartURL(aStrURL);
     172             :     }
     173             : 
     174             :     // username and password for ftp-url
     175           0 :     if( aURL.GetProtocol() == INET_PROT_FTP && !m_pEdLogin->GetText().isEmpty() )
     176           0 :         aURL.SetUserAndPass ( m_pEdLogin->GetText(), m_pEdPassword->GetText() );
     177             : 
     178           0 :     if ( aURL.GetProtocol() != INET_PROT_NOT_VALID )
     179           0 :         return aURL.GetMainURL( INetURLObject::DECODE_WITH_CHARSET );
     180             :     else //#105788# always create a URL even if it is not valid
     181           0 :         return aStrURL;
     182             : }
     183             : 
     184             : /*************************************************************************
     185             : |*
     186             : |* static method to create Tabpage
     187             : |*
     188             : |************************************************************************/
     189             : 
     190           0 : IconChoicePage* SvxHyperlinkInternetTp::Create( vcl::Window* pWindow, IconChoiceDialog* pDlg, const SfxItemSet& rItemSet )
     191             : {
     192           0 :     return( new SvxHyperlinkInternetTp( pWindow, pDlg, rItemSet ) );
     193             : }
     194             : 
     195             : /*************************************************************************
     196             : |*
     197             : |* Set initial focus
     198             : |*
     199             : |************************************************************************/
     200             : 
     201           0 : void SvxHyperlinkInternetTp::SetInitFocus()
     202             : {
     203           0 :     m_pCbbTarget->GrabFocus();
     204           0 : }
     205             : 
     206             : /*************************************************************************
     207             : |*
     208             : |* Contents of editfield "Target" modified
     209             : |*
     210             : |************************************************************************/
     211             : 
     212           0 : IMPL_LINK_NOARG(SvxHyperlinkInternetTp, ModifiedTargetHdl_Impl)
     213             : {
     214           0 :     OUString aScheme = GetSchemeFromURL( m_pCbbTarget->GetText() );
     215           0 :     if( !aScheme.isEmpty() )
     216           0 :         SetScheme( aScheme );
     217             : 
     218             :     // start timer
     219           0 :     maTimer.SetTimeout( 2500 );
     220           0 :     maTimer.Start();
     221             : 
     222           0 :     return( 0L );
     223             : }
     224             : 
     225             : /*************************************************************************
     226             : |*
     227             : |* If target-field was modify, to browse the new doc after timeout
     228             : |*
     229             : |************************************************************************/
     230             : 
     231           0 : IMPL_LINK_NOARG(SvxHyperlinkInternetTp, TimeoutHdl_Impl)
     232             : {
     233           0 :     RefreshMarkWindow();
     234           0 :     return( 0L );
     235             : }
     236             : 
     237             : /*************************************************************************
     238             : |*
     239             : |* Contents of editfield "Login" modified
     240             : |*
     241             : |************************************************************************/
     242             : 
     243           0 : IMPL_LINK_NOARG(SvxHyperlinkInternetTp, ModifiedLoginHdl_Impl)
     244             : {
     245           0 :     OUString aStrLogin ( m_pEdLogin->GetText() );
     246           0 :     if ( aStrLogin.equalsIgnoreAsciiCase( sAnonymous ) )
     247             :     {
     248           0 :         m_pCbAnonymous->Check();
     249           0 :         ClickAnonymousHdl_Impl(NULL);
     250             :     }
     251             : 
     252           0 :     return( 0L );
     253             : }
     254             : 
     255             : /*************************************************************************
     256             : |************************************************************************/
     257             : 
     258           0 : void SvxHyperlinkInternetTp::SetScheme(const OUString& rScheme)
     259             : {
     260             :     //if rScheme is empty or unknown the default beaviour is like it where HTTP
     261           0 :     bool bFTP = rScheme.startsWith(sFTPScheme);
     262           0 :     bool bInternet = !(bFTP);
     263             : 
     264             :     //update protocol button selection:
     265           0 :     m_pRbtLinktypFTP->Check(bFTP);
     266           0 :     m_pRbtLinktypInternet->Check(bInternet);
     267             : 
     268             :     //update target:
     269           0 :     RemoveImproperProtocol(rScheme);
     270           0 :     m_pCbbTarget->SetSmartProtocol( GetSmartProtocolFromButtons() );
     271             : 
     272             :     //show/hide  special fields for FTP:
     273           0 :     m_pFtLogin->Show( bFTP );
     274           0 :     m_pFtPassword->Show( bFTP );
     275           0 :     m_pEdLogin->Show( bFTP );
     276           0 :     m_pEdPassword->Show( bFTP );
     277           0 :     m_pCbAnonymous->Show( bFTP );
     278             : 
     279             :     //update 'link target in document'-window and opening-button
     280           0 :     if (rScheme.startsWith(sHTTPScheme) || rScheme.isEmpty())
     281             :     {
     282           0 :         if ( mbMarkWndOpen )
     283           0 :             ShowMarkWnd ();
     284             :     }
     285             :     else
     286             :     {
     287             :         //disable for https and ftp
     288           0 :         if ( mbMarkWndOpen )
     289           0 :             HideMarkWnd ();
     290             :     }
     291           0 : }
     292             : 
     293             : /*************************************************************************
     294             : |*
     295             : |* Remove protocol if it does not fit to the current button selection
     296             : |*
     297             : |************************************************************************/
     298             : 
     299           0 : void SvxHyperlinkInternetTp::RemoveImproperProtocol(const OUString& aProperScheme)
     300             : {
     301           0 :     OUString aStrURL ( m_pCbbTarget->GetText() );
     302           0 :     if ( aStrURL != aEmptyStr )
     303             :     {
     304           0 :         OUString aStrScheme(GetSchemeFromURL(aStrURL));
     305           0 :         if ( !aStrScheme.isEmpty() && aStrScheme != aProperScheme )
     306             :         {
     307           0 :             aStrURL = aStrURL.copy( aStrScheme.getLength() );
     308           0 :             m_pCbbTarget->SetText ( aStrURL );
     309           0 :         }
     310           0 :     }
     311           0 : }
     312             : 
     313           0 : OUString SvxHyperlinkInternetTp::GetSchemeFromButtons() const
     314             : {
     315           0 :     if( m_pRbtLinktypFTP->IsChecked() )
     316           0 :         return OUString(INET_FTP_SCHEME);
     317           0 :     return OUString(INET_HTTP_SCHEME);
     318             : }
     319             : 
     320           0 : INetProtocol SvxHyperlinkInternetTp::GetSmartProtocolFromButtons() const
     321             : {
     322           0 :     if( m_pRbtLinktypFTP->IsChecked() )
     323             :     {
     324           0 :         return INET_PROT_FTP;
     325             :     }
     326           0 :     return INET_PROT_HTTP;
     327             : }
     328             : 
     329             : /*************************************************************************
     330             : |*
     331             : |* Click on Radiobutton : Internet or FTP
     332             : |*
     333             : |************************************************************************/
     334             : 
     335           0 : IMPL_LINK_NOARG(SvxHyperlinkInternetTp, Click_SmartProtocol_Impl)
     336             : {
     337           0 :     OUString aScheme = GetSchemeFromButtons();
     338           0 :     SetScheme(aScheme);
     339           0 :     return( 0L );
     340             : }
     341             : 
     342             : /*************************************************************************
     343             : |*
     344             : |* Click on Checkbox : Anonymous user
     345             : |*
     346             : |************************************************************************/
     347             : 
     348           0 : IMPL_LINK_NOARG(SvxHyperlinkInternetTp, ClickAnonymousHdl_Impl)
     349             : {
     350             :     // disable login-editfields if checked
     351           0 :     if ( m_pCbAnonymous->IsChecked() )
     352             :     {
     353           0 :         if ( m_pEdLogin->GetText().toAsciiLowerCase().startsWith( sAnonymous ) )
     354             :         {
     355           0 :             maStrOldUser = aEmptyStr;
     356           0 :             maStrOldPassword = aEmptyStr;
     357             :         }
     358             :         else
     359             :         {
     360           0 :             maStrOldUser = m_pEdLogin->GetText();
     361           0 :             maStrOldPassword = m_pEdPassword->GetText();
     362             :         }
     363             : 
     364           0 :         setAnonymousFTPUser();
     365             :     }
     366             :     else
     367           0 :         setFTPUser(maStrOldUser, maStrOldPassword);
     368             : 
     369           0 :     return( 0L );
     370             : }
     371             : 
     372             : /*************************************************************************
     373             : |*
     374             : |* Combobox Target lost the focus
     375             : |*
     376             : |************************************************************************/
     377             : 
     378           0 : IMPL_LINK_NOARG(SvxHyperlinkInternetTp, LostFocusTargetHdl_Impl)
     379             : {
     380           0 :     RefreshMarkWindow();
     381           0 :     return (0L);
     382             : }
     383             : 
     384             : /*************************************************************************
     385             : |*
     386             : |* Click on imagebutton : Browse
     387             : |*
     388             : |************************************************************************/
     389             : 
     390           0 : IMPL_LINK_NOARG(SvxHyperlinkInternetTp, ClickBrowseHdl_Impl)
     391             : {
     392             : 
     393             :     // Open URL if available
     394             : 
     395           0 :     SfxStringItem aName( SID_FILE_NAME, OUString("http://") );
     396           0 :     SfxStringItem aRefererItem( SID_REFERER, OUString("private:user") );
     397           0 :     SfxBoolItem aNewView( SID_OPEN_NEW_VIEW, true );
     398           0 :     SfxBoolItem aSilent( SID_SILENT, true );
     399           0 :     SfxBoolItem aReadOnly( SID_DOC_READONLY, true );
     400             : 
     401           0 :     SfxBoolItem aBrowse( SID_BROWSE, true );
     402             : 
     403           0 :     const SfxPoolItem *ppItems[] = { &aName, &aNewView, &aSilent, &aReadOnly, &aRefererItem, &aBrowse, NULL };
     404           0 :     static_cast<SvxHpLinkDlg*>(mpDialog)->GetBindings()->Execute( SID_OPENDOC, ppItems, 0, SfxCallMode::ASYNCHRON | SfxCallMode::RECORD );
     405             : 
     406           0 :     return( 0L );
     407             : }
     408             : 
     409           0 : void SvxHyperlinkInternetTp::RefreshMarkWindow()
     410             : {
     411           0 :     if ( m_pRbtLinktypInternet->IsChecked() && IsMarkWndVisible() )
     412             :     {
     413           0 :         EnterWait();
     414           0 :         OUString aStrURL( CreateAbsoluteURL() );
     415           0 :         if ( aStrURL != aEmptyStr )
     416           0 :             mpMarkWnd->RefreshTree ( aStrURL );
     417             :         else
     418           0 :             mpMarkWnd->SetError( LERR_DOCNOTOPEN );
     419           0 :         LeaveWait();
     420             :     }
     421             : 
     422           0 : }
     423             : 
     424             : /*************************************************************************
     425             : |*
     426             : |* Get String from Bookmark-Wnd
     427             : |*
     428             : |************************************************************************/
     429             : 
     430           0 : void SvxHyperlinkInternetTp::SetMarkStr ( const OUString& aStrMark )
     431             : {
     432           0 :     OUString aStrURL ( m_pCbbTarget->GetText() );
     433             : 
     434           0 :     const sal_Unicode sUHash = '#';
     435           0 :     sal_Int32 nPos = aStrURL.lastIndexOf( sUHash );
     436             : 
     437           0 :     if( nPos != -1 )
     438           0 :         aStrURL = aStrURL.copy(0, nPos);
     439             : 
     440           0 :     aStrURL += OUString(sUHash) + aStrMark;
     441             : 
     442           0 :     m_pCbbTarget->SetText ( aStrURL );
     443           0 : }
     444             : 
     445             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10