xref: /trunk/main/fpicker/source/office/commonpicker.hxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #ifndef SVTOOLS_COMMONPICKER_HXX
29 #define SVTOOLS_COMMONPICKER_HXX
30 
31 #include <cppuhelper/compbase5.hxx>
32 #include <com/sun/star/ui/dialogs/XControlInformation.hpp>
33 #include <com/sun/star/ui/dialogs/XControlAccess.hpp>
34 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
35 #include <com/sun/star/lang/DisposedException.hpp>
36 #include <com/sun/star/awt/XWindow.hpp>
37 #include <com/sun/star/util/XCancellable.hpp>
38 #include <com/sun/star/lang/XInitialization.hpp>
39 #include <comphelper/broadcasthelper.hxx>
40 #include <comphelper/propertycontainer.hxx>
41 #include <comphelper/proparrhlp.hxx>
42 #include <comphelper/uno3.hxx>
43 #include <tools/link.hxx>
44 
45 class SvtFileDialog;
46 class Window;
47 
48 namespace comphelper
49 {
50     class OWeakEventListenerAdapter;
51 }
52 
53 //.........................................................................
54 namespace svt
55 {
56 //.........................................................................
57 
58     typedef ::cppu::WeakComponentImplHelper5    <   ::com::sun::star::ui::dialogs::XControlAccess
59                                                 ,   ::com::sun::star::ui::dialogs::XControlInformation
60                                                 ,   ::com::sun::star::lang::XEventListener
61                                                 ,   ::com::sun::star::util::XCancellable
62                                                 ,   ::com::sun::star::lang::XInitialization
63                                                 >   OCommonPicker_Base;
64     /** implements common functionality for the 2 UNO picker components
65     */
66     class OCommonPicker
67                     :public ::comphelper::OBaseMutex
68                     ,public OCommonPicker_Base
69                     ,public ::comphelper::OPropertyContainer
70                     ,public ::comphelper::OPropertyArrayUsageHelper< OCommonPicker >
71     {
72     private:
73         ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >    m_xORB;
74 
75         // <properties>
76         ::rtl::OUString                                                     m_sHelpURL;
77         ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow >  m_xWindow;
78         // </properties>
79 
80         SvtFileDialog*      m_pDlg;
81         sal_uInt32          m_nCancelEvent;
82         sal_Bool            m_bExecuting;
83 
84         ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow >  m_xDialogParent;
85 
86         ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >  m_xWindowListenerAdapter;
87         ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >  m_xParentListenerAdapter;
88 
89     protected:
90         ::rtl::OUString     m_aTitle;
91         ::rtl::OUString     m_aDisplayDirectory;
92 
93     protected:
94         inline  SvtFileDialog*  getDialog() { return m_pDlg; }
95 
96         inline const    ::cppu::OBroadcastHelper&   GetBroadcastHelper() const  { return OCommonPicker_Base::rBHelper; }
97         inline          ::cppu::OBroadcastHelper&   GetBroadcastHelper()        { return OCommonPicker_Base::rBHelper; }
98 
99     public:
100         OCommonPicker( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& _rxFactory );
101 
102     protected:
103         virtual ~OCommonPicker();
104 
105         // overridables
106 
107         // will be called with locked SolarMutex
108         virtual SvtFileDialog*  implCreateDialog( Window* _pParent ) = 0;
109         virtual sal_Int16       implExecutePicker( ) = 0;
110             // do NOT override XExecutableDialog::execute! We need to do some stuff there ourself ...
111 
112     protected:
113         //------------------------------------------------------------------------------------
114         // disambiguate XInterface
115         //------------------------------------------------------------------------------------
116         DECLARE_XINTERFACE( )
117 
118         //------------------------------------------------------------------------------------
119         // disambiguate XTypeProvider
120         //------------------------------------------------------------------------------------
121         DECLARE_XTYPEPROVIDER( )
122 
123         //------------------------------------------------------------------------------------
124         // ComponentHelper/XComponent
125         //------------------------------------------------------------------------------------
126         virtual void SAL_CALL disposing();
127 
128         //------------------------------------------------------------------------------------
129         // XEventListner
130         //------------------------------------------------------------------------------------
131         virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw (::com::sun::star::uno::RuntimeException);
132 
133         //------------------------------------------------------------------------------------
134         // property set related methods
135         //------------------------------------------------------------------------------------
136 
137         // XPropertySet pure methods
138         virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo(  ) throw(::com::sun::star::uno::RuntimeException);
139         // OPropertySetHelper pure methods
140         virtual ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper();
141         // OPropertyArrayUsageHelper pure methods
142         virtual ::cppu::IPropertyArrayHelper* createArrayHelper( ) const;
143 
144         // OPropertySetHelper overridden methods
145         virtual void SAL_CALL setFastPropertyValue_NoBroadcast(
146                 sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rValue ) throw (::com::sun::star::uno::Exception);
147 
148         //------------------------------------------------------------------------------------
149         // XExecutableDialog functions
150         //------------------------------------------------------------------------------------
151         virtual void SAL_CALL           setTitle( const ::rtl::OUString& _rTitle ) throw( ::com::sun::star::uno::RuntimeException );
152         virtual sal_Int16 SAL_CALL      execute() throw( ::com::sun::star::uno::RuntimeException );
153 
154         //------------------------------------------------------------------------------------
155         // XControlAccess functions
156         //------------------------------------------------------------------------------------
157         virtual void SAL_CALL setControlProperty( const ::rtl::OUString& aControlName, const ::rtl::OUString& aControlProperty, const ::com::sun::star::uno::Any& aValue ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
158         virtual ::com::sun::star::uno::Any SAL_CALL getControlProperty( const ::rtl::OUString& aControlName, const ::rtl::OUString& aControlProperty ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
159 
160         //------------------------------------------------------------------------------------
161         // XControlInformation functions
162         //------------------------------------------------------------------------------------
163         virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedControls(  ) throw (::com::sun::star::uno::RuntimeException);
164         virtual sal_Bool SAL_CALL isControlSupported( const ::rtl::OUString& aControlName ) throw (::com::sun::star::uno::RuntimeException);
165         virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedControlProperties( const ::rtl::OUString& aControlName ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
166         virtual sal_Bool SAL_CALL isControlPropertySupported( const ::rtl::OUString& aControlName, const ::rtl::OUString& aControlProperty ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
167 
168         //------------------------------------------------------------------------------------
169         // XCancellable functions
170         //------------------------------------------------------------------------------------
171         virtual void SAL_CALL cancel(  ) throw (::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         // misc
181         //------------------------------------------------------------------------------------
182         void checkAlive() const SAL_THROW( (::com::sun::star::lang::DisposedException) );
183 
184         void prepareDialog();
185 
186     protected:
187                 sal_Bool    createPicker();
188 
189         /** handle a single argument from the XInitialization::initialize method
190 
191             @return <TRUE/> if the argument could be handled
192         */
193         virtual sal_Bool    implHandleInitializationArgument(
194                                 const ::rtl::OUString& _rName,
195                                 const ::com::sun::star::uno::Any& _rValue
196                             )
197                             SAL_THROW( ( ::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException ) );
198 
199     private:
200         void        stopWindowListening();
201 
202         DECL_LINK( OnCancelPicker, void* );
203     };
204 //.........................................................................
205 }   // namespace svt
206 //.........................................................................
207 
208 #endif // SVTOOLS_COMMONPICKER_HXX
209 
210