summaryrefslogtreecommitdiffstats
path: root/kpovmodeler/pmlistpattern.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kpovmodeler/pmlistpattern.cpp')
-rw-r--r--kpovmodeler/pmlistpattern.cpp469
1 files changed, 469 insertions, 0 deletions
diff --git a/kpovmodeler/pmlistpattern.cpp b/kpovmodeler/pmlistpattern.cpp
new file mode 100644
index 00000000..299ab4fb
--- /dev/null
+++ b/kpovmodeler/pmlistpattern.cpp
@@ -0,0 +1,469 @@
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2001 by Luis Carvalho
+ email : lpassos@mail.telepac.pt
+**************************************************************************
+
+**************************************************************************
+* *
+* 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. *
+* *
+**************************************************************************/
+
+
+#include "pmlistpattern.h"
+
+#include "pmxmlhelper.h"
+#include "pmlistpatternedit.h"
+#include "pmcompositeobject.h"
+#include "pmmemento.h"
+#include "pmenumproperty.h"
+
+#include <klocale.h>
+
+PMDefinePropertyClass( PMListPattern, PMListPatternProperty );
+PMDefineEnumPropertyClass( PMListPattern, PMListPattern::PMListType,
+ PMListTypeProperty );
+
+const PMVector brickSizeDefault = PMVector( 8, 6, 4.5 );
+const double mortarDefault = 0.5;
+const double depthDefault = 0;
+
+PMMetaObject* PMListPattern::s_pMetaObject = 0;
+PMMetaObject* PMColorList::s_pMetaObject = 0;
+PMObject* createNewColorList( PMPart* part )
+{
+ return new PMColorList( part );
+}
+PMMetaObject* PMDensityList::s_pMetaObject = 0;
+PMObject* createNewDensityList( PMPart* part )
+{
+ return new PMDensityList( part );
+}
+PMMetaObject* PMNormalList::s_pMetaObject = 0;
+PMObject* createNewNormalList( PMPart* part )
+{
+ return new PMNormalList( part );
+}
+PMMetaObject* PMPigmentList::s_pMetaObject = 0;
+PMObject* createNewPigmentList( PMPart* part )
+{
+ return new PMPigmentList( part );
+}
+PMMetaObject* PMTextureList::s_pMetaObject = 0;
+PMObject* createNewTextureList( PMPart* part )
+{
+ return new PMTextureList( part );
+}
+
+PMListPattern::PMListPattern( PMPart* part )
+ : Base( part )
+{
+ m_listType = ListPatternChecker;
+ m_brickSize = brickSizeDefault;
+ m_mortar = mortarDefault;
+}
+
+PMListPattern::PMListPattern( const PMListPattern& p )
+ : Base( p )
+{
+ m_listType = p.m_listType;
+ m_brickSize = p.m_brickSize;
+ m_mortar = p.m_mortar;
+}
+
+PMListPattern::~PMListPattern( )
+{
+}
+
+void PMListPattern::serialize( QDomElement& e, QDomDocument& doc ) const
+{
+ switch( m_listType )
+ {
+ case ListPatternBrick:
+ e.setAttribute( "listtype", "brick" );
+ break;
+ case ListPatternChecker:
+ e.setAttribute( "listtype", "checker" );
+ break;
+ case ListPatternHexagon:
+ e.setAttribute( "listtype", "hexagon" );
+ break;
+ };
+ e.setAttribute( "bricksize", m_brickSize.serializeXML( ) );
+ e.setAttribute( "mortar", m_mortar );
+ Base::serialize( e, doc );
+}
+
+void PMListPattern::readAttributes( const PMXMLHelper& h )
+{
+ QString str = h.stringAttribute( "listtype", "checker" );
+ if( str == "checker" )
+ m_listType = ListPatternChecker;
+ else if( str == "brick" )
+ m_listType = ListPatternBrick;
+ else
+ m_listType = ListPatternHexagon;
+ m_brickSize = h.vectorAttribute( "bricksize", brickSizeDefault );
+ m_mortar = h.doubleAttribute( "mortar", mortarDefault );
+ Base::readAttributes( h );
+}
+
+PMMetaObject* PMListPattern::metaObject( ) const
+{
+ if( !s_pMetaObject )
+ {
+ s_pMetaObject = new PMMetaObject( "ListPattern", Base::metaObject( ) );
+
+ PMListTypeProperty* p = new PMListTypeProperty(
+ "listType", &PMListPattern::setListType,
+ &PMListPattern::listType );
+ p->addEnumValue( QString( "Checker" ), ListPatternChecker );
+ p->addEnumValue( QString( "Brick" ), ListPatternBrick );
+ p->addEnumValue( QString( "Hexagon" ), ListPatternHexagon );
+ s_pMetaObject->addProperty( p );
+
+ s_pMetaObject->addProperty(
+ new PMListPatternProperty( "brickSize", &PMListPattern::setBrickSize,
+ &PMListPattern::brickSize ) );
+ s_pMetaObject->addProperty(
+ new PMListPatternProperty( "mortar", &PMListPattern::setMortar,
+ &PMListPattern::mortar ) );
+ }
+ return s_pMetaObject;
+}
+
+void PMListPattern::cleanUp( ) const
+{
+ if( s_pMetaObject )
+ {
+ delete s_pMetaObject;
+ s_pMetaObject = 0;
+ }
+ Base::cleanUp( );
+}
+
+void PMListPattern::setListType( PMListType l )
+{
+ if( l != m_listType )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMListTypeID, m_listType );
+ m_listType = l;
+ }
+}
+
+void PMListPattern::setBrickSize( const PMVector& n )
+{
+ if( n != m_brickSize )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMBrickSizeID, m_brickSize );
+ m_brickSize = n;
+ }
+}
+
+void PMListPattern::setMortar( double n )
+{
+ if( n != m_mortar )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMMortarID, m_mortar );
+ m_mortar = n;
+ }
+}
+
+PMDialogEditBase* PMListPattern::editWidget( QWidget* parent ) const
+{
+ return new PMListPatternEdit( parent );
+}
+
+void PMListPattern::restoreMemento( PMMemento* s )
+{
+ PMMementoDataIterator it( s );
+ PMMementoData* data;
+
+ for( ; it.current( ); ++it )
+ {
+ data = it.current( );
+ if( data->objectType( ) == s_pMetaObject )
+ {
+ switch( data->valueID( ) )
+ {
+ case PMListTypeID:
+ setListType( ( PMListType ) data->intData( ) );
+ break;
+ case PMBrickSizeID:
+ setBrickSize( data->vectorData( ) );
+ break;
+ case PMMortarID:
+ setMortar( data->doubleData( ) );
+ break;
+ default:
+ kdError( PMArea ) << "Wrong ID in PMListPattern::restoreMemento\n";
+ break;
+ }
+ }
+ }
+ Base::restoreMemento( s );
+}
+
+
+PMTextureList::PMTextureList( PMPart* part )
+ : Base( part )
+{
+}
+
+PMTextureList::PMTextureList( const PMTextureList& l )
+ : Base( l )
+{
+}
+
+PMTextureList::~PMTextureList( )
+{
+}
+
+PMMetaObject* PMTextureList::metaObject( ) const
+{
+ if( !s_pMetaObject )
+ {
+ s_pMetaObject = new PMMetaObject( "TextureList", Base::metaObject( ),
+ createNewTextureList );
+ }
+ return s_pMetaObject;
+}
+
+void PMTextureList::cleanUp( ) const
+{
+ if( s_pMetaObject )
+ {
+ delete s_pMetaObject;
+ s_pMetaObject = 0;
+ }
+ Base::cleanUp( );
+}
+
+QString PMTextureList::description( ) const
+{
+ return i18n( "texture list" );
+}
+
+PMPigmentList::PMPigmentList( PMPart* part )
+ : Base( part )
+{
+}
+
+PMPigmentList::PMPigmentList( const PMPigmentList& l )
+ : Base( l )
+{
+}
+
+PMPigmentList::~PMPigmentList( )
+{
+}
+
+PMMetaObject* PMPigmentList::metaObject( ) const
+{
+ if( !s_pMetaObject )
+ {
+ s_pMetaObject = new PMMetaObject( "PigmentList", Base::metaObject( ),
+ createNewPigmentList );
+ }
+ return s_pMetaObject;
+}
+
+void PMPigmentList::cleanUp( ) const
+{
+ if( s_pMetaObject )
+ {
+ delete s_pMetaObject;
+ s_pMetaObject = 0;
+ }
+ Base::cleanUp( );
+}
+
+QString PMPigmentList::description( ) const
+{
+ return i18n( "pigment list" );
+}
+
+PMColorList::PMColorList( PMPart* part )
+ : Base( part )
+{
+}
+
+PMColorList::PMColorList( const PMColorList& l )
+ : Base( l )
+{
+}
+
+PMColorList::~PMColorList( )
+{
+}
+
+PMMetaObject* PMColorList::metaObject( ) const
+{
+ if( !s_pMetaObject )
+ {
+ s_pMetaObject = new PMMetaObject( "ColorList", Base::metaObject( ),
+ createNewColorList );
+ }
+ return s_pMetaObject;
+}
+
+void PMColorList::cleanUp( ) const
+{
+ if( s_pMetaObject )
+ {
+ delete s_pMetaObject;
+ s_pMetaObject = 0;
+ }
+ Base::cleanUp( );
+}
+
+QString PMColorList::description( ) const
+{
+ return i18n( "color list" );
+}
+
+PMDensityList::PMDensityList( PMPart* part )
+ : Base( part )
+{
+}
+
+PMDensityList::PMDensityList( const PMDensityList& l )
+ : Base( l )
+{
+}
+
+PMDensityList::~PMDensityList( )
+{
+}
+
+PMMetaObject* PMDensityList::metaObject( ) const
+{
+ if( !s_pMetaObject )
+ {
+ s_pMetaObject = new PMMetaObject( "DensityList", Base::metaObject( ),
+ createNewDensityList );
+ }
+ return s_pMetaObject;
+}
+
+void PMDensityList::cleanUp( ) const
+{
+ if( s_pMetaObject )
+ {
+ delete s_pMetaObject;
+ s_pMetaObject = 0;
+ }
+ Base::cleanUp( );
+}
+
+QString PMDensityList::description( ) const
+{
+ return i18n( "density list" );
+}
+
+PMDefinePropertyClass( PMNormalList, PMNormalListProperty );
+
+PMNormalList::PMNormalList( PMPart* part )
+ : Base( part )
+{
+ m_depth = depthDefault;
+}
+
+PMNormalList::PMNormalList( const PMNormalList& l )
+ : Base( l )
+{
+ m_depth = depthDefault;
+}
+
+PMNormalList::~PMNormalList( )
+{
+}
+
+PMMetaObject* PMNormalList::metaObject( ) const
+{
+ if( !s_pMetaObject )
+ {
+ s_pMetaObject = new PMMetaObject( "NormalList", Base::metaObject( ),
+ createNewNormalList );
+ s_pMetaObject->addProperty(
+ new PMNormalListProperty( "depth", &PMNormalList::setDepth,
+ &PMNormalList::depth ) );
+ }
+ return s_pMetaObject;
+}
+
+void PMNormalList::cleanUp( ) const
+{
+ if( s_pMetaObject )
+ {
+ delete s_pMetaObject;
+ s_pMetaObject = 0;
+ }
+ Base::cleanUp( );
+}
+
+QString PMNormalList::description( ) const
+{
+ return i18n( "normal list" );
+}
+
+void PMNormalList::setDepth( double d )
+{
+ if( d != m_depth )
+ {
+ if( m_pMemento )
+ m_pMemento->addData( s_pMetaObject, PMDepthID, m_depth );
+ m_depth = d;
+ }
+}
+
+void PMNormalList::restoreMemento( PMMemento* s )
+{
+ PMMementoDataIterator it( s );
+ PMMementoData* data;
+
+ for( ; it.current( ); ++it )
+ {
+ data = it.current( );
+ if( data->objectType( ) == s_pMetaObject )
+ {
+ switch( data->valueID( ) )
+ {
+ case PMDepthID:
+ setDepth( data->doubleData( ) );
+ break;
+ default:
+ kdError( PMArea ) << "Wrong ID in PMNormalList::restoreMemento\n";
+ break;
+ }
+ }
+ }
+ Base::restoreMemento( s );
+}
+
+void PMNormalList::serialize( QDomElement& e, QDomDocument& doc ) const
+{
+ e.setAttribute( "depth", m_depth );
+ Base::serialize( e, doc );
+}
+
+void PMNormalList::readAttributes( const PMXMLHelper& h )
+{
+ m_depth = h.doubleAttribute( "depth", depthDefault );
+ Base::readAttributes( h );
+}
+
+PMDialogEditBase* PMNormalList::editWidget( QWidget* parent ) const
+{
+ return new PMListPatternEdit( parent );
+}
+