2002-02-11 07:58:31 -06:00
|
|
|
/*************************************************************************
|
|
|
|
*
|
2008-04-11 07:59:35 -05:00
|
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
2002-02-11 07:58:31 -06:00
|
|
|
*
|
2008-04-11 07:59:35 -05:00
|
|
|
* Copyright 2008 by Sun Microsystems, Inc.
|
2002-02-11 07:58:31 -06:00
|
|
|
*
|
2008-04-11 07:59:35 -05:00
|
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
2002-02-11 07:58:31 -06:00
|
|
|
*
|
2008-04-11 07:59:35 -05:00
|
|
|
* $RCSfile: viewnode.hxx,v $
|
|
|
|
* $Revision: 1.5 $
|
2002-02-11 07:58:31 -06:00
|
|
|
*
|
2008-04-11 07:59:35 -05:00
|
|
|
* This file is part of OpenOffice.org.
|
2002-02-11 07:58:31 -06:00
|
|
|
*
|
2008-04-11 07:59:35 -05:00
|
|
|
* OpenOffice.org is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU Lesser General Public License version 3
|
|
|
|
* only, as published by the Free Software Foundation.
|
2002-02-11 07:58:31 -06:00
|
|
|
*
|
2008-04-11 07:59:35 -05:00
|
|
|
* OpenOffice.org 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 version 3 for more details
|
|
|
|
* (a copy is included in the LICENSE file that accompanied this code).
|
2002-02-11 07:58:31 -06:00
|
|
|
*
|
2008-04-11 07:59:35 -05:00
|
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
|
|
* version 3 along with OpenOffice.org. If not, see
|
|
|
|
* <http://www.openoffice.org/license.html>
|
|
|
|
* for a copy of the LGPLv3 License.
|
2002-02-11 07:58:31 -06:00
|
|
|
*
|
|
|
|
************************************************************************/
|
|
|
|
|
|
|
|
#ifndef CONFIGMGR_VIEWNODE_HXX_
|
|
|
|
#define CONFIGMGR_VIEWNODE_HXX_
|
|
|
|
|
|
|
|
#include "treeimpl.hxx"
|
|
|
|
|
2007-11-23 07:49:54 -06:00
|
|
|
#include "valuenodeaccess.hxx"
|
|
|
|
#include "groupnodeaccess.hxx"
|
|
|
|
|
2002-02-11 07:58:31 -06:00
|
|
|
namespace configmgr
|
|
|
|
{
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
namespace configuration
|
|
|
|
{
|
|
|
|
class Name;
|
|
|
|
struct ElementTreeData;
|
|
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
namespace view
|
|
|
|
{
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
using configuration::Name;
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
struct Tree // is a tree fragment
|
|
|
|
{
|
|
|
|
typedef configuration::TreeImpl TreeData;
|
|
|
|
|
2007-11-23 07:49:54 -06:00
|
|
|
Tree(TreeData& _ref)
|
|
|
|
: m_addr(&_ref)
|
2002-02-11 07:58:31 -06:00
|
|
|
{}
|
|
|
|
|
|
|
|
// low-level access
|
|
|
|
// TreeData* operator->() const { return m_addr; }
|
|
|
|
|
|
|
|
TreeData* get_impl() const
|
|
|
|
{ return m_addr; }
|
|
|
|
|
|
|
|
private:
|
|
|
|
TreeData * m_addr; // has a TreeAddress or NodeAddress
|
|
|
|
};
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
struct Node
|
|
|
|
{
|
|
|
|
typedef configuration::NodeOffset NodeOffset;
|
|
|
|
typedef configuration::NodeData NodeData;
|
|
|
|
typedef configuration::NodeImpl * NodeAddress;
|
|
|
|
|
|
|
|
Node(Tree const& _tree, NodeData* _addr)
|
|
|
|
: m_tree(_tree), m_addr(_addr)
|
|
|
|
{}
|
|
|
|
|
2007-11-23 07:49:54 -06:00
|
|
|
Node(Tree::TreeData& _ref, NodeOffset _offs)
|
|
|
|
: m_tree(_ref), m_addr( _ref.nodeData(_offs))
|
2002-02-11 07:58:31 -06:00
|
|
|
{}
|
|
|
|
|
|
|
|
bool is() const { return m_addr != 0; }
|
|
|
|
|
|
|
|
Node getParent() const;
|
|
|
|
Node getNextSibling() const;
|
|
|
|
|
2007-11-23 07:49:54 -06:00
|
|
|
bool isSetNode() const { return is() && data().isSetNode(); }
|
|
|
|
bool isGroupNode() const { return is() && data().isGroupNode(); }
|
|
|
|
bool isValueNode() const { return is() && data().isValueElementNode(); }
|
2002-02-11 07:58:31 -06:00
|
|
|
|
|
|
|
// low-level access
|
|
|
|
// NodeAddress operator->() const { return &data().nodeImpl(); }
|
|
|
|
|
|
|
|
NodeData& data() const { return *m_addr; }
|
|
|
|
|
|
|
|
NodeAddress get_impl() const
|
|
|
|
{ return is() ? &data().nodeImpl() : NULL; }
|
|
|
|
|
|
|
|
NodeOffset get_offset() const
|
|
|
|
{ return is() ? m_tree.get_impl()->nodeOffset( this->data() ) : 0; }
|
|
|
|
|
|
|
|
Tree tree() const // has a Tree
|
|
|
|
{ return m_tree; }
|
|
|
|
|
2007-11-23 07:49:54 -06:00
|
|
|
data::NodeAccess getAccessRef() const; // has a NodeAccess
|
2002-02-11 07:58:31 -06:00
|
|
|
|
|
|
|
private:
|
|
|
|
Tree m_tree; // has a Tree + Accessor
|
|
|
|
NodeData* m_addr; // has a NodeAddress
|
|
|
|
};
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
struct ValueNode // has/is a Node
|
|
|
|
{
|
|
|
|
typedef configuration::ValueElementNodeImpl NodeType;
|
|
|
|
Node m_node;
|
|
|
|
|
|
|
|
explicit
|
|
|
|
ValueNode(Node const& _node)
|
|
|
|
: m_node(_node)
|
|
|
|
{}
|
|
|
|
|
|
|
|
bool is() const { return m_node.isValueNode(); }
|
|
|
|
|
|
|
|
// low-level access
|
2007-11-23 07:49:54 -06:00
|
|
|
// NodeType* operator->() const { return &m_node.data().valueElementImpl(); }
|
2002-02-11 07:58:31 -06:00
|
|
|
|
|
|
|
NodeType* get_impl() const
|
2007-11-23 07:49:54 -06:00
|
|
|
{ return is() ? &m_node.data().valueElementImpl() : NULL; }
|
2002-02-11 07:58:31 -06:00
|
|
|
|
|
|
|
Node node() const // has a Node
|
|
|
|
{ return m_node; }
|
|
|
|
|
|
|
|
Tree tree() const // has a Tree
|
|
|
|
{ return m_node.tree(); }
|
|
|
|
|
|
|
|
data::ValueNodeAccess getAccess() const; // has a NodeAccess
|
|
|
|
};
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
struct GroupNode // has/is a Node
|
|
|
|
{
|
|
|
|
typedef configuration::GroupNodeImpl NodeType;
|
|
|
|
Node m_node;
|
|
|
|
|
|
|
|
explicit
|
|
|
|
GroupNode(Node const& _node)
|
|
|
|
: m_node(_node)
|
|
|
|
{}
|
|
|
|
|
|
|
|
bool is() const { return m_node.isGroupNode(); }
|
|
|
|
|
|
|
|
Node findChild(configuration::Name const& _aName) const;
|
|
|
|
Node getFirstChild() const;
|
|
|
|
Node getNextChild(Node const& _aAfterNode) const;
|
|
|
|
|
2007-11-23 07:49:54 -06:00
|
|
|
// NodeType* operator->() const { return &m_node.data().groupImpl(); }
|
2002-02-11 07:58:31 -06:00
|
|
|
|
|
|
|
NodeType* get_impl() const
|
2007-11-23 07:49:54 -06:00
|
|
|
{ return is() ? &m_node.data().groupImpl() : NULL; }
|
2002-02-11 07:58:31 -06:00
|
|
|
|
|
|
|
Node node() const // has a Node
|
|
|
|
{ return m_node; }
|
|
|
|
|
|
|
|
Tree tree() const // has a Tree
|
|
|
|
{ return m_node.tree(); }
|
|
|
|
|
|
|
|
data::GroupNodeAccess getAccess() const; // has a NodeAccess
|
|
|
|
};
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
struct SetNode // has/is a Node
|
|
|
|
{
|
|
|
|
typedef configuration::SetNodeImpl NodeType;
|
|
|
|
typedef configuration::ElementTreeData Element;
|
|
|
|
|
|
|
|
Node m_node;
|
|
|
|
|
|
|
|
explicit
|
|
|
|
SetNode(Node const& _node)
|
|
|
|
: m_node(_node)
|
|
|
|
{}
|
|
|
|
|
|
|
|
bool is() const { return m_node.isSetNode(); }
|
|
|
|
|
2007-11-23 07:49:54 -06:00
|
|
|
// NodeType* operator->() const { return &m_node.data().setImpl(); }
|
2002-02-11 07:58:31 -06:00
|
|
|
|
|
|
|
NodeType* get_impl() const
|
2007-11-23 07:49:54 -06:00
|
|
|
{ return is() ? &m_node.data().setImpl() : 0; }
|
2002-02-11 07:58:31 -06:00
|
|
|
|
|
|
|
Node node() const // has a Node
|
|
|
|
{ return m_node; }
|
|
|
|
|
|
|
|
Tree tree() const // has a Tree
|
|
|
|
{ return m_node.tree(); }
|
|
|
|
|
|
|
|
data::SetNodeAccess getAccess() const; // has a NodeAccess
|
|
|
|
};
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
inline
|
|
|
|
Node getRootNode(Tree const & _aTree)
|
|
|
|
{
|
|
|
|
Tree::TreeData* pTreeData = _aTree.get_impl();
|
|
|
|
return Node(_aTree,pTreeData->nodeData(pTreeData->root_()));
|
|
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
inline
|
|
|
|
Name getSimpleRootName(Tree const & _aTree)
|
|
|
|
{
|
|
|
|
Tree::TreeData* pTreeData = _aTree.get_impl();
|
|
|
|
return pTreeData->getSimpleRootName();
|
|
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
inline
|
|
|
|
bool isValidNode(Node const & _aNode)
|
|
|
|
{
|
|
|
|
Tree::TreeData* pTreeData = _aNode.tree().get_impl();
|
|
|
|
return pTreeData->isValidNode(_aNode.get_offset());
|
|
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
inline
|
|
|
|
Name getSimpleNodeName(Node const & _aNode)
|
|
|
|
{
|
|
|
|
Tree::TreeData* pTreeData = _aNode.tree().get_impl();
|
|
|
|
return pTreeData->getSimpleNodeName(_aNode.get_offset());
|
|
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
extern
|
|
|
|
rtl::Reference< view::ViewStrategy > getViewBehavior(Tree const & _aTree);
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
#endif // CONFIGMGR_VIEWNODE_HXX_
|