xref: /AOO41X/main/extensions/source/abpilot/abpfinalpage.cxx (revision 2a97ec55f1442d65917e8c8b82a55ab76c9ff676)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_extensions.hxx"
26 #include "abpfinalpage.hxx"
27 #include "addresssettings.hxx"
28 #include "abspilot.hxx"
29 #include <tools/debug.hxx>
30 #include <tools/urlobj.hxx>
31 #include <unotools/ucbhelper.hxx>
32 #include <sfx2/filedlghelper.hxx>
33 #include <unotools/pathoptions.hxx>
34 #ifndef SVTOOLS_FILENOTATION_HXX_
35 #include <svl/filenotation.hxx>
36 #endif
37 #include <sfx2/docfilt.hxx>
38 #include <vcl/msgbox.hxx>
39 #include <comphelper/componentcontext.hxx>
40 #include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
41 
42 //.........................................................................
43 namespace abp
44 {
45 //.........................................................................
46     using namespace ::svt;
47     using namespace ::utl;
48 
lcl_getBaseFilter()49     const SfxFilter* lcl_getBaseFilter()
50     {
51         static const String s_sDatabaseType = String::CreateFromAscii("StarOffice XML (Base)");
52         const SfxFilter* pFilter = SfxFilter::GetFilterByName( s_sDatabaseType);
53         OSL_ENSURE(pFilter,"Filter: StarOffice XML (Base) could not be found!");
54         return pFilter;
55     }
56     //=====================================================================
57     //= FinalPage
58     //=====================================================================
59     //---------------------------------------------------------------------
FinalPage(OAddessBookSourcePilot * _pParent)60     FinalPage::FinalPage( OAddessBookSourcePilot* _pParent )
61         :AddressBookSourcePage(_pParent, ModuleRes(RID_PAGE_FINAL))
62         ,m_aExplanation         ( this, ModuleRes( FT_FINISH_EXPL ) )
63         ,m_aLocationLabel       ( this, ModuleRes( FT_LOCATION ) )
64         ,m_aLocation            ( this, ModuleRes( CBB_LOCATION ) )
65         ,m_aBrowse              ( this, ModuleRes( PB_BROWSE ) )
66         ,m_aRegisterName        ( this, ModuleRes( CB_REGISTER_DS ) )
67         ,m_aNameLabel           ( this, ModuleRes( FT_NAME_EXPL ) )
68         ,m_aName                ( this, ModuleRes( ET_DATASOURCENAME ) )
69         ,m_aDuplicateNameError  ( this, ModuleRes( FT_DUPLICATENAME ) )
70         ,m_aLocationController( ::comphelper::ComponentContext( _pParent->getORB() ), m_aLocation, m_aBrowse )
71     {
72         FreeResource();
73 
74         m_aName.SetModifyHdl( LINK(this, FinalPage, OnNameModified) );
75         m_aLocation.SetModifyHdl( LINK(this, FinalPage, OnNameModified) );
76         m_aRegisterName.SetClickHdl( LINK( this, FinalPage, OnRegister ) );
77         m_aRegisterName.Check(sal_True);
78     }
79 
80     //---------------------------------------------------------------------
isValidName() const81     sal_Bool FinalPage::isValidName() const
82     {
83         ::rtl::OUString sCurrentName(m_aName.GetText());
84 
85         if (0 == sCurrentName.getLength())
86             // the name must not be empty
87             return sal_False;
88 
89         if ( m_aInvalidDataSourceNames.find( sCurrentName ) != m_aInvalidDataSourceNames.end() )
90             // there already is a data source with this name
91             return sal_False;
92 
93         return sal_True;
94     }
95 
96     //---------------------------------------------------------------------
setFields()97     void FinalPage::setFields()
98     {
99         AddressSettings& rSettings = getSettings();
100 
101         INetURLObject aURL( rSettings.sDataSourceName );
102         if( aURL.GetProtocol() == INET_PROT_NOT_VALID )
103         {
104             String sPath = SvtPathOptions().GetWorkPath();
105             sPath += '/';
106             sPath += String(rSettings.sDataSourceName);
107 
108             const SfxFilter* pFilter = lcl_getBaseFilter();
109             if ( pFilter )
110             {
111                 String sExt = pFilter->GetDefaultExtension();
112                 sPath += sExt.GetToken(1,'*');
113             }
114 
115             aURL.SetURL(sPath);
116         }
117         OSL_ENSURE( aURL.GetProtocol() != INET_PROT_NOT_VALID ,"No valid file name!");
118         rSettings.sDataSourceName = aURL.GetMainURL( INetURLObject::NO_DECODE );
119         m_aLocationController.setURL( rSettings.sDataSourceName );
120         String sName = aURL.getName( );
121         xub_StrLen nPos = sName.Search(String(aURL.GetExtension()));
122         if ( nPos != STRING_NOTFOUND )
123         {
124             sName.Erase(nPos-1,4);
125         }
126         m_aName.SetText(sName);
127 
128         OnRegister(&m_aRegisterName);
129     }
130 
131     //---------------------------------------------------------------------
initializePage()132     void FinalPage::initializePage()
133     {
134         AddressBookSourcePage::initializePage();
135 
136         setFields();
137     }
138 
139     //---------------------------------------------------------------------
commitPage(::svt::WizardTypes::CommitPageReason _eReason)140     sal_Bool FinalPage::commitPage( ::svt::WizardTypes::CommitPageReason _eReason )
141     {
142         if (!AddressBookSourcePage::commitPage(_eReason))
143             return sal_False;
144 
145         if  (   ( ::svt::WizardTypes::eTravelBackward != _eReason )
146             &&  ( !m_aLocationController.prepareCommit() )
147             )
148             return sal_False;
149 
150         AddressSettings& rSettings = getSettings();
151         rSettings.sDataSourceName = m_aLocationController.getURL();
152         rSettings.bRegisterDataSource = m_aRegisterName.IsChecked();
153         if ( rSettings.bRegisterDataSource )
154             rSettings.sRegisteredDataSourceName = m_aName.GetText();
155 
156         return sal_True;
157     }
158 
159     //---------------------------------------------------------------------
ActivatePage()160     void FinalPage::ActivatePage()
161     {
162         AddressBookSourcePage::ActivatePage();
163 
164         // get the names of all data sources
165         ODataSourceContext aContext( getORB() );
166         aContext.getDataSourceNames( m_aInvalidDataSourceNames );
167 
168         // give the name edit the focus
169         m_aLocation.GrabFocus();
170 
171         // default the finish button
172         getDialog()->defaultButton( WZB_FINISH );
173     }
174 
175     //---------------------------------------------------------------------
DeactivatePage()176     void FinalPage::DeactivatePage()
177     {
178         AddressBookSourcePage::DeactivatePage();
179 
180         // default the "next" button, again
181         getDialog()->defaultButton( WZB_NEXT );
182         // disable the finish button
183         getDialog()->enableButtons( WZB_FINISH, sal_False );
184     }
185 
186     //---------------------------------------------------------------------
canAdvance() const187     bool FinalPage::canAdvance() const
188     {
189         return false;
190     }
191 
192     //---------------------------------------------------------------------
implCheckName()193     void FinalPage::implCheckName()
194     {
195         sal_Bool bValidName = isValidName();
196         sal_Bool bEmptyName = 0 == m_aName.GetText().Len();
197         sal_Bool bEmptyLocation = 0 == m_aLocation.GetText().Len();
198 
199         // enable or disable the finish button
200         getDialog()->enableButtons( WZB_FINISH, !bEmptyLocation && (!m_aRegisterName.IsChecked() || bValidName) );
201 
202         // show the error message for an invalid name
203         m_aDuplicateNameError.Show( !bValidName && !bEmptyName );
204     }
205 
206     //---------------------------------------------------------------------
207     IMPL_LINK( FinalPage, OnNameModified, Edit*, /**/ )
208     {
209         implCheckName();
210         return 0L;
211     }
212 
213     // -----------------------------------------------------------------------------
IMPL_LINK(FinalPage,OnRegister,CheckBox *,EMPTYARG)214     IMPL_LINK( FinalPage, OnRegister, CheckBox*, EMPTYARG )
215     {
216         sal_Bool bEnable = m_aRegisterName.IsChecked();
217         m_aNameLabel.Enable(bEnable);
218         m_aName.Enable(bEnable);
219         implCheckName();
220         return 0L;
221     }
222 //.........................................................................
223 }   // namespace abp
224 //.........................................................................
225 
226