|
|
|
/*
|
|
|
|
**************************************************************************
|
|
|
|
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 <tdelocale.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( TQDomElement& e, TQDomDocument& 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 )
|
|
|
|
{
|
|
|
|
TQString 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( TQString( "Checker" ), ListPatternChecker );
|
|
|
|
p->addEnumValue( TQString( "Brick" ), ListPatternBrick );
|
|
|
|
p->addEnumValue( TQString( "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( TQWidget* 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( );
|
|
|
|
}
|
|
|
|
|
|
|
|
TQString 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( );
|
|
|
|
}
|
|
|
|
|
|
|
|
TQString 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( );
|
|
|
|
}
|
|
|
|
|
|
|
|
TQString 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( );
|
|
|
|
}
|
|
|
|
|
|
|
|
TQString 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( );
|
|
|
|
}
|
|
|
|
|
|
|
|
TQString 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( TQDomElement& e, TQDomDocument& 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( TQWidget* parent ) const
|
|
|
|
{
|
|
|
|
return new PMListPatternEdit( parent );
|
|
|
|
}
|
|
|
|
|