|
|
|
/*
|
|
|
|
**************************************************************************
|
|
|
|
description
|
|
|
|
--------------------
|
|
|
|
copyright : (C) 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. *
|
|
|
|
* *
|
|
|
|
**************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
#include "pmtexturemapedit.h"
|
|
|
|
#include "pmtexturemap.h"
|
|
|
|
#include "pmlineedits.h"
|
|
|
|
|
|
|
|
#include <layout.h>
|
|
|
|
#include <tqlabel.h>
|
|
|
|
#include <klocale.h>
|
|
|
|
#include <kmessagebox.h>
|
|
|
|
|
|
|
|
|
|
|
|
PMTextureMapEdit::PMTextureMapEdit( TQWidget* parent, const char* name )
|
|
|
|
: Base( parent, name )
|
|
|
|
{
|
|
|
|
m_pDisplayedObject = 0;
|
|
|
|
m_numValues = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void PMTextureMapEdit::createTopWidgets( )
|
|
|
|
{
|
|
|
|
Base::createTopWidgets( );
|
|
|
|
topLayout( )->addWidget( new TQLabel( i18n( "Map values:" ), this ) );
|
|
|
|
m_pNoChildLabel = new TQLabel( i18n( "(No Child Objects)" ), this );
|
|
|
|
m_pPureLinkLabel = new TQLabel( i18n( "(Pure Link)" ), this );
|
|
|
|
topLayout( )->addWidget( m_pNoChildLabel );
|
|
|
|
topLayout( )->addWidget( m_pPureLinkLabel );
|
|
|
|
TQHBoxLayout* hl = new TQHBoxLayout( topLayout( ) );
|
|
|
|
m_pEditLayout = new TQVBoxLayout( hl );
|
|
|
|
hl->addStretch( 1 );
|
|
|
|
}
|
|
|
|
|
|
|
|
void PMTextureMapEdit::displayObject( PMObject* o )
|
|
|
|
{
|
|
|
|
TQString str;
|
|
|
|
|
|
|
|
if( o->isA( "TextureMapBase" ) )
|
|
|
|
{
|
|
|
|
bool readOnly = o->isReadOnly( );
|
|
|
|
m_pDisplayedObject = ( PMTextureMapBase* ) o;
|
|
|
|
TQValueList<double> mv = m_pDisplayedObject->mapValues( );
|
|
|
|
TQValueList<double>::Iterator vit = mv.begin( );
|
|
|
|
TQPtrListIterator<PMFloatEdit> eit( m_edits );
|
|
|
|
PMFloatEdit* edit;
|
|
|
|
|
|
|
|
m_numValues = 0;
|
|
|
|
|
|
|
|
for( ; vit != mv.end( ); ++vit )
|
|
|
|
{
|
|
|
|
if( eit.current( ) )
|
|
|
|
{
|
|
|
|
eit.current( )->setValue( *vit );
|
|
|
|
eit.current( )->show( );
|
|
|
|
eit.current( )->setReadOnly( readOnly );
|
|
|
|
++eit;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
edit = new PMFloatEdit( this );
|
|
|
|
m_pEditLayout->addWidget( edit );
|
|
|
|
m_edits.append( edit );
|
|
|
|
edit->setValue( *vit );
|
|
|
|
edit->setValidation( true, 0.0, true, 1.0 );
|
|
|
|
edit->setReadOnly( readOnly );
|
|
|
|
connect( edit, TQT_SIGNAL( dataChanged( ) ), TQT_SIGNAL( dataChanged( ) ) );
|
|
|
|
}
|
|
|
|
m_numValues++;
|
|
|
|
}
|
|
|
|
for( ; eit.current( ); ++eit )
|
|
|
|
eit.current( )->hide( );
|
|
|
|
if( m_numValues == 0 )
|
|
|
|
{
|
|
|
|
if( o->linkedObject( ) )
|
|
|
|
{
|
|
|
|
m_pPureLinkLabel->show( );
|
|
|
|
m_pNoChildLabel->hide( );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
m_pPureLinkLabel->hide( );
|
|
|
|
m_pNoChildLabel->show( );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
m_pNoChildLabel->hide( );
|
|
|
|
m_pPureLinkLabel->hide( );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
kdError( PMArea ) << "PMTextureMapEdit: Can't display object\n";
|
|
|
|
Base::displayObject( o );
|
|
|
|
enableLinkEdit( m_numValues == 0 );
|
|
|
|
}
|
|
|
|
|
|
|
|
void PMTextureMapEdit::saveContents( )
|
|
|
|
{
|
|
|
|
if( m_pDisplayedObject )
|
|
|
|
{
|
|
|
|
if( m_numValues > 0 )
|
|
|
|
{
|
|
|
|
TQPtrListIterator<PMFloatEdit> it( m_edits );
|
|
|
|
int i = 0;
|
|
|
|
TQValueList<double> values;
|
|
|
|
|
|
|
|
for( ; ( i < m_numValues ) && it.current( ); ++i, ++it )
|
|
|
|
values.append( it.current( )->value( ) );
|
|
|
|
m_pDisplayedObject->setMapValues( values );
|
|
|
|
}
|
|
|
|
Base::saveContents( );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool PMTextureMapEdit::isDataValid( )
|
|
|
|
{
|
|
|
|
TQPtrListIterator<PMFloatEdit> it( m_edits );
|
|
|
|
int i = 0;
|
|
|
|
double last = 0.0;
|
|
|
|
|
|
|
|
for( ; ( i < m_numValues ) && it.current( ); ++i, ++it )
|
|
|
|
{
|
|
|
|
if( !it.current( )->isDataValid( ) )
|
|
|
|
return false;
|
|
|
|
if( it.current( )->value( ) < last )
|
|
|
|
{
|
|
|
|
KMessageBox::error( this, i18n( "The map values have to be increasing." ),
|
|
|
|
i18n( "Error" ) );
|
|
|
|
it.current( )->setFocus( );
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
last = it.current( )->value( );
|
|
|
|
}
|
|
|
|
return Base::isDataValid( );
|
|
|
|
}
|
|
|
|
|
|
|
|
#include "pmtexturemapedit.moc"
|