Files
libreoffice/slideshow/source/inc/attributableshape.hxx
Rüdiger Timm 83541c138d INTEGRATION: CWS presentationengine01 (1.1.2); FILE ADDED
2004/10/08 20:08:17 thb 1.1.2.2: #i34997# Fixed several node state inconsistencies, which led to start/end activities not correctly updating the shapes; added proper updating behaviour to LayerManager (several display-changing cases were missing); fixed SLIDEWIPE for shape transitions; improved docs and structure slightly
2004/08/19 17:26:15 thb 1.1.2.1: Initial revision
2004-11-26 18:13:35 +00:00

261 lines
10 KiB
C++

/*************************************************************************
*
* $RCSfile: attributableshape.hxx,v $
*
* $Revision: 1.2 $
*
* last change: $Author: rt $ $Date: 2004-11-26 19:13:35 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
*
* - GNU Lesser General Public License Version 2.1
* - Sun Industry Standards Source License Version 1.1
*
* Sun Microsystems Inc., October, 2000
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2000 by Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, CA 94303, USA
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*
*
* Sun Industry Standards Source License Version 1.1
* =================================================
* The contents of this file are subject to the Sun Industry Standards
* Source License Version 1.1 (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.openoffice.org/license.html.
*
* Software provided under this License is provided on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
* See the License for the specific provisions governing your rights and
* obligations concerning the Software.
*
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
*
* Copyright: 2000 by Sun Microsystems, Inc.
*
* All Rights Reserved.
*
* Contributor(s): _______________________________________
*
*
************************************************************************/
#ifndef _SLIDESHOW_ATTRIBUTABLESHAPE_HXX
#define _SLIDESHOW_ATTRIBUTABLESHAPE_HXX
#ifndef BOOST_SHARED_PTR_HPP_INCLUDED
#include <boost/shared_ptr.hpp>
#endif
#include <animatableshape.hxx>
#include <shapeattributelayer.hxx>
namespace presentation
{
namespace internal
{
class DocTreeNode;
// forward declaration necessary, because methods use AttributableShapeSharedPtr
class AttributableShape;
typedef ::boost::shared_ptr< AttributableShape > AttributableShapeSharedPtr;
/** Represents an animatable shape, that can have its
attributes changed.
Over an animatable shape, this interface adds attribute
modification methods. Furthermore, the shape can be
queried for sub items, which in turn can be separated out
into own AttributableShapes.
*/
class AttributableShape : public AnimatableShape
{
public:
// Attribute layer methods
//------------------------------------------------------------------
/** Create a new shape attribute layer.
This method creates a new layer for shape attributes,
which lies atop of all previous attribute layers. That
is most typically used when a new SMIL animation
starts (which according to the spec always lies atop
of all previous animations). Thus, subsequent calls to
this method generate a sandwich of attribute layers,
which in total define the shape's attributes.
Please note that the attribute layers do <em>not</em>
contain the underlying XShape's attributes as
default. Instead, attributes not explicitely set by
animations remain in invalid state, allowing the
shape's paint method to determine whether they have to
override the underlying graphical shape
representation. XShape attributes must be passed
explicitely to animations which need them (e.g. 'by'
animations).
@return the new layer
*/
virtual ShapeAttributeLayerSharedPtr createAttributeLayer() = 0;
/** Revoke a previously generated attribute layer.
This method revokes a previously generated attribute
layer, and removes the effect of that layer from this
shape. The layer need not be the current toplevel
layer, it can also be revoked from in between.
@param rLayer
Layer to revoke. Must have been generated by
createAttributeLayer() at the same Shape.
@return true, if layer was successfully removed, false
otherwise (e.g. if the given layer was not generated
for this shape).
*/
virtual bool revokeAttributeLayer( const ShapeAttributeLayerSharedPtr& rLayer ) = 0;
/** Change shape visibility
This method hides or unhides a shape. Note that every
attribute layer generated for this shape will override
the setting given here, until it is revoked.
@param bVisible
When true, shape will be visible, when false,
invisible (modulo attribute layer overrides).
*/
virtual void setVisibility( bool bVisible ) = 0;
// Sub item attributes
//------------------------------------------------------------------
/** Query number of tree nodes this shape contains.
The value returned by this method minus one is the
maximum value permissible at the
getFormattingDocTreeNode/getLogicalDocTreeNode methods.
*/
virtual sal_Int32 getNumberOfTreeNodes() const = 0; // throw ImportFailedException;
/** Query a formatted DocTreeNode for this shape.
There are two document trees available for shapes:
this method returns top level nodes for the formatting
tree, which gives information about paragraph and line
breaks.
*/
virtual DocTreeNode getFormattingDocTreeNode( sal_Int32 nIndex ) const = 0; // throw ImportFailedException;
/** Query a logical DocTreeNode for this shape.
There are two document trees available for shapes:
this method returns top level nodes for the logical
document tree, which gives information about
paragraphs, sentences, words and character cells.
*/
virtual DocTreeNode getLogicalDocTreeNode( sal_Int32 nIndex ) const = 0; // throw ImportFailedException;
/** Query the current subset in effect.
This method returns a tree node denoting the currently
active subset. If this shape is not a subset shape,
an empty tree node should be returned.
*/
virtual DocTreeNode getEffectiveSubset() const = 0;
/** Query a subset Shape
This method queries a clone of this Shape, which
renders only the selected subset of itself.
@param rTreeNode
A DocTreeNode instance queried from this Shape, which
specifies the subset of the Shape to render
@return a NULL Shape pointer, if no subset exists for
the given DocTreeNode.
*/
virtual AttributableShapeSharedPtr querySubset( const DocTreeNode& rTreeNode ) const = 0;
/** Create a subset Shape
This method creates a clone of this Shape, which
renders only the selected subset of itself. Multiple
createSubset() calls for the same DocTreeNode will all
share the same subset shape.
The original shape (i.e. the one this method is called
on) will cease to display the selected subset
part. That is, together the shapes will display the
original content, but the content of all subset shapes
and their original shape will always be mutually
disjunct.
After deregistering the subset shape a matching number
of times via revokeSubset(), the original shape will
resume displaying the subsetted part.
@attention To maintain integrity, this method should
only be called from the LayerManager
@param o_rSubset
The requested Shape
@param rTreeNode
A DocTreeNode instance queried from this Shape, which
specifies the subset of the Shape to render
@return true, if the shape was newly created, and
false, if an already existing subset is returned.
*/
virtual bool createSubset( AttributableShapeSharedPtr& o_rSubset,
const DocTreeNode& rTreeNode ) = 0;
/** Revoke a previously generated shape subset.
After revoking a subset shape, the corresponding
subset part will become visible again on the original
shape.
@attention To maintain integrity, this method should
only be called from the LayerManager
@param rShape
The subset to revoke
@return true, if the last client called
revokeSubset().
*/
virtual bool revokeSubset( const AttributableShapeSharedPtr& rShape ) = 0;
};
typedef ::boost::shared_ptr< AttributableShape > AttributableShapeSharedPtr;
}
}
#endif /* _SLIDESHOW_ATTRIBUTABLESHAPE_HXX */