From ce599e4f9f94b4eb00c1b5edb85bce5431ab3df2 Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdeedu@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kig/misc/object_hierarchy.h | 111 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 kig/misc/object_hierarchy.h (limited to 'kig/misc/object_hierarchy.h') diff --git a/kig/misc/object_hierarchy.h b/kig/misc/object_hierarchy.h new file mode 100644 index 00000000..3133dc7c --- /dev/null +++ b/kig/misc/object_hierarchy.h @@ -0,0 +1,111 @@ +// Copyright (C) 2003 Dominique Devriese + +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. + +// This program 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 General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +// 02110-1301, USA. + +#ifndef KIG_MISC_OBJECT_HIERARCHY_H +#define KIG_MISC_OBJECT_HIERARCHY_H + +#include "../objects/common.h" + +#include +#include +#include + +class ObjectImpType; +class ArgsParser; + +class ObjectHierarchy +{ +public: + class Node; +private: + std::vector mnodes; + uint mnumberofargs; + uint mnumberofresults; + std::vector margrequirements; + std::vector musetexts; + std::vector mselectstatements; + + // these two are really part of the constructor... + int visit( const ObjectCalcer* o, std::map&, + bool needed, bool neededatend = false); + int storeObject( const ObjectCalcer*, const std::vector& po, std::vector& pl, + std::map& seenmap ); + + friend bool operator==( const ObjectHierarchy& lhs, const ObjectHierarchy& rhs ); + + void init( const std::vector& from, const std::vector& to ); + + /** + * this constructor is private since it should be used only by the static + * constructor buildSafeObjectHierarchy + * + * \see ObjectHierarchy::buildSafeObjectHierarchy + */ + ObjectHierarchy(); + +public: + ObjectHierarchy( const ObjectCalcer* from, const ObjectCalcer* to ); + ObjectHierarchy( const std::vector& from, const ObjectCalcer* to ); + ObjectHierarchy( const std::vector& from, const std::vector& to ); + ObjectHierarchy( const ObjectHierarchy& h ); + ~ObjectHierarchy(); + + /** + * this creates a new ObjectHierarchy, that takes a.size() less + * arguments, but uses copies of the ObjectImp's in \p a instead.. + */ + ObjectHierarchy withFixedArgs( const Args& a ) const; + + std::vector calc( const Args& a, const KigDocument& doc ) const; + + /** + * saves the ObjectHierarchy data in children xml tags of \p parent .. + */ + void serialize( QDomElement& parent, QDomDocument& doc ) const; + /** + * Deserialize the ObjectHierarchy data from the xml element \p parent .. + * Since this operation can fail for some reasons, we provide it as a + * static to return 0 in case of error. + */ + static ObjectHierarchy* buildSafeObjectHierarchy( const QDomElement& parent, QString& error ); +// ObjectHierarchy( const QDomElement& parent ); + + /** + * build a set of objects that interdepend according to this + * ObjectHierarchy.. Only the result objects are returned. Helper + * objects that connect the given objects with the returned objects, + * can only be found by following the returned objects' parents() + * methods.. + */ + std::vector buildObjects( const std::vector& os, const KigDocument& ) const; + + ArgsParser argParser() const; + + uint numberOfArgs() const { return mnumberofargs; } + uint numberOfResults() const { return mnumberofresults; } + + const ObjectImpType* idOfLastResult() const; + + bool resultDoesNotDependOnGiven() const; + bool allGivenObjectsUsed() const; + + ObjectHierarchy transformFinalObject( const Transformation& t ) const; +}; + +bool operator==( const ObjectHierarchy& lhs, const ObjectHierarchy& rhs ); + +#endif -- cgit v1.2.1