blob: d4f881970a4a004055be6a59654730622ed1e424 [file] [log] [blame]
/**************************************************************
*
* 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
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef BASICMANAGERREPOSITORY_HXX
#define BASICMANAGERREPOSITORY_HXX
/** === begin UNO includes === **/
#include <com/sun/star/frame/XModel.hpp>
#include <com/sun/star/embed/XStorage.hpp>
/** === end UNO includes === **/
class BasicManager;
//........................................................................
namespace basic
{
//........................................................................
//====================================================================
//= BasicManagerRepository
//====================================================================
/** specifies a callback for instances which are interested in BasicManagers
created by the BasicManagerRepository.
*/
class SAL_NO_VTABLE BasicManagerCreationListener
{
public:
/** is called when a BasicManager has been created
@param _rxForDocument
denotes the document for which the BasicManager has been created. If this is <NULL/>,
then the BasicManager is the application-wide BasicManager.
@param _pBasicManager
denotes the BasicManager which has been created. The listener might for instance
decide to add global variables to it, or otherwise initialize it.
*/
virtual void onBasicManagerCreated(
const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >& _rxForDocument,
BasicManager& _rBasicManager
) = 0;
};
//====================================================================
//= BasicManagerRepository
//====================================================================
class BasicManagerRepository
{
public:
/** returns the BasicManager belonging to the given document
If the BasicManager does not yet exist, it is created. In this case, if the application's
BasicManager does not yet exist, it is also created. This is necessary since
the application's BasicManager acts as parent for all document's BasicManagers.
If you're interested in this case - the implicit creation of the application's BasicManager -,
then you need to register as BasicManagerCreationListener.
@param _rxDocumentModel
denotes the document model whose BasicManager is to be retrieved. Must not be <NULL/>.
The document should support the XDocumentInfoSupplier interface, for retrieving
its title, which is needed in some error conditions.
Also it <em>must</em> support the XStorageBasedDocument interface, since we
must be able to retrieve the document's storage. If this interface is <em>not</em>
supported, creating a new BasicManager will certainly fail.
@return
the BasicManager for this model.
@attention
The returned BasicManager instances is owned by the repository. In particular,
you are not allowed to delete it. Instead, the given model is observed: As soon
as it's closed, the associated BasicManager is deleted.
*/
static BasicManager* getDocumentBasicManager(
const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >& _rxDocumentModel
);
/** returns the application-wide BasicManager
@param _bCreate
determines whether the BasicManager should be created (<TRUE/>) if it
does not yet exist.
@attention
If the BasicManager is newly created, then it is still owned by the repository.
In particular, you are not allowed to delete it. Instead, call resetApplicationBasicManager
to release the BasicManager.
*/
static BasicManager* getApplicationBasicManager( bool _bCreate );
/** resets the application-wide BasicManager to <NULL/>
*/
static void resetApplicationBasicManager();
/** registers a BasicManagerCreationListener instance which is notified whenever
the repository creates a BasicManager instance.
Note that this listener is <em>not</em> called when somebody else
creates BasicManager instances.
If the same listener is registered multiple times, it is also notified
multiple times, and needs to be revoked once for each registration.
*/
static void registerCreationListener(
BasicManagerCreationListener& _rListener
);
/** reveokes a BasicManagerCreationListener instance which has previously
been registered to be notified about created BasicManager instances.
*/
static void revokeCreationListener(
BasicManagerCreationListener& _rListener
);
};
//........................................................................
} // namespace basic
//........................................................................
#endif // BASICMANAGERREPOSITORY_HXX