20#include <com/sun/star/beans/XPropertyAccess.hpp>
21#include <com/sun/star/container/XContainerQuery.hpp>
22#include <com/sun/star/container/XNameAccess.hpp>
23#include <com/sun/star/document/FilterOptionsRequest.hpp>
24#include <com/sun/star/document/NoSuchFilterRequest.hpp>
25#include <com/sun/star/document/XImporter.hpp>
26#include <com/sun/star/document/XInteractionFilterOptions.hpp>
27#include <com/sun/star/document/XInteractionFilterSelect.hpp>
28#include <com/sun/star/task/XInteractionAbort.hpp>
29#include <com/sun/star/task/XInteractionRequest.hpp>
30#include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
48 OUString
const & rURL ,
57 aDialog.ChangeFilters(&rFilters);
60 if (aDialog.AskForFilter(pSelected))
62 rFilter = pSelected->sInternal;
67handleNoSuchFilterRequest_(
69 uno::Reference< uno::XComponentContext >
const & xContext,
70 document::NoSuchFilterRequest
const & rRequest,
71 uno::Sequence< uno::Reference< task::XInteractionContinuation > >
const &
74 uno::Reference< task::XInteractionAbort > xAbort;
75 uno::Reference< document::XInteractionFilterSelect > xFilterTransport;
83 if (!xFilterTransport.is())
89 uno::Reference< container::XContainerQuery > xFilterContainer;
92 xFilterContainer.set( xContext->getServiceManager()->createInstanceWithContext(
93 "com.sun.star.document.FilterFactory", xContext ),
96 catch ( uno::Exception
const & )
100 if (!xFilterContainer.is())
121 uno::Reference< container::XEnumeration > xFilters
122 = xFilterContainer->createSubSetEnumerationByQuery(
123 "_query_all:sort_prop=uiname:iflags=1:eflags=143360");
124 while (xFilters->hasMoreElements())
131 aPair.
sInternal = lProps.getUnpackedValueOrDefault(
133 aPair.
sUI = lProps.getUnpackedValueOrDefault(
134 "UIName", OUString());
139 lNames.push_back( aPair );
141 catch(
const uno::RuntimeException&)
145 catch(
const uno::Exception&)
160 OUString sSelectedFilter;
161 executeFilterDialog( pParent,
168 if (sSelectedFilter.isEmpty())
175 xFilterTransport->setFilter( sSelectedFilter );
176 xFilterTransport->select();
180handleFilterOptionsRequest_(
181 uno::Reference<awt::XWindow>
const & rWindow,
182 uno::Reference< uno::XComponentContext >
const & xContext,
183 document::FilterOptionsRequest
const & rRequest,
184 uno::Sequence< uno::Reference< task::XInteractionContinuation > >
const &
187 uno::Reference< task::XInteractionAbort > xAbort;
188 uno::Reference< document::XInteractionFilterOptions > xFilterOptions;
191 uno::Reference< container::XNameAccess > xFilterCFG;
194 xFilterCFG.set( xContext->getServiceManager()->createInstanceWithContext(
195 "com.sun.star.document.FilterFactory", xContext ),
198 catch ( uno::Exception
const & )
202 if( xFilterCFG.is() && rRequest.rProperties.hasElements() )
206 OUString aFilterName;
207 auto pProperty = std::find_if(rRequest.rProperties.begin(), rRequest.rProperties.end(),
208 [](
const beans::PropertyValue& rProp) { return rProp.Name ==
"FilterName"; });
209 if (pProperty != rRequest.rProperties.end())
211 pProperty->Value >>= aFilterName;
214 uno::Sequence < beans::PropertyValue > aProps;
215 if ( xFilterCFG->getByName( aFilterName ) >>= aProps )
217 auto pProp = std::find_if(std::cbegin(aProps), std::cend(aProps),
218 [](
const beans::PropertyValue& rProp) {
return rProp.Name ==
"UIComponent"; });
219 if (pProp != std::cend(aProps))
221 OUString aServiceName;
222 pProp->Value >>= aServiceName;
223 if( !aServiceName.isEmpty() )
227 {
"ParentWindow",
uno::Any(rWindow)},
231 ui::dialogs::XExecutableDialog > xFilterDialog(
232 xContext->getServiceManager()->createInstanceWithArgumentsAndContext(
233 aServiceName, aDialogArgs, xContext ),
236 uno::Reference< beans::XPropertyAccess >
237 xFilterProperties( xFilterDialog,
240 if( xFilterDialog.is() && xFilterProperties.is() )
243 document::XImporter > xImporter(
244 xFilterDialog, uno::UNO_QUERY );
246 xImporter->setTargetDocument( rRequest.rModel );
248 xFilterProperties->setPropertyValues(
249 rRequest.rProperties );
251 if( xFilterDialog->execute() )
253 xFilterOptions->setFilterOptions(
254 xFilterProperties->getPropertyValues() );
255 xFilterOptions->select();
263 catch( container::NoSuchElementException& )
267 catch( uno::Exception& )
279 uno::Reference< task::XInteractionRequest >
const & rRequest)
281 uno::Any aAnyRequest(rRequest->getRequest());
283 document::NoSuchFilterRequest aNoSuchFilterRequest;
284 if (aAnyRequest >>= aNoSuchFilterRequest)
289 aNoSuchFilterRequest,
290 rRequest->getContinuations());
298 uno::Reference< task::XInteractionRequest >
const & rRequest)
300 uno::Any aAnyRequest(rRequest->getRequest());
302 document::FilterOptionsRequest aFilterOptionsRequest;
303 if (aAnyRequest >>= aFilterOptionsRequest)
307 aFilterOptionsRequest,
308 rRequest->getContinuations());
static weld::Window * GetFrameWeld(const css::uno::Reference< css::awt::XWindow > &rWindow)
bool handleFilterOptionsRequest(css::uno::Reference< css::task::XInteractionRequest > const &rRequest)
css::uno::Reference< css::uno::XComponentContext > m_xContext
bool handleNoSuchFilterRequest(css::uno::Reference< css::task::XInteractionRequest > const &rRequest)
const css::uno::Reference< css::awt::XWindow > & getParentXWindow() const
void getContinuations(css::uno::Sequence< css::uno::Reference< css::task::XInteractionContinuation > > const &rContinuations, css::uno::Reference< t1 > *pContinuation1, css::uno::Reference< t2 > *pContinuation2)
css::uno::Sequence< css::uno::Any > InitAnyPropertySequence(::std::initializer_list< ::std::pair< OUString, css::uno::Any > > vInit)
FilterNameList::const_iterator FilterNameListPtr
::std::vector< FilterNamePair > FilterNameList