diff options
Diffstat (limited to 'kpovmodeler/pmlistpattern.cpp')
-rw-r--r-- | kpovmodeler/pmlistpattern.cpp | 469 |
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 ); +} + |