1*b557fc96SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*b557fc96SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*b557fc96SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*b557fc96SAndrew Rist * distributed with this work for additional information
6*b557fc96SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*b557fc96SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*b557fc96SAndrew Rist * "License"); you may not use this file except in compliance
9*b557fc96SAndrew Rist * with the License. You may obtain a copy of the License at
10*b557fc96SAndrew Rist *
11*b557fc96SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*b557fc96SAndrew Rist *
13*b557fc96SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*b557fc96SAndrew Rist * software distributed under the License is distributed on an
15*b557fc96SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b557fc96SAndrew Rist * KIND, either express or implied. See the License for the
17*b557fc96SAndrew Rist * specific language governing permissions and limitations
18*b557fc96SAndrew Rist * under the License.
19*b557fc96SAndrew Rist *
20*b557fc96SAndrew Rist *************************************************************/
21*b557fc96SAndrew Rist
22*b557fc96SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_fpicker.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include "OfficeFolderPicker.hxx"
28cdf0e10cSrcweir
29cdf0e10cSrcweir #include "iodlg.hxx"
30cdf0e10cSrcweir
31cdf0e10cSrcweir #include <list>
32cdf0e10cSrcweir #include <tools/urlobj.hxx>
33cdf0e10cSrcweir
34cdf0e10cSrcweir #define _SVSTDARR_STRINGSDTOR
35cdf0e10cSrcweir #include "svl/svstdarr.hxx"
36cdf0e10cSrcweir #include <com/sun/star/container/XContentEnumerationAccess.hpp>
37cdf0e10cSrcweir #include <com/sun/star/container/XSet.hpp>
38cdf0e10cSrcweir #include <com/sun/star/uno/Any.hxx>
39cdf0e10cSrcweir #include <cppuhelper/factory.hxx>
40cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp>
41cdf0e10cSrcweir #include <unotools/pathoptions.hxx>
42cdf0e10cSrcweir
43cdf0e10cSrcweir // using ----------------------------------------------------------------
44cdf0e10cSrcweir
45cdf0e10cSrcweir using namespace ::com::sun::star::container;
46cdf0e10cSrcweir using namespace ::com::sun::star::lang;
47cdf0e10cSrcweir using namespace ::com::sun::star::uno;
48cdf0e10cSrcweir using namespace ::com::sun::star::beans;
49cdf0e10cSrcweir
50cdf0e10cSrcweir //------------------------------------------------------------------------------------
51cdf0e10cSrcweir // class SvtFolderPicker
52cdf0e10cSrcweir //------------------------------------------------------------------------------------
53cdf0e10cSrcweir
54cdf0e10cSrcweir //------------------------------------------------------------------------------------
SvtFolderPicker(const Reference<XMultiServiceFactory> & _rxFactory)55cdf0e10cSrcweir SvtFolderPicker::SvtFolderPicker( const Reference < XMultiServiceFactory >& _rxFactory )
56cdf0e10cSrcweir :OCommonPicker( _rxFactory )
57cdf0e10cSrcweir {
58cdf0e10cSrcweir }
59cdf0e10cSrcweir
60cdf0e10cSrcweir //------------------------------------------------------------------------------------
~SvtFolderPicker()61cdf0e10cSrcweir SvtFolderPicker::~SvtFolderPicker()
62cdf0e10cSrcweir {
63cdf0e10cSrcweir }
64cdf0e10cSrcweir
65cdf0e10cSrcweir //------------------------------------------------------------------------------------
66cdf0e10cSrcweir // disambiguate XInterface
67cdf0e10cSrcweir //------------------------------------------------------------------------------------
IMPLEMENT_FORWARD_XINTERFACE2(SvtFolderPicker,OCommonPicker,SvtFolderPicker_Base)68cdf0e10cSrcweir IMPLEMENT_FORWARD_XINTERFACE2( SvtFolderPicker, OCommonPicker, SvtFolderPicker_Base )
69cdf0e10cSrcweir
70cdf0e10cSrcweir //------------------------------------------------------------------------------------
71cdf0e10cSrcweir // disambiguate XTypeProvider
72cdf0e10cSrcweir //------------------------------------------------------------------------------------
73cdf0e10cSrcweir IMPLEMENT_FORWARD_XTYPEPROVIDER2( SvtFolderPicker, OCommonPicker, SvtFolderPicker_Base )
74cdf0e10cSrcweir
75cdf0e10cSrcweir //------------------------------------------------------------------------------------
76cdf0e10cSrcweir // XExecutableDialog functions
77cdf0e10cSrcweir //------------------------------------------------------------------------------------
78cdf0e10cSrcweir
79cdf0e10cSrcweir //------------------------------------------------------------------------------------
80cdf0e10cSrcweir void SAL_CALL SvtFolderPicker::setTitle( const ::rtl::OUString& _rTitle ) throw (RuntimeException)
81cdf0e10cSrcweir {
82cdf0e10cSrcweir OCommonPicker::setTitle( _rTitle );
83cdf0e10cSrcweir }
84cdf0e10cSrcweir
85cdf0e10cSrcweir //------------------------------------------------------------------------------------
execute()86cdf0e10cSrcweir sal_Int16 SAL_CALL SvtFolderPicker::execute( ) throw (RuntimeException)
87cdf0e10cSrcweir {
88cdf0e10cSrcweir return OCommonPicker::execute();
89cdf0e10cSrcweir }
90cdf0e10cSrcweir
91cdf0e10cSrcweir //------------------------------------------------------------------------------------
92cdf0e10cSrcweir // XAsynchronousExecutableDialog functions
93cdf0e10cSrcweir //------------------------------------------------------------------------------------
94cdf0e10cSrcweir
95cdf0e10cSrcweir //------------------------------------------------------------------------------------
setDialogTitle(const::rtl::OUString & _rTitle)96cdf0e10cSrcweir void SAL_CALL SvtFolderPicker::setDialogTitle( const ::rtl::OUString& _rTitle) throw (RuntimeException)
97cdf0e10cSrcweir {
98cdf0e10cSrcweir setTitle( _rTitle );
99cdf0e10cSrcweir }
100cdf0e10cSrcweir
101cdf0e10cSrcweir //------------------------------------------------------------------------------------
startExecuteModal(const Reference<::com::sun::star::ui::dialogs::XDialogClosedListener> & xListener)102cdf0e10cSrcweir void SAL_CALL SvtFolderPicker::startExecuteModal( const Reference< ::com::sun::star::ui::dialogs::XDialogClosedListener >& xListener ) throw (RuntimeException)
103cdf0e10cSrcweir {
104cdf0e10cSrcweir m_xListener = xListener;
105cdf0e10cSrcweir prepareDialog();
106cdf0e10cSrcweir prepareExecute();
107cdf0e10cSrcweir getDialog()->EnableAutocompletion( sal_True );
108cdf0e10cSrcweir getDialog()->StartExecuteModal( LINK( this, SvtFolderPicker, DialogClosedHdl ) );
109cdf0e10cSrcweir }
110cdf0e10cSrcweir
111cdf0e10cSrcweir //------------------------------------------------------------------------------------
implCreateDialog(Window * _pParent)112cdf0e10cSrcweir SvtFileDialog* SvtFolderPicker::implCreateDialog( Window* _pParent )
113cdf0e10cSrcweir {
114cdf0e10cSrcweir return new SvtFileDialog( _pParent, SFXWB_PATHDIALOG );
115cdf0e10cSrcweir }
116cdf0e10cSrcweir
117cdf0e10cSrcweir //------------------------------------------------------------------------------------
implExecutePicker()118cdf0e10cSrcweir sal_Int16 SvtFolderPicker::implExecutePicker( )
119cdf0e10cSrcweir {
120cdf0e10cSrcweir prepareExecute();
121cdf0e10cSrcweir
122cdf0e10cSrcweir // now we are ready to execute the dialog
123cdf0e10cSrcweir getDialog()->EnableAutocompletion( sal_False );
124cdf0e10cSrcweir sal_Int16 nRet = getDialog()->Execute();
125cdf0e10cSrcweir
126cdf0e10cSrcweir return nRet;
127cdf0e10cSrcweir }
128cdf0e10cSrcweir
129cdf0e10cSrcweir //------------------------------------------------------------------------------------
prepareExecute()130cdf0e10cSrcweir void SvtFolderPicker::prepareExecute()
131cdf0e10cSrcweir {
132cdf0e10cSrcweir // set the default directory
133cdf0e10cSrcweir if ( m_aDisplayDirectory.getLength() > 0 )
134cdf0e10cSrcweir getDialog()->SetPath( m_aDisplayDirectory );
135cdf0e10cSrcweir else
136cdf0e10cSrcweir {
137cdf0e10cSrcweir // Default-Standard-Dir setzen
138cdf0e10cSrcweir INetURLObject aStdDirObj( SvtPathOptions().GetWorkPath() );
139cdf0e10cSrcweir getDialog()->SetPath( aStdDirObj.GetMainURL( INetURLObject::NO_DECODE) );
140cdf0e10cSrcweir }
141cdf0e10cSrcweir }
142cdf0e10cSrcweir
143cdf0e10cSrcweir //-----------------------------------------------------------------------------
IMPL_LINK(SvtFolderPicker,DialogClosedHdl,Dialog *,pDlg)144cdf0e10cSrcweir IMPL_LINK( SvtFolderPicker, DialogClosedHdl, Dialog*, pDlg )
145cdf0e10cSrcweir {
146cdf0e10cSrcweir if ( m_xListener.is() )
147cdf0e10cSrcweir {
148cdf0e10cSrcweir sal_Int16 nRet = static_cast< sal_Int16 >( pDlg->GetResult() );
149cdf0e10cSrcweir ::com::sun::star::ui::dialogs::DialogClosedEvent aEvent( *this, nRet );
150cdf0e10cSrcweir m_xListener->dialogClosed( aEvent );
151cdf0e10cSrcweir m_xListener.clear();
152cdf0e10cSrcweir }
153cdf0e10cSrcweir return 0;
154cdf0e10cSrcweir }
155cdf0e10cSrcweir
156cdf0e10cSrcweir //------------------------------------------------------------------------------------
157cdf0e10cSrcweir // XFolderPicker functions
158cdf0e10cSrcweir //------------------------------------------------------------------------------------
159cdf0e10cSrcweir
setDisplayDirectory(const::rtl::OUString & aDirectory)160cdf0e10cSrcweir void SAL_CALL SvtFolderPicker::setDisplayDirectory( const ::rtl::OUString& aDirectory )
161cdf0e10cSrcweir throw( IllegalArgumentException, RuntimeException )
162cdf0e10cSrcweir {
163cdf0e10cSrcweir m_aDisplayDirectory = aDirectory;
164cdf0e10cSrcweir }
165cdf0e10cSrcweir
166cdf0e10cSrcweir //------------------------------------------------------------------------------------
getDisplayDirectory()167cdf0e10cSrcweir ::rtl::OUString SAL_CALL SvtFolderPicker::getDisplayDirectory() throw( RuntimeException )
168cdf0e10cSrcweir {
169cdf0e10cSrcweir ::rtl::OUString aResult;
170cdf0e10cSrcweir
171cdf0e10cSrcweir if ( ! getDialog() )
172cdf0e10cSrcweir return m_aDisplayDirectory;
173cdf0e10cSrcweir
174cdf0e10cSrcweir SvStringsDtor* pPathList = getDialog()->GetPathList();
175cdf0e10cSrcweir
176cdf0e10cSrcweir if ( pPathList->Count() )
177cdf0e10cSrcweir aResult = ::rtl::OUString( *pPathList->GetObject( 0 ) );
178cdf0e10cSrcweir
179cdf0e10cSrcweir delete pPathList;
180cdf0e10cSrcweir
181cdf0e10cSrcweir return aResult;
182cdf0e10cSrcweir }
183cdf0e10cSrcweir
184cdf0e10cSrcweir //------------------------------------------------------------------------------------
getDirectory()185cdf0e10cSrcweir ::rtl::OUString SAL_CALL SvtFolderPicker::getDirectory() throw( RuntimeException )
186cdf0e10cSrcweir {
187cdf0e10cSrcweir ::rtl::OUString aResult;
188cdf0e10cSrcweir
189cdf0e10cSrcweir if ( ! getDialog() )
190cdf0e10cSrcweir return m_aDisplayDirectory;
191cdf0e10cSrcweir
192cdf0e10cSrcweir SvStringsDtor* pPathList = getDialog()->GetPathList();
193cdf0e10cSrcweir
194cdf0e10cSrcweir if ( pPathList->Count() )
195cdf0e10cSrcweir aResult = ::rtl::OUString( *pPathList->GetObject( 0 ) );
196cdf0e10cSrcweir
197cdf0e10cSrcweir delete pPathList;
198cdf0e10cSrcweir
199cdf0e10cSrcweir return aResult;
200cdf0e10cSrcweir }
201cdf0e10cSrcweir
202cdf0e10cSrcweir //------------------------------------------------------------------------------------
setDescription(const::rtl::OUString & aDescription)203cdf0e10cSrcweir void SAL_CALL SvtFolderPicker::setDescription( const ::rtl::OUString& aDescription )
204cdf0e10cSrcweir throw( RuntimeException )
205cdf0e10cSrcweir {
206cdf0e10cSrcweir m_aDescription = aDescription;
207cdf0e10cSrcweir }
208cdf0e10cSrcweir
209cdf0e10cSrcweir //------------------------------------------------------------------------------------
210cdf0e10cSrcweir // XServiceInfo
211cdf0e10cSrcweir //------------------------------------------------------------------------------------
212cdf0e10cSrcweir
213cdf0e10cSrcweir /* XServiceInfo */
getImplementationName()214cdf0e10cSrcweir ::rtl::OUString SAL_CALL SvtFolderPicker::getImplementationName() throw( RuntimeException )
215cdf0e10cSrcweir {
216cdf0e10cSrcweir return impl_getStaticImplementationName();
217cdf0e10cSrcweir }
218cdf0e10cSrcweir
219cdf0e10cSrcweir /* XServiceInfo */
supportsService(const::rtl::OUString & sServiceName)220cdf0e10cSrcweir sal_Bool SAL_CALL SvtFolderPicker::supportsService( const ::rtl::OUString& sServiceName ) throw( RuntimeException )
221cdf0e10cSrcweir {
222cdf0e10cSrcweir Sequence< ::rtl::OUString > seqServiceNames = getSupportedServiceNames();
223cdf0e10cSrcweir const ::rtl::OUString* pArray = seqServiceNames.getConstArray();
224cdf0e10cSrcweir for ( sal_Int32 i = 0; i < seqServiceNames.getLength(); i++ )
225cdf0e10cSrcweir {
226cdf0e10cSrcweir if ( sServiceName == pArray[i] )
227cdf0e10cSrcweir {
228cdf0e10cSrcweir return sal_True ;
229cdf0e10cSrcweir }
230cdf0e10cSrcweir }
231cdf0e10cSrcweir return sal_False ;
232cdf0e10cSrcweir }
233cdf0e10cSrcweir
234cdf0e10cSrcweir /* XServiceInfo */
getSupportedServiceNames()235cdf0e10cSrcweir Sequence< ::rtl::OUString > SAL_CALL SvtFolderPicker::getSupportedServiceNames() throw( RuntimeException )
236cdf0e10cSrcweir {
237cdf0e10cSrcweir return impl_getStaticSupportedServiceNames();
238cdf0e10cSrcweir }
239cdf0e10cSrcweir
240cdf0e10cSrcweir /* Helper for XServiceInfo */
impl_getStaticSupportedServiceNames()241cdf0e10cSrcweir Sequence< ::rtl::OUString > SvtFolderPicker::impl_getStaticSupportedServiceNames()
242cdf0e10cSrcweir {
243cdf0e10cSrcweir Sequence< ::rtl::OUString > seqServiceNames(1);
244cdf0e10cSrcweir seqServiceNames[0] = ::rtl::OUString::createFromAscii( "com.sun.star.ui.dialogs.OfficeFolderPicker" );
245cdf0e10cSrcweir return seqServiceNames ;
246cdf0e10cSrcweir }
247cdf0e10cSrcweir
248cdf0e10cSrcweir /* Helper for XServiceInfo */
impl_getStaticImplementationName()249cdf0e10cSrcweir ::rtl::OUString SvtFolderPicker::impl_getStaticImplementationName()
250cdf0e10cSrcweir {
251cdf0e10cSrcweir return ::rtl::OUString::createFromAscii( "com.sun.star.svtools.OfficeFolderPicker" );
252cdf0e10cSrcweir }
253cdf0e10cSrcweir
254cdf0e10cSrcweir /* Helper for registry */
impl_createInstance(const Reference<XComponentContext> & rxContext)255cdf0e10cSrcweir Reference< XInterface > SAL_CALL SvtFolderPicker::impl_createInstance( const Reference< XComponentContext >& rxContext )
256cdf0e10cSrcweir throw( Exception )
257cdf0e10cSrcweir {
258cdf0e10cSrcweir Reference< XMultiServiceFactory > xServiceManager (rxContext->getServiceManager(), UNO_QUERY_THROW);
259cdf0e10cSrcweir return Reference< XInterface >( *new SvtFolderPicker( xServiceManager ) );
260cdf0e10cSrcweir }
261cdf0e10cSrcweir
262