summaryrefslogtreecommitdiffstats
path: root/kpovmodeler/pmfogedit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kpovmodeler/pmfogedit.cpp')
-rw-r--r--kpovmodeler/pmfogedit.cpp240
1 files changed, 240 insertions, 0 deletions
diff --git a/kpovmodeler/pmfogedit.cpp b/kpovmodeler/pmfogedit.cpp
new file mode 100644
index 00000000..64cb915e
--- /dev/null
+++ b/kpovmodeler/pmfogedit.cpp
@@ -0,0 +1,240 @@
+/*
+**************************************************************************
+ description
+ --------------------
+ copyright : (C) 2002 by Luis Carvalho
+**************************************************************************
+
+**************************************************************************
+* *
+* 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 "pmfogedit.h"
+#include "pmfog.h"
+#include "pmlineedits.h"
+#include "pmvectoredit.h"
+#include "pmcoloredit.h"
+
+#include <qlayout.h>
+#include <qlabel.h>
+#include <qcheckbox.h>
+#include <qcombobox.h>
+#include <klocale.h>
+#include <kmessagebox.h>
+#include <kdialog.h>
+
+PMFogEdit::PMFogEdit( QWidget* parent, const char* name )
+ : Base( parent, name )
+{
+ m_pDisplayedObject = 0;
+}
+
+void PMFogEdit::createTopWidgets( )
+{
+ QHBoxLayout* hl;
+ QVBoxLayout* vl;
+ QGridLayout* gl;
+ QLabel* lbl;
+
+ Base::createTopWidgets( );
+
+ lbl = new QLabel( i18n( "Fog type:" ), this );
+ m_pFogTypeEdit = new QComboBox( this );
+ m_pFogTypeEdit->insertItem( i18n( "Constant" ) );
+ m_pFogTypeEdit->insertItem( i18n( "Ground" ) );
+ hl = new QHBoxLayout( topLayout( ) );
+ hl->addWidget( lbl );
+ hl->addWidget( m_pFogTypeEdit );
+ hl->addStretch( 1 );
+
+ lbl = new QLabel( i18n( "Distance:" ), this );
+ m_pDistance = new PMFloatEdit( this );
+ hl = new QHBoxLayout( topLayout( ) );
+ hl->addWidget( lbl );
+ hl->addWidget( m_pDistance );
+ hl->addStretch( 1 );
+
+ lbl = new QLabel( i18n( "Color:" ), this );
+ m_pColor = new PMColorEdit( false, this );
+ hl = new QHBoxLayout( topLayout( ) );
+ hl->addWidget( lbl );
+ hl->addWidget( m_pColor );
+ hl->addStretch( 1 );
+
+ m_pTurbulenceCheck = new QCheckBox( i18n( "Turbulence" ), this );
+ topLayout( )->addWidget( m_pTurbulenceCheck );
+
+ m_pTurbulenceWidget = new QWidget( this );
+ vl = new QVBoxLayout( m_pTurbulenceWidget, 0, KDialog::spacingHint( ) );
+ hl = new QHBoxLayout( vl );
+ lbl = new QLabel( i18n( "Value: " ), m_pTurbulenceWidget );
+ m_pTurbulenceVector = new PMVectorEdit( "x", "y", "z", m_pTurbulenceWidget);
+ hl->addWidget( lbl );
+ hl->addWidget( m_pTurbulenceVector );
+ hl->addStretch( 1 );
+ hl = new QHBoxLayout( vl );
+ gl = new QGridLayout( hl, 4, 2 );
+ lbl = new QLabel( i18n( "Octaves:" ), m_pTurbulenceWidget );
+ m_pOctaves = new PMIntEdit( m_pTurbulenceWidget );
+ gl->addWidget( lbl, 0, 0 );
+ gl->addWidget( m_pOctaves, 0, 1 );
+ lbl = new QLabel( i18n( "Omega:" ), m_pTurbulenceWidget );
+ m_pOmega = new PMFloatEdit( m_pTurbulenceWidget );
+ gl->addWidget( lbl, 1, 0 );
+ gl->addWidget( m_pOmega, 1, 1 );
+ lbl = new QLabel( i18n( "Lambda:" ), m_pTurbulenceWidget );
+ m_pLambda = new PMFloatEdit( m_pTurbulenceWidget );
+ gl->addWidget( lbl, 2, 0 );
+ gl->addWidget( m_pLambda, 2, 1 );
+ lbl = new QLabel( i18n( "Depth:" ), m_pTurbulenceWidget );
+ m_pDepth = new PMFloatEdit( m_pTurbulenceWidget );
+ gl->addWidget( lbl, 3, 0 );
+ gl->addWidget( m_pDepth, 3, 1 );
+ hl->addStretch( 1 );
+ topLayout( )->addWidget( m_pTurbulenceWidget );
+
+ hl = new QHBoxLayout( topLayout( ) );
+ gl = new QGridLayout( hl, 2, 2 );
+ m_pFogOffsetLabel = new QLabel( i18n( "Offset: " ), this );
+ m_pFogOffset = new PMFloatEdit( this );
+ m_pFogAltLabel = new QLabel( i18n( "Altitude: " ), this );
+ m_pFogAlt = new PMFloatEdit( this );
+ gl->addWidget( m_pFogOffsetLabel, 0, 0 );
+ gl->addWidget( m_pFogOffset, 0, 1 );
+ gl->addWidget( m_pFogAltLabel, 1, 0 );
+ gl->addWidget( m_pFogAlt, 1, 1 );
+ hl->addStretch( 1 );
+
+ hl = new QHBoxLayout( topLayout( ) );
+ m_pUpLabel = new QLabel( i18n( "Up: " ), this );
+ m_pUp = new PMVectorEdit( "x", "y", "z", this );
+ hl->addWidget( m_pUpLabel );
+ hl->addWidget( m_pUp );
+
+ connect( m_pFogTypeEdit, SIGNAL( activated( int ) ), SLOT( slotFogTypeChanged( int ) ) );
+ connect( m_pDistance, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pColor, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pTurbulenceCheck, SIGNAL( clicked( ) ), SLOT( slotTurbulenceClicked( ) ) );
+ connect( m_pTurbulenceVector, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pOctaves, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pOmega, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pLambda, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pDepth, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pFogOffset, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pFogAlt, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pUp, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+}
+
+void PMFogEdit::displayObject( PMObject* o )
+{
+ if( o->isA( "Fog" ) )
+ {
+ bool readOnly = o->isReadOnly( );
+ m_pDisplayedObject = ( PMFog* ) o;
+
+ m_pFogTypeEdit->setCurrentItem( m_pDisplayedObject->fogType( ) - 1 );
+ m_pFogTypeEdit->setEnabled( !readOnly );
+ m_pDistance->setValue( m_pDisplayedObject->distance( ) );
+ m_pDistance->setReadOnly( readOnly );
+ m_pColor->setColor( m_pDisplayedObject->color( ) );
+ m_pColor->setReadOnly( readOnly );
+ m_pTurbulenceCheck->setChecked( m_pDisplayedObject->isTurbulenceEnabled( ) );
+ m_pTurbulenceCheck->setEnabled( !readOnly );
+ m_pTurbulenceVector->setVector( m_pDisplayedObject->valueVector( ) );
+ m_pTurbulenceVector->setReadOnly( readOnly );
+ m_pOctaves->setValue( m_pDisplayedObject->octaves( ) );
+ m_pOctaves->setReadOnly( readOnly );
+ m_pOmega->setValue( m_pDisplayedObject->omega( ) );
+ m_pOmega->setReadOnly( readOnly );
+ m_pLambda->setValue( m_pDisplayedObject->lambda( ) );
+ m_pLambda->setReadOnly( readOnly );
+ m_pDepth->setValue( m_pDisplayedObject->depth( ) );
+ m_pDepth->setReadOnly( readOnly );
+ m_pFogOffset->setValue( m_pDisplayedObject->fogOffset( ) );
+ m_pFogOffset->setReadOnly( readOnly );
+ m_pFogAlt->setValue( m_pDisplayedObject->fogAlt( ) );
+ m_pFogAlt->setReadOnly( readOnly );
+ m_pUp->setVector( m_pDisplayedObject->up( ) );
+ m_pUp->setReadOnly( readOnly );
+
+ slotTurbulenceClicked( );
+ slotFogTypeChanged( m_pFogTypeEdit->currentItem( ) );
+
+ Base::displayObject( o );
+ }
+ else
+ kdError( PMArea ) << "PMFogEdit: Can't display object\n";
+}
+
+void PMFogEdit::saveContents( )
+{
+ if( m_pDisplayedObject )
+ {
+ m_pDisplayedObject->setFogType( m_pFogTypeEdit->currentItem( ) + 1 );
+ m_pDisplayedObject->setDistance( m_pDistance->value( ) );
+ m_pDisplayedObject->setColor( m_pColor->color( ) );
+ m_pDisplayedObject->enableTurbulence( m_pTurbulenceCheck->isChecked( ) );
+ m_pDisplayedObject->setValueVector( m_pTurbulenceVector->vector( ) );
+ m_pDisplayedObject->setOctaves( m_pOctaves->value( ) );
+ m_pDisplayedObject->setOmega( m_pOmega->value( ) );
+ m_pDisplayedObject->setLambda( m_pLambda->value( ) );
+ m_pDisplayedObject->setDepth( m_pDepth->value( ) );
+ m_pDisplayedObject->setFogOffset( m_pFogOffset->value( ) );
+ m_pDisplayedObject->setFogAlt( m_pFogAlt->value( ) );
+ m_pDisplayedObject->setUp( m_pUp->vector( ) );
+ Base::saveContents( );
+ }
+}
+
+bool PMFogEdit::isDataValid( )
+{
+ return Base::isDataValid( );
+}
+
+void PMFogEdit::slotTurbulenceClicked( )
+{
+ if( m_pTurbulenceCheck->isChecked( ) )
+ m_pTurbulenceWidget->show( );
+ else
+ m_pTurbulenceWidget->hide( );
+
+ emit dataChanged( );
+ emit sizeChanged( );
+}
+
+void PMFogEdit::slotFogTypeChanged( int val )
+{
+ switch( val )
+ {
+ case 0: // Constant Fog
+ m_pFogOffsetLabel->hide( );
+ m_pFogOffset->hide( );
+ m_pFogAltLabel->hide( );
+ m_pFogAlt->hide( );
+ m_pUpLabel->hide( );
+ m_pUp->hide( );
+ break;
+ case 1: // Ground Fog
+ m_pFogOffsetLabel->show( );
+ m_pFogOffset->show( );
+ m_pFogAltLabel->show( );
+ m_pFogAlt->show( );
+ m_pUpLabel->show( );
+ m_pUp->show( );
+ break;
+ default:
+ break;
+ }
+
+ emit dataChanged( );
+ emit sizeChanged( );
+}
+
+#include "pmfogedit.moc"