xref: /trunk/main/extensions/source/abpilot/abpfinalpage.cxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_extensions.hxx"
30 #include "abpfinalpage.hxx"
31 #include "addresssettings.hxx"
32 #include "abspilot.hxx"
33 #include <tools/debug.hxx>
34 #include <tools/urlobj.hxx>
35 #include <unotools/ucbhelper.hxx>
36 #include <sfx2/filedlghelper.hxx>
37 #include <unotools/pathoptions.hxx>
38 #ifndef SVTOOLS_FILENOTATION_HXX_
39 #include <svl/filenotation.hxx>
40 #endif
41 #include <sfx2/docfilt.hxx>
42 #include <vcl/msgbox.hxx>
43 #include <comphelper/componentcontext.hxx>
44 #include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
45 
46 //.........................................................................
47 namespace abp
48 {
49 //.........................................................................
50     using namespace ::svt;
51     using namespace ::utl;
52 
53     const SfxFilter* lcl_getBaseFilter()
54     {
55         static const String s_sDatabaseType = String::CreateFromAscii("StarOffice XML (Base)");
56         const SfxFilter* pFilter = SfxFilter::GetFilterByName( s_sDatabaseType);
57         OSL_ENSURE(pFilter,"Filter: StarOffice XML (Base) could not be found!");
58         return pFilter;
59     }
60     //=====================================================================
61     //= FinalPage
62     //=====================================================================
63     //---------------------------------------------------------------------
64     FinalPage::FinalPage( OAddessBookSourcePilot* _pParent )
65         :AddressBookSourcePage(_pParent, ModuleRes(RID_PAGE_FINAL))
66         ,m_aExplanation         ( this, ModuleRes( FT_FINISH_EXPL ) )
67         ,m_aLocationLabel       ( this, ModuleRes( FT_LOCATION ) )
68         ,m_aLocation            ( this, ModuleRes( CBB_LOCATION ) )
69         ,m_aBrowse              ( this, ModuleRes( PB_BROWSE ) )
70         ,m_aRegisterName        ( this, ModuleRes( CB_REGISTER_DS ) )
71         ,m_aNameLabel           ( this, ModuleRes( FT_NAME_EXPL ) )
72         ,m_aName                ( this, ModuleRes( ET_DATASOURCENAME ) )
73         ,m_aDuplicateNameError  ( this, ModuleRes( FT_DUPLICATENAME ) )
74         ,m_aLocationController( ::comphelper::ComponentContext( _pParent->getORB() ), m_aLocation, m_aBrowse )
75     {
76         FreeResource();
77 
78         m_aName.SetModifyHdl( LINK(this, FinalPage, OnNameModified) );
79         m_aLocation.SetModifyHdl( LINK(this, FinalPage, OnNameModified) );
80         m_aRegisterName.SetClickHdl( LINK( this, FinalPage, OnRegister ) );
81         m_aRegisterName.Check(sal_True);
82     }
83 
84     //---------------------------------------------------------------------
85     sal_Bool FinalPage::isValidName() const
86     {
87         ::rtl::OUString sCurrentName(m_aName.GetText());
88 
89         if (0 == sCurrentName.getLength())
90             // the name must not be empty
91             return sal_False;
92 
93         if ( m_aInvalidDataSourceNames.find( sCurrentName ) != m_aInvalidDataSourceNames.end() )
94             // there already is a data source with this name
95             return sal_False;
96 
97         return sal_True;
98     }
99 
100     //---------------------------------------------------------------------
101     void FinalPage::setFields()
102     {
103         AddressSettings& rSettings = getSettings();
104 
105         INetURLObject aURL( rSettings.sDataSourceName );
106         if( aURL.GetProtocol() == INET_PROT_NOT_VALID )
107         {
108             String sPath = SvtPathOptions().GetWorkPath();
109             sPath += '/';
110             sPath += String(rSettings.sDataSourceName);
111 
112             const SfxFilter* pFilter = lcl_getBaseFilter();
113             if ( pFilter )
114             {
115                 String sExt = pFilter->GetDefaultExtension();
116                 sPath += sExt.GetToken(1,'*');
117             }
118 
119             aURL.SetURL(sPath);
120         }
121         OSL_ENSURE( aURL.GetProtocol() != INET_PROT_NOT_VALID ,"No valid file name!");
122         rSettings.sDataSourceName = aURL.GetMainURL( INetURLObject::NO_DECODE );
123         m_aLocationController.setURL( rSettings.sDataSourceName );
124         String sName = aURL.getName( );
125         xub_StrLen nPos = sName.Search(String(aURL.GetExtension()));
126         if ( nPos != STRING_NOTFOUND )
127         {
128             sName.Erase(nPos-1,4);
129         }
130         m_aName.SetText(sName);
131 
132         OnRegister(&m_aRegisterName);
133     }
134 
135     //---------------------------------------------------------------------
136     void FinalPage::initializePage()
137     {
138         AddressBookSourcePage::initializePage();
139 
140         setFields();
141     }
142 
143     //---------------------------------------------------------------------
144     sal_Bool FinalPage::commitPage( ::svt::WizardTypes::CommitPageReason _eReason )
145     {
146         if (!AddressBookSourcePage::commitPage(_eReason))
147             return sal_False;
148 
149         if  (   ( ::svt::WizardTypes::eTravelBackward != _eReason )
150             &&  ( !m_aLocationController.prepareCommit() )
151             )
152             return sal_False;
153 
154         AddressSettings& rSettings = getSettings();
155         rSettings.sDataSourceName = m_aLocationController.getURL();
156         rSettings.bRegisterDataSource = m_aRegisterName.IsChecked();
157         if ( rSettings.bRegisterDataSource )
158             rSettings.sRegisteredDataSourceName = m_aName.GetText();
159 
160         return sal_True;
161     }
162 
163     //---------------------------------------------------------------------
164     void FinalPage::ActivatePage()
165     {
166         AddressBookSourcePage::ActivatePage();
167 
168         // get the names of all data sources
169         ODataSourceContext aContext( getORB() );
170         aContext.getDataSourceNames( m_aInvalidDataSourceNames );
171 
172         // give the name edit the focus
173         m_aLocation.GrabFocus();
174 
175         // default the finish button
176         getDialog()->defaultButton( WZB_FINISH );
177     }
178 
179     //---------------------------------------------------------------------
180     void FinalPage::DeactivatePage()
181     {
182         AddressBookSourcePage::DeactivatePage();
183 
184         // default the "next" button, again
185         getDialog()->defaultButton( WZB_NEXT );
186         // disable the finish button
187         getDialog()->enableButtons( WZB_FINISH, sal_False );
188     }
189 
190     //---------------------------------------------------------------------
191     bool FinalPage::canAdvance() const
192     {
193         return false;
194     }
195 
196     //---------------------------------------------------------------------
197     void FinalPage::implCheckName()
198     {
199         sal_Bool bValidName = isValidName();
200         sal_Bool bEmptyName = 0 == m_aName.GetText().Len();
201         sal_Bool bEmptyLocation = 0 == m_aLocation.GetText().Len();
202 
203         // enable or disable the finish button
204         getDialog()->enableButtons( WZB_FINISH, !bEmptyLocation && (!m_aRegisterName.IsChecked() || bValidName) );
205 
206         // show the error message for an invalid name
207         m_aDuplicateNameError.Show( !bValidName && !bEmptyName );
208     }
209 
210     //---------------------------------------------------------------------
211     IMPL_LINK( FinalPage, OnNameModified, Edit*, /**/ )
212     {
213         implCheckName();
214         return 0L;
215     }
216 
217     // -----------------------------------------------------------------------------
218     IMPL_LINK( FinalPage, OnRegister, CheckBox*, EMPTYARG )
219     {
220         sal_Bool bEnable = m_aRegisterName.IsChecked();
221         m_aNameLabel.Enable(bEnable);
222         m_aName.Enable(bEnable);
223         implCheckName();
224         return 0L;
225     }
226 //.........................................................................
227 }   // namespace abp
228 //.........................................................................
229 
230