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_extensions.hxx"
26*b1cdbd2cSJim Jagielski #include "abpfinalpage.hxx"
27*b1cdbd2cSJim Jagielski #include "addresssettings.hxx"
28*b1cdbd2cSJim Jagielski #include "abspilot.hxx"
29*b1cdbd2cSJim Jagielski #include <tools/debug.hxx>
30*b1cdbd2cSJim Jagielski #include <tools/urlobj.hxx>
31*b1cdbd2cSJim Jagielski #include <unotools/ucbhelper.hxx>
32*b1cdbd2cSJim Jagielski #include <sfx2/filedlghelper.hxx>
33*b1cdbd2cSJim Jagielski #include <unotools/pathoptions.hxx>
34*b1cdbd2cSJim Jagielski #ifndef SVTOOLS_FILENOTATION_HXX_
35*b1cdbd2cSJim Jagielski #include <svl/filenotation.hxx>
36*b1cdbd2cSJim Jagielski #endif
37*b1cdbd2cSJim Jagielski #include <sfx2/docfilt.hxx>
38*b1cdbd2cSJim Jagielski #include <vcl/msgbox.hxx>
39*b1cdbd2cSJim Jagielski #include <comphelper/componentcontext.hxx>
40*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
41*b1cdbd2cSJim Jagielski 
42*b1cdbd2cSJim Jagielski //.........................................................................
43*b1cdbd2cSJim Jagielski namespace abp
44*b1cdbd2cSJim Jagielski {
45*b1cdbd2cSJim Jagielski //.........................................................................
46*b1cdbd2cSJim Jagielski 	using namespace ::svt;
47*b1cdbd2cSJim Jagielski 	using namespace ::utl;
48*b1cdbd2cSJim Jagielski 
lcl_getBaseFilter()49*b1cdbd2cSJim Jagielski 	const SfxFilter* lcl_getBaseFilter()
50*b1cdbd2cSJim Jagielski 	{
51*b1cdbd2cSJim Jagielski 		static const String s_sDatabaseType = String::CreateFromAscii("StarOffice XML (Base)");
52*b1cdbd2cSJim Jagielski 		const SfxFilter* pFilter = SfxFilter::GetFilterByName( s_sDatabaseType);
53*b1cdbd2cSJim Jagielski 		OSL_ENSURE(pFilter,"Filter: StarOffice XML (Base) could not be found!");
54*b1cdbd2cSJim Jagielski 		return pFilter;
55*b1cdbd2cSJim Jagielski 	}
56*b1cdbd2cSJim Jagielski 	//=====================================================================
57*b1cdbd2cSJim Jagielski 	//= FinalPage
58*b1cdbd2cSJim Jagielski 	//=====================================================================
59*b1cdbd2cSJim Jagielski 	//---------------------------------------------------------------------
FinalPage(OAddessBookSourcePilot * _pParent)60*b1cdbd2cSJim Jagielski 	FinalPage::FinalPage( OAddessBookSourcePilot* _pParent )
61*b1cdbd2cSJim Jagielski 		:AddressBookSourcePage(_pParent, ModuleRes(RID_PAGE_FINAL))
62*b1cdbd2cSJim Jagielski 		,m_aExplanation			( this, ModuleRes( FT_FINISH_EXPL ) )
63*b1cdbd2cSJim Jagielski 		,m_aLocationLabel		( this, ModuleRes( FT_LOCATION ) )
64*b1cdbd2cSJim Jagielski 		,m_aLocation			( this, ModuleRes( CBB_LOCATION ) )
65*b1cdbd2cSJim Jagielski 		,m_aBrowse				( this, ModuleRes( PB_BROWSE ) )
66*b1cdbd2cSJim Jagielski 		,m_aRegisterName		( this, ModuleRes( CB_REGISTER_DS ) )
67*b1cdbd2cSJim Jagielski 		,m_aNameLabel			( this, ModuleRes( FT_NAME_EXPL ) )
68*b1cdbd2cSJim Jagielski 		,m_aName				( this, ModuleRes( ET_DATASOURCENAME ) )
69*b1cdbd2cSJim Jagielski 		,m_aDuplicateNameError	( this, ModuleRes( FT_DUPLICATENAME ) )
70*b1cdbd2cSJim Jagielski         ,m_aLocationController( ::comphelper::ComponentContext( _pParent->getORB() ), m_aLocation, m_aBrowse )
71*b1cdbd2cSJim Jagielski 	{
72*b1cdbd2cSJim Jagielski 		FreeResource();
73*b1cdbd2cSJim Jagielski 
74*b1cdbd2cSJim Jagielski 		m_aName.SetModifyHdl( LINK(this, FinalPage, OnNameModified) );
75*b1cdbd2cSJim Jagielski 		m_aLocation.SetModifyHdl( LINK(this, FinalPage, OnNameModified) );
76*b1cdbd2cSJim Jagielski 		m_aRegisterName.SetClickHdl( LINK( this, FinalPage, OnRegister ) );
77*b1cdbd2cSJim Jagielski 		m_aRegisterName.Check(sal_True);
78*b1cdbd2cSJim Jagielski 	}
79*b1cdbd2cSJim Jagielski 
80*b1cdbd2cSJim Jagielski 	//---------------------------------------------------------------------
isValidName() const81*b1cdbd2cSJim Jagielski 	sal_Bool FinalPage::isValidName() const
82*b1cdbd2cSJim Jagielski 	{
83*b1cdbd2cSJim Jagielski 		::rtl::OUString sCurrentName(m_aName.GetText());
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski 		if (0 == sCurrentName.getLength())
86*b1cdbd2cSJim Jagielski 			// the name must not be empty
87*b1cdbd2cSJim Jagielski 			return sal_False;
88*b1cdbd2cSJim Jagielski 
89*b1cdbd2cSJim Jagielski 		if ( m_aInvalidDataSourceNames.find( sCurrentName ) != m_aInvalidDataSourceNames.end() )
90*b1cdbd2cSJim Jagielski 			// there already is a data source with this name
91*b1cdbd2cSJim Jagielski 			return sal_False;
92*b1cdbd2cSJim Jagielski 
93*b1cdbd2cSJim Jagielski 		return sal_True;
94*b1cdbd2cSJim Jagielski 	}
95*b1cdbd2cSJim Jagielski 
96*b1cdbd2cSJim Jagielski 	//---------------------------------------------------------------------
setFields()97*b1cdbd2cSJim Jagielski 	void FinalPage::setFields()
98*b1cdbd2cSJim Jagielski 	{
99*b1cdbd2cSJim Jagielski 		AddressSettings& rSettings = getSettings();
100*b1cdbd2cSJim Jagielski 
101*b1cdbd2cSJim Jagielski 		INetURLObject aURL( rSettings.sDataSourceName );
102*b1cdbd2cSJim Jagielski 		if( aURL.GetProtocol() == INET_PROT_NOT_VALID )
103*b1cdbd2cSJim Jagielski 		{
104*b1cdbd2cSJim Jagielski 			String sPath = SvtPathOptions().GetWorkPath();
105*b1cdbd2cSJim Jagielski 			sPath += '/';
106*b1cdbd2cSJim Jagielski 			sPath += String(rSettings.sDataSourceName);
107*b1cdbd2cSJim Jagielski 
108*b1cdbd2cSJim Jagielski 			const SfxFilter* pFilter = lcl_getBaseFilter();
109*b1cdbd2cSJim Jagielski 			if ( pFilter )
110*b1cdbd2cSJim Jagielski 			{
111*b1cdbd2cSJim Jagielski 				String sExt = pFilter->GetDefaultExtension();
112*b1cdbd2cSJim Jagielski 				sPath += sExt.GetToken(1,'*');
113*b1cdbd2cSJim Jagielski 			}
114*b1cdbd2cSJim Jagielski 
115*b1cdbd2cSJim Jagielski 			aURL.SetURL(sPath);
116*b1cdbd2cSJim Jagielski 		}
117*b1cdbd2cSJim Jagielski 		OSL_ENSURE( aURL.GetProtocol() != INET_PROT_NOT_VALID ,"No valid file name!");
118*b1cdbd2cSJim Jagielski 		rSettings.sDataSourceName = aURL.GetMainURL( INetURLObject::NO_DECODE );
119*b1cdbd2cSJim Jagielski         m_aLocationController.setURL( rSettings.sDataSourceName );
120*b1cdbd2cSJim Jagielski 		String sName = aURL.getName( );
121*b1cdbd2cSJim Jagielski 		xub_StrLen nPos = sName.Search(String(aURL.GetExtension()));
122*b1cdbd2cSJim Jagielski 		if ( nPos != STRING_NOTFOUND )
123*b1cdbd2cSJim Jagielski 		{
124*b1cdbd2cSJim Jagielski 			sName.Erase(nPos-1,4);
125*b1cdbd2cSJim Jagielski 		}
126*b1cdbd2cSJim Jagielski 		m_aName.SetText(sName);
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski 		OnRegister(&m_aRegisterName);
129*b1cdbd2cSJim Jagielski 	}
130*b1cdbd2cSJim Jagielski 
131*b1cdbd2cSJim Jagielski 	//---------------------------------------------------------------------
initializePage()132*b1cdbd2cSJim Jagielski 	void FinalPage::initializePage()
133*b1cdbd2cSJim Jagielski 	{
134*b1cdbd2cSJim Jagielski 		AddressBookSourcePage::initializePage();
135*b1cdbd2cSJim Jagielski 
136*b1cdbd2cSJim Jagielski 		setFields();
137*b1cdbd2cSJim Jagielski 	}
138*b1cdbd2cSJim Jagielski 
139*b1cdbd2cSJim Jagielski 	//---------------------------------------------------------------------
commitPage(::svt::WizardTypes::CommitPageReason _eReason)140*b1cdbd2cSJim Jagielski     sal_Bool FinalPage::commitPage( ::svt::WizardTypes::CommitPageReason _eReason )
141*b1cdbd2cSJim Jagielski 	{
142*b1cdbd2cSJim Jagielski 		if (!AddressBookSourcePage::commitPage(_eReason))
143*b1cdbd2cSJim Jagielski 			return sal_False;
144*b1cdbd2cSJim Jagielski 
145*b1cdbd2cSJim Jagielski         if  (   ( ::svt::WizardTypes::eTravelBackward != _eReason )
146*b1cdbd2cSJim Jagielski             &&  ( !m_aLocationController.prepareCommit() )
147*b1cdbd2cSJim Jagielski             )
148*b1cdbd2cSJim Jagielski             return sal_False;
149*b1cdbd2cSJim Jagielski 
150*b1cdbd2cSJim Jagielski 		AddressSettings& rSettings = getSettings();
151*b1cdbd2cSJim Jagielski 		rSettings.sDataSourceName = m_aLocationController.getURL();
152*b1cdbd2cSJim Jagielski 		rSettings.bRegisterDataSource = m_aRegisterName.IsChecked();
153*b1cdbd2cSJim Jagielski 		if ( rSettings.bRegisterDataSource )
154*b1cdbd2cSJim Jagielski 			rSettings.sRegisteredDataSourceName = m_aName.GetText();
155*b1cdbd2cSJim Jagielski 
156*b1cdbd2cSJim Jagielski 		return sal_True;
157*b1cdbd2cSJim Jagielski 	}
158*b1cdbd2cSJim Jagielski 
159*b1cdbd2cSJim Jagielski 	//---------------------------------------------------------------------
ActivatePage()160*b1cdbd2cSJim Jagielski 	void FinalPage::ActivatePage()
161*b1cdbd2cSJim Jagielski 	{
162*b1cdbd2cSJim Jagielski 		AddressBookSourcePage::ActivatePage();
163*b1cdbd2cSJim Jagielski 
164*b1cdbd2cSJim Jagielski 		// get the names of all data sources
165*b1cdbd2cSJim Jagielski 		ODataSourceContext aContext( getORB() );
166*b1cdbd2cSJim Jagielski 		aContext.getDataSourceNames( m_aInvalidDataSourceNames );
167*b1cdbd2cSJim Jagielski 
168*b1cdbd2cSJim Jagielski 		// give the name edit the focus
169*b1cdbd2cSJim Jagielski 		m_aLocation.GrabFocus();
170*b1cdbd2cSJim Jagielski 
171*b1cdbd2cSJim Jagielski 		// default the finish button
172*b1cdbd2cSJim Jagielski 		getDialog()->defaultButton( WZB_FINISH );
173*b1cdbd2cSJim Jagielski 	}
174*b1cdbd2cSJim Jagielski 
175*b1cdbd2cSJim Jagielski 	//---------------------------------------------------------------------
DeactivatePage()176*b1cdbd2cSJim Jagielski 	void FinalPage::DeactivatePage()
177*b1cdbd2cSJim Jagielski 	{
178*b1cdbd2cSJim Jagielski 		AddressBookSourcePage::DeactivatePage();
179*b1cdbd2cSJim Jagielski 
180*b1cdbd2cSJim Jagielski 		// default the "next" button, again
181*b1cdbd2cSJim Jagielski 		getDialog()->defaultButton( WZB_NEXT );
182*b1cdbd2cSJim Jagielski 		// disable the finish button
183*b1cdbd2cSJim Jagielski 		getDialog()->enableButtons( WZB_FINISH, sal_False );
184*b1cdbd2cSJim Jagielski 	}
185*b1cdbd2cSJim Jagielski 
186*b1cdbd2cSJim Jagielski 	//---------------------------------------------------------------------
canAdvance() const187*b1cdbd2cSJim Jagielski 	bool FinalPage::canAdvance() const
188*b1cdbd2cSJim Jagielski 	{
189*b1cdbd2cSJim Jagielski 		return false;
190*b1cdbd2cSJim Jagielski 	}
191*b1cdbd2cSJim Jagielski 
192*b1cdbd2cSJim Jagielski 	//---------------------------------------------------------------------
implCheckName()193*b1cdbd2cSJim Jagielski 	void FinalPage::implCheckName()
194*b1cdbd2cSJim Jagielski 	{
195*b1cdbd2cSJim Jagielski 		sal_Bool bValidName = isValidName();
196*b1cdbd2cSJim Jagielski 		sal_Bool bEmptyName = 0 == m_aName.GetText().Len();
197*b1cdbd2cSJim Jagielski 		sal_Bool bEmptyLocation = 0 == m_aLocation.GetText().Len();
198*b1cdbd2cSJim Jagielski 
199*b1cdbd2cSJim Jagielski 		// enable or disable the finish button
200*b1cdbd2cSJim Jagielski 		getDialog()->enableButtons( WZB_FINISH, !bEmptyLocation && (!m_aRegisterName.IsChecked() || bValidName) );
201*b1cdbd2cSJim Jagielski 
202*b1cdbd2cSJim Jagielski 		// show the error message for an invalid name
203*b1cdbd2cSJim Jagielski 		m_aDuplicateNameError.Show( !bValidName && !bEmptyName );
204*b1cdbd2cSJim Jagielski 	}
205*b1cdbd2cSJim Jagielski 
206*b1cdbd2cSJim Jagielski 	//---------------------------------------------------------------------
207*b1cdbd2cSJim Jagielski 	IMPL_LINK( FinalPage, OnNameModified, Edit*, /**/ )
208*b1cdbd2cSJim Jagielski 	{
209*b1cdbd2cSJim Jagielski 		implCheckName();
210*b1cdbd2cSJim Jagielski 		return 0L;
211*b1cdbd2cSJim Jagielski 	}
212*b1cdbd2cSJim Jagielski 
213*b1cdbd2cSJim Jagielski     // -----------------------------------------------------------------------------
IMPL_LINK(FinalPage,OnRegister,CheckBox *,EMPTYARG)214*b1cdbd2cSJim Jagielski 	IMPL_LINK( FinalPage, OnRegister, CheckBox*, EMPTYARG )
215*b1cdbd2cSJim Jagielski 	{
216*b1cdbd2cSJim Jagielski 		sal_Bool bEnable = m_aRegisterName.IsChecked();
217*b1cdbd2cSJim Jagielski 		m_aNameLabel.Enable(bEnable);
218*b1cdbd2cSJim Jagielski 		m_aName.Enable(bEnable);
219*b1cdbd2cSJim Jagielski 		implCheckName();
220*b1cdbd2cSJim Jagielski 		return 0L;
221*b1cdbd2cSJim Jagielski 	}
222*b1cdbd2cSJim Jagielski //.........................................................................
223*b1cdbd2cSJim Jagielski }	// namespace abp
224*b1cdbd2cSJim Jagielski //.........................................................................
225*b1cdbd2cSJim Jagielski 
226