xref: /aoo4110/main/cui/source/dialogs/hlinettp.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_cui.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include <unotools/pathoptions.hxx>
28*b1cdbd2cSJim Jagielski #include <unotools/useroptions.hxx>
29*b1cdbd2cSJim Jagielski #include <svl/adrparse.hxx>
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski #include "hlinettp.hxx"
32*b1cdbd2cSJim Jagielski #include "hyperdlg.hrc"
33*b1cdbd2cSJim Jagielski #include "hlmarkwn_def.hxx" //ADD CHINA001
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski #define STD_DOC_SUBPATH		"internal"
36*b1cdbd2cSJim Jagielski #define STD_DOC_NAME		"url_transfer.htm"
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sAnonymous[]    = "anonymous";
39*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sHTTPScheme[]   = INET_HTTP_SCHEME;
40*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sHTTPSScheme[]  = INET_HTTPS_SCHEME;
41*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sFTPScheme[]    = INET_FTP_SCHEME;
42*b1cdbd2cSJim Jagielski sal_Char __READONLY_DATA sTelnetScheme[] = INET_TELNET_SCHEME;
43*b1cdbd2cSJim Jagielski 
44*b1cdbd2cSJim Jagielski /*************************************************************************
45*b1cdbd2cSJim Jagielski |*
46*b1cdbd2cSJim Jagielski |* Contructor / Destructor
47*b1cdbd2cSJim Jagielski |*
48*b1cdbd2cSJim Jagielski |************************************************************************/
49*b1cdbd2cSJim Jagielski 
SvxHyperlinkInternetTp(Window * pParent,const SfxItemSet & rItemSet)50*b1cdbd2cSJim Jagielski SvxHyperlinkInternetTp::SvxHyperlinkInternetTp ( Window *pParent,
51*b1cdbd2cSJim Jagielski 												 const SfxItemSet& rItemSet)
52*b1cdbd2cSJim Jagielski :   SvxHyperlinkTabPageBase ( pParent, CUI_RES( RID_SVXPAGE_HYPERLINK_INTERNET ),
53*b1cdbd2cSJim Jagielski                               rItemSet ) ,
54*b1cdbd2cSJim Jagielski     maGrpLinkTyp           ( this, CUI_RES (GRP_LINKTYPE) ),
55*b1cdbd2cSJim Jagielski 	maRbtLinktypInternet	( this, CUI_RES (RB_LINKTYP_INTERNET) ),
56*b1cdbd2cSJim Jagielski 	maRbtLinktypFTP			( this, CUI_RES (RB_LINKTYP_FTP) ),
57*b1cdbd2cSJim Jagielski 	maRbtLinktypTelnet		( this, CUI_RES (RB_LINKTYP_TELNET) ),
58*b1cdbd2cSJim Jagielski 	maFtTarget				( this, CUI_RES (FT_TARGET_HTML) ),
59*b1cdbd2cSJim Jagielski 	maCbbTarget				( this, INET_PROT_HTTP ),
60*b1cdbd2cSJim Jagielski 	maBtBrowse				( this, CUI_RES (BTN_BROWSE) ),
61*b1cdbd2cSJim Jagielski 	maFtLogin				( this, CUI_RES (FT_LOGIN) ),
62*b1cdbd2cSJim Jagielski 	maEdLogin				( this, CUI_RES (ED_LOGIN) ),
63*b1cdbd2cSJim Jagielski 	maBtTarget				( this, CUI_RES (BTN_TARGET) ),
64*b1cdbd2cSJim Jagielski 	maFtPassword			( this, CUI_RES (FT_PASSWD) ),
65*b1cdbd2cSJim Jagielski 	maEdPassword			( this, CUI_RES (ED_PASSWD) ),
66*b1cdbd2cSJim Jagielski 	maCbAnonymous			( this, CUI_RES (CBX_ANONYMOUS) ),
67*b1cdbd2cSJim Jagielski     mbMarkWndOpen           ( sal_False )
68*b1cdbd2cSJim Jagielski {
69*b1cdbd2cSJim Jagielski 	// Set HC bitmaps and display display of bitmap names.
70*b1cdbd2cSJim Jagielski 	maBtBrowse.SetModeImage( Image( CUI_RES( IMG_BROWSE_HC ) ), BMP_COLOR_HIGHCONTRAST );
71*b1cdbd2cSJim Jagielski     maBtBrowse.EnableTextDisplay (sal_False);
72*b1cdbd2cSJim Jagielski 	maBtTarget.SetModeImage( Image( CUI_RES( IMG_TARGET_HC ) ), BMP_COLOR_HIGHCONTRAST );
73*b1cdbd2cSJim Jagielski     maBtTarget.EnableTextDisplay (sal_False);
74*b1cdbd2cSJim Jagielski 
75*b1cdbd2cSJim Jagielski 	InitStdControls();
76*b1cdbd2cSJim Jagielski 	FreeResource();
77*b1cdbd2cSJim Jagielski 
78*b1cdbd2cSJim Jagielski 	// Init URL-Box (pos&size, Open-Handler)
79*b1cdbd2cSJim Jagielski 	maCbbTarget.SetPosSizePixel ( LogicToPixel( Point( COL_2, 25 ), MAP_APPFONT ),
80*b1cdbd2cSJim Jagielski 		                          LogicToPixel( Size ( 176 - COL_DIFF, 60), MAP_APPFONT ) );
81*b1cdbd2cSJim Jagielski 	maCbbTarget.Show();
82*b1cdbd2cSJim Jagielski 	maCbbTarget.SetHelpId( HID_HYPERDLG_INET_PATH );
83*b1cdbd2cSJim Jagielski 
84*b1cdbd2cSJim Jagielski 	// Find Path to Std-Doc
85*b1cdbd2cSJim Jagielski 	String aStrBasePaths( SvtPathOptions().GetTemplatePath() );
86*b1cdbd2cSJim Jagielski 	for( xub_StrLen n = 0; n < aStrBasePaths.GetTokenCount(); n++ )
87*b1cdbd2cSJim Jagielski 	{
88*b1cdbd2cSJim Jagielski 	    INetURLObject aURL( aStrBasePaths.GetToken( n ) );
89*b1cdbd2cSJim Jagielski 		aURL.Append( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( STD_DOC_SUBPATH ) ) );
90*b1cdbd2cSJim Jagielski 		aURL.Append( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( STD_DOC_NAME ) ) );
91*b1cdbd2cSJim Jagielski 		if ( FileExists( aURL ) )
92*b1cdbd2cSJim Jagielski         {
93*b1cdbd2cSJim Jagielski 			maStrStdDocURL = aURL.GetMainURL( INetURLObject::NO_DECODE );
94*b1cdbd2cSJim Jagielski             break;
95*b1cdbd2cSJim Jagielski         }
96*b1cdbd2cSJim Jagielski 	}
97*b1cdbd2cSJim Jagielski 	SetExchangeSupport ();
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski 	///////////////////////////////////////
100*b1cdbd2cSJim Jagielski 	// set defaults
101*b1cdbd2cSJim Jagielski 	maRbtLinktypInternet.Check ();
102*b1cdbd2cSJim Jagielski 	maFtLogin.Show( sal_False );
103*b1cdbd2cSJim Jagielski 	maFtPassword.Show( sal_False );
104*b1cdbd2cSJim Jagielski 	maEdLogin.Show( sal_False );
105*b1cdbd2cSJim Jagielski 	maEdPassword.Show( sal_False );
106*b1cdbd2cSJim Jagielski 	maCbAnonymous.Show( sal_False );
107*b1cdbd2cSJim Jagielski 	maBtTarget.Enable( sal_False );
108*b1cdbd2cSJim Jagielski 	maBtBrowse.Enable( maStrStdDocURL != aEmptyStr );
109*b1cdbd2cSJim Jagielski 
110*b1cdbd2cSJim Jagielski 	///////////////////////////////////////
111*b1cdbd2cSJim Jagielski 	// overload handlers
112*b1cdbd2cSJim Jagielski     Link aLink( LINK ( this, SvxHyperlinkInternetTp, Click_SmartProtocol_Impl ) );
113*b1cdbd2cSJim Jagielski     maRbtLinktypInternet.SetClickHdl( aLink );
114*b1cdbd2cSJim Jagielski     maRbtLinktypFTP.SetClickHdl     ( aLink );
115*b1cdbd2cSJim Jagielski     maRbtLinktypTelnet.SetClickHdl  ( aLink );
116*b1cdbd2cSJim Jagielski 	maCbAnonymous.SetClickHdl       ( LINK ( this, SvxHyperlinkInternetTp, ClickAnonymousHdl_Impl ) );
117*b1cdbd2cSJim Jagielski 	maBtBrowse.SetClickHdl          ( LINK ( this, SvxHyperlinkInternetTp, ClickBrowseHdl_Impl ) );
118*b1cdbd2cSJim Jagielski 	maBtTarget.SetClickHdl          ( LINK ( this, SvxHyperlinkInternetTp, ClickTargetHdl_Impl ) );
119*b1cdbd2cSJim Jagielski 	maEdLogin.SetModifyHdl			( LINK ( this, SvxHyperlinkInternetTp, ModifiedLoginHdl_Impl ) );
120*b1cdbd2cSJim Jagielski 	maCbbTarget.SetLoseFocusHdl		( LINK ( this, SvxHyperlinkInternetTp, LostFocusTargetHdl_Impl ) );
121*b1cdbd2cSJim Jagielski 	maCbbTarget.SetModifyHdl		( LINK ( this, SvxHyperlinkInternetTp, ModifiedTargetHdl_Impl ) );
122*b1cdbd2cSJim Jagielski 	maTimer.SetTimeoutHdl			( LINK ( this, SvxHyperlinkInternetTp, TimeoutHdl_Impl ) );
123*b1cdbd2cSJim Jagielski 
124*b1cdbd2cSJim Jagielski 	maFtTarget.SetAccessibleRelationMemberOf( &maGrpLinkTyp );
125*b1cdbd2cSJim Jagielski 	maCbbTarget.SetAccessibleRelationMemberOf( &maGrpLinkTyp );
126*b1cdbd2cSJim Jagielski 	maBtTarget.SetAccessibleRelationMemberOf( &maGrpLinkTyp );
127*b1cdbd2cSJim Jagielski 	maBtTarget.SetAccessibleRelationLabeledBy( &maFtTarget );
128*b1cdbd2cSJim Jagielski 	maBtBrowse.SetAccessibleRelationMemberOf( &maGrpLinkTyp );
129*b1cdbd2cSJim Jagielski 	maBtBrowse.SetAccessibleRelationLabeledBy( &maFtTarget );
130*b1cdbd2cSJim Jagielski }
131*b1cdbd2cSJim Jagielski 
~SvxHyperlinkInternetTp()132*b1cdbd2cSJim Jagielski SvxHyperlinkInternetTp::~SvxHyperlinkInternetTp ()
133*b1cdbd2cSJim Jagielski {
134*b1cdbd2cSJim Jagielski }
135*b1cdbd2cSJim Jagielski 
136*b1cdbd2cSJim Jagielski /*************************************************************************
137*b1cdbd2cSJim Jagielski |*
138*b1cdbd2cSJim Jagielski |* Fill the all dialog-controls except controls in groupbox "more..."
139*b1cdbd2cSJim Jagielski |*
140*b1cdbd2cSJim Jagielski |************************************************************************/
141*b1cdbd2cSJim Jagielski 
FillDlgFields(String & aStrURL)142*b1cdbd2cSJim Jagielski void SvxHyperlinkInternetTp::FillDlgFields ( String& aStrURL )
143*b1cdbd2cSJim Jagielski {
144*b1cdbd2cSJim Jagielski 	INetURLObject aURL( aStrURL );
145*b1cdbd2cSJim Jagielski 	String aStrScheme = GetSchemeFromURL( aStrURL );
146*b1cdbd2cSJim Jagielski 
147*b1cdbd2cSJim Jagielski     // set additional controls for FTP: Username / Password
148*b1cdbd2cSJim Jagielski 	if ( aStrScheme.SearchAscii( sFTPScheme ) == 0 )
149*b1cdbd2cSJim Jagielski 	{
150*b1cdbd2cSJim Jagielski 		if ( String(aURL.GetUser()).ToLowerAscii().SearchAscii ( sAnonymous ) == 0 )
151*b1cdbd2cSJim Jagielski 			setAnonymousFTPUser();
152*b1cdbd2cSJim Jagielski 		else
153*b1cdbd2cSJim Jagielski 			setFTPUser(aURL.GetUser(), aURL.GetPass());
154*b1cdbd2cSJim Jagielski 
155*b1cdbd2cSJim Jagielski         //do not show password and user in url
156*b1cdbd2cSJim Jagielski         if(aURL.GetUser().getLength()!=0 || aURL.GetPass().getLength()!=0 )
157*b1cdbd2cSJim Jagielski             aURL.SetUserAndPass(aEmptyStr,aEmptyStr);
158*b1cdbd2cSJim Jagielski 	}
159*b1cdbd2cSJim Jagielski 
160*b1cdbd2cSJim Jagielski 	// set URL-field
161*b1cdbd2cSJim Jagielski     // Show the scheme, #72740
162*b1cdbd2cSJim Jagielski     if ( aURL.GetProtocol() != INET_PROT_NOT_VALID )
163*b1cdbd2cSJim Jagielski 		maCbbTarget.SetText( aURL.GetMainURL( INetURLObject::DECODE_UNAMBIGUOUS ) );
164*b1cdbd2cSJim Jagielski     else
165*b1cdbd2cSJim Jagielski         maCbbTarget.SetText( aStrURL ); // #77696#
166*b1cdbd2cSJim Jagielski 
167*b1cdbd2cSJim Jagielski     SetScheme( aStrScheme );
168*b1cdbd2cSJim Jagielski }
169*b1cdbd2cSJim Jagielski 
setAnonymousFTPUser()170*b1cdbd2cSJim Jagielski void SvxHyperlinkInternetTp::setAnonymousFTPUser()
171*b1cdbd2cSJim Jagielski {
172*b1cdbd2cSJim Jagielski 	maEdLogin.SetText( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM ( sAnonymous ) ) );
173*b1cdbd2cSJim Jagielski 	SvAddressParser aAddress( SvtUserOptions().GetEmail() );
174*b1cdbd2cSJim Jagielski 	maEdPassword.SetText( aAddress.Count() ? aAddress.GetEmailAddress(0) : String() );
175*b1cdbd2cSJim Jagielski 
176*b1cdbd2cSJim Jagielski 	maFtLogin.Disable ();
177*b1cdbd2cSJim Jagielski 	maFtPassword.Disable ();
178*b1cdbd2cSJim Jagielski 	maEdLogin.Disable ();
179*b1cdbd2cSJim Jagielski 	maEdPassword.Disable ();
180*b1cdbd2cSJim Jagielski 	maCbAnonymous.Check();
181*b1cdbd2cSJim Jagielski }
182*b1cdbd2cSJim Jagielski 
setFTPUser(const String & rUser,const String & rPassword)183*b1cdbd2cSJim Jagielski void SvxHyperlinkInternetTp::setFTPUser(const String& rUser, const String& rPassword)
184*b1cdbd2cSJim Jagielski {
185*b1cdbd2cSJim Jagielski 	maEdLogin.SetText ( rUser );
186*b1cdbd2cSJim Jagielski 	maEdPassword.SetText ( rPassword );
187*b1cdbd2cSJim Jagielski 
188*b1cdbd2cSJim Jagielski 	maFtLogin.Enable ();
189*b1cdbd2cSJim Jagielski 	maFtPassword.Enable ();
190*b1cdbd2cSJim Jagielski 	maEdLogin.Enable ();
191*b1cdbd2cSJim Jagielski 	maEdPassword.Enable ();
192*b1cdbd2cSJim Jagielski 	maCbAnonymous.Check(sal_False);
193*b1cdbd2cSJim Jagielski }
194*b1cdbd2cSJim Jagielski 
195*b1cdbd2cSJim Jagielski /*************************************************************************
196*b1cdbd2cSJim Jagielski |*
197*b1cdbd2cSJim Jagielski |* retrieve and prepare data from dialog-fields
198*b1cdbd2cSJim Jagielski |*
199*b1cdbd2cSJim Jagielski |************************************************************************/
200*b1cdbd2cSJim Jagielski 
GetCurentItemData(String & aStrURL,String & aStrName,String & aStrIntName,String & aStrFrame,SvxLinkInsertMode & eMode)201*b1cdbd2cSJim Jagielski void SvxHyperlinkInternetTp::GetCurentItemData ( String& aStrURL, String& aStrName,
202*b1cdbd2cSJim Jagielski 												 String& aStrIntName, String& aStrFrame,
203*b1cdbd2cSJim Jagielski 												 SvxLinkInsertMode& eMode )
204*b1cdbd2cSJim Jagielski {
205*b1cdbd2cSJim Jagielski     aStrURL = CreateAbsoluteURL();
206*b1cdbd2cSJim Jagielski 	GetDataFromCommonFields( aStrName, aStrIntName, aStrFrame, eMode );
207*b1cdbd2cSJim Jagielski }
208*b1cdbd2cSJim Jagielski 
CreateAbsoluteURL() const209*b1cdbd2cSJim Jagielski String SvxHyperlinkInternetTp::CreateAbsoluteURL() const
210*b1cdbd2cSJim Jagielski {
211*b1cdbd2cSJim Jagielski     String aStrURL = maCbbTarget.GetText();
212*b1cdbd2cSJim Jagielski     String aScheme = GetSchemeFromURL(aStrURL);
213*b1cdbd2cSJim Jagielski 
214*b1cdbd2cSJim Jagielski     INetURLObject aURL(aStrURL);
215*b1cdbd2cSJim Jagielski 
216*b1cdbd2cSJim Jagielski 	if( aURL.GetProtocol() == INET_PROT_NOT_VALID )
217*b1cdbd2cSJim Jagielski     {
218*b1cdbd2cSJim Jagielski         aURL.SetSmartProtocol( GetSmartProtocolFromButtons() );
219*b1cdbd2cSJim Jagielski         aURL.SetSmartURL(aStrURL);
220*b1cdbd2cSJim Jagielski     }
221*b1cdbd2cSJim Jagielski 
222*b1cdbd2cSJim Jagielski 	// username and password for ftp-url
223*b1cdbd2cSJim Jagielski 	if( aURL.GetProtocol() == INET_PROT_FTP && maEdLogin.GetText().Len()!=0 )
224*b1cdbd2cSJim Jagielski 		aURL.SetUserAndPass ( maEdLogin.GetText(), maEdPassword.GetText() );
225*b1cdbd2cSJim Jagielski 
226*b1cdbd2cSJim Jagielski 	if ( aURL.GetProtocol() != INET_PROT_NOT_VALID )
227*b1cdbd2cSJim Jagielski         return aURL.GetMainURL( INetURLObject::DECODE_WITH_CHARSET );
228*b1cdbd2cSJim Jagielski     else //#105788# always create a URL even if it is not valid
229*b1cdbd2cSJim Jagielski         return aStrURL;
230*b1cdbd2cSJim Jagielski }
231*b1cdbd2cSJim Jagielski 
232*b1cdbd2cSJim Jagielski /*************************************************************************
233*b1cdbd2cSJim Jagielski |*
234*b1cdbd2cSJim Jagielski |* static method to create Tabpage
235*b1cdbd2cSJim Jagielski |*
236*b1cdbd2cSJim Jagielski |************************************************************************/
237*b1cdbd2cSJim Jagielski 
Create(Window * pWindow,const SfxItemSet & rItemSet)238*b1cdbd2cSJim Jagielski IconChoicePage* SvxHyperlinkInternetTp::Create( Window* pWindow, const SfxItemSet& rItemSet )
239*b1cdbd2cSJim Jagielski {
240*b1cdbd2cSJim Jagielski 	return( new SvxHyperlinkInternetTp( pWindow, rItemSet ) );
241*b1cdbd2cSJim Jagielski }
242*b1cdbd2cSJim Jagielski 
243*b1cdbd2cSJim Jagielski /*************************************************************************
244*b1cdbd2cSJim Jagielski |*
245*b1cdbd2cSJim Jagielski |* Set initial focus
246*b1cdbd2cSJim Jagielski |*
247*b1cdbd2cSJim Jagielski |************************************************************************/
248*b1cdbd2cSJim Jagielski 
SetInitFocus()249*b1cdbd2cSJim Jagielski void SvxHyperlinkInternetTp::SetInitFocus()
250*b1cdbd2cSJim Jagielski {
251*b1cdbd2cSJim Jagielski 	maCbbTarget.GrabFocus();
252*b1cdbd2cSJim Jagielski }
253*b1cdbd2cSJim Jagielski 
254*b1cdbd2cSJim Jagielski /*************************************************************************
255*b1cdbd2cSJim Jagielski |*
256*b1cdbd2cSJim Jagielski |* Contens of editfield "Taregt" modified
257*b1cdbd2cSJim Jagielski |*
258*b1cdbd2cSJim Jagielski |************************************************************************/
259*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxHyperlinkInternetTp,ModifiedTargetHdl_Impl,void *,EMPTYARG)260*b1cdbd2cSJim Jagielski IMPL_LINK ( SvxHyperlinkInternetTp, ModifiedTargetHdl_Impl, void *, EMPTYARG )
261*b1cdbd2cSJim Jagielski {
262*b1cdbd2cSJim Jagielski     String aScheme = GetSchemeFromURL( maCbbTarget.GetText() );
263*b1cdbd2cSJim Jagielski     if(aScheme.Len()!=0)
264*b1cdbd2cSJim Jagielski         SetScheme( aScheme );
265*b1cdbd2cSJim Jagielski 
266*b1cdbd2cSJim Jagielski 	// start timer
267*b1cdbd2cSJim Jagielski 	maTimer.SetTimeout( 2500 );
268*b1cdbd2cSJim Jagielski 	maTimer.Start();
269*b1cdbd2cSJim Jagielski 
270*b1cdbd2cSJim Jagielski 	return( 0L );
271*b1cdbd2cSJim Jagielski }
272*b1cdbd2cSJim Jagielski 
273*b1cdbd2cSJim Jagielski /*************************************************************************
274*b1cdbd2cSJim Jagielski |*
275*b1cdbd2cSJim Jagielski |* If target-field was modify, to browse the new doc afeter timeout
276*b1cdbd2cSJim Jagielski |*
277*b1cdbd2cSJim Jagielski |************************************************************************/
278*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxHyperlinkInternetTp,TimeoutHdl_Impl,Timer *,EMPTYARG)279*b1cdbd2cSJim Jagielski IMPL_LINK ( SvxHyperlinkInternetTp, TimeoutHdl_Impl, Timer *, EMPTYARG )
280*b1cdbd2cSJim Jagielski {
281*b1cdbd2cSJim Jagielski     RefreshMarkWindow();
282*b1cdbd2cSJim Jagielski 	return( 0L );
283*b1cdbd2cSJim Jagielski }
284*b1cdbd2cSJim Jagielski 
285*b1cdbd2cSJim Jagielski /*************************************************************************
286*b1cdbd2cSJim Jagielski |*
287*b1cdbd2cSJim Jagielski |* Contens of editfield "Login" modified
288*b1cdbd2cSJim Jagielski |*
289*b1cdbd2cSJim Jagielski |************************************************************************/
290*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxHyperlinkInternetTp,ModifiedLoginHdl_Impl,void *,EMPTYARG)291*b1cdbd2cSJim Jagielski IMPL_LINK ( SvxHyperlinkInternetTp, ModifiedLoginHdl_Impl, void *, EMPTYARG )
292*b1cdbd2cSJim Jagielski {
293*b1cdbd2cSJim Jagielski 	String aStrLogin ( maEdLogin.GetText() );
294*b1cdbd2cSJim Jagielski 	if ( aStrLogin.EqualsIgnoreCaseAscii( sAnonymous ) )
295*b1cdbd2cSJim Jagielski 	{
296*b1cdbd2cSJim Jagielski 		maCbAnonymous.Check();
297*b1cdbd2cSJim Jagielski 		ClickAnonymousHdl_Impl(NULL);
298*b1cdbd2cSJim Jagielski 	}
299*b1cdbd2cSJim Jagielski 
300*b1cdbd2cSJim Jagielski 	return( 0L );
301*b1cdbd2cSJim Jagielski }
302*b1cdbd2cSJim Jagielski 
303*b1cdbd2cSJim Jagielski /*************************************************************************
304*b1cdbd2cSJim Jagielski |************************************************************************/
305*b1cdbd2cSJim Jagielski 
SetScheme(const String & aScheme)306*b1cdbd2cSJim Jagielski void SvxHyperlinkInternetTp::SetScheme( const String& aScheme )
307*b1cdbd2cSJim Jagielski {
308*b1cdbd2cSJim Jagielski     //if  aScheme is empty or unknown the default beaviour is like it where HTTP
309*b1cdbd2cSJim Jagielski 
310*b1cdbd2cSJim Jagielski     sal_Bool bFTP = aScheme.SearchAscii( sFTPScheme ) == 0;
311*b1cdbd2cSJim Jagielski     sal_Bool bTelnet = sal_False;
312*b1cdbd2cSJim Jagielski     if( !bFTP )
313*b1cdbd2cSJim Jagielski         bTelnet = aScheme.SearchAscii( sTelnetScheme ) == 0;
314*b1cdbd2cSJim Jagielski     sal_Bool bInternet = !(bFTP || bTelnet);
315*b1cdbd2cSJim Jagielski 
316*b1cdbd2cSJim Jagielski     //update protocol button selection:
317*b1cdbd2cSJim Jagielski     maRbtLinktypFTP.Check(bFTP);
318*b1cdbd2cSJim Jagielski     maRbtLinktypTelnet.Check(bTelnet);
319*b1cdbd2cSJim Jagielski     maRbtLinktypInternet.Check(bInternet);
320*b1cdbd2cSJim Jagielski 
321*b1cdbd2cSJim Jagielski     //update target:
322*b1cdbd2cSJim Jagielski     RemoveImproperProtocol(aScheme);
323*b1cdbd2cSJim Jagielski     maCbbTarget.SetSmartProtocol( GetSmartProtocolFromButtons() );
324*b1cdbd2cSJim Jagielski 
325*b1cdbd2cSJim Jagielski     //show/hide  special fields for FTP:
326*b1cdbd2cSJim Jagielski     maFtLogin.Show( bFTP );
327*b1cdbd2cSJim Jagielski 	maFtPassword.Show( bFTP );
328*b1cdbd2cSJim Jagielski 	maEdLogin.Show( bFTP );
329*b1cdbd2cSJim Jagielski 	maEdPassword.Show( bFTP );
330*b1cdbd2cSJim Jagielski 	maCbAnonymous.Show( bFTP );
331*b1cdbd2cSJim Jagielski 
332*b1cdbd2cSJim Jagielski     //update 'link target in document'-window and opening-button
333*b1cdbd2cSJim Jagielski     if( aScheme.SearchAscii( sHTTPScheme ) == 0 || aScheme.Len() == 0 )
334*b1cdbd2cSJim Jagielski     {
335*b1cdbd2cSJim Jagielski         maBtTarget.Enable();
336*b1cdbd2cSJim Jagielski 	    if ( mbMarkWndOpen )
337*b1cdbd2cSJim Jagielski 		    ShowMarkWnd ();
338*b1cdbd2cSJim Jagielski     }
339*b1cdbd2cSJim Jagielski     else
340*b1cdbd2cSJim Jagielski     {
341*b1cdbd2cSJim Jagielski         //disable for https, ftp and telnet
342*b1cdbd2cSJim Jagielski         maBtTarget.Disable();
343*b1cdbd2cSJim Jagielski 		if ( mbMarkWndOpen )
344*b1cdbd2cSJim Jagielski 			HideMarkWnd ();
345*b1cdbd2cSJim Jagielski     }
346*b1cdbd2cSJim Jagielski }
347*b1cdbd2cSJim Jagielski 
348*b1cdbd2cSJim Jagielski /*************************************************************************
349*b1cdbd2cSJim Jagielski |*
350*b1cdbd2cSJim Jagielski |* Remove protocol if it does not fit to the current button selection
351*b1cdbd2cSJim Jagielski |*
352*b1cdbd2cSJim Jagielski |************************************************************************/
353*b1cdbd2cSJim Jagielski 
RemoveImproperProtocol(const String & aProperScheme)354*b1cdbd2cSJim Jagielski void SvxHyperlinkInternetTp::RemoveImproperProtocol(const String& aProperScheme)
355*b1cdbd2cSJim Jagielski {
356*b1cdbd2cSJim Jagielski     String aStrURL ( maCbbTarget.GetText() );
357*b1cdbd2cSJim Jagielski 	if ( aStrURL != aEmptyStr )
358*b1cdbd2cSJim Jagielski 	{
359*b1cdbd2cSJim Jagielski 		String aStrScheme = GetSchemeFromURL( aStrURL );
360*b1cdbd2cSJim Jagielski 		if ( aStrScheme != aEmptyStr && aStrScheme != aProperScheme )
361*b1cdbd2cSJim Jagielski 		{
362*b1cdbd2cSJim Jagielski 			aStrURL.Erase ( 0, aStrScheme.Len() );
363*b1cdbd2cSJim Jagielski             maCbbTarget.SetText ( aStrURL );
364*b1cdbd2cSJim Jagielski 		}
365*b1cdbd2cSJim Jagielski 	}
366*b1cdbd2cSJim Jagielski }
367*b1cdbd2cSJim Jagielski 
GetSchemeFromButtons() const368*b1cdbd2cSJim Jagielski String SvxHyperlinkInternetTp::GetSchemeFromButtons() const
369*b1cdbd2cSJim Jagielski {
370*b1cdbd2cSJim Jagielski     if( maRbtLinktypFTP.IsChecked() )
371*b1cdbd2cSJim Jagielski 	{
372*b1cdbd2cSJim Jagielski 		return String::CreateFromAscii( INET_FTP_SCHEME );
373*b1cdbd2cSJim Jagielski 	}
374*b1cdbd2cSJim Jagielski 	else if( maRbtLinktypTelnet.IsChecked() )
375*b1cdbd2cSJim Jagielski 	{
376*b1cdbd2cSJim Jagielski         return String::CreateFromAscii( INET_TELNET_SCHEME );
377*b1cdbd2cSJim Jagielski 	}
378*b1cdbd2cSJim Jagielski 	return String::CreateFromAscii( INET_HTTP_SCHEME );
379*b1cdbd2cSJim Jagielski }
380*b1cdbd2cSJim Jagielski 
GetSmartProtocolFromButtons() const381*b1cdbd2cSJim Jagielski INetProtocol SvxHyperlinkInternetTp::GetSmartProtocolFromButtons() const
382*b1cdbd2cSJim Jagielski {
383*b1cdbd2cSJim Jagielski 	if( maRbtLinktypFTP.IsChecked() )
384*b1cdbd2cSJim Jagielski 	{
385*b1cdbd2cSJim Jagielski 		return INET_PROT_FTP;
386*b1cdbd2cSJim Jagielski 	}
387*b1cdbd2cSJim Jagielski 	else if( maRbtLinktypTelnet.IsChecked() )
388*b1cdbd2cSJim Jagielski 	{
389*b1cdbd2cSJim Jagielski         return INET_PROT_TELNET;
390*b1cdbd2cSJim Jagielski 	}
391*b1cdbd2cSJim Jagielski 	return INET_PROT_HTTP;
392*b1cdbd2cSJim Jagielski }
393*b1cdbd2cSJim Jagielski 
394*b1cdbd2cSJim Jagielski /*************************************************************************
395*b1cdbd2cSJim Jagielski |*
396*b1cdbd2cSJim Jagielski |* Click on Radiobutton : Internet, FTP or Telnet
397*b1cdbd2cSJim Jagielski |*
398*b1cdbd2cSJim Jagielski |************************************************************************/
399*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxHyperlinkInternetTp,Click_SmartProtocol_Impl,void *,EMPTYARG)400*b1cdbd2cSJim Jagielski IMPL_LINK ( SvxHyperlinkInternetTp, Click_SmartProtocol_Impl, void*, EMPTYARG )
401*b1cdbd2cSJim Jagielski {
402*b1cdbd2cSJim Jagielski     String aScheme = GetSchemeFromButtons();
403*b1cdbd2cSJim Jagielski     SetScheme( aScheme );
404*b1cdbd2cSJim Jagielski 	return( 0L );
405*b1cdbd2cSJim Jagielski }
406*b1cdbd2cSJim Jagielski 
407*b1cdbd2cSJim Jagielski /*************************************************************************
408*b1cdbd2cSJim Jagielski |*
409*b1cdbd2cSJim Jagielski |* Click on Checkbox : Anonymous user
410*b1cdbd2cSJim Jagielski |*
411*b1cdbd2cSJim Jagielski |************************************************************************/
412*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxHyperlinkInternetTp,ClickAnonymousHdl_Impl,void *,EMPTYARG)413*b1cdbd2cSJim Jagielski IMPL_LINK ( SvxHyperlinkInternetTp, ClickAnonymousHdl_Impl, void *, EMPTYARG )
414*b1cdbd2cSJim Jagielski {
415*b1cdbd2cSJim Jagielski 	// disable login-editfields if checked
416*b1cdbd2cSJim Jagielski 	if ( maCbAnonymous.IsChecked() )
417*b1cdbd2cSJim Jagielski 	{
418*b1cdbd2cSJim Jagielski         if ( maEdLogin.GetText().ToLowerAscii().SearchAscii ( sAnonymous ) == 0 )
419*b1cdbd2cSJim Jagielski         {
420*b1cdbd2cSJim Jagielski             maStrOldUser = aEmptyStr;
421*b1cdbd2cSJim Jagielski 	        maStrOldPassword = aEmptyStr;
422*b1cdbd2cSJim Jagielski         }
423*b1cdbd2cSJim Jagielski         else
424*b1cdbd2cSJim Jagielski         {
425*b1cdbd2cSJim Jagielski             maStrOldUser = maEdLogin.GetText();
426*b1cdbd2cSJim Jagielski 	        maStrOldPassword = maEdPassword.GetText();
427*b1cdbd2cSJim Jagielski         }
428*b1cdbd2cSJim Jagielski 
429*b1cdbd2cSJim Jagielski 		setAnonymousFTPUser();
430*b1cdbd2cSJim Jagielski 	}
431*b1cdbd2cSJim Jagielski 	else
432*b1cdbd2cSJim Jagielski 		setFTPUser(maStrOldUser, maStrOldPassword);
433*b1cdbd2cSJim Jagielski 
434*b1cdbd2cSJim Jagielski 	return( 0L );
435*b1cdbd2cSJim Jagielski }
436*b1cdbd2cSJim Jagielski 
437*b1cdbd2cSJim Jagielski /*************************************************************************
438*b1cdbd2cSJim Jagielski |*
439*b1cdbd2cSJim Jagielski |* Combobox Target lost the focus
440*b1cdbd2cSJim Jagielski |*
441*b1cdbd2cSJim Jagielski |************************************************************************/
442*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxHyperlinkInternetTp,LostFocusTargetHdl_Impl,void *,EMPTYARG)443*b1cdbd2cSJim Jagielski IMPL_LINK ( SvxHyperlinkInternetTp, LostFocusTargetHdl_Impl, void *, EMPTYARG )
444*b1cdbd2cSJim Jagielski {
445*b1cdbd2cSJim Jagielski 	RefreshMarkWindow();
446*b1cdbd2cSJim Jagielski 	return (0L);
447*b1cdbd2cSJim Jagielski }
448*b1cdbd2cSJim Jagielski 
449*b1cdbd2cSJim Jagielski /*************************************************************************
450*b1cdbd2cSJim Jagielski |*
451*b1cdbd2cSJim Jagielski |* Click on imagebutton : Browse
452*b1cdbd2cSJim Jagielski |*
453*b1cdbd2cSJim Jagielski |************************************************************************/
454*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxHyperlinkInternetTp,ClickBrowseHdl_Impl,void *,EMPTYARG)455*b1cdbd2cSJim Jagielski IMPL_LINK ( SvxHyperlinkInternetTp, ClickBrowseHdl_Impl, void *, EMPTYARG )
456*b1cdbd2cSJim Jagielski {
457*b1cdbd2cSJim Jagielski 	/////////////////////////////////////////////////
458*b1cdbd2cSJim Jagielski 	// Open URL if available
459*b1cdbd2cSJim Jagielski 
460*b1cdbd2cSJim Jagielski     SfxStringItem aName( SID_FILE_NAME, maStrStdDocURL );
461*b1cdbd2cSJim Jagielski 	SfxStringItem aRefererItem( SID_REFERER, UniString::CreateFromAscii(
462*b1cdbd2cSJim Jagielski 		                        RTL_CONSTASCII_STRINGPARAM( "private:user" ) ) );
463*b1cdbd2cSJim Jagielski 	SfxBoolItem aNewView( SID_OPEN_NEW_VIEW, sal_True );
464*b1cdbd2cSJim Jagielski 	SfxBoolItem aSilent( SID_SILENT, sal_True );
465*b1cdbd2cSJim Jagielski 	SfxBoolItem aReadOnly( SID_DOC_READONLY, sal_True );
466*b1cdbd2cSJim Jagielski 
467*b1cdbd2cSJim Jagielski     SfxBoolItem aBrowse( SID_BROWSE, sal_True );
468*b1cdbd2cSJim Jagielski 
469*b1cdbd2cSJim Jagielski     const SfxPoolItem *ppItems[] = { &aName, &aNewView, &aSilent, &aReadOnly, &aRefererItem, &aBrowse, NULL };
470*b1cdbd2cSJim Jagielski     (((SvxHpLinkDlg*)mpDialog)->GetBindings())->Execute( SID_OPENDOC, ppItems, 0, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD );
471*b1cdbd2cSJim Jagielski 
472*b1cdbd2cSJim Jagielski 	return( 0L );
473*b1cdbd2cSJim Jagielski }
474*b1cdbd2cSJim Jagielski 
475*b1cdbd2cSJim Jagielski /*************************************************************************
476*b1cdbd2cSJim Jagielski |*
477*b1cdbd2cSJim Jagielski |* Click on imagebutton : Target
478*b1cdbd2cSJim Jagielski |*
479*b1cdbd2cSJim Jagielski |************************************************************************/
480*b1cdbd2cSJim Jagielski 
IMPL_LINK(SvxHyperlinkInternetTp,ClickTargetHdl_Impl,void *,EMPTYARG)481*b1cdbd2cSJim Jagielski IMPL_LINK ( SvxHyperlinkInternetTp, ClickTargetHdl_Impl, void *, EMPTYARG )
482*b1cdbd2cSJim Jagielski {
483*b1cdbd2cSJim Jagielski 	RefreshMarkWindow();
484*b1cdbd2cSJim Jagielski 	ShowMarkWnd ();
485*b1cdbd2cSJim Jagielski 	mbMarkWndOpen = IsMarkWndVisible ();
486*b1cdbd2cSJim Jagielski 
487*b1cdbd2cSJim Jagielski 	return( 0L );
488*b1cdbd2cSJim Jagielski }
489*b1cdbd2cSJim Jagielski 
RefreshMarkWindow()490*b1cdbd2cSJim Jagielski void SvxHyperlinkInternetTp::RefreshMarkWindow()
491*b1cdbd2cSJim Jagielski {
492*b1cdbd2cSJim Jagielski     if ( maRbtLinktypInternet.IsChecked() && IsMarkWndVisible() )
493*b1cdbd2cSJim Jagielski     {
494*b1cdbd2cSJim Jagielski         EnterWait();
495*b1cdbd2cSJim Jagielski 		String aStrURL( CreateAbsoluteURL() );
496*b1cdbd2cSJim Jagielski 		if ( aStrURL != aEmptyStr )
497*b1cdbd2cSJim Jagielski 			mpMarkWnd->RefreshTree ( aStrURL );
498*b1cdbd2cSJim Jagielski         else
499*b1cdbd2cSJim Jagielski             mpMarkWnd->SetError( LERR_DOCNOTOPEN );
500*b1cdbd2cSJim Jagielski         LeaveWait();
501*b1cdbd2cSJim Jagielski 	}
502*b1cdbd2cSJim Jagielski 
503*b1cdbd2cSJim Jagielski }
504*b1cdbd2cSJim Jagielski 
505*b1cdbd2cSJim Jagielski /*************************************************************************
506*b1cdbd2cSJim Jagielski |*
507*b1cdbd2cSJim Jagielski |* Get String from Bookmark-Wnd
508*b1cdbd2cSJim Jagielski |*
509*b1cdbd2cSJim Jagielski |************************************************************************/
510*b1cdbd2cSJim Jagielski 
SetMarkStr(String & aStrMark)511*b1cdbd2cSJim Jagielski void SvxHyperlinkInternetTp::SetMarkStr ( String& aStrMark )
512*b1cdbd2cSJim Jagielski {
513*b1cdbd2cSJim Jagielski 	String aStrURL ( maCbbTarget.GetText() );
514*b1cdbd2cSJim Jagielski 
515*b1cdbd2cSJim Jagielski 	const sal_Unicode sUHash = '#';
516*b1cdbd2cSJim Jagielski 	xub_StrLen nPos = aStrURL.SearchBackward( sUHash );
517*b1cdbd2cSJim Jagielski 
518*b1cdbd2cSJim Jagielski 	if( nPos != STRING_NOTFOUND )
519*b1cdbd2cSJim Jagielski 		aStrURL.Erase ( nPos );
520*b1cdbd2cSJim Jagielski 
521*b1cdbd2cSJim Jagielski 	aStrURL += sUHash;
522*b1cdbd2cSJim Jagielski 	aStrURL += aStrMark;
523*b1cdbd2cSJim Jagielski 
524*b1cdbd2cSJim Jagielski 	maCbbTarget.SetText ( aStrURL );
525*b1cdbd2cSJim Jagielski }
526*b1cdbd2cSJim Jagielski 
527*b1cdbd2cSJim Jagielski /*************************************************************************
528*b1cdbd2cSJim Jagielski |*
529*b1cdbd2cSJim Jagielski |* Enable Browse-Button in subject to the office is in onlinemode
530*b1cdbd2cSJim Jagielski |*
531*b1cdbd2cSJim Jagielski |************************************************************************/
532*b1cdbd2cSJim Jagielski 
SetOnlineMode(sal_Bool)533*b1cdbd2cSJim Jagielski void SvxHyperlinkInternetTp::SetOnlineMode( sal_Bool /*bEnable*/ )
534*b1cdbd2cSJim Jagielski {
535*b1cdbd2cSJim Jagielski 	// State of target-button in subject to the current url-string
536*b1cdbd2cSJim Jagielski 	// ( Can't display any targets in an document, if there is no
537*b1cdbd2cSJim Jagielski 	//   valid url to a document )
538*b1cdbd2cSJim Jagielski 	String aStrCurrentTarget( maCbbTarget.GetText() );
539*b1cdbd2cSJim Jagielski 	aStrCurrentTarget.EraseTrailingChars();
540*b1cdbd2cSJim Jagielski 
541*b1cdbd2cSJim Jagielski 	if( aStrCurrentTarget == aEmptyStr                ||
542*b1cdbd2cSJim Jagielski 		aStrCurrentTarget.EqualsIgnoreCaseAscii( sHTTPScheme )  ||
543*b1cdbd2cSJim Jagielski 		aStrCurrentTarget.EqualsIgnoreCaseAscii( sHTTPSScheme ) )
544*b1cdbd2cSJim Jagielski 		maBtTarget.Enable( sal_False );
545*b1cdbd2cSJim Jagielski 	else
546*b1cdbd2cSJim Jagielski 		maBtTarget.Enable( sal_True );
547*b1cdbd2cSJim Jagielski }
548