| /************************************************************** |
| * |
| * 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_DOCTREENODE_HXX |
| #define INCLUDED_SLIDESHOW_DOCTREENODE_HXX |
| |
| #include <sal/types.h> |
| #include <vector> |
| |
| |
| /* Definition of DocTreeNode class */ |
| |
| namespace slideshow |
| { |
| namespace internal |
| { |
| |
| /** This class represents kind of a DOM tree node for shape |
| text |
| |
| In order to animate subsets of shape text, we need |
| information about the logical and formatting structure of |
| that text (lines, paragraphs, words etc.). This is |
| represented in a tree structure, with DocTreeNodes as the |
| nodes. Instances of this class can be queried from the |
| DocTreeNodeSupplier interface. |
| |
| This class has nothing to do with the Draw document tree. |
| */ |
| class DocTreeNode |
| { |
| public: |
| /// Type of shape entity represented by this node |
| enum NodeType |
| { |
| NODETYPE_INVALID=0, |
| |
| /// This node represents a full shape |
| NODETYPE_FORMATTING_SHAPE=1, |
| /// This node represents a line |
| NODETYPE_FORMATTING_LINE=2, |
| |
| /// This node represents a full shape |
| NODETYPE_LOGICAL_SHAPE=128, |
| /// This node represents a paragraph |
| NODETYPE_LOGICAL_PARAGRAPH=129, |
| /// This node represents a sentence |
| NODETYPE_LOGICAL_SENTENCE=130, |
| /// This node represents a word |
| NODETYPE_LOGICAL_WORD=131, |
| /// This node represents a character |
| NODETYPE_LOGICAL_CHARACTER_CELL=132 |
| }; |
| |
| // classificators for above text entity types |
| static bool isLogicalNodeType( NodeType eType ) { return eType > 127; } |
| static bool isFormattingNodeType( NodeType eType ) { return eType > 0 && eType < 128; } |
| |
| /** Create empty tree node |
| */ |
| DocTreeNode() : |
| mnStartIndex(-1), |
| mnEndIndex(-1), |
| meType(NODETYPE_INVALID) |
| { |
| } |
| |
| /** Create tree node from start and end index. |
| |
| Create a tree node for the given range and type. |
| |
| @param nStartIndex |
| Start index |
| |
| @param nEndIndex |
| End index (exclusive) |
| |
| @param eType |
| Node type |
| */ |
| DocTreeNode( sal_Int32 nStartIndex, |
| sal_Int32 nEndIndex, |
| NodeType eType ) : |
| mnStartIndex(nStartIndex), |
| mnEndIndex(nEndIndex), |
| meType(eType) |
| { |
| } |
| |
| bool isEmpty() const { return mnStartIndex == mnEndIndex; } |
| |
| sal_Int32 getStartIndex() const { return mnStartIndex; } |
| sal_Int32 getEndIndex() const { return mnEndIndex; } |
| void setStartIndex( sal_Int32 nIndex ) { mnStartIndex = nIndex; } |
| void setEndIndex( sal_Int32 nIndex ) { mnEndIndex = nIndex; } |
| |
| NodeType getType() const { return meType; } |
| |
| void reset() |
| { |
| mnStartIndex = -1; |
| mnEndIndex = -1; |
| meType = NODETYPE_INVALID; |
| } |
| |
| private: |
| sal_Int32 mnStartIndex; |
| sal_Int32 mnEndIndex; |
| NodeType meType; |
| |
| }; |
| |
| typedef ::std::vector< DocTreeNode > VectorOfDocTreeNodes; |
| } |
| } |
| |
| #endif /* INCLUDED_SLIDESHOW_DOCTREENODE_HXX */ |