summaryrefslogtreecommitdiffstats
path: root/kpovmodeler/pmglobalsettingsedit.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kpovmodeler/pmglobalsettingsedit.cpp')
-rw-r--r--kpovmodeler/pmglobalsettingsedit.cpp317
1 files changed, 317 insertions, 0 deletions
diff --git a/kpovmodeler/pmglobalsettingsedit.cpp b/kpovmodeler/pmglobalsettingsedit.cpp
new file mode 100644
index 00000000..8a297738
--- /dev/null
+++ b/kpovmodeler/pmglobalsettingsedit.cpp
@@ -0,0 +1,317 @@
+/*
+**************************************************************************
+ 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 "pmglobalsettingsedit.h"
+#include "pmglobalsettings.h"
+#include "pmlineedits.h"
+#include "pmcoloredit.h"
+
+#include <qlayout.h>
+#include <qlabel.h>
+#include <qcheckbox.h>
+#include <qcombobox.h>
+#include <klocale.h>
+#include <kdialog.h>
+#include <kmessagebox.h>
+
+PMGlobalSettingsEdit::PMGlobalSettingsEdit( QWidget* parent, const char* name )
+ : Base( parent, name )
+{
+ m_pDisplayedObject = 0;
+}
+
+void PMGlobalSettingsEdit::createTopWidgets( )
+{
+ QHBoxLayout* hl;
+ QLabel* lbl;
+
+ Base::createTopWidgets( );
+
+ hl = new QHBoxLayout( topLayout( ) );
+ lbl = new QLabel( i18n( "Adc bailout:" ), this );
+ m_pAdcBailoutEdit = new PMFloatEdit( this );
+ hl->addWidget( lbl );
+ hl->addWidget( m_pAdcBailoutEdit );
+ hl->addStretch( 1 );
+
+ hl = new QHBoxLayout( topLayout( ) );
+ lbl = new QLabel( i18n( "Ambient light:" ), this );
+ m_pAmbientLightEdit = new PMColorEdit( false, this );
+ topLayout( )->addWidget( lbl );
+ topLayout( )->addWidget( m_pAmbientLightEdit );
+ hl->addStretch( 1 );
+
+ hl = new QHBoxLayout( topLayout( ) );
+ lbl = new QLabel( i18n( "Assumed gamma:" ), this );
+ m_pAssumedGammaEdit = new PMFloatEdit( this );
+ hl->addWidget( lbl );
+ hl->addWidget( m_pAssumedGammaEdit );
+ hl->addStretch( 1 );
+
+ m_pHfGray16Edit = new QCheckBox( i18n( "Hf gray 16" ), this );
+ topLayout( )->addWidget( m_pHfGray16Edit );
+
+ hl = new QHBoxLayout( topLayout( ) );
+ lbl = new QLabel( i18n( "Iridiscence wave length:" ), this );
+ m_pIridWaveLengthEdit = new PMColorEdit( false, this );
+ topLayout( )->addWidget( lbl );
+ topLayout( )->addWidget( m_pIridWaveLengthEdit );
+ hl->addStretch( 1 );
+
+ hl = new QHBoxLayout( topLayout( ) );
+ QGridLayout* layout = new QGridLayout( hl, 4, 2 );
+ lbl = new QLabel( i18n( "Maximum intersections:" ), this );
+ m_pMaxIntersectionsEdit = new PMIntEdit( this );
+ layout->addWidget( lbl, 0, 0 );
+ layout->addWidget( m_pMaxIntersectionsEdit, 0, 1 );
+ lbl = new QLabel( i18n( "Maximum trace level:" ), this );
+ m_pMaxTraceLevelEdit = new PMIntEdit( this );
+ layout->addWidget( lbl, 1, 0 );
+ layout->addWidget( m_pMaxTraceLevelEdit, 1, 1 );
+ lbl = new QLabel( i18n( "Number of waves:" ), this );
+ m_pNumberWavesEdit = new PMIntEdit( this );
+ layout->addWidget( lbl, 2, 0 );
+ layout->addWidget( m_pNumberWavesEdit, 2, 1 );
+ lbl = new QLabel( i18n( "Noise generator:" ), this );
+ m_pNoiseGeneratorEdit = new QComboBox( false, this );
+ m_pNoiseGeneratorEdit->insertItem( i18n( "Original" ) );
+ m_pNoiseGeneratorEdit->insertItem( i18n( "Range Corrected" ) );
+ m_pNoiseGeneratorEdit->insertItem( i18n( "Perlin" ) );
+ layout->addWidget( lbl, 3, 0 );
+ layout->addWidget( m_pNoiseGeneratorEdit, 3, 1 );
+ hl->addStretch( 1 );
+
+ m_pRadiosityEdit = new QCheckBox( i18n( "Radiosity (Povray 3.1)" ), this );
+ topLayout( )->addWidget( m_pRadiosityEdit );
+
+ m_pRadiosityWidget = new QWidget( this );
+ hl = new QHBoxLayout( m_pRadiosityWidget, 0, KDialog::spacingHint( ) );
+ layout = new QGridLayout( hl, 7, 2 );
+ lbl = new QLabel( i18n( "Brightness:" ), m_pRadiosityWidget );
+ m_pBrightnessEdit = new PMFloatEdit( m_pRadiosityWidget );
+ layout->addWidget( lbl, 0, 0 );
+ layout->addWidget( m_pBrightnessEdit, 0, 1 );
+ lbl = new QLabel( i18n( "Count:" ), m_pRadiosityWidget );
+ m_pCountEdit = new PMIntEdit( m_pRadiosityWidget );
+ layout->addWidget( lbl, 1, 0 );
+ layout->addWidget( m_pCountEdit, 1, 1 );
+ lbl = new QLabel( i18n( "Maximum distance:" ), m_pRadiosityWidget );
+ m_pDistanceMaximumEdit = new PMFloatEdit( m_pRadiosityWidget );
+ layout->addWidget( lbl, 2, 0 );
+ layout->addWidget( m_pDistanceMaximumEdit, 2, 1 );
+ lbl = new QLabel( i18n( "Error boundary:" ), m_pRadiosityWidget );
+ m_pErrorBoundEdit = new PMFloatEdit( m_pRadiosityWidget );
+ layout->addWidget( lbl, 3, 0 );
+ layout->addWidget( m_pErrorBoundEdit, 3, 1 );
+ lbl = new QLabel( i18n( "Gray threshold:" ), m_pRadiosityWidget );
+ m_pGrayThresholdEdit = new PMFloatEdit( m_pRadiosityWidget );
+ layout->addWidget( lbl, 4, 0 );
+ layout->addWidget( m_pGrayThresholdEdit, 4, 1 );
+ lbl = new QLabel( i18n( "Low error factor:" ), m_pRadiosityWidget );
+ m_pLowErrorFactorEdit = new PMFloatEdit( m_pRadiosityWidget );
+ layout->addWidget( lbl, 5, 0 );
+ layout->addWidget( m_pLowErrorFactorEdit, 5, 1 );
+ lbl = new QLabel( i18n( "Minimum reuse:" ), m_pRadiosityWidget );
+ m_pMinimumReuseEdit = new PMFloatEdit( m_pRadiosityWidget );
+ layout->addWidget( lbl, 6, 0 );
+ layout->addWidget( m_pMinimumReuseEdit, 6, 1 );
+ lbl = new QLabel( i18n( "Nearest count:" ), m_pRadiosityWidget );
+ m_pNearestCountEdit = new PMIntEdit( m_pRadiosityWidget );
+ layout->addWidget( lbl, 7, 0 );
+ layout->addWidget( m_pNearestCountEdit, 7, 1 );
+ lbl = new QLabel( i18n( "Recursion limit:" ), m_pRadiosityWidget );
+ m_pRecursionLimitEdit = new PMIntEdit( m_pRadiosityWidget );
+ layout->addWidget( lbl, 8, 0 );
+ layout->addWidget( m_pRecursionLimitEdit, 8, 1 );
+ hl->addStretch( 1 );
+
+ topLayout( )->addWidget( m_pRadiosityWidget );
+
+ connect( m_pAdcBailoutEdit, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pAmbientLightEdit, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pAssumedGammaEdit, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pHfGray16Edit, SIGNAL( clicked( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pIridWaveLengthEdit, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pMaxIntersectionsEdit, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pMaxTraceLevelEdit, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pNumberWavesEdit, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pNoiseGeneratorEdit, SIGNAL( activated( int ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pRadiosityEdit, SIGNAL( clicked( ) ), SLOT( slotRadiosityClicked( ) ) );
+ connect( m_pBrightnessEdit, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pCountEdit, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pDistanceMaximumEdit, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pErrorBoundEdit, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pGrayThresholdEdit, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pLowErrorFactorEdit, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pMinimumReuseEdit, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pNearestCountEdit, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+ connect( m_pRecursionLimitEdit, SIGNAL( dataChanged( ) ), SIGNAL( dataChanged( ) ) );
+}
+
+void PMGlobalSettingsEdit::displayObject( PMObject* o )
+{
+ if( o->isA( "GlobalSettings" ) )
+ {
+ bool readOnly = o->isReadOnly( );
+ m_pDisplayedObject = ( PMGlobalSettings* ) o;
+
+ m_pAdcBailoutEdit->setValue( m_pDisplayedObject->adcBailout( ) );
+ m_pAdcBailoutEdit->setReadOnly( readOnly );
+ m_pAmbientLightEdit->setColor( m_pDisplayedObject->ambientLight( ) );
+ m_pAmbientLightEdit->setReadOnly( readOnly );
+ m_pAssumedGammaEdit->setValue( m_pDisplayedObject->assumedGamma( ) );
+ m_pAssumedGammaEdit->setReadOnly( readOnly );
+ m_pHfGray16Edit->setChecked( m_pDisplayedObject->hfGray16( ) );
+ m_pHfGray16Edit->setEnabled( !readOnly );
+ m_pIridWaveLengthEdit->setColor( m_pDisplayedObject->iridWaveLength( ) );
+ m_pIridWaveLengthEdit->setReadOnly( readOnly );
+ m_pMaxIntersectionsEdit->setValue( m_pDisplayedObject->maxIntersections( ) );
+ m_pMaxIntersectionsEdit->setReadOnly( readOnly );
+ m_pMaxTraceLevelEdit->setValue( m_pDisplayedObject->maxTraceLevel( ) );
+ m_pMaxTraceLevelEdit->setReadOnly( readOnly );
+ m_pNumberWavesEdit->setValue( m_pDisplayedObject->numberWaves( ) );
+ m_pNumberWavesEdit->setReadOnly( readOnly );
+ m_pNoiseGeneratorEdit->setCurrentItem( m_pDisplayedObject->noiseGenerator( ) );
+ m_pNoiseGeneratorEdit->setEnabled( !readOnly );
+ m_pRadiosityEdit->setChecked( m_pDisplayedObject->isRadiosityEnabled( ) );
+ m_pRadiosityEdit->setEnabled( !readOnly );
+ m_pBrightnessEdit->setValue( m_pDisplayedObject->brightness( ) );
+ m_pBrightnessEdit->setReadOnly( readOnly );
+ m_pCountEdit->setValue( m_pDisplayedObject->count( ) );
+ m_pCountEdit->setReadOnly( readOnly );
+ m_pDistanceMaximumEdit->setValue( m_pDisplayedObject->distanceMaximum( ) );
+ m_pDistanceMaximumEdit->setReadOnly( readOnly );
+ m_pErrorBoundEdit->setValue( m_pDisplayedObject->errorBound( ) );
+ m_pErrorBoundEdit->setReadOnly( readOnly );
+ m_pGrayThresholdEdit->setValue( m_pDisplayedObject->grayThreshold( ) );
+ m_pGrayThresholdEdit->setReadOnly( readOnly );
+ m_pLowErrorFactorEdit->setValue( m_pDisplayedObject->lowErrorFactor( ) );
+ m_pLowErrorFactorEdit->setReadOnly( readOnly );
+ m_pMinimumReuseEdit->setValue( m_pDisplayedObject->minimumReuse( ) );
+ m_pMinimumReuseEdit->setReadOnly( readOnly );
+ m_pNearestCountEdit->setValue( m_pDisplayedObject->nearestCount( ) );
+ m_pNearestCountEdit->setReadOnly( readOnly );
+ m_pRecursionLimitEdit->setValue( m_pDisplayedObject->recursionLimit( ) );
+ m_pRecursionLimitEdit->setReadOnly( readOnly );
+ slotRadiosityClicked( );
+
+ Base::displayObject( o );
+ }
+ else
+ kdError( PMArea ) << "PMGlobalSettingsEdit: Can't display object\n";
+}
+
+void PMGlobalSettingsEdit::saveContents( )
+{
+ if( m_pDisplayedObject )
+ {
+ Base::saveContents( );
+ m_pDisplayedObject->setAdcBailout( m_pAdcBailoutEdit->value( ) );
+ m_pDisplayedObject->setAmbientLight( m_pAmbientLightEdit->color( ) );
+ m_pDisplayedObject->setAssumedGamma( m_pAssumedGammaEdit->value( ) );
+ m_pDisplayedObject->setHfGray16( m_pHfGray16Edit->isChecked( ) );
+ m_pDisplayedObject->setIridWaveLength( m_pIridWaveLengthEdit->color( ) );
+ m_pDisplayedObject->setMaxIntersections( m_pMaxIntersectionsEdit->value( ) );
+ m_pDisplayedObject->setMaxTraceLevel( m_pMaxTraceLevelEdit->value( ) );
+ m_pDisplayedObject->setNumberWaves( m_pNumberWavesEdit->value( ) );
+ m_pDisplayedObject->setNoiseGenerator(
+ ( PMGlobalSettings::PMNoiseType ) ( m_pNoiseGeneratorEdit->currentItem( ) ) );
+ m_pDisplayedObject->enableRadiosity( m_pRadiosityEdit->isChecked( ) );
+ m_pDisplayedObject->setBrightness( m_pBrightnessEdit->value( ) );
+ m_pDisplayedObject->setCount( m_pCountEdit->value( ) );
+ m_pDisplayedObject->setDistanceMaximum( m_pDistanceMaximumEdit->value( ) );
+ m_pDisplayedObject->setErrorBound( m_pErrorBoundEdit->value( ) );
+ m_pDisplayedObject->setGrayThreshold( m_pGrayThresholdEdit->value( ) );
+ m_pDisplayedObject->setLowErrorFactor( m_pLowErrorFactorEdit->value( ) );
+ m_pDisplayedObject->setMinimumReuse( m_pMinimumReuseEdit->value( ) );
+ m_pDisplayedObject->setNearestCount( m_pNearestCountEdit->value( ) );
+ m_pDisplayedObject->setRecursionLimit( m_pRecursionLimitEdit->value( ) );
+ }
+}
+
+bool PMGlobalSettingsEdit::isDataValid( )
+{
+ if( !m_pAdcBailoutEdit->isDataValid( ) ) return false;
+ if( !m_pAmbientLightEdit->isDataValid( ) ) return false;
+ if( !m_pAssumedGammaEdit->isDataValid( ) ) return false;
+ if( !m_pIridWaveLengthEdit->isDataValid( ) ) return false;
+ if( !m_pMaxIntersectionsEdit->isDataValid( ) ) return false;
+ if( !m_pMaxTraceLevelEdit->isDataValid( ) ) return false;
+ if( !m_pNumberWavesEdit->isDataValid( ) ) return false;
+ if( !m_pBrightnessEdit->isDataValid( ) ) return false;
+ if( !m_pCountEdit->isDataValid( ) ) return false;
+ if( !m_pDistanceMaximumEdit->isDataValid( ) ) return false;
+ if( !m_pErrorBoundEdit->isDataValid( ) ) return false;
+ if( !m_pGrayThresholdEdit->isDataValid( ) ) return false;
+ if( !m_pLowErrorFactorEdit->isDataValid( ) ) return false;
+ if( !m_pMinimumReuseEdit->isDataValid( ) ) return false;
+ if( !m_pNearestCountEdit->isDataValid( ) ) return false;
+ if( !m_pRecursionLimitEdit->isDataValid( ) ) return false;
+
+ if( m_pMaxIntersectionsEdit->value( ) < 0 )
+ {
+ KMessageBox::error( this, i18n( "Maximum intersections must be a positive value." ),
+ i18n( "Error" ) );
+ m_pMaxIntersectionsEdit->setFocus( );
+ return false;
+ }
+ if( m_pMaxTraceLevelEdit->value( ) < 0 )
+ {
+ KMessageBox::error( this, i18n( "Maximum trace level must be a positive value." ),
+ i18n( "Error" ) );
+ m_pMaxTraceLevelEdit->setFocus( );
+ return false;
+ }
+ if( m_pNumberWavesEdit->value( ) < 0 )
+ {
+ KMessageBox::error( this, i18n( "Number of waves must be a positive value." ),
+ i18n( "Error" ) );
+ m_pNumberWavesEdit->setFocus( );
+ return false;
+ }
+ if( m_pNearestCountEdit->value( ) < 1 || m_pNearestCountEdit->value( ) > 10 )
+ {
+ KMessageBox::error( this, i18n( "Nearest count must be between 1 and 10." ),
+ i18n( "Error" ) );
+ m_pNearestCountEdit->setFocus( );
+ return false;
+ }
+
+ if( m_pRecursionLimitEdit->value( ) < 1 || m_pRecursionLimitEdit->value( ) > 2 )
+ {
+ KMessageBox::error( this, i18n( "Recursion limit must be 1 or 2." ),
+ i18n( "Error" ) );
+ m_pRecursionLimitEdit->setFocus( );
+ return false;
+ }
+
+ return Base::isDataValid( );
+}
+
+void PMGlobalSettingsEdit::slotRadiosityClicked( )
+{
+ if( m_pRadiosityEdit->isChecked( ) )
+ m_pRadiosityWidget->show( );
+ else
+ m_pRadiosityWidget->hide( );
+
+ emit dataChanged( );
+ emit sizeChanged( );
+}
+
+#include "pmglobalsettingsedit.moc"