diff options
Diffstat (limited to 'kpovmodeler/pmprototypemanager.h')
-rw-r--r-- | kpovmodeler/pmprototypemanager.h | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/kpovmodeler/pmprototypemanager.h b/kpovmodeler/pmprototypemanager.h new file mode 100644 index 00000000..025b8213 --- /dev/null +++ b/kpovmodeler/pmprototypemanager.h @@ -0,0 +1,149 @@ +//-*-C++-*- +/* +************************************************************************** + description + -------------------- + copyright : (C) 2000-2002 by Andreas Zehender + email : zehender@kde.org +************************************************************************** + +************************************************************************** +* * +* 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. * +* * +**************************************************************************/ + + +#ifndef PMPTMANAGER_H +#define PMPTMANAGER_H + +#include "pmobject.h" +#include <qdict.h> +#include <qmap.h> +#include <qvaluelist.h> + +class PMPart; + +/** + * Description class for declarations types, used by @ref PMPrototypeManager + * and @ref PMDeclare + */ +class PMDeclareDescription +{ +public: + PMDeclareDescription( ) { } + PMDeclareDescription( const PMDeclareDescription& d ) + { + type = d.type; + description = d.description; + pixmap = d.pixmap; + } + PMDeclareDescription( PMMetaObject* t, const QString& d, const QString& p ) + { + type = t; + description = d; + pixmap = p; + } + PMDeclareDescription& operator=( const PMDeclareDescription& d ) + { + type = d.type; + description = d.description; + pixmap = d.pixmap; + return *this; + } + PMMetaObject* type; + QString description; + QString pixmap; +}; + +/** + * Prototype manager for @ref PMObject. + * + * This class stores class and inheritance information for each + * available object type. + * + * Each @ref PMPart class holds one instance of this class. The + * available objects depend on the loaded plugins. + * + * Patterns: Prototype + */ +class PMPrototypeManager +{ +public: + /** + * Creates a prototype manager for the part. + */ + PMPrototypeManager( PMPart* part ); + /** + * Deletes the prototype manager + */ + ~PMPrototypeManager( ); + /** + * Adds the object to the list of prototypes. The prototype becomes + * the owner of the object and will be delete immediately by the + * prototype manager. + */ + void addPrototype( PMObject* obj ); + /** + * Adds a declaration type. Needed information is the class type, + * the @ref description( ) and the @ref pixmap( ) + */ + void addDeclarationType( const QString& className, + const QString& description, + const QString& pixmap ); + /** + * Returns an iterator to the list of available objects + */ + QPtrListIterator<PMMetaObject> prototypeIterator( ) const; + /** + * Returns an iterator to the list of available declaration types + */ + const QValueList<PMDeclareDescription>& declarationTypes( ) const; + /** + * Returns a new PMObject by class name + */ + PMObject* newObject( const QString& name ) const; + /** + * Returns the meta object by class name or 0 if this class does + * not exist. + * @see PMMetaObject + */ + PMMetaObject* metaObject( const QString& name ) const; + /** + * Returns true if the class exists + */ + bool existsClass( const QString& name ) const + { + return metaObject( name ); + } + /** + * Returns true if the second class is a base class for + * the first class + */ + bool isA( const QString& className, const QString& baseClassName ) const; + /** + * Returns true if the second class is a base class for + * the first class + */ + bool isA( PMMetaObject* c, const QString& baseClassName ) const; + /** + * Returns the real class if only the lower case version is know. + * Used by the xml parser + */ + QString className( const QString& lowercase ) const; + /** + * Returns a pointer to the part + */ + PMPart* part( ) const { return m_pPart; } + +private: + QPtrList<PMMetaObject> m_prototypes; + QDict<PMMetaObject> m_metaDict; + QMap<QString, QString> m_lowerCaseDict; + QValueList<PMDeclareDescription> m_declareDescriptions; + PMPart* m_pPart; +}; +#endif |