diff options
Diffstat (limited to 'configmgr/source/inc/valuenode.hxx')
-rw-r--r-- | configmgr/source/inc/valuenode.hxx | 296 |
1 files changed, 0 insertions, 296 deletions
diff --git a/configmgr/source/inc/valuenode.hxx b/configmgr/source/inc/valuenode.hxx deleted file mode 100644 index 6ab8cb96f2d6..000000000000 --- a/configmgr/source/inc/valuenode.hxx +++ /dev/null @@ -1,296 +0,0 @@ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * $RCSfile: valuenode.hxx,v $ - * $Revision: 1.32 $ - * - * This file is part of OpenOffice.org. - * - * 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. - * - * 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). - * - * 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. - * - ************************************************************************/ - -#ifndef _CONFIGMGR_TREE_VALUENODE_HXX -#define _CONFIGMGR_TREE_VALUENODE_HXX - -#include "attributes.hxx" -#include "anypair.hxx" -#include <com/sun/star/uno/Any.h> -#include <rtl/ustring.hxx> - -#include <string.h> -#ifndef INCLUDED_MEMORY -#include <memory> -#define INCLUDED_MEMORY -#endif - -namespace configmgr -{ - - namespace css = com::sun::star; - namespace uno = css::uno; - - class INode; - class ISubtree; - class ValueNode; - - // helper (tag) class - namespace treeop { struct NoChildCopy {}; struct DeepChildCopy {}; enum { ALL_LEVELS = -1 }; } - //========================================================================== - //= Visitors - //========================================================================== - struct NodeAction - { - virtual void handle(ValueNode const&) = 0; - virtual void handle(ISubtree const&) = 0; - - void applyToNode(INode const&); - void applyToChildren(ISubtree const&); - protected: - virtual ~NodeAction() {} - }; - - struct NodeModification - { - virtual void handle(ValueNode&) = 0; - virtual void handle(ISubtree&) = 0; - - void applyToNode(INode&); - void applyToChildren(ISubtree&); - protected: - virtual ~NodeModification() {} - }; - - class INode - { - rtl::OUString m_aName; - node::Attributes m_aAttributes; - - protected: - INode(){} - - void markAsDefault(bool _bDefault = true) - { - m_aAttributes.markAsDefault(_bDefault); - } - public: - explicit - INode(rtl::OUString const& aName, node::Attributes); - - virtual ~INode(); - - virtual std::auto_ptr<INode> clone() const = 0; - public: - - const rtl::OUString& getName() const { return m_aName; } - node::Attributes getAttributes() const { return m_aAttributes; } - - bool isDefault() const { return m_aAttributes.isDefault(); } - bool isLocalized() const { return m_aAttributes.isLocalized(); } - - void modifyState(node::State _eNewState); - void modifyAccess(node::Access _aAccessLevel); - void markMandatory(); - void markRemovable(); - void promoteAccessToDefault(); - - // to be used with caution. If the node is referenced from somewhere else under it's old name, - // you may have problems with this inconsistence - void setName(const rtl::OUString& _rNewName) { m_aName = _rNewName; } - - virtual ValueNode* asValueNode(); - virtual ValueNode const* asValueNode() const; - virtual ISubtree* asISubtree(); - virtual ISubtree const* asISubtree() const; - - // double dispatch support - virtual void dispatch(NodeAction&) const = 0; - virtual void dispatch(NodeModification&) = 0; - }; - -// ----------------------------------------------------------------------------- - - //========================================================================== - //= ISubtree - //========================================================================== - class ISubtree : public INode - { - sal_Int16 m_nLevel; /// determines if everything is read - sal_Int16 m_nDefaultLevels; /// determines if defaults are read - rtl::OUString m_sId; - rtl::OUString m_sTemplateName; /// path of the template for child instantiation - rtl::OUString m_sTemplateModule; /// module of the template for child instantiation - - virtual INode* doGetChild(rtl::OUString const& name) const = 0; - - protected: - ISubtree():m_nLevel(0){} - - ISubtree(ISubtree const& other) - :INode(other) - ,m_nLevel(other.m_nLevel) - ,m_nDefaultLevels(other.m_nDefaultLevels) - ,m_sId() // do not copy ID while cloning ! - ,m_sTemplateName(other.m_sTemplateName) - ,m_sTemplateModule(other.m_sTemplateModule) - {} - - public: - // Ctor for group trees - ISubtree(const rtl::OUString& aName, const node::Attributes& _rAttrs) - :INode(aName, _rAttrs) - ,m_nLevel(0) - ,m_nDefaultLevels(0) - {} - - // Ctor for set trees - ISubtree(const rtl::OUString& aName, - const rtl::OUString& _rTemplateName, - const rtl::OUString& _rTemplateModule, - const node::Attributes& _rAttrs) - :INode(aName, _rAttrs) - ,m_nLevel(0) - ,m_nDefaultLevels(0) - ,m_sTemplateName(_rTemplateName) - ,m_sTemplateModule(_rTemplateModule){} - - INode* getChild(rtl::OUString const& name) { return doGetChild(name); } - INode const* getChild(rtl::OUString const& name) const { return doGetChild(name); } - - ISubtree* asISubtree(); - ISubtree const* asISubtree() const; - - using INode::markAsDefault; - - sal_Int16 getLevel() const { return m_nLevel; } - - void setLevels(sal_Int16 _nLevel,sal_Int16 _nDefaultsLevel); - - bool isSetNode() const { return m_sTemplateName.getLength() != 0; } - - void makeSetNode(rtl::OUString const& _sTemplateName, rtl::OUString const& _sTemplateModule) - { m_sTemplateName = _sTemplateName; m_sTemplateModule = _sTemplateModule; } - - rtl::OUString const& getElementTemplateName() const { return m_sTemplateName; } - rtl::OUString const& getElementTemplateModule() const { return m_sTemplateModule; } - - virtual INode* addChild(std::auto_ptr<INode> node) =0; // takes ownership - virtual ::std::auto_ptr<INode> removeChild(rtl::OUString const& name) =0; // releases ownership - - // Iteration support, stop if (action returns true) - virtual void forEachChild(NodeAction& anAction) const = 0; - virtual void forEachChild(NodeModification& anAction) = 0; - - // double dispatch support - virtual void dispatch(NodeAction& anAction) const { anAction.handle(*this); } - virtual void dispatch(NodeModification& anAction) { anAction.handle(*this); } - }; - - //========================================================================== - //= ValueNode - //========================================================================== - class ValueNode : public INode - { - AnyPair m_aValuePair; - // uno::Type m_aType; - // uno::Any m_aValue; - // uno::Any m_aDefaultValue; - - public: - //ValueNode(){} - - //explicit ValueNode(node::Attributes _aAttrs):INode(_aAttrs){} - - /* - ValueNode(rtl::OUString const& aName, node::Attributes _aAttrs) - : INode(aName, _aAttrs) - , m_aValuePair() - {} - */ - ValueNode(rtl::OUString const& aName,uno::Type const& aType, node::Attributes _aAttrs) - : INode(aName, _aAttrs) - , m_aValuePair(aType) - { - } - ValueNode(rtl::OUString const& aName,uno::Any const& anAny, node::Attributes _aAttrs) - : INode(aName, _aAttrs) - , m_aValuePair(anAny, selectMember(_aAttrs.isDefault())) - { - } - ValueNode(rtl::OUString const& aName,uno::Any const& anAny,uno::Any const& aDefault, node::Attributes _aAttrs) - : INode(aName, _aAttrs) - , m_aValuePair(anAny, aDefault) - { - } - - bool isEmpty() const {return m_aValuePair.isEmpty();} - bool isValid() const {return !m_aValuePair.isEmpty();} - - bool isNull() const {return m_aValuePair.isNull();} - bool hasUsableDefault() const {return getAttributes().isNullable() || m_aValuePair.hasSecond();} - - uno::Type getValueType() const {return m_aValuePair.getValueType();} - uno::Any getValue() const {return m_aValuePair.getValue( selectMember(this->isDefault()) );} - uno::Any getUserValue() const {return m_aValuePair.getFirst();} - uno::Any getDefault() const {return m_aValuePair.getSecond();} - - bool setValueType(uno::Type const& _aType); - bool setValue(uno::Any const& _aValue); - void setDefault(); - - bool changeDefault(uno::Any const& _aValue); - void promoteToDefault(); - - virtual std::auto_ptr<INode> clone() const; - - ValueNode* asValueNode(); - ValueNode const* asValueNode() const; - // double dispatch support - virtual void dispatch(NodeAction& anAction) const { anAction.handle(*this); } - virtual void dispatch(NodeModification& anAction) { anAction.handle(*this); } - - private: - static AnyPair::SelectMember selectValue() { return AnyPair::SELECT_FIRST; } - static AnyPair::SelectMember selectDeflt() { return AnyPair::SELECT_SECOND; } - static AnyPair::SelectMember selectMember(bool bDeflt) - { return bDeflt ? AnyPair::SELECT_SECOND : AnyPair::SELECT_FIRST; } - }; - //========================================================================== - - extern bool isLocalizedValueSet(ISubtree const& _aSubtree); - - //========================================================================== - //= inlines - //========================================================================== - inline void NodeAction::applyToNode(INode const& aNode) - { aNode.dispatch(*this); } - inline void NodeAction::applyToChildren(ISubtree const& aSubtree) - { aSubtree.forEachChild(*this); } - - inline void NodeModification::applyToNode(INode& aNode) - { aNode.dispatch(*this); } - inline void NodeModification::applyToChildren(ISubtree& aSubtree) - { aSubtree.forEachChild(*this); } - - -} // namespace configmgr - -#endif |