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