| /************************************************************** |
| * |
| * 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 INCLUDED_SLIDESHOW_SHAPESUBSET_HXX |
| #define INCLUDED_SLIDESHOW_SHAPESUBSET_HXX |
| |
| #include "attributableshape.hxx" |
| #include "subsettableshapemanager.hxx" |
| #include "doctreenode.hxx" |
| |
| #include <boost/shared_ptr.hpp> |
| |
| namespace slideshow |
| { |
| namespace internal |
| { |
| class ShapeSubset; |
| typedef ::boost::shared_ptr< ShapeSubset > ShapeSubsetSharedPtr; |
| |
| /* Definition of ShapeSubset class */ |
| |
| /** Subset RAII wrapper for shapes. |
| |
| This class wraps the plain Shape with a wrapper for subset |
| functionality. Subsetting can be turned on and off. Note |
| that the reason to have shape subsetting RAII implemented |
| separately (i.e. not within the DrawShape) was that |
| subsetting (and de-subsetting) needs the |
| SubsettableShapeManager. And holding that at the DrawShape |
| creates one heck of a circular reference. |
| */ |
| class ShapeSubset |
| { |
| public: |
| /** Create a subset directly from a Shape. |
| |
| @param rOriginalShape |
| Original shape to subset |
| |
| @param rTreeNode |
| Subset this object should represent |
| |
| @param rShapeManager |
| Manager object, where subsets are |
| registered/unregistered |
| */ |
| ShapeSubset( const AttributableShapeSharedPtr& rOriginalShape, |
| const DocTreeNode& rTreeNode, |
| const SubsettableShapeManagerSharedPtr& rSubsetManager ); |
| |
| /** Create a subset from another subset. |
| |
| Note: if you want this subset to subtract from the |
| passed subset reference (and not from the original, |
| unsubsetted shape), the passed subset must be enabled |
| (enableSubsetShape() must have been called) |
| |
| @param rOriginalSubset |
| Original subset, which to subset again. |
| |
| @param rTreeNode |
| Subset of the original subset |
| */ |
| ShapeSubset( const ShapeSubsetSharedPtr& rOriginalSubset, |
| const DocTreeNode& rTreeNode ); |
| |
| /** Create full set for the given shape. |
| |
| @param rOriginalShape |
| Original shape, which will be represented as a whole |
| by this object |
| */ |
| ShapeSubset( const AttributableShapeSharedPtr& rOriginalShape, |
| const SubsettableShapeManagerSharedPtr& rShapeManager ); |
| |
| ~ShapeSubset(); |
| |
| /** Get the actual subset shape. |
| |
| If the subset is currently revoked, this method |
| returns the original shape. |
| */ |
| AttributableShapeSharedPtr getSubsetShape() const; |
| |
| /** Enable the subset shape. |
| |
| This method enables the subset. That means, on |
| successful completion of this method, the original |
| shape will cease to show the subset range, and |
| getSubsetShape() will return a valid shape. |
| |
| @return true, if subsetting was successfully enabled. |
| */ |
| bool enableSubsetShape(); |
| |
| /** Disable the subset shape. |
| |
| This method revokes the subset from the original |
| shape. That means, the original shape will again show |
| the hidden range. |
| */ |
| void disableSubsetShape(); |
| |
| /** Query whether this subset actually is none, but |
| contains the whole original shape's content |
| */ |
| bool isFullSet() const; |
| |
| /** Query subset this object represents |
| */ |
| DocTreeNode getSubset() const; |
| |
| private: |
| // default copy/assignment are okay |
| //ShapeSubset(const ShapeSubset&); |
| //ShapeSubset& operator=( const ShapeSubset& ); |
| |
| AttributableShapeSharedPtr mpOriginalShape; |
| AttributableShapeSharedPtr mpSubsetShape; |
| DocTreeNode maTreeNode; |
| SubsettableShapeManagerSharedPtr mpShapeManager; |
| }; |
| } |
| } |
| |
| #endif /* INCLUDED_SLIDESHOW_SHAPESUBSET_HXX */ |