You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdegraphics/kpovmodeler/pmprototypemanager.h

150 lines
4.3 KiB

//-*-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 <tqdict.h>
#include <tqmap.h>
#include <tqvaluelist.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 TQString& d, const TQString& 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;
TQString description;
TQString 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 TQString& className,
const TQString& description,
const TQString& pixmap );
/**
* Returns an iterator to the list of available objects
*/
TQPtrListIterator<PMMetaObject> prototypeIterator( ) const;
/**
* Returns an iterator to the list of available declaration types
*/
const TQValueList<PMDeclareDescription>& declarationTypes( ) const;
/**
* Returns a new PMObject by class name
*/
PMObject* newObject( const TQString& name ) const;
/**
* Returns the meta object by class name or 0 if this class does
* not exist.
* @see PMMetaObject
*/
PMMetaObject* metaObject( const TQString& name ) const;
/**
* Returns true if the class exists
*/
bool existsClass( const TQString& name ) const
{
return metaObject( name );
}
/**
* Returns true if the second class is a base class for
* the first class
*/
bool isA( const TQString& className, const TQString& baseClassName ) const;
/**
* Returns true if the second class is a base class for
* the first class
*/
bool isA( PMMetaObject* c, const TQString& baseClassName ) const;
/**
* Returns the real class if only the lower case version is know.
* Used by the xml parser
*/
TQString className( const TQString& lowercase ) const;
/**
* Returns a pointer to the part
*/
PMPart* part( ) const { return m_pPart; }
private:
TQPtrList<PMMetaObject> m_prototypes;
TQDict<PMMetaObject> m_metaDict;
TQMap<TQString, TQString> m_lowerCaseDict;
TQValueList<PMDeclareDescription> m_declareDescriptions;
PMPart* m_pPart;
};
#endif