1*2a97ec55SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*2a97ec55SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*2a97ec55SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*2a97ec55SAndrew Rist  * distributed with this work for additional information
6*2a97ec55SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*2a97ec55SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*2a97ec55SAndrew Rist  * "License"); you may not use this file except in compliance
9*2a97ec55SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*2a97ec55SAndrew Rist  *
11*2a97ec55SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*2a97ec55SAndrew Rist  *
13*2a97ec55SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*2a97ec55SAndrew Rist  * software distributed under the License is distributed on an
15*2a97ec55SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*2a97ec55SAndrew Rist  * KIND, either express or implied.  See the License for the
17*2a97ec55SAndrew Rist  * specific language governing permissions and limitations
18*2a97ec55SAndrew Rist  * under the License.
19*2a97ec55SAndrew Rist  *
20*2a97ec55SAndrew Rist  *************************************************************/
21*2a97ec55SAndrew Rist 
22*2a97ec55SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_extensions.hxx"
26cdf0e10cSrcweir #include "typeselectionpage.hxx"
27cdf0e10cSrcweir #include "addresssettings.hxx"
28cdf0e10cSrcweir #include "abspilot.hxx"
29cdf0e10cSrcweir #include <vcl/msgbox.hxx>
30cdf0e10cSrcweir #include <com/sun/star/sdbc/XDriverAccess.hpp>
31cdf0e10cSrcweir 
32cdf0e10cSrcweir //.........................................................................
33cdf0e10cSrcweir namespace abp
34cdf0e10cSrcweir {
35cdf0e10cSrcweir //.........................................................................
36cdf0e10cSrcweir 
37cdf0e10cSrcweir 	using namespace ::com::sun::star::uno;
38cdf0e10cSrcweir 	using namespace ::com::sun::star::sdbc;
39cdf0e10cSrcweir 
40cdf0e10cSrcweir 	//=====================================================================
41cdf0e10cSrcweir 	//= TypeSelectionPage
42cdf0e10cSrcweir 	//=====================================================================
43cdf0e10cSrcweir 	//---------------------------------------------------------------------
TypeSelectionPage(OAddessBookSourcePilot * _pParent)44cdf0e10cSrcweir 	TypeSelectionPage::TypeSelectionPage( OAddessBookSourcePilot* _pParent )
45cdf0e10cSrcweir 		:AddressBookSourcePage(_pParent, ModuleRes(RID_PAGE_SELECTABTYPE))
46cdf0e10cSrcweir         ,m_aHint			    (this,	ModuleRes(FT_TYPE_HINTS))
47cdf0e10cSrcweir         ,m_aTypeSep			    (this,	ModuleRes(FL_TYPE))
48cdf0e10cSrcweir         ,m_aEvolution		    (this,	ModuleRes(RB_EVOLUTION))
49cdf0e10cSrcweir         ,m_aEvolutionGroupwise  (this,	ModuleRes(RB_EVOLUTION_GROUPWISE))
50cdf0e10cSrcweir         ,m_aEvolutionLdap	    (this,	ModuleRes(RB_EVOLUTION_LDAP))
51cdf0e10cSrcweir         ,m_aMORK			    (this,	ModuleRes(RB_MORK))
52cdf0e10cSrcweir         ,m_aThunderbird         (this,  ModuleRes(RB_THUNDERBIRD))
53cdf0e10cSrcweir         ,m_aKab				    (this,	ModuleRes(RB_KAB))
54cdf0e10cSrcweir         ,m_aMacab			    (this,	ModuleRes(RB_MACAB))
55cdf0e10cSrcweir         ,m_aLDAP			    (this,	ModuleRes(RB_LDAP))
56cdf0e10cSrcweir         ,m_aOutlook			    (this,	ModuleRes(RB_OUTLOOK))
57cdf0e10cSrcweir         ,m_aOE				    (this,	ModuleRes(RB_OUTLOOKEXPRESS))
58cdf0e10cSrcweir         ,m_aOther			    (this,	ModuleRes(RB_OTHER))
59cdf0e10cSrcweir     {
60cdf0e10cSrcweir 		FreeResource();
61cdf0e10cSrcweir 
62cdf0e10cSrcweir 		Point aTopLeft( LogicToPixel( Point( 15, 68 ), MAP_APPFONT ) );
63cdf0e10cSrcweir 		Size  aItemSize( LogicToPixel( Size( 0, 8 ), MAP_APPFONT ) );
64cdf0e10cSrcweir         aItemSize.Width() = GetOutputSizePixel().Width() - 30;
65cdf0e10cSrcweir 
66cdf0e10cSrcweir 		bool bWithMozilla = true, bUnx = true;
67cdf0e10cSrcweir 		bool bHaveEvolution = true, bHaveKab = true;
68cdf0e10cSrcweir 		bool bHaveMacab = true;
69cdf0e10cSrcweir 
70cdf0e10cSrcweir #if !defined WITH_MOZILLA || defined MACOSX
71cdf0e10cSrcweir 		bWithMozilla = false;
72cdf0e10cSrcweir #endif
73cdf0e10cSrcweir #ifndef UNX
74cdf0e10cSrcweir 		bUnx = false;
75cdf0e10cSrcweir 		bHaveEvolution = false;
76cdf0e10cSrcweir 		bHaveKab = false;
77cdf0e10cSrcweir 		bHaveMacab = false;
78cdf0e10cSrcweir #else
79cdf0e10cSrcweir 		Reference< XDriverAccess> xManager(_pParent->getORB()->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.sdbc.DriverManager"))), UNO_QUERY);
80cdf0e10cSrcweir 
81cdf0e10cSrcweir 		// check whether Evolution is available
82cdf0e10cSrcweir 		Reference< XDriver > xDriver( xManager->getDriverByURL(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("sdbc:address:evolution:local"))) );
83cdf0e10cSrcweir 		if ( !xDriver.is() )
84cdf0e10cSrcweir 			bHaveEvolution = false;
85cdf0e10cSrcweir 
86cdf0e10cSrcweir 		// check whether KDE address book is available
87cdf0e10cSrcweir 		xDriver = xManager->getDriverByURL(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("sdbc:address:kab")));
88cdf0e10cSrcweir 		if ( !xDriver.is() )
89cdf0e10cSrcweir 			bHaveKab = false;
90cdf0e10cSrcweir 
91cdf0e10cSrcweir 		// check whether Mac OS X address book is available
92cdf0e10cSrcweir 		xDriver = xManager->getDriverByURL(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("sdbc:address:macab")));
93cdf0e10cSrcweir 		if ( !xDriver.is() )
94cdf0e10cSrcweir 			bHaveMacab = false;
95cdf0e10cSrcweir #endif
96cdf0e10cSrcweir 
97cdf0e10cSrcweir 		// Items are displayed in list order
98cdf0e10cSrcweir 		m_aAllTypes.push_back( ButtonItem( &m_aEvolution, AST_EVOLUTION, bHaveEvolution ) );
99cdf0e10cSrcweir 		m_aAllTypes.push_back( ButtonItem( &m_aEvolutionGroupwise, AST_EVOLUTION_GROUPWISE, bHaveEvolution ) );
100cdf0e10cSrcweir 		m_aAllTypes.push_back( ButtonItem( &m_aEvolutionLdap, AST_EVOLUTION_LDAP, bHaveEvolution ) );
101cdf0e10cSrcweir 		m_aAllTypes.push_back( ButtonItem( &m_aMORK, AST_MORK, bWithMozilla ) );
102cdf0e10cSrcweir 		m_aAllTypes.push_back( ButtonItem( &m_aThunderbird, AST_THUNDERBIRD, bWithMozilla ) );
103cdf0e10cSrcweir 		m_aAllTypes.push_back( ButtonItem( &m_aKab, AST_KAB, bHaveKab ) );
104cdf0e10cSrcweir 		m_aAllTypes.push_back( ButtonItem( &m_aMacab, AST_MACAB, bHaveMacab ) );
105cdf0e10cSrcweir 		m_aAllTypes.push_back( ButtonItem( &m_aLDAP, AST_LDAP, bWithMozilla ) );
106cdf0e10cSrcweir 		m_aAllTypes.push_back( ButtonItem( &m_aOutlook, AST_OUTLOOK, bWithMozilla && !bUnx ) );
107cdf0e10cSrcweir 		m_aAllTypes.push_back( ButtonItem( &m_aOE, AST_OE, bWithMozilla && !bUnx ) );
108cdf0e10cSrcweir 		m_aAllTypes.push_back( ButtonItem( &m_aOther, AST_OTHER, true ) );
109cdf0e10cSrcweir 
110cdf0e10cSrcweir         bool bFirstVisible = true;
111cdf0e10cSrcweir 		Link aTypeSelectionHandler = LINK(this, TypeSelectionPage, OnTypeSelected );
112cdf0e10cSrcweir         const Size aSpacing( LogicToPixel( Size( 0, 3 ), MAP_APPFONT ) );
113cdf0e10cSrcweir 		for ( ::std::vector< ButtonItem >::const_iterator loop = m_aAllTypes.begin();
114cdf0e10cSrcweir 			  loop != m_aAllTypes.end(); ++loop )
115cdf0e10cSrcweir 		{
116cdf0e10cSrcweir 			ButtonItem aItem = *loop;
117cdf0e10cSrcweir 			if (!aItem.m_bVisible)
118cdf0e10cSrcweir 				aItem.m_pItem->Hide();
119cdf0e10cSrcweir 			else
120cdf0e10cSrcweir 			{
121cdf0e10cSrcweir 				aItem.m_pItem->SetPosPixel( aTopLeft );
122cdf0e10cSrcweir 				aTopLeft.Y() += aItemSize.Height() + aSpacing.Height();
123cdf0e10cSrcweir 				aItem.m_pItem->SetClickHdl( aTypeSelectionHandler );
124cdf0e10cSrcweir 				aItem.m_pItem->Show();
125cdf0e10cSrcweir 
126cdf0e10cSrcweir                 if ( bFirstVisible )
127cdf0e10cSrcweir                 {
128cdf0e10cSrcweir                     aItem.m_pItem->SetStyle( aItem.m_pItem->GetStyle() | WB_GROUP );
129cdf0e10cSrcweir                     bFirstVisible = false;
130cdf0e10cSrcweir                 }
131cdf0e10cSrcweir 			}
132cdf0e10cSrcweir 		}
133cdf0e10cSrcweir 	}
134cdf0e10cSrcweir 
135cdf0e10cSrcweir 	//---------------------------------------------------------------------
~TypeSelectionPage()136cdf0e10cSrcweir     TypeSelectionPage::~TypeSelectionPage()
137cdf0e10cSrcweir     {
138cdf0e10cSrcweir 		for ( ::std::vector< ButtonItem >::iterator loop = m_aAllTypes.begin();
139cdf0e10cSrcweir 			  loop != m_aAllTypes.end(); ++loop )
140cdf0e10cSrcweir 		{
141cdf0e10cSrcweir 			loop->m_bVisible = false;
142cdf0e10cSrcweir         }
143cdf0e10cSrcweir     }
144cdf0e10cSrcweir 
145cdf0e10cSrcweir 	//---------------------------------------------------------------------
ActivatePage()146cdf0e10cSrcweir 	void TypeSelectionPage::ActivatePage()
147cdf0e10cSrcweir 	{
148cdf0e10cSrcweir 		AddressBookSourcePage::ActivatePage();
149cdf0e10cSrcweir 
150cdf0e10cSrcweir 		for ( ::std::vector< ButtonItem >::const_iterator loop = m_aAllTypes.begin();
151cdf0e10cSrcweir 			  loop != m_aAllTypes.end(); ++loop )
152cdf0e10cSrcweir 		{
153cdf0e10cSrcweir 			const ButtonItem& rItem = (*loop);
154cdf0e10cSrcweir 			if( rItem.m_pItem->IsChecked() && rItem.m_bVisible )
155cdf0e10cSrcweir 			{
156cdf0e10cSrcweir 				rItem.m_pItem->GrabFocus();
157cdf0e10cSrcweir                 break;
158cdf0e10cSrcweir             }
159cdf0e10cSrcweir 		}
160cdf0e10cSrcweir 
161cdf0e10cSrcweir         getDialog()->enableButtons(WZB_PREVIOUS, sal_False);
162cdf0e10cSrcweir 	}
163cdf0e10cSrcweir 
164cdf0e10cSrcweir 	//---------------------------------------------------------------------
DeactivatePage()165cdf0e10cSrcweir 	void TypeSelectionPage::DeactivatePage()
166cdf0e10cSrcweir 	{
167cdf0e10cSrcweir 		AddressBookSourcePage::DeactivatePage();
168cdf0e10cSrcweir 		getDialog()->enableButtons(WZB_PREVIOUS, sal_True);
169cdf0e10cSrcweir 	}
170cdf0e10cSrcweir 
171cdf0e10cSrcweir 	//---------------------------------------------------------------------
selectType(AddressSourceType _eType)172cdf0e10cSrcweir 	void TypeSelectionPage::selectType( AddressSourceType _eType )
173cdf0e10cSrcweir 	{
174cdf0e10cSrcweir 		for ( ::std::vector< ButtonItem >::const_iterator loop = m_aAllTypes.begin();
175cdf0e10cSrcweir 			  loop != m_aAllTypes.end(); ++loop )
176cdf0e10cSrcweir 		{
177cdf0e10cSrcweir 			ButtonItem aItem = (*loop);
178cdf0e10cSrcweir 			aItem.m_pItem->Check( _eType == aItem.m_eType );
179cdf0e10cSrcweir 		}
180cdf0e10cSrcweir 	}
181cdf0e10cSrcweir 
182cdf0e10cSrcweir 	//---------------------------------------------------------------------
getSelectedType() const183cdf0e10cSrcweir 	AddressSourceType TypeSelectionPage::getSelectedType() const
184cdf0e10cSrcweir 	{
185cdf0e10cSrcweir 		for ( ::std::vector< ButtonItem >::const_iterator loop = m_aAllTypes.begin();
186cdf0e10cSrcweir 			  loop != m_aAllTypes.end(); ++loop )
187cdf0e10cSrcweir 		{
188cdf0e10cSrcweir 			ButtonItem aItem = (*loop);
189cdf0e10cSrcweir 			if ( aItem.m_pItem->IsChecked() )
190cdf0e10cSrcweir 				return aItem.m_eType;
191cdf0e10cSrcweir 		}
192cdf0e10cSrcweir 
193cdf0e10cSrcweir 		return AST_INVALID;
194cdf0e10cSrcweir 	}
195cdf0e10cSrcweir 
196cdf0e10cSrcweir 	//---------------------------------------------------------------------
initializePage()197cdf0e10cSrcweir 	void TypeSelectionPage::initializePage()
198cdf0e10cSrcweir 	{
199cdf0e10cSrcweir 		AddressBookSourcePage::initializePage();
200cdf0e10cSrcweir 
201cdf0e10cSrcweir 		const AddressSettings& rSettings = getSettings();
202cdf0e10cSrcweir 		selectType(rSettings.eType);
203cdf0e10cSrcweir 	}
204cdf0e10cSrcweir 
205cdf0e10cSrcweir 	//---------------------------------------------------------------------
commitPage(::svt::WizardTypes::CommitPageReason _eReason)206cdf0e10cSrcweir 	sal_Bool TypeSelectionPage::commitPage( ::svt::WizardTypes::CommitPageReason _eReason )
207cdf0e10cSrcweir 	{
208cdf0e10cSrcweir 		if (!AddressBookSourcePage::commitPage(_eReason))
209cdf0e10cSrcweir 			return sal_False;
210cdf0e10cSrcweir 
211cdf0e10cSrcweir 		if (AST_INVALID == getSelectedType( ))
212cdf0e10cSrcweir 		{
213cdf0e10cSrcweir 			ErrorBox aError(this, ModuleRes(RID_ERR_NEEDTYPESELECTION));
214cdf0e10cSrcweir 			aError.Execute();
215cdf0e10cSrcweir 			return sal_False;
216cdf0e10cSrcweir 		}
217cdf0e10cSrcweir 
218cdf0e10cSrcweir 		AddressSettings& rSettings = getSettings();
219cdf0e10cSrcweir 		rSettings.eType = getSelectedType();
220cdf0e10cSrcweir 
221cdf0e10cSrcweir 		return sal_True;
222cdf0e10cSrcweir 	}
223cdf0e10cSrcweir 
224cdf0e10cSrcweir 	//---------------------------------------------------------------------
canAdvance() const225cdf0e10cSrcweir 	bool TypeSelectionPage::canAdvance() const
226cdf0e10cSrcweir 	{
227cdf0e10cSrcweir 		return	AddressBookSourcePage::canAdvance()
228cdf0e10cSrcweir 			&&	(AST_INVALID != getSelectedType());
229cdf0e10cSrcweir 	}
230cdf0e10cSrcweir 
231cdf0e10cSrcweir 	//---------------------------------------------------------------------
232cdf0e10cSrcweir 	IMPL_LINK( TypeSelectionPage, OnTypeSelected, void*, /*NOTINTERESTEDIN*/ )
233cdf0e10cSrcweir 	{
234cdf0e10cSrcweir         getDialog()->typeSelectionChanged( getSelectedType() );
235cdf0e10cSrcweir 		updateDialogTravelUI();
236cdf0e10cSrcweir 		return 0L;
237cdf0e10cSrcweir 	}
238cdf0e10cSrcweir 
239cdf0e10cSrcweir //.........................................................................
240cdf0e10cSrcweir }	// namespace abp
241cdf0e10cSrcweir //.........................................................................
242cdf0e10cSrcweir 
243