xref: /AOO41X/main/fpicker/source/office/OfficeFilePicker.hxx (revision 10ce801889b00990ebdbcb412f4f91e2a9e6f21d)
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 #ifndef INCLUDED_SVT_FILEPICKER_HXX
24 #define INCLUDED_SVT_FILEPICKER_HXX
25 
26 #include <cppuhelper/implbase7.hxx>
27 #include <com/sun/star/ui/dialogs/XFilePickerControlAccess.hpp>
28 #include <com/sun/star/ui/dialogs/XFilePickerNotifier.hpp>
29 #include <com/sun/star/ui/dialogs/XFilePreview.hpp>
30 #include <com/sun/star/ui/dialogs/XFilterManager.hpp>
31 #include <com/sun/star/ui/dialogs/XFilterGroupManager.hpp>
32 #include <com/sun/star/ui/dialogs/XFilePickerListener.hpp>
33 #include <com/sun/star/ui/dialogs/XAsynchronousExecutableDialog.hpp>
34 #include <com/sun/star/lang/XServiceInfo.hpp>
35 #include <com/sun/star/lang/XEventListener.hpp>
36 #ifndef _COM_SUN_STAR_UNO_XCOMPONENT_CONTEXT_HPP_
37 #include <com/sun/star/uno/XComponentContext.hpp>
38 #endif
39 
40 
41 #include <tools/wintypes.hxx>
42 #include "commonpicker.hxx"
43 #include "pickercallbacks.hxx"
44 
45 #include <list>
46 
47 class Dialog;
48 
49 struct FilterEntry;
50 struct ElementEntry_Impl;
51 
52 typedef ::std::list< FilterEntry >                          FilterList;     // can be maintained more effectively
53 typedef ::std::list < ElementEntry_Impl >                   ElementList;
54 
55 typedef ::com::sun::star::beans::StringPair                 UnoFilterEntry;
56 typedef ::com::sun::star::uno::Sequence< UnoFilterEntry >   UnoFilterList;  // can be transported more effectively
57 typedef ::com::sun::star::uno::Sequence< ::rtl::OUString >  OUStringList;   // can be transported more effectively
58 
59 // class SvtFilePicker ---------------------------------------------------
60 
61 typedef ::cppu::ImplHelper7 <   ::com::sun::star::ui::dialogs::XFilePickerControlAccess
62                             ,   ::com::sun::star::ui::dialogs::XFilePickerNotifier
63                             ,   ::com::sun::star::ui::dialogs::XFilePreview
64                             ,   ::com::sun::star::ui::dialogs::XFilterManager
65                             ,   ::com::sun::star::ui::dialogs::XFilterGroupManager
66                             ,   ::com::sun::star::lang::XServiceInfo
67                             ,   ::com::sun::star::ui::dialogs::XAsynchronousExecutableDialog
68                             >   SvtFilePicker_Base;
69 
70 class SvtFilePicker :public SvtFilePicker_Base
71                     ,public ::svt::OCommonPicker
72                     ,public ::svt::IFilePickerListener
73 {
74 private:
75     FilterList*         m_pFilterList;
76     ElementList*        m_pElemList;
77 
78     sal_Bool            m_bMultiSelection;
79     sal_Int16           m_nServiceType;
80     ::rtl::OUString     m_aDefaultName;
81     ::rtl::OUString     m_aCurrentFilter;
82 
83     // #97148# --------------
84     ::rtl::OUString     m_aOldDisplayDirectory;
85     ::rtl::OUString     m_aOldHideDirectory;
86 
87     ::rtl::OUString     m_aStandardDir;
88     OUStringList        m_aBlackList;
89 
90     ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XFilePickerListener >
91                         m_xListener;
92     ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XDialogClosedListener >
93                         m_xDlgClosedListener;
94 
95 public:
96                        SvtFilePicker( const ::com::sun::star::uno::Reference < ::com::sun::star::lang::XMultiServiceFactory >& xFactory );
97     virtual           ~SvtFilePicker();
98 
99     //------------------------------------------------------------------------------------
100     // disambiguate XInterface
101     //------------------------------------------------------------------------------------
102     DECLARE_XINTERFACE( )
103 
104     //------------------------------------------------------------------------------------
105     // disambiguate XTypeProvider
106     //------------------------------------------------------------------------------------
107     DECLARE_XTYPEPROVIDER( )
108 
109     //------------------------------------------------------------------------------------
110     // XExecutableDialog functions
111     //------------------------------------------------------------------------------------
112     virtual void SAL_CALL setTitle( const ::rtl::OUString& _rTitle ) throw (::com::sun::star::uno::RuntimeException);
113     virtual sal_Int16 SAL_CALL execute(  ) throw (::com::sun::star::uno::RuntimeException);
114 
115     //------------------------------------------------------------------------------------
116     // XAsynchronousExecutableDialog functions
117     //------------------------------------------------------------------------------------
118     virtual void SAL_CALL setDialogTitle( const ::rtl::OUString& _rTitle ) throw (::com::sun::star::uno::RuntimeException);
119     virtual void SAL_CALL startExecuteModal( const ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XDialogClosedListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
120 
121     //------------------------------------------------------------------------------------
122     // XFilePicker functions
123     //------------------------------------------------------------------------------------
124 
125     virtual void SAL_CALL           setMultiSelectionMode( sal_Bool bMode ) throw( ::com::sun::star::uno::RuntimeException );
126     virtual void SAL_CALL           setDefaultName( const ::rtl::OUString& aName ) throw( ::com::sun::star::uno::RuntimeException );
127     virtual void SAL_CALL           setDisplayDirectory( const ::rtl::OUString& aDirectory ) throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException );
128     virtual ::rtl::OUString SAL_CALL    getDisplayDirectory() throw( ::com::sun::star::uno::RuntimeException );
129     virtual com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getFiles() throw( ::com::sun::star::uno::RuntimeException );
130 
131     //------------------------------------------------------------------------------------
132     // XFilePickerControlAccess functions
133     //------------------------------------------------------------------------------------
134 
135     virtual void SAL_CALL           setValue( sal_Int16 ElementID, sal_Int16 ControlAction, const com::sun::star::uno::Any& value ) throw( ::com::sun::star::uno::RuntimeException );
136     virtual com::sun::star::uno::Any SAL_CALL           getValue( sal_Int16 ElementID, sal_Int16 ControlAction ) throw( ::com::sun::star::uno::RuntimeException );
137     virtual void SAL_CALL           setLabel( sal_Int16 ElementID, const ::rtl::OUString& aValue ) throw ( ::com::sun::star::uno::RuntimeException );
138     virtual ::rtl::OUString SAL_CALL    getLabel( sal_Int16 ElementID ) throw ( ::com::sun::star::uno::RuntimeException );
139     virtual void SAL_CALL           enableControl( sal_Int16 ElementID, sal_Bool bEnable ) throw( ::com::sun::star::uno::RuntimeException );
140 
141     //------------------------------------------------------------------------------------
142     // XFilePickerNotifier functions
143     //------------------------------------------------------------------------------------
144 
145     virtual void SAL_CALL           addFilePickerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XFilePickerListener >& xListener ) throw ( ::com::sun::star::uno::RuntimeException );
146     virtual void SAL_CALL           removeFilePickerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XFilePickerListener >& xListener ) throw ( ::com::sun::star::uno::RuntimeException );
147 
148     //------------------------------------------------------------------------------------
149     // XFilePreview functions
150     //------------------------------------------------------------------------------------
151 
152     virtual com::sun::star::uno::Sequence< sal_Int16 > SAL_CALL getSupportedImageFormats() throw ( ::com::sun::star::uno::RuntimeException );
153     virtual sal_Int32 SAL_CALL      getTargetColorDepth() throw ( ::com::sun::star::uno::RuntimeException );
154     virtual sal_Int32 SAL_CALL      getAvailableWidth() throw ( ::com::sun::star::uno::RuntimeException );
155     virtual sal_Int32 SAL_CALL      getAvailableHeight() throw ( ::com::sun::star::uno::RuntimeException );
156     virtual void SAL_CALL           setImage( sal_Int16 aImageFormat, const com::sun::star::uno::Any& aImage ) throw ( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException );
157     virtual sal_Bool SAL_CALL       setShowState( sal_Bool bShowState ) throw ( ::com::sun::star::uno::RuntimeException );
158     virtual sal_Bool SAL_CALL       getShowState() throw ( ::com::sun::star::uno::RuntimeException );
159 
160     //------------------------------------------------------------------------------------
161     // XFilterManager functions
162     //------------------------------------------------------------------------------------
163 
164     virtual void SAL_CALL           appendFilter( const ::rtl::OUString& aTitle, const ::rtl::OUString& aFilter ) throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException );
165     virtual void SAL_CALL           setCurrentFilter( const ::rtl::OUString& aTitle ) throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException );
166     virtual ::rtl::OUString SAL_CALL    getCurrentFilter() throw( ::com::sun::star::uno::RuntimeException );
167 
168     //------------------------------------------------------------------------------------
169     // XFilterGroupManager functions
170     //------------------------------------------------------------------------------------
171     virtual void SAL_CALL           appendFilterGroup( const ::rtl::OUString& sGroupTitle, const com::sun::star::uno::Sequence< com::sun::star::beans::StringPair >& aFilters ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
172 
173     //------------------------------------------------------------------------------------
174     // XInitialization functions
175     //------------------------------------------------------------------------------------
176 
177     virtual void SAL_CALL           initialize( const com::sun::star::uno::Sequence< com::sun::star::uno::Any >& aArguments ) throw ( com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException );
178 
179     //------------------------------------------------------------------------------------
180     // XServiceInfo functions
181     //------------------------------------------------------------------------------------
182 
183     /* XServiceInfo */
184     virtual ::rtl::OUString SAL_CALL    getImplementationName() throw( ::com::sun::star::uno::RuntimeException );
185     virtual sal_Bool SAL_CALL       supportsService( const ::rtl::OUString& sServiceName ) throw( ::com::sun::star::uno::RuntimeException );
186     virtual com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL
187                                     getSupportedServiceNames() throw( ::com::sun::star::uno::RuntimeException );
188 
189     /* Helper for XServiceInfo */
190     static com::sun::star::uno::Sequence< ::rtl::OUString >
191                                     impl_getStaticSupportedServiceNames();
192     static ::rtl::OUString          impl_getStaticImplementationName();
193 
194     /* Helper for registry */
195     static ::com::sun::star::uno::Reference< com::sun::star::uno::XInterface > SAL_CALL impl_createInstance (
196         const ::com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext >& rxContext )
197         throw( com::sun::star::uno::Exception );
198 
199 protected:
200     //------------------------------------------------------------------------------------
201     // OCommonPicker overridables
202     //------------------------------------------------------------------------------------
203     virtual SvtFileDialog*  implCreateDialog( Window* _pParent );
204     virtual sal_Int16       implExecutePicker( );
205     virtual sal_Bool        implHandleInitializationArgument(
206                                 const ::rtl::OUString& _rName,
207                                 const ::com::sun::star::uno::Any& _rValue
208                             )
209                             SAL_THROW( ( ::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException ) );
210 
211 private:
212     WinBits             getWinBits( WinBits& rExtraBits );
213     virtual void        notify( sal_Int16 _nEventId, sal_Int16 _nControlId );
214 
215     sal_Bool            FilterNameExists( const ::rtl::OUString& rTitle );
216     sal_Bool            FilterNameExists( const UnoFilterList& _rGroupedFilters );
217 
218     void                ensureFilterList( const ::rtl::OUString& _rInitialCurrentFilter );
219 
220     void                prepareExecute( );
221 
222     DECL_LINK(          DialogClosedHdl, Dialog* );
223 };
224 
225 #endif // INCLUDED_SVT_FILEPICKER_HXX
226 
227