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 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_filter.hxx"
26
27 #include "swfdialog.hxx"
28 #include "impswfdialog.hxx"
29 #include <vcl/svapp.hxx>
30 #include <vcl/dialog.hxx>
31 #include <svl/solar.hrc>
32 #include <com/sun/star/view/XRenderable.hpp>
33 #include <com/sun/star/frame/XController.hpp>
34 #include <com/sun/star/view/XSelectionSupplier.hpp>
35
36 using namespace ::rtl;
37 using namespace ::vcl;
38 using namespace ::com::sun::star;
39 using namespace ::com::sun::star::uno;
40 using namespace ::com::sun::star::lang;
41 using namespace ::com::sun::star::beans;
42 using namespace ::com::sun::star::frame;
43 using namespace ::com::sun::star::view;
44 using namespace ::com::sun::star::document;
45
46 // -----------------------
47 // - PDFDialog functions -
48 // -----------------------
49
50 #define SERVICE_NAME "com.sun.star.Impress.FlashExportDialog"
51
52 // -----------------------------------------------------------------------------
53
SWFDialog_getImplementationName()54 OUString SWFDialog_getImplementationName ()
55 throw (RuntimeException)
56 {
57 return OUString ( RTL_CONSTASCII_USTRINGPARAM ( SERVICE_NAME ) );
58 }
59
60 // -----------------------------------------------------------------------------
61
SWFDialog_getImplementationId()62 Sequence< sal_Int8 > SAL_CALL SWFDialog_getImplementationId()
63 throw(RuntimeException)
64 {
65 static ::cppu::OImplementationId aId;
66 return aId.getImplementationId();
67 }
68
69 // -----------------------------------------------------------------------------
70
SWFDialog_getSupportedServiceNames()71 Sequence< OUString > SAL_CALL SWFDialog_getSupportedServiceNames()
72 throw (RuntimeException)
73 {
74 Sequence < OUString > aRet(1);
75 OUString* pArray = aRet.getArray();
76 pArray[0] = OUString ( RTL_CONSTASCII_USTRINGPARAM ( SERVICE_NAME ) );
77 return aRet;
78 }
79
80 // -----------------------------------------------------------------------------
81
SWFDialog_createInstance(const Reference<XMultiServiceFactory> & rSMgr)82 Reference< XInterface > SAL_CALL SWFDialog_createInstance( const Reference< XMultiServiceFactory > & rSMgr)
83 throw( Exception )
84 {
85 return (cppu::OWeakObject*) new SWFDialog( rSMgr );
86 }
87
88 // -----------------------------------------------------------------------------
89
90 #undef SERVICE_NAME
91
92 // -------------
93 // - SWFDialog -
94 // -------------
95
SWFDialog(const Reference<XMultiServiceFactory> & rxMSF)96 SWFDialog::SWFDialog( const Reference< XMultiServiceFactory > &rxMSF ) :
97 OGenericUnoDialog( rxMSF )
98 {
99 ByteString aResMgrName( "flash" );
100
101 mpResMgr = ResMgr::CreateResMgr( aResMgrName.GetBuffer(), Application::GetSettings().GetUILocale() );
102 }
103
104 // -----------------------------------------------------------------------------
105
~SWFDialog()106 SWFDialog::~SWFDialog()
107 {
108 delete mpResMgr;
109 }
110
111 // -----------------------------------------------------------------------------
112
queryInterface(const Type & rType)113 Any SAL_CALL SWFDialog::queryInterface( const Type& rType )
114 throw (RuntimeException)
115 {
116 Any aReturn = OGenericUnoDialog::queryInterface( rType );
117
118 if( !aReturn.hasValue() )
119 aReturn = ::cppu::queryInterface( rType,
120 static_cast< XPropertyAccess* >( this ),
121 static_cast< XExporter* >( this ) );
122
123 return aReturn;
124 }
125
126 // -----------------------------------------------------------------------------
127
acquire()128 void SAL_CALL SWFDialog::acquire()
129 throw ()
130 {
131 OWeakObject::acquire();
132 }
133
134 // -----------------------------------------------------------------------------
135
release()136 void SAL_CALL SWFDialog::release()
137 throw ()
138 {
139 OWeakObject::release();
140 }
141
142 // -----------------------------------------------------------------------------
143
getImplementationId()144 Sequence< sal_Int8 > SAL_CALL SWFDialog::getImplementationId()
145 throw(RuntimeException)
146 {
147 return SWFDialog_getImplementationId();
148 }
149
150 // -----------------------------------------------------------------------------
151
getImplementationName()152 OUString SAL_CALL SWFDialog::getImplementationName()
153 throw (RuntimeException)
154 {
155 return SWFDialog_getImplementationName();
156 }
157
158 // -----------------------------------------------------------------------------
159
getSupportedServiceNames()160 Sequence< OUString > SAL_CALL SWFDialog::getSupportedServiceNames()
161 throw (RuntimeException)
162 {
163 return SWFDialog_getSupportedServiceNames();
164 }
165
166 // -----------------------------------------------------------------------------
167
createDialog(Window * pParent)168 Dialog* SWFDialog::createDialog( Window* pParent )
169 {
170 Dialog* pRet = NULL;
171
172 if( mpResMgr && mxSrcDoc.is() )
173 {
174 /* TODO: From the controller we may get information what page is visible and what shapes
175 are selected, if we optionaly want to limit output to that
176 Any aSelection;
177
178 try
179 {
180 Reference< XController > xController( Reference< XModel >( mxSrcDoc, UNO_QUERY )->getCurrentController() );
181
182 if( xController.is() )
183 {
184 Reference< XSelectionSupplier > xView( xController, UNO_QUERY );
185
186 if( xView.is() )
187 xView->getSelection() >>= aSelection;
188 }
189 }
190 catch( RuntimeException )
191 {
192 }
193 */
194 ImpSWFDialog* pDlg = new ImpSWFDialog( pParent, *mpResMgr, maFilterData );
195 pRet = pDlg;
196 }
197
198 return pRet;
199 }
200
201 // -----------------------------------------------------------------------------
202
executedDialog(sal_Int16 nExecutionResult)203 void SWFDialog::executedDialog( sal_Int16 nExecutionResult )
204 {
205 if( nExecutionResult && m_pDialog )
206 maFilterData = static_cast< ImpSWFDialog* >( m_pDialog )->GetFilterData();
207
208 destroyDialog();
209 }
210
211 // -----------------------------------------------------------------------------
212
getPropertySetInfo()213 Reference< XPropertySetInfo > SAL_CALL SWFDialog::getPropertySetInfo()
214 throw(RuntimeException)
215 {
216 Reference< XPropertySetInfo > xInfo( createPropertySetInfo( getInfoHelper() ) );
217 return xInfo;
218 }
219
220 //-------------------------------------------------------------------------
getInfoHelper()221 ::cppu::IPropertyArrayHelper& SWFDialog::getInfoHelper()
222 {
223 return *const_cast<SWFDialog*>(this)->getArrayHelper();
224 }
225
226 //------------------------------------------------------------------------------
createArrayHelper() const227 ::cppu::IPropertyArrayHelper* SWFDialog::createArrayHelper() const
228 {
229 Sequence< Property > aProps;
230 describeProperties(aProps);
231 return new ::cppu::OPropertyArrayHelper( aProps );
232 }
233
234 // -----------------------------------------------------------------------------
235
getPropertyValues()236 Sequence< PropertyValue > SAL_CALL SWFDialog::getPropertyValues()
237 throw ( RuntimeException )
238 {
239 sal_Int32 i, nCount;
240
241 for( i = 0, nCount = maMediaDescriptor.getLength(); i < nCount; i++ )
242 {
243 if( maMediaDescriptor[ i ].Name.equalsAscii( "FilterData" ) )
244 break;
245 }
246
247 if( i == nCount )
248 maMediaDescriptor.realloc( ++nCount );
249
250 maMediaDescriptor[ i ].Name = String( RTL_CONSTASCII_USTRINGPARAM( "FilterData" ) );
251 maMediaDescriptor[ i ].Value <<= maFilterData;
252
253 return maMediaDescriptor;
254 }
255
256 // -----------------------------------------------------------------------------
257
setPropertyValues(const Sequence<PropertyValue> & rProps)258 void SAL_CALL SWFDialog::setPropertyValues( const Sequence< PropertyValue >& rProps )
259 throw ( UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException, RuntimeException )
260 {
261 maMediaDescriptor = rProps;
262
263 for( sal_Int32 i = 0, nCount = maMediaDescriptor.getLength(); i < nCount; i++ )
264 {
265 if( maMediaDescriptor[ i ].Name.equalsAscii( "FilterData" ) )
266 {
267 maMediaDescriptor[ i ].Value >>= maFilterData;
268 break;
269 }
270 }
271 }
272
273 // -----------------------------------------------------------------------------
274
setSourceDocument(const Reference<XComponent> & xDoc)275 void SAL_CALL SWFDialog::setSourceDocument( const Reference< XComponent >& xDoc )
276 throw(IllegalArgumentException, RuntimeException)
277 {
278 mxSrcDoc = xDoc;
279 }
280