xref: /trunk/main/fpicker/source/unx/gnome/SalGtkFilePicker.hxx (revision 91144cd0085a7583d2099b982122deb2184ab956)
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 #ifndef _SALGTKFILEPICKER_HXX_
25 #define _SALGTKFILEPICKER_HXX_
26 
27 //_______________________________________________________________________________________________________________________
28 //  includes of other projects
29 //_______________________________________________________________________________________________________________________
30 
31 #include <cppuhelper/compbase10.hxx>
32 #include <com/sun/star/lang/XInitialization.hpp>
33 #include <com/sun/star/ui/dialogs/XFilePickerNotifier.hpp>
34 #include <com/sun/star/ui/dialogs/XFilterManager.hpp>
35 #include <com/sun/star/ui/dialogs/XFilterGroupManager.hpp>
36 #include <com/sun/star/ui/dialogs/XFilePickerControlAccess.hpp>
37 #include <com/sun/star/ui/dialogs/XFilePreview.hpp>
38 #include <com/sun/star/beans/StringPair.hpp>
39 
40 #ifndef _SALGTKPICKER_HXX_
41 #include "SalGtkPicker.hxx"
42 #endif
43 
44 #include <memory>
45 
46 #ifndef _RTL_USTRING_H_
47 #include <rtl/ustring.hxx>
48 #endif
49 
50 #include <list>
51 
52 //----------------------------------------------------------
53 // Implementation class for the XFilePicker Interface
54 //----------------------------------------------------------
55 
56 //----------------------------------------------------------
57 // forward declarations
58 //----------------------------------------------------------
59 
60 using namespace rtl;
61 
62 struct FilterEntry;
63 struct ElementEntry_Impl;
64 
65 typedef ::std::list < FilterEntry >     FilterList;
66 typedef ::std::list < ElementEntry_Impl >   ElementList;
67 typedef ::com::sun::star::beans::StringPair UnoFilterEntry;
68 typedef ::com::sun::star::uno::Sequence< UnoFilterEntry >   UnoFilterList;  // can be transported more effectively
69 
70 
71 //----------------------------------------------------------
72 // class declaration
73 //----------------------------------------------------------
74 
75 class SalGtkFilePicker :
76         public SalGtkPicker,
77     public cppu::WeakComponentImplHelper10<
78         ::com::sun::star::ui::dialogs::XFilterManager,
79         ::com::sun::star::ui::dialogs::XFilterGroupManager,
80         ::com::sun::star::ui::dialogs::XFilePickerControlAccess,
81         ::com::sun::star::ui::dialogs::XFilePickerNotifier,
82         ::com::sun::star::ui::dialogs::XFilePreview,
83         ::com::sun::star::ui::dialogs::XFilePicker2,
84     ::com::sun::star::lang::XInitialization,
85         ::com::sun::star::util::XCancellable,
86     ::com::sun::star::lang::XEventListener,
87     ::com::sun::star::lang::XServiceInfo >
88 {
89     public:
90 
91         // constructor
92         SalGtkFilePicker( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceMgr );
93 
94         //------------------------------------------------------------------------------------
95         // XFilePickerNotifier
96         //------------------------------------------------------------------------------------
97 
98         virtual void SAL_CALL addFilePickerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XFilePickerListener >& xListener );
99         virtual void SAL_CALL removeFilePickerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XFilePickerListener >& xListener );
100 
101         //------------------------------------------------------------------------------------
102         // XExecutableDialog functions
103         //------------------------------------------------------------------------------------
104 
105         virtual void SAL_CALL setTitle( const ::rtl::OUString& aTitle );
106 
107         virtual sal_Int16 SAL_CALL execute(  );
108 
109         //------------------------------------------------------------------------------------
110         // XFilePicker functions
111         //------------------------------------------------------------------------------------
112 
113         virtual void SAL_CALL setMultiSelectionMode( sal_Bool bMode );
114 
115         virtual void SAL_CALL setDefaultName( const ::rtl::OUString& aName );
116 
117         virtual void SAL_CALL setDisplayDirectory( const ::rtl::OUString& aDirectory );
118 
119         virtual ::rtl::OUString SAL_CALL getDisplayDirectory(  );
120 
121         virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getFiles(  );
122 
123         //------------------------------------------------------------------------------------
124         // XFilePicker2 functions
125         //------------------------------------------------------------------------------------
126 
127         virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSelectedFiles();
128 
129         //------------------------------------------------------------------------------------
130         // XFilterManager functions
131         //------------------------------------------------------------------------------------
132 
133         virtual void SAL_CALL appendFilter( const ::rtl::OUString& aTitle, const ::rtl::OUString& aFilter );
134 
135         virtual void SAL_CALL setCurrentFilter( const ::rtl::OUString& aTitle );
136 
137         virtual ::rtl::OUString SAL_CALL getCurrentFilter(  );
138 
139         //------------------------------------------------------------------------------------
140         // XFilterGroupManager functions
141         //------------------------------------------------------------------------------------
142 
143         virtual void SAL_CALL appendFilterGroup( const ::rtl::OUString& sGroupTitle, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::StringPair >& aFilters );
144 
145         //------------------------------------------------------------------------------------
146         // XFilePickerControlAccess functions
147         //------------------------------------------------------------------------------------
148 
149         virtual void SAL_CALL setValue( sal_Int16 nControlId, sal_Int16 nControlAction, const ::com::sun::star::uno::Any& aValue );
150 
151         virtual ::com::sun::star::uno::Any SAL_CALL getValue( sal_Int16 aControlId, sal_Int16 aControlAction );
152 
153         virtual void SAL_CALL enableControl( sal_Int16 nControlId, sal_Bool bEnable );
154 
155         virtual void SAL_CALL setLabel( sal_Int16 nControlId, const ::rtl::OUString& aLabel );
156 
157         virtual ::rtl::OUString SAL_CALL getLabel( sal_Int16 nControlId );
158 
159         //------------------------------------------------
160         // XFilePreview
161         //------------------------------------------------
162 
163         virtual ::com::sun::star::uno::Sequence< sal_Int16 > SAL_CALL getSupportedImageFormats(  );
164 
165         virtual sal_Int32 SAL_CALL getTargetColorDepth(  );
166 
167         virtual sal_Int32 SAL_CALL getAvailableWidth(  );
168 
169         virtual sal_Int32 SAL_CALL getAvailableHeight(  );
170 
171         virtual void SAL_CALL setImage( sal_Int16 aImageFormat, const ::com::sun::star::uno::Any& aImage );
172 
173         virtual sal_Bool SAL_CALL setShowState( sal_Bool bShowState );
174 
175         virtual sal_Bool SAL_CALL getShowState(  );
176 
177         //------------------------------------------------
178         // XInitialization
179         //------------------------------------------------
180 
181         virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments );
182 
183         //------------------------------------------------
184         // XCancellable
185         //------------------------------------------------
186 
187         virtual void SAL_CALL cancel( );
188 
189         //------------------------------------------------
190         // XEventListener
191         //------------------------------------------------
192 
193         using cppu::WeakComponentImplHelperBase::disposing;
194         virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& aEvent );
195 
196         //------------------------------------------------
197         // XServiceInfo
198         //------------------------------------------------
199 
200         virtual ::rtl::OUString SAL_CALL getImplementationName(  );
201 
202         virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName );
203 
204         virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(  );
205 
206         //------------------------------------------------------------------------------------
207         // FilePicker Event functions
208         //------------------------------------------------------------------------------------
209 
210         void SAL_CALL fileSelectionChanged( ::com::sun::star::ui::dialogs::FilePickerEvent aEvent );
211         void SAL_CALL directoryChanged( ::com::sun::star::ui::dialogs::FilePickerEvent aEvent );
212         rtl::OUString SAL_CALL helpRequested( ::com::sun::star::ui::dialogs::FilePickerEvent aEvent ) const;
213         void SAL_CALL controlStateChanged( ::com::sun::star::ui::dialogs::FilePickerEvent aEvent );
214 
215     private:
216         // prevent copy and assignment
217         SalGtkFilePicker( const SalGtkFilePicker& );
218         SalGtkFilePicker& operator=( const SalGtkFilePicker& );
219 
220         sal_Bool FilterNameExists( const ::rtl::OUString& rTitle );
221         sal_Bool FilterNameExists( const UnoFilterList& _rGroupedFilters );
222 
223         void ensureFilterList( const ::rtl::OUString& _rInitialCurrentFilter );
224 
225         // to instantiate own services
226         ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > m_xServiceMgr;
227 
228     private:
229         ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XFilePickerListener >
230             m_xListener;
231         ::rtl::OUString msPlayLabel;
232         FilterList *m_pFilterList;
233         GtkWidget  *m_pVBox;
234 
235         GtkWidget  *m_pFilterExpander;
236         GtkWidget  *m_pFilterView;
237         GtkListStore *m_pFilterStore;
238 
239         enum {
240             AUTOEXTENSION,
241             PASSWORD,
242             FILTEROPTIONS,
243             READONLY,
244             LINK,
245             PREVIEW,
246             SELECTION,
247             TOGGLE_LAST
248               };
249 
250         GtkWidget  *m_pToggles[ TOGGLE_LAST ];
251 
252         bool mbToggleVisibility[TOGGLE_LAST];
253         bool mbToggleChecked[TOGGLE_LAST];
254 
255         static const rtl::OString m_ToggleLabels[TOGGLE_LAST];
256 
257         enum {
258             PLAY,
259             BUTTON_LAST };
260 
261         GtkWidget  *m_pButtons[ BUTTON_LAST ];
262 
263         enum {
264             VERSION,
265             TEMPLATE,
266             IMAGE_TEMPLATE,
267             LIST_LAST
268               };
269 
270         GtkWidget *m_pHBoxs[ LIST_LAST ];
271         GtkWidget *m_pAligns[ LIST_LAST ];
272         GtkWidget *m_pLists[ LIST_LAST ];
273         GtkWidget *m_pListLabels[ LIST_LAST ];
274         bool mbListVisibility[ LIST_LAST ];
275         bool mbButtonVisibility[ BUTTON_LAST ];
276         gulong mnHID_FolderChange;
277         gulong mnHID_SelectionChange;
278 
279         ::rtl::OUString m_aCurrentFilter;
280         ::rtl::OUString m_aInitialFilter;
281 
282         bool bVersionWidthUnset;
283         sal_Bool mbPreviewState;
284         gulong mHID_Preview;
285         GtkWidget* m_pPreview;
286         GtkFileFilter* m_pPseudoFilter;
287         sal_Int32 m_PreviewImageWidth;
288         sal_Int32 m_PreviewImageHeight;
289 
290         GtkWidget  *getWidget( sal_Int16 nControlId, GType *pType = NULL);
291 
292         void SetCurFilter( const OUString& rFilter );
293         void SetFilters();
294         void UpdateFilterfromUI();
295 
296         void implChangeType( GtkTreeSelection *selection );
297         GtkFileFilter * implAddFilter( const OUString& rFilter, const OUString& rType );
298         void implAddFilterGroup( const OUString& rFilter,
299                      const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::StringPair>& _rFilters );
300         void updateCurrentFilterFromName(const gchar* filtername);
301         void unselect_type();
302         void InitialMapping();
303 
304         void HandleSetListValue(GtkComboBox *pWidget, sal_Int16 nControlAction,
305             const ::com::sun::star::uno::Any& rValue);
306         ::com::sun::star::uno::Any HandleGetListValue(GtkComboBox *pWidget, sal_Int16 nControlAction) const;
307 
308         static void expander_changed_cb( GtkExpander *expander, SalGtkFilePicker *pobjFP );
309         static void preview_toggled_cb (GtkObject *cb, SalGtkFilePicker *pobjFP);
310         static void filter_changed_cb (GtkFileChooser *file_chooser, GParamSpec *pspec, SalGtkFilePicker *pobjFP);
311         static void type_changed_cb( GtkTreeSelection *selection, SalGtkFilePicker *pobjFP );
312         static void folder_changed_cb (GtkFileChooser *file_chooser, SalGtkFilePicker *pobjFP);
313         static void selection_changed_cb (GtkFileChooser *file_chooser, SalGtkFilePicker *pobjFP);
314         static void update_preview_cb (GtkFileChooser *file_chooser, SalGtkFilePicker *pobjFP);
315         static void dialog_mapped_cb(GtkWidget *widget, SalGtkFilePicker *pobjFP);
316     public:
317          virtual ~SalGtkFilePicker();
318 
319 };
320 /* vi:set tabstop=4 shiftwidth=4 expandtab: */
321 #endif // _SALGTKFILEPICKER_HXX_
322