/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed * with this work for additional information regarding copyright * ownership. The ASF licenses this file to you under the Apache * License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
namespace com::sun::star::uno { class XComponentContext;
} namespace com::sun::star::uno { class XAggregation; } namespace com::sun::star::lang { class XComponent; }
/* class hierarchy herein:
+-------------------+ helper class for aggregating the proxy to another object | OProxyAggregation | - not ref counted +-------------------+ - no UNO implementation, i.e. not derived from XInterface ^ (neither direct nor indirect) | | +----------------------------------+ helper class for aggregating a proxy to an XComponent | OComponentProxyAggregationHelper | - life time coupling: if the inner component (the "aggregate") +----------------------------------+ is disposed, the outer (the delegator) is disposed, too, and ^ vice versa | - UNO based, implementing XEventListener | +----------------------------+ component aggregating another XComponent | OComponentProxyAggregation | - life time coupling as above +----------------------------+ - ref-counted - implements an XComponent itself
If you need to
- wrap a foreign object which is a XComponent => use OComponentProxyAggregation - call componentAggregateProxyFor in your ctor - call implEnsureDisposeInDtor in your dtor
- wrap a foreign object which is a XComponent, but already have ref-counting mechanisms inherited from somewhere else => use OComponentProxyAggregationHelper - override dispose - don't forget to call the base class' dispose! - call componentAggregateProxyFor in your ctor
- wrap a foreign object which is no XComponent => use OProxyAggregation - call baseAggregateProxyFor in your ctor
*/
namespace accessibility
{
//= OProxyAggregation
/** helper class for aggregating a proxy for a foreign object
*/ class OProxyAggregation
{ private:
css::uno::Reference< css::uno::XAggregation > m_xProxyAggregate;
css::uno::Reference< css::lang::XTypeProvider > m_xProxyTypeAccess;
css::uno::Reference< css::uno::XComponentContext > m_xContext;
/// to be called from within your ctor void baseAggregateProxyFor( const css::uno::Reference< css::uno::XInterface >& _rxComponent,
oslInterlockedCount& _rRefCount,
::cppu::OWeakObject& _rDelegator
);
/** a helper class for aggregating a proxy to an XComponent
<p>The object couples the life time of itself and the component: if one of the both dies (in a sense of being disposed), the other one dies, too.</p>
<p>The class itself does not implement XComponent so you need to forward any XComponent::dispose calls which your derived class gets to the dispose method of this class.</p>
*/
class OComponentProxyAggregationHelper : public ::cppu::ImplHelper1<css::lang::XEventListener>, private OProxyAggregation
{ private: typedef ::cppu::ImplHelper1 < css::lang::XEventListener
> BASE; // prevents some MSVC problems
/// to be called from within your ctor void componentAggregateProxyFor( const css::uno::Reference< css::lang::XComponent >& _rxComponent,
oslInterlockedCount& _rRefCount,
::cppu::OWeakObject& _rDelegator
);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.