23#include <com/sun/star/awt/UnoControlDialog.hpp>
24#include <com/sun/star/awt/Toolkit.hpp>
25#include <com/sun/star/awt/XControlContainer.hpp>
26#include <com/sun/star/awt/XWindowPeer.hpp>
27#include <com/sun/star/beans/theIntrospection.hpp>
28#include <com/sun/star/beans/XPropertySet.hpp>
29#include <com/sun/star/document/XEmbeddedScripts.hpp>
30#include <com/sun/star/lang/XMultiComponentFactory.hpp>
31#include <com/sun/star/lang/WrappedTargetRuntimeException.hpp>
32#include <com/sun/star/io/XInputStreamProvider.hpp>
33#include <com/sun/star/resource/XStringResourceSupplier.hpp>
34#include <com/sun/star/resource/XStringResourceManager.hpp>
35#include <com/sun/star/script/XLibraryContainer.hpp>
36#include <com/sun/star/ucb/SimpleFileAccess.hpp>
37#include <com/sun/star/uri/XUriReference.hpp>
38#include <com/sun/star/uri/UriReferenceFactory.hpp>
39#include <com/sun/star/uri/XVndSunStarScriptUrl.hpp>
40#include <com/sun/star/uri/XVndSunStarExpandUrl.hpp>
41#include <com/sun/star/util/theMacroExpander.hpp>
60using namespace document;
69 OUString aDlgName = aInetObj.
GetBase();
86 (
"com.sun.star.resource.StringResourceWithLocation",
87 i_xContext ), UNO_QUERY );
88 if( xStringResourceManager.is() )
92 xInit->initialize( aArgs );
94 return xStringResourceManager;
100 return xControlModel;
106 const Any &aDialogSourceURL)
111 xDlgPropSet->setPropertyValue(
"DialogSourceURL", aDialogSourceURL );
120 ::xmlscript::importDialogModel( xInput, xDialogModel, i_xContext,
xModel );
123 if( xStringResourceManager.is() )
126 Any aStringResourceManagerAny;
127 aStringResourceManagerAny <<= xStringResourceManager;
128 xDlgPSet->setPropertyValue(
"ResourceResolver", aStringResourceManagerAny );
139 static ::osl::Mutex s_aMutex;
163 if( xDialogLib.is() )
166 if( xStringResourceSupplier.is() )
169 xStringResourceResolver = xStringResourceSupplier->getStringResource();
171 xStringResourceManager =
175 return xStringResourceManager;
181 const Any &aDialogSourceURL)
190 throw RuntimeException(
"No information to create dialog" );
193 Any aDialogSourceURL((OUString()));
201 OUString
aURL( sURL );
214 bool bSingleDialog =
false;
222 uriRef = xFac->parse(
aURL );
225 OUString errorMsg =
"DialogProviderImpl::getDialogModel: failed to parse URI: " +
aURL;
232 aURL = sxUri->expand( xMacroExpander );
238 bSingleDialog =
true;
245 xInput = xSFI->openFileRead(
aURL );
252 OUString sDescription = sfUri->getName();
256 OUString sLibName = sDescription.getToken( 0,
'.',
nIndex );
259 sDlgName = sDescription.getToken( 0,
'.',
nIndex );
261 OUString sLocation = sfUri->getParameter(
"location" );
268 if ( sLocation ==
"application" )
272 else if ( sLocation ==
"document" )
275 if ( xDocumentScripts.is() )
277 xLibContainer = xDocumentScripts->getDialogLibraries();
278 OSL_ENSURE( xLibContainer.is(),
279 "DialogProviderImpl::createDialogModel: invalid dialog container!" );
285 for (
auto const & tdocURL : aOpenDocsTdocURLs )
288 OSL_ENSURE(
xModel.is(),
"DialogProviderImpl::createDialogModel: invalid document model!" );
292 OUString sDocURL =
xModel->getURL();
293 if ( sDocURL.isEmpty() )
298 if ( sLocation != sDocURL )
302 if ( !xDocumentScripts.is() )
305 xLibContainer = xDocumentScripts->getDialogLibraries();
306 OSL_ENSURE( xLibContainer.is(),
307 "DialogProviderImpl::createDialogModel: invalid dialog container!" );
313 if ( !xLibContainer.is() )
315 throw IllegalArgumentException(
316 "DialogProviderImpl::getDialog: library container not found!",
321 if ( !xLibContainer->isLibraryLoaded( sLibName ) )
322 xLibContainer->loadLibrary( sLibName );
325 if ( xLibContainer->hasByName( sLibName ) )
327 Any aElement = xLibContainer->getByName( sLibName );
328 aElement >>= xDialogLib;
331 if ( !xDialogLib.is() )
333 throw IllegalArgumentException(
334 "DialogProviderImpl::getDialogModel: library not found!",
339 if ( xDialogLib->hasByName( sDlgName ) )
341 Any aElement = xDialogLib->getByName( sDlgName );
347 throw IllegalArgumentException(
348 "DialogProviderImpl::getDialogModel: dialog not found!",
355 xInput = xISP->createInputStream();
368 else if( xDialogLib.is() )
373 Any aDialogSourceURLAny;
374 aDialogSourceURLAny <<=
aURL;
378 xCtrlModel.set( xDialogModel, UNO_QUERY );
387 OSL_ENSURE( rxDialogModel.is(),
"DialogProviderImpl::getDialogControl: no dialog model" );
393 xDialogControl = UnoControlDialog::create(
m_xContext );
396 if ( rxDialogModel.is() )
397 xDialogControl->setModel( rxDialogModel );
400 xDialogControl->setVisible(
false );
415 xPeer.set(
xFrame->getContainerWindow(), UNO_QUERY );
421 xDialogControl->createPeer( xToolkit, xPeer );
424 return xDialogControl;
432 bool bDialogProviderMode )
434 if ( !rxControl.is() )
439 if ( !xControlContainer.is() )
444 sal_Int32 nControlCount = aControls.getLength();
448 for ( sal_Int32
i = 0;
i < nControlCount; ++
i )
450 pObjects[
i].set( pControls[
i], UNO_QUERY );
454 pObjects[nControlCount].set( rxControl, UNO_QUERY );
471 if( !rxHandler.is() )
472 return xIntrospectionAccess;
484 aHandlerAny <<= rxHandler;
487 catch( RuntimeException& )
489 xIntrospectionAccess.clear();
491 return xIntrospectionAccess;
500 return "com.sun.star.comp.scripting.DialogProvider";
510 return {
"com.sun.star.awt.DialogProvider",
511 "com.sun.star.awt.DialogProvider2",
512 "com.sun.star.awt.ContainerWindowProvider" };
521 ::osl::MutexGuard aGuard(
getMutex() );
529 throw RuntimeException(
"DialogProviderImpl::initialize: invalid argument format!" );
549 throw RuntimeException(
"DialogProviderImpl::initialize: invalid number of arguments!" );
565 ::osl::MutexGuard aGuard(
getMutex() );
580 OSL_ENSURE( !
URL.isEmpty(),
"DialogProviderImpl::getDialog: no URL!" );
584 catch (
const RuntimeException& ) {
throw; }
587 const Any aError( ::cppu::getCaughtException() );
588 throw WrappedTargetRuntimeException( OUString(), *
this, aError );
593 if( bDialogProviderMode )
596 if( xDlgModPropSet.is() )
600 bool bDecoration =
true;
602 aDecorationAny >>= bDecoration;
606 xDlgModPropSet->setPropertyValue(
"Title",
Any( OUString() ) );
609 catch( UnknownPropertyException& )
639 throw IllegalArgumentException(
640 "DialogProviderImpl::createDialogWithHandler: Invalid xHandler!",
657 const Any& aParentWindow(
aArguments.get(
"ParentWindow" ) );
658 if ( !( aParentWindow >>= xParentPeer ) )
661 if ( xParentControl.is() )
662 xParentPeer = xParentControl->getPeer();
674 const OUString& URL,
const OUString&,
679 throw IllegalArgumentException(
680 "DialogProviderImpl::createContainerWindow: Invalid xParent!",
692 extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
694 css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any>
const&)
Reference< XComponentContext > m_xContext
SfxApplication * SfxGetpApp()
const LanguageTag & GetUILanguageTag() const
static const AllSettings & GetSettings()
OUString GetMainURL(DecodeMechanism eMechanism, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8) const
bool removeSegment(sal_Int32 nIndex=LAST_SEGMENT, bool bIgnoreFinalSlash=true)
const css::lang::Locale & getLocale(bool bResolveSystem=true) const
css::script::XLibraryContainer * GetDialogContainer()
VALUE_TYPE getOrDefault(const OUString &_rValueName, const VALUE_TYPE &_rDefault) const
virtual css::uno::Reference< css::awt::XDialog > SAL_CALL createDialogWithHandler(const OUString &URL, const css::uno::Reference< css::uno::XInterface > &xHandler) override
virtual css::uno::Reference< css::awt::XDialog > SAL_CALL createDialogWithArguments(const OUString &URL, const css::uno::Sequence< css::beans::NamedValue > &Arguments) override
virtual css::uno::Reference< css::awt::XWindow > SAL_CALL createContainerWindow(const OUString &URL, const OUString &WindowType, const css::uno::Reference< css::awt::XWindowPeer > &xParent, const css::uno::Reference< css::uno::XInterface > &xHandler) override
css::uno::Reference< css::awt::XControlModel > createDialogModelForBasic()
css::uno::Reference< css::awt::XControlModel > createDialogModel(const OUString &sURL)
DialogProviderImpl(const css::uno::Reference< css::uno::XComponentContext > &rxContext)
css::uno::Reference< css::awt::XControl > createDialogImpl(const OUString &URL, const css::uno::Reference< css::uno::XInterface > &xHandler, const css::uno::Reference< css::awt::XWindowPeer > &xParent, bool bDialogProviderMode)
virtual void SAL_CALL initialize(const css::uno::Sequence< css::uno::Any > &aArguments) override
virtual OUString SAL_CALL getImplementationName() override
css::uno::Reference< css::awt::XUnoControlDialog > createDialogControl(const css::uno::Reference< css::awt::XControlModel > &rxDialogModel, const css::uno::Reference< css::awt::XWindowPeer > &xParent)
void attachControlEvents(const css::uno::Reference< css::awt::XControl > &rxControlContainer, const css::uno::Reference< css::uno::XInterface > &rxHandler, const css::uno::Reference< css::beans::XIntrospectionAccess > &rxIntrospectionAccess, bool bDialogProviderMode)
virtual css::uno::Reference< css::awt::XDialog > SAL_CALL createDialog(const OUString &URL) override
css::uno::Reference< css::uno::XComponentContext > m_xContext
css::uno::Reference< css::frame::XModel > m_xModel
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
css::uno::Reference< css::beans::XIntrospectionAccess > inspectHandler(const css::uno::Reference< css::uno::XInterface > &rxHandler)
virtual sal_Bool SAL_CALL supportsService(const OUString &ServiceName) override
virtual ~DialogProviderImpl() override
std::unique_ptr< BasicRTLParams > m_BasicInfo
Sequence< PropertyValue > aArguments
Reference< XIntrospection > xIntrospection
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
anonymous implementation namespace
constexpr OUStringLiteral aDecorationPropName
Reference< container::XNameContainer > lcl_createControlModel(const Reference< XComponentContext > &i_xContext)
Reference< resource::XStringResourceManager > lcl_getStringResourceManager(const Reference< XComponentContext > &i_xContext, std::u16string_view i_sURL)
::osl::Mutex & getMutex()
Reference< container::XNameContainer > lcl_createDialogModel(const Reference< XComponentContext > &i_xContext, const Reference< io::XInputStream > &xInput, const Reference< frame::XModel > &xModel, const Reference< resource::XStringResourceManager > &xStringResourceManager, const Any &aDialogSourceURL)
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * scripting_DialogProviderImpl_get_implementation(css::uno::XComponentContext *context, css::uno::Sequence< css::uno::Any > const &)
static Reference< resource::XStringResourceManager > getStringResourceFromDialogLibrary(const Reference< container::XNameContainer > &xDialogLib)
Reference< XController > xController
Reference< XFrame > xFrame
Reference< XModel > xModel