1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski #ifndef _SALAQUAFILEPICKER_HXX_ 25*b1cdbd2cSJim Jagielski #define _SALAQUAFILEPICKER_HXX_ 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski //_______________________________________________________________________________________________________________________ 28*b1cdbd2cSJim Jagielski // includes of other projects 29*b1cdbd2cSJim Jagielski //_______________________________________________________________________________________________________________________ 30*b1cdbd2cSJim Jagielski 31*b1cdbd2cSJim Jagielski #include <cppuhelper/compbase8.hxx> 32*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XCancellable.hpp> 33*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XInitialization.hpp> 34*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XServiceInfo.hpp> 35*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/dialogs/XFilePickerNotifier.hpp> 36*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/dialogs/XFilterManager.hpp> 37*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/dialogs/XFilterGroupManager.hpp> 38*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/dialogs/XFilePickerControlAccess.hpp> 39*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/StringPair.hpp> 40*b1cdbd2cSJim Jagielski 41*b1cdbd2cSJim Jagielski #ifndef _SALAQUAPICKER_HXX_ 42*b1cdbd2cSJim Jagielski #include "SalAquaPicker.hxx" 43*b1cdbd2cSJim Jagielski #endif 44*b1cdbd2cSJim Jagielski 45*b1cdbd2cSJim Jagielski #include <memory> 46*b1cdbd2cSJim Jagielski #include <list> 47*b1cdbd2cSJim Jagielski 48*b1cdbd2cSJim Jagielski #ifndef _RTL_USTRING_H_ 49*b1cdbd2cSJim Jagielski #include <rtl/ustring.hxx> 50*b1cdbd2cSJim Jagielski #endif 51*b1cdbd2cSJim Jagielski #include "FilterHelper.hxx" 52*b1cdbd2cSJim Jagielski #include "AquaFilePickerDelegate.hxx" 53*b1cdbd2cSJim Jagielski 54*b1cdbd2cSJim Jagielski //---------------------------------------------------------- 55*b1cdbd2cSJim Jagielski // Implementation class for the XFilePicker Interface 56*b1cdbd2cSJim Jagielski //---------------------------------------------------------- 57*b1cdbd2cSJim Jagielski 58*b1cdbd2cSJim Jagielski //---------------------------------------------------------- 59*b1cdbd2cSJim Jagielski // forward declarations 60*b1cdbd2cSJim Jagielski //---------------------------------------------------------- 61*b1cdbd2cSJim Jagielski 62*b1cdbd2cSJim Jagielski using namespace rtl; 63*b1cdbd2cSJim Jagielski 64*b1cdbd2cSJim Jagielski //---------------------------------------------------------- 65*b1cdbd2cSJim Jagielski // class declaration 66*b1cdbd2cSJim Jagielski //---------------------------------------------------------- 67*b1cdbd2cSJim Jagielski 68*b1cdbd2cSJim Jagielski class SalAquaFilePicker : 69*b1cdbd2cSJim Jagielski public SalAquaPicker, 70*b1cdbd2cSJim Jagielski public cppu::WeakComponentImplHelper8< 71*b1cdbd2cSJim Jagielski ::com::sun::star::ui::dialogs::XFilterManager, 72*b1cdbd2cSJim Jagielski ::com::sun::star::ui::dialogs::XFilterGroupManager, 73*b1cdbd2cSJim Jagielski ::com::sun::star::ui::dialogs::XFilePickerControlAccess, 74*b1cdbd2cSJim Jagielski ::com::sun::star::ui::dialogs::XFilePickerNotifier, 75*b1cdbd2cSJim Jagielski ::com::sun::star::lang::XInitialization, 76*b1cdbd2cSJim Jagielski ::com::sun::star::util::XCancellable, 77*b1cdbd2cSJim Jagielski ::com::sun::star::lang::XEventListener, 78*b1cdbd2cSJim Jagielski ::com::sun::star::lang::XServiceInfo > 79*b1cdbd2cSJim Jagielski { 80*b1cdbd2cSJim Jagielski public: 81*b1cdbd2cSJim Jagielski 82*b1cdbd2cSJim Jagielski // constructor 83*b1cdbd2cSJim Jagielski SalAquaFilePicker( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceMgr ); 84*b1cdbd2cSJim Jagielski 85*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------ 86*b1cdbd2cSJim Jagielski // XFilePickerNotifier 87*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------ 88*b1cdbd2cSJim Jagielski 89*b1cdbd2cSJim Jagielski virtual void SAL_CALL addFilePickerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XFilePickerListener >& xListener ) 90*b1cdbd2cSJim Jagielski throw( ::com::sun::star::uno::RuntimeException ); 91*b1cdbd2cSJim Jagielski virtual void SAL_CALL removeFilePickerListener( const ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XFilePickerListener >& xListener ) 92*b1cdbd2cSJim Jagielski throw( ::com::sun::star::uno::RuntimeException ); 93*b1cdbd2cSJim Jagielski 94*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------ 95*b1cdbd2cSJim Jagielski // XExecutableDialog functions 96*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------ 97*b1cdbd2cSJim Jagielski 98*b1cdbd2cSJim Jagielski virtual void SAL_CALL setTitle( const ::rtl::OUString& aTitle ) 99*b1cdbd2cSJim Jagielski throw( ::com::sun::star::uno::RuntimeException ); 100*b1cdbd2cSJim Jagielski 101*b1cdbd2cSJim Jagielski virtual sal_Int16 SAL_CALL execute( ) 102*b1cdbd2cSJim Jagielski throw( ::com::sun::star::uno::RuntimeException ); 103*b1cdbd2cSJim Jagielski 104*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------ 105*b1cdbd2cSJim Jagielski // XFilePicker functions 106*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------ 107*b1cdbd2cSJim Jagielski 108*b1cdbd2cSJim Jagielski virtual void SAL_CALL setMultiSelectionMode( sal_Bool bMode ) 109*b1cdbd2cSJim Jagielski throw( ::com::sun::star::uno::RuntimeException ); 110*b1cdbd2cSJim Jagielski 111*b1cdbd2cSJim Jagielski virtual void SAL_CALL setDefaultName( const ::rtl::OUString& aName ) 112*b1cdbd2cSJim Jagielski throw( ::com::sun::star::uno::RuntimeException ); 113*b1cdbd2cSJim Jagielski 114*b1cdbd2cSJim Jagielski virtual void SAL_CALL setDisplayDirectory( const ::rtl::OUString& aDirectory ) 115*b1cdbd2cSJim Jagielski throw( com::sun::star::lang::IllegalArgumentException, 116*b1cdbd2cSJim Jagielski ::com::sun::star::uno::RuntimeException ); 117*b1cdbd2cSJim Jagielski 118*b1cdbd2cSJim Jagielski virtual ::rtl::OUString SAL_CALL getDisplayDirectory( ) 119*b1cdbd2cSJim Jagielski throw( ::com::sun::star::uno::RuntimeException ); 120*b1cdbd2cSJim Jagielski 121*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getFiles( ) 122*b1cdbd2cSJim Jagielski throw( ::com::sun::star::uno::RuntimeException ); 123*b1cdbd2cSJim Jagielski 124*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------ 125*b1cdbd2cSJim Jagielski // XFilterManager functions 126*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------ 127*b1cdbd2cSJim Jagielski 128*b1cdbd2cSJim Jagielski virtual void SAL_CALL appendFilter( const ::rtl::OUString& aTitle, const ::rtl::OUString& aFilter ) 129*b1cdbd2cSJim Jagielski throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException ); 130*b1cdbd2cSJim Jagielski 131*b1cdbd2cSJim Jagielski virtual void SAL_CALL setCurrentFilter( const ::rtl::OUString& aTitle ) 132*b1cdbd2cSJim Jagielski throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException ); 133*b1cdbd2cSJim Jagielski 134*b1cdbd2cSJim Jagielski virtual ::rtl::OUString SAL_CALL getCurrentFilter( ) 135*b1cdbd2cSJim Jagielski throw( ::com::sun::star::uno::RuntimeException ); 136*b1cdbd2cSJim Jagielski 137*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------ 138*b1cdbd2cSJim Jagielski // XFilterGroupManager functions 139*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------ 140*b1cdbd2cSJim Jagielski 141*b1cdbd2cSJim Jagielski virtual void SAL_CALL appendFilterGroup( const ::rtl::OUString& sGroupTitle, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::StringPair >& aFilters ) 142*b1cdbd2cSJim Jagielski throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); 143*b1cdbd2cSJim Jagielski 144*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------ 145*b1cdbd2cSJim Jagielski // XFilePickerControlAccess functions 146*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------ 147*b1cdbd2cSJim Jagielski 148*b1cdbd2cSJim Jagielski virtual void SAL_CALL setValue( sal_Int16 nControlId, sal_Int16 nControlAction, const ::com::sun::star::uno::Any& aValue ) 149*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException); 150*b1cdbd2cSJim Jagielski 151*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Any SAL_CALL getValue( sal_Int16 aControlId, sal_Int16 aControlAction ) 152*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException); 153*b1cdbd2cSJim Jagielski 154*b1cdbd2cSJim Jagielski virtual void SAL_CALL enableControl( sal_Int16 nControlId, sal_Bool bEnable ) 155*b1cdbd2cSJim Jagielski throw(::com::sun::star::uno::RuntimeException ); 156*b1cdbd2cSJim Jagielski 157*b1cdbd2cSJim Jagielski virtual void SAL_CALL setLabel( sal_Int16 nControlId, const ::rtl::OUString& aLabel ) 158*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException); 159*b1cdbd2cSJim Jagielski 160*b1cdbd2cSJim Jagielski virtual ::rtl::OUString SAL_CALL getLabel( sal_Int16 nControlId ) 161*b1cdbd2cSJim Jagielski throw (::com::sun::star::uno::RuntimeException); 162*b1cdbd2cSJim Jagielski 163*b1cdbd2cSJim Jagielski //------------------------------------------------ 164*b1cdbd2cSJim Jagielski // XInitialization 165*b1cdbd2cSJim Jagielski //------------------------------------------------ 166*b1cdbd2cSJim Jagielski 167*b1cdbd2cSJim Jagielski virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) 168*b1cdbd2cSJim Jagielski throw(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException); 169*b1cdbd2cSJim Jagielski 170*b1cdbd2cSJim Jagielski //------------------------------------------------ 171*b1cdbd2cSJim Jagielski // XCancellable 172*b1cdbd2cSJim Jagielski //------------------------------------------------ 173*b1cdbd2cSJim Jagielski 174*b1cdbd2cSJim Jagielski virtual void SAL_CALL cancel( ) 175*b1cdbd2cSJim Jagielski throw( ::com::sun::star::uno::RuntimeException ); 176*b1cdbd2cSJim Jagielski 177*b1cdbd2cSJim Jagielski //------------------------------------------------ 178*b1cdbd2cSJim Jagielski // XEventListener 179*b1cdbd2cSJim Jagielski //------------------------------------------------ 180*b1cdbd2cSJim Jagielski 181*b1cdbd2cSJim Jagielski using cppu::WeakComponentImplHelperBase::disposing; 182*b1cdbd2cSJim Jagielski virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& aEvent ) 183*b1cdbd2cSJim Jagielski throw(::com::sun::star::uno::RuntimeException); 184*b1cdbd2cSJim Jagielski 185*b1cdbd2cSJim Jagielski //------------------------------------------------ 186*b1cdbd2cSJim Jagielski // XServiceInfo 187*b1cdbd2cSJim Jagielski //------------------------------------------------ 188*b1cdbd2cSJim Jagielski 189*b1cdbd2cSJim Jagielski virtual ::rtl::OUString SAL_CALL getImplementationName( ) 190*b1cdbd2cSJim Jagielski throw(::com::sun::star::uno::RuntimeException); 191*b1cdbd2cSJim Jagielski 192*b1cdbd2cSJim Jagielski virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) 193*b1cdbd2cSJim Jagielski throw(::com::sun::star::uno::RuntimeException); 194*b1cdbd2cSJim Jagielski 195*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) 196*b1cdbd2cSJim Jagielski throw(::com::sun::star::uno::RuntimeException); 197*b1cdbd2cSJim Jagielski 198*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------ 199*b1cdbd2cSJim Jagielski // FilePicker Event functions 200*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------------ 201*b1cdbd2cSJim Jagielski 202*b1cdbd2cSJim Jagielski void SAL_CALL fileSelectionChanged( ::com::sun::star::ui::dialogs::FilePickerEvent aEvent ); 203*b1cdbd2cSJim Jagielski void SAL_CALL directoryChanged( ::com::sun::star::ui::dialogs::FilePickerEvent aEvent ); 204*b1cdbd2cSJim Jagielski // rtl::OUString SAL_CALL helpRequested( ::com::sun::star::ui::dialogs::FilePickerEvent aEvent ) const; 205*b1cdbd2cSJim Jagielski void SAL_CALL controlStateChanged( ::com::sun::star::ui::dialogs::FilePickerEvent aEvent ); 206*b1cdbd2cSJim Jagielski void SAL_CALL dialogSizeChanged( ); 207*b1cdbd2cSJim Jagielski getDelegate()208*b1cdbd2cSJim Jagielski inline AquaFilePickerDelegate * getDelegate() { 209*b1cdbd2cSJim Jagielski return m_pDelegate; 210*b1cdbd2cSJim Jagielski } 211*b1cdbd2cSJim Jagielski getSaveFileName()212*b1cdbd2cSJim Jagielski inline rtl::OUString getSaveFileName() { 213*b1cdbd2cSJim Jagielski return m_sSaveFileName; 214*b1cdbd2cSJim Jagielski } 215*b1cdbd2cSJim Jagielski 216*b1cdbd2cSJim Jagielski private: 217*b1cdbd2cSJim Jagielski // prevent copy and assignment 218*b1cdbd2cSJim Jagielski SalAquaFilePicker( const SalAquaFilePicker& ); 219*b1cdbd2cSJim Jagielski SalAquaFilePicker& operator=( const SalAquaFilePicker& ); 220*b1cdbd2cSJim Jagielski 221*b1cdbd2cSJim Jagielski virtual void ensureFilterHelper(); 222*b1cdbd2cSJim Jagielski 223*b1cdbd2cSJim Jagielski // to instantiate own services 224*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > m_xServiceMgr; 225*b1cdbd2cSJim Jagielski 226*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XFilePickerListener > 227*b1cdbd2cSJim Jagielski m_xListener; 228*b1cdbd2cSJim Jagielski 229*b1cdbd2cSJim Jagielski FilterHelper *m_pFilterHelper; 230*b1cdbd2cSJim Jagielski 231*b1cdbd2cSJim Jagielski rtl::OUString m_sSaveFileName; 232*b1cdbd2cSJim Jagielski 233*b1cdbd2cSJim Jagielski AquaFilePickerDelegate *m_pDelegate; 234*b1cdbd2cSJim Jagielski 235*b1cdbd2cSJim Jagielski void updateFilterUI(); 236*b1cdbd2cSJim Jagielski void updateSaveFileNameExtension(); 237*b1cdbd2cSJim Jagielski 238*b1cdbd2cSJim Jagielski public: 239*b1cdbd2cSJim Jagielski 240*b1cdbd2cSJim Jagielski virtual ~SalAquaFilePicker(); 241*b1cdbd2cSJim Jagielski 242*b1cdbd2cSJim Jagielski void filterControlChanged(); 243*b1cdbd2cSJim Jagielski 244*b1cdbd2cSJim Jagielski void implInitialize(); 245*b1cdbd2cSJim Jagielski 246*b1cdbd2cSJim Jagielski }; 247*b1cdbd2cSJim Jagielski 248*b1cdbd2cSJim Jagielski #endif // _SALAQUAFILEPICKER_HXX_ 249