1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 /* 3 * This file is part of the LibreOffice project. 4 * 5 * This Source Code Form is subject to the terms of the Mozilla Public 6 * License, v. 2.0. If a copy of the MPL was not distributed with this 7 * file, You can obtain one at http://mozilla.org/MPL/2.0/. 8 * 9 * This file incorporates work covered by the following license notice: 10 * 11 * Licensed to the Apache Software Foundation (ASF) under one or more 12 * contributor license agreements. See the NOTICE file distributed 13 * with this work for additional information regarding copyright 14 * ownership. The ASF licenses this file to you under the Apache 15 * License, Version 2.0 (the "License"); you may not use this file 16 * except in compliance with the License. You may obtain a copy of 17 * the License at http://www.apache.org/licenses/LICENSE-2.0 . 18 */ 19 20 #ifndef INCLUDED_FPICKER_SOURCE_AQUA_SALAQUAFILEPICKER_HXX 21 #define INCLUDED_FPICKER_SOURCE_AQUA_SALAQUAFILEPICKER_HXX 22 23 #include <cppuhelper/compbase.hxx> 24 #include <com/sun/star/lang/XInitialization.hpp> 25 #include <com/sun/star/lang/XServiceInfo.hpp> 26 #include <com/sun/star/ui/dialogs/XFilePicker3.hpp> 27 #include <com/sun/star/ui/dialogs/XFilePickerControlAccess.hpp> 28 #include <com/sun/star/beans/StringPair.hpp> 29 30 #include "SalAquaPicker.hxx" 31 32 #include <rtl/ustring.hxx> 33 #include "FilterHelper.hxx" 34 #include "AquaFilePickerDelegate.hxx" 35 36 // Implementation class for the XFilePicker Interface 37 38 typedef ::cppu::WeakComponentImplHelper < 39 css::ui::dialogs::XFilePicker3, 40 css::ui::dialogs::XFilePickerControlAccess, 41 css::lang::XInitialization, 42 css::lang::XServiceInfo > SalAquaFilePicker_Base; 43 44 class SalAquaFilePicker : 45 public SalAquaPicker, 46 public SalAquaFilePicker_Base 47 { 48 public: 49 50 // constructor 51 SalAquaFilePicker(); 52 53 // XFilePickerNotifier 54 55 virtual void SAL_CALL addFilePickerListener( const css::uno::Reference< css::ui::dialogs::XFilePickerListener >& xListener ) override; 56 virtual void SAL_CALL removeFilePickerListener( const css::uno::Reference< css::ui::dialogs::XFilePickerListener >& xListener ) override; 57 58 // XExecutableDialog functions 59 60 virtual void SAL_CALL setTitle( const OUString& aTitle ) override; 61 62 virtual sal_Int16 SAL_CALL execute( ) override; 63 64 // XFilePicker functions 65 66 virtual void SAL_CALL setMultiSelectionMode( sal_Bool bMode ) override; 67 68 virtual void SAL_CALL setDefaultName( const OUString& aName ) override; 69 70 virtual void SAL_CALL setDisplayDirectory( const OUString& aDirectory ) override; 71 72 virtual OUString SAL_CALL getDisplayDirectory( ) override; 73 74 virtual css::uno::Sequence< OUString > SAL_CALL getFiles( ) override; 75 76 virtual css::uno::Sequence< OUString > SAL_CALL getSelectedFiles( ) override; 77 78 // XFilterManager functions 79 80 virtual void SAL_CALL appendFilter( const OUString& aTitle, const OUString& aFilter ) override; 81 82 virtual void SAL_CALL setCurrentFilter( const OUString& aTitle ) override; 83 84 virtual OUString SAL_CALL getCurrentFilter( ) override; 85 86 // XFilterGroupManager functions 87 88 virtual void SAL_CALL appendFilterGroup( const OUString& sGroupTitle, const css::uno::Sequence< css::beans::StringPair >& aFilters ) override; 89 90 // XFilePickerControlAccess functions 91 92 virtual void SAL_CALL setValue( sal_Int16 nControlId, sal_Int16 nControlAction, const css::uno::Any& aValue ) override; 93 94 virtual css::uno::Any SAL_CALL getValue( sal_Int16 aControlId, sal_Int16 aControlAction ) override; 95 96 virtual void SAL_CALL enableControl( sal_Int16 nControlId, sal_Bool bEnable ) override; 97 98 virtual void SAL_CALL setLabel( sal_Int16 nControlId, const OUString& aLabel ) override; 99 100 virtual OUString SAL_CALL getLabel( sal_Int16 nControlId ) override; 101 102 // XInitialization 103 104 virtual void SAL_CALL initialize( const css::uno::Sequence< css::uno::Any >& aArguments ) override; 105 106 // XCancellable 107 108 virtual void SAL_CALL cancel( ) override; 109 110 // XEventListener 111 112 using cppu::WeakComponentImplHelperBase::disposing; 113 /// @throws css::uno::RuntimeException 114 virtual void disposing( const css::lang::EventObject& aEvent ); 115 116 // XServiceInfo 117 118 virtual OUString SAL_CALL getImplementationName( ) override; 119 120 virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; 121 122 virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) override; 123 124 // FilePicker Event functions 125 126 void fileSelectionChanged( css::ui::dialogs::FilePickerEvent aEvent ); 127 void directoryChanged( css::ui::dialogs::FilePickerEvent aEvent ); 128 // OUString SAL_CALL helpRequested( css::ui::dialogs::FilePickerEvent aEvent ) const; 129 void controlStateChanged( css::ui::dialogs::FilePickerEvent aEvent ); 130 void dialogSizeChanged( ); 131 getDelegate()132 AquaFilePickerDelegate * getDelegate() { 133 return m_pDelegate; 134 } 135 getSaveFileName()136 OUString const & getSaveFileName() { 137 return m_sSaveFileName; 138 } 139 140 private: 141 SalAquaFilePicker( const SalAquaFilePicker& ) = delete; 142 SalAquaFilePicker& operator=( const SalAquaFilePicker& ) = delete; 143 144 virtual void ensureFilterHelper(); 145 146 css::uno::Reference< css::ui::dialogs::XFilePickerListener > m_xListener; 147 FilterHelper *m_pFilterHelper; 148 OUString m_sSaveFileName; 149 AquaFilePickerDelegate *m_pDelegate; 150 151 void updateFilterUI(); 152 void updateSaveFileNameExtension(); 153 154 public: 155 156 virtual ~SalAquaFilePicker() override; 157 158 void filterControlChanged(); 159 }; 160 161 #endif // INCLUDED_FPICKER_SOURCE_AQUA_SALAQUAFILEPICKER_HXX 162 163 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 164