summaryrefslogtreecommitdiffstats
path: root/kpovmodeler/pmcompositeobject.h
diff options
context:
space:
mode:
Diffstat (limited to 'kpovmodeler/pmcompositeobject.h')
-rw-r--r--kpovmodeler/pmcompositeobject.h198
1 files changed, 198 insertions, 0 deletions
diff --git a/kpovmodeler/pmcompositeobject.h b/kpovmodeler/pmcompositeobject.h
new file mode 100644
index 00000000..c2e2da58
--- /dev/null
+++ b/kpovmodeler/pmcompositeobject.h
@@ -0,0 +1,198 @@
+//-*-C++-*-
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2000-2001 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 PMCOMPOBJECT_H
+#define PMCOMPOBJECT_H
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "pmobject.h"
+
+/**
+ * Base class for all povray objects that can have child objects.
+ *
+ * Used pattern: Composite
+ */
+class PMCompositeObject : public PMObject
+{
+ typedef PMObject Base;
+public:
+ /**
+ * Creates an empty PMCompositeObject
+ */
+ PMCompositeObject( PMPart* part );
+ /**
+ * Copy constructor
+ */
+ PMCompositeObject( const PMCompositeObject& o );
+ /**
+ * Deletes the object and all children.
+ */
+ virtual ~PMCompositeObject( );
+
+ /** */
+ virtual PMMetaObject* metaObject( ) const;
+ /** */
+ virtual void cleanUp( ) const;
+
+ /**
+ * Returns a pointer to the first child.
+ */
+ virtual PMObject* firstChild( ) const { return m_pFirstChild; }
+ /**
+ * Returns a pointer to the last child.
+ */
+ virtual PMObject* lastChild( ) const { return m_pLastChild; }
+ /**
+ * Returns a pointer to the child object at position index,
+ * or null if the index is out of range.
+ */
+ virtual PMObject* childAt( uint index ) const;
+
+ /**
+ * Returns true if the object contains the child object o
+ */
+ virtual bool containsChild( PMObject* o ) const
+ { return ( ( PMObject* )this == o->parent( ) ); }
+ /**
+ * Returns the index of the object or -1 if not found
+ */
+ virtual int findChild( PMObject* o );
+
+ /**
+ * Inserts the object as child at index i.
+ * If i is -1, the object is appended.
+ * Returns true if successful.
+ */
+ virtual bool insertChild( PMObject* o, int i );
+ /**
+ * Inserts the object as child after the child object after
+ */
+ virtual bool insertChildAfter( PMObject* object, PMObject* after );
+ /**
+ * Inserts the object as child before the child object before
+ */
+ virtual bool insertChildBefore( PMObject* object, PMObject* before );
+ /**
+ * Appends the object as child. Returns true if successful.
+ */
+ virtual bool appendChild( PMObject* );
+ /**
+ * Returns the number of children.
+ */
+ virtual int countChildren( ) const;
+ /**
+ * Removes a child object. Does not delete it!
+ * Returns true if successful.*/
+ virtual bool takeChild( PMObject* o );
+ /**
+ * Removes a child object at index i. Does not delete it!
+ */
+ virtual bool takeChild( uint i );
+
+ /** */
+ virtual void serialize( QDomElement& e, QDomDocument& doc ) const;
+
+ /**
+ * Returns the number of selected child items. All selected items in
+ * any depth are counted
+ */
+ virtual int selectedChildren( ) const { return m_selectedChildren; }
+ /**
+ * Deselects recursively all child objects
+ */
+ virtual void deselectChildren( );
+
+ /**
+ * Returns the view structure of the object.
+ *
+ * If the view structure has changed since the last call, the
+ * structure is created or updated, or the default view structure
+ * is used.
+ *
+ * If the default view structure can't be used, this function calls
+ * createViewStructure, which has to create a non default view structure.
+ */
+ virtual PMViewStructure* viewStructure( );
+protected:
+ /**
+ * Adds num to the number of selected objects in this object and all
+ * parent objects. num can be negative.
+ */
+ virtual void adjustSelectedChildren( int num );
+
+ /**
+ * Returns the default view structure for the object. This view
+ * structure can be shared between all objects of this type.
+ *
+ * Only the data can be shared, NOT the pointer!!!
+ *
+ * The default view structure has to be created when this function
+ * is called first.
+ */
+ virtual PMViewStructure* defaultViewStructure( ) const { return 0; }
+ /**
+ * Returns a key that represents the view structure parameter.
+ *
+ * Each time a view structure parameter is changed (=detail level),
+ * this key has to be incremented.
+ */
+ virtual int viewStructureParameterKey( ) const { return 0; }
+
+ /**
+ * Returns true if the objects attributes are default and the default
+ * view structure can be used
+ */
+ virtual bool isDefault( ) { return false; }
+ /**
+ * The object has to create or update a non default view structure
+ */
+ virtual void createViewStructure( ) { };
+ /**
+ * Calls setViewStructureChanged( ) for the memento (if one has been created)
+ * and marks the current view structure as outdated.
+ */
+ void setViewStructureChanged( );
+ /**
+ * The view structure.
+ */
+ PMViewStructure* m_pViewStructure;
+private:
+ /**
+ * Pointer to the first child
+ */
+ PMObject* m_pFirstChild;
+ /**
+ * Pointer to the last child
+ */
+ PMObject* m_pLastChild;
+ /**
+ * number of selected child items.
+ */
+ int m_selectedChildren;
+ /**
+ * The modify flag for the view structure
+ */
+ bool m_bViewStructureChanged;
+ static PMMetaObject* s_pMetaObject;
+};
+
+#endif