24#include <com/sun/star/drawing/framework/ConfigurationChangeEvent.hpp>
25#include <com/sun/star/drawing/framework/XConfigurationControllerBroadcaster.hpp>
28#include <rtl/ustrbuf.hxx>
34using ::sd::framework::FrameworkHelper;
43 bool operator () (
const Reference<XResourceId>& rId1,
const Reference<XResourceId>& rId2)
const
45 return rId1->compareTo(rId2) == -1;
54 :
public ::std::set<Reference<XResourceId>, XResourceIdLess>
63 const Reference<XConfigurationControllerBroadcaster>& rxBroadcaster,
64 bool bBroadcastRequestEvents)
65 : mpResourceContainer(new ResourceContainer()),
66 mxBroadcaster(rxBroadcaster),
67 mbBroadcastRequestEvents(bBroadcastRequestEvents)
72 const Reference<XConfigurationControllerBroadcaster>& rxBroadcaster,
73 bool bBroadcastRequestEvents,
74 const ResourceContainer& rResourceContainer)
97 if ( ! rxResourceId.is() || rxResourceId->getResourceURL().isEmpty())
98 throw css::lang::IllegalArgumentException();
102 SAL_INFO(
"sd.fwk", __func__ <<
": Configuration::addResource() " <<
112 if ( ! rxResourceId.is() || rxResourceId->getResourceURL().isEmpty())
113 throw css::lang::IllegalArgumentException();
118 SAL_INFO(
"sd.fwk", __func__ <<
": Configuration::removeResource() " <<
126 const Reference<XResourceId>& rxAnchorId,
127 const OUString& rsResourceURLPrefix,
128 AnchorBindingMode eMode)
133 const bool bFilterResources (!rsResourceURLPrefix.isEmpty());
136 ::std::vector<Reference<XResourceId> > aResources;
139 if ( ! rxResource->isBoundTo(rxAnchorId,
eMode))
142 if (bFilterResources)
147 if (
eMode != AnchorBindingMode_DIRECT
148 && ! rxResource->isBoundTo(rxAnchorId, AnchorBindingMode_DIRECT))
154 if ( ! rxResource->getResourceURL().match(rsResourceURLPrefix))
160 aResources.push_back(rxResource);
171 return rxResourceId.is()
193 OUStringBuffer aString;
196 aString.append(
"DISPOSED ");
197 aString.append(
"Configuration[");
199 ResourceContainer::const_iterator iResource;
205 aString.append(
", ");
210 return aString.makeStringAndClear();
219 const Reference<XResourceId>& rxResourceId,
220 const bool bActivation)
222 OSL_ASSERT(rxResourceId.is());
227 ConfigurationChangeEvent
aEvent;
228 aEvent.ResourceId = rxResourceId;
239 aEvent.Configuration =
this;
248 throw lang::DisposedException (
"Configuration object has already been disposed",
249 const_cast<uno::XWeak*
>(
static_cast<const uno::XWeak*
>(
this)));
254 const Reference<XConfiguration>& rxConfiguration1,
255 const Reference<XConfiguration>& rxConfiguration2)
257 if (rxConfiguration1.is() != rxConfiguration2.is())
259 if ( ! rxConfiguration1.is() && ! rxConfiguration2.is())
263 const Sequence<Reference<XResourceId> > aResources1(
264 rxConfiguration1->getResources(
265 nullptr, OUString(), AnchorBindingMode_INDIRECT));
266 const Sequence<Reference<XResourceId> > aResources2(
267 rxConfiguration2->getResources(
268 nullptr, OUString(), AnchorBindingMode_INDIRECT));
274 return std::equal(aResources1.begin(), aResources1.end(), aResources2.begin(), aResources2.end(),
275 [](
const Reference<XResourceId>&
a,
const Reference<XResourceId>& b) {
276 if (a.is() && b.is())
277 return a->compareTo(b) == 0;
278 return a.is() == b.is();
virtual css::uno::Sequence< css::uno::Reference< css::drawing::framework::XResourceId > > SAL_CALL getResources(const css::uno::Reference< css::drawing::framework::XResourceId > &rxAnchorId, const OUString &rsResourceURLPrefix, css::drawing::framework::AnchorBindingMode eMode) override
virtual OUString SAL_CALL getName() override
Return a human readable string representation.
std::unique_ptr< ResourceContainer > mpResourceContainer
The resource container holds the URLs of unique resource and of resource linked to unique resources.
virtual void SAL_CALL removeResource(const css::uno::Reference< css::drawing::framework::XResourceId > &rxResourceId) override
virtual void SAL_CALL addResource(const css::uno::Reference< css::drawing::framework::XResourceId > &rxResourceId) override
void ThrowIfDisposed() const
When the called object has already been disposed this method throws an exception and does not return.
virtual ~Configuration() override
void PostEvent(const css::uno::Reference< css::drawing::framework::XResourceId > &rxResourceId, const bool bActivation)
Send an event to all interested listeners that a resource has been added or removed.
css::uno::Reference< css::drawing::framework::XConfigurationControllerBroadcaster > mxBroadcaster
The broadcaster used for notifying listeners of requests for configuration changes.
Configuration(const css::uno::Reference< css::drawing::framework::XConfigurationControllerBroadcaster > &rxBroadcaster, bool bBroadcastRequestEvents)
Create a new configuration with a broadcaster that is used to send events about requested configurati...
bool mbBroadcastRequestEvents
virtual sal_Bool SAL_CALL hasResource(const css::uno::Reference< css::drawing::framework::XResourceId > &rxResourceId) override
virtual css::uno::Reference< css::util::XCloneable > SAL_CALL createClone() override
virtual void disposing(std::unique_lock< std::mutex > &) override
virtual void SAL_CALL setName(const OUString &rName) override
This call is ignored because the XNamed interface is (mis)used to give access to a human readable nam...
static constexpr OUStringLiteral msResourceDeactivationEvent
static constexpr OUStringLiteral msResourceActivationRequestEvent
static OUString ResourceIdToString(const css::uno::Reference< css::drawing::framework::XResourceId > &rxResourceId)
Return a string representation of the given XResourceId object.
static constexpr OUStringLiteral msResourceDeactivationRequestEvent
static constexpr OUStringLiteral msResourceActivationEvent
#define SAL_INFO(area, stream)
css::uno::Sequence< DstElementType > containerToSequence(const SrcType &i_Container)
bool AreConfigurationsEquivalent(const Reference< XConfiguration > &rxConfiguration1, const Reference< XConfiguration > &rxConfiguration2)