Changed: #1193 If switch between the located and sound properties in a workspace erroneously marked that the particle system has been changed.

This commit is contained in:
timon 2010-11-26 13:23:02 +02:00
parent 38844bcbf2
commit 6934b285e2
4 changed files with 38 additions and 47 deletions

View file

@ -55,7 +55,6 @@ CLocatedPage::CLocatedPage(QWidget *parent)
_ui.maxNumParticleWidget->setRange(1, 501); _ui.maxNumParticleWidget->setRange(1, 501);
_ui.maxNumParticleWidget->enableUpperBound(1 << 16, true); _ui.maxNumParticleWidget->enableUpperBound(1 << 16, true);
_ui.maxNumParticleWidget->setWrapper(&_MaxNbParticlesWrapper);
connect(_ui.coordSystemComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(setMatrixMode(int))); connect(_ui.coordSystemComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(setMatrixMode(int)));
connect(_ui.disgradeWithLODCheckBox, SIGNAL(toggled(bool)), this, SLOT(setDisgradeWithLod(bool))); connect(_ui.disgradeWithLODCheckBox, SIGNAL(toggled(bool)), this, SLOT(setDisgradeWithLod(bool)));
@ -63,7 +62,9 @@ CLocatedPage::CLocatedPage(QWidget *parent)
connect(_ui.trigerOnDeathCheckBox, SIGNAL(toggled(bool)), this, SLOT(setTriggerOnDeath(bool))); connect(_ui.trigerOnDeathCheckBox, SIGNAL(toggled(bool)), this, SLOT(setTriggerOnDeath(bool)));
connect(_ui.editPushButton, SIGNAL(clicked()), this, SLOT(editTriggerOnDeath())); connect(_ui.editPushButton, SIGNAL(clicked()), this, SLOT(editTriggerOnDeath()));
connect(_ui.limitedLifeTimeCheckBox, SIGNAL(toggled(bool)), this, SLOT(setLimitedLifeTime(bool))); connect(_ui.limitedLifeTimeCheckBox, SIGNAL(toggled(bool)), this, SLOT(setLimitedLifeTime(bool)));
connect(_ui.setCurrentCountPushButton, SIGNAL(clicked()), this, SLOT(setCount())); connect(_ui.setCurrentCountPushButton, SIGNAL(clicked()), this, SLOT(setCurrentCount()));
connect(_ui.maxNumParticleWidget, SIGNAL(valueChanged(uint32)), this, SLOT(setNewMaxSize(uint32)));
} }
CLocatedPage::~CLocatedPage() CLocatedPage::~CLocatedPage()
@ -91,9 +92,7 @@ void CLocatedPage::setEditedItem(CWorkspaceNode *ownerNode, NL3D::CPSLocated *lo
if (_Located->getOwner()) if (_Located->getOwner())
_ui.maxNumParticleWidget->setEnabled(!_Located->getOwner()->getAutoCountFlag()); _ui.maxNumParticleWidget->setEnabled(!_Located->getOwner()->getAutoCountFlag());
_MaxNbParticlesWrapper.Located = _Located; _ui.maxNumParticleWidget->setValue(_Located->getMaxSize(), false);
_MaxNbParticlesWrapper.Node = _Node;
_ui.maxNumParticleWidget->updateUi();
_ui.coordSystemComboBox->setCurrentIndex(int(_Located->getMatrixMode())); _ui.coordSystemComboBox->setCurrentIndex(int(_Located->getMatrixMode()));
_ui.limitedLifeTimeCheckBox->setChecked(!_Located->getLastForever()); _ui.limitedLifeTimeCheckBox->setChecked(!_Located->getLastForever());
@ -217,10 +216,25 @@ void CLocatedPage::setMatrixMode(int index)
} }
} }
void CLocatedPage::setCount() void CLocatedPage::setCurrentCount()
{ {
_Located->resize(_Located->getSize()); // set new max size // set new max size
_ui.maxNumParticleWidget->updateUi(); _ui.maxNumParticleWidget->setValue(_Located->getSize());
updateModifiedFlag();
}
void CLocatedPage::setNewMaxSize(uint32 value)
{
// if the max new size is lower than the current number of instance, we must suppress item
// in the CParticleTreeCtrl
if (value < _Located->getSize())
{
nlassert(_Node);
/// WARNING:
///TreeCtrl->suppressLocatedInstanceNbItem(*Node, v);
}
_Located->resize(value);
updateModifiedFlag(); updateModifiedFlag();
} }
@ -238,19 +252,6 @@ void CLocatedPage::updateTriggerOnDeath(void)
_ui.editPushButton->setEnabled(enable && _Located->isTriggerOnDeathEnabled()); _ui.editPushButton->setEnabled(enable && _Located->isTriggerOnDeathEnabled());
} }
void CLocatedPage::CMaxNbParticlesWrapper::set(const uint32 &v)
{
// if the max new size is lower than the current number of instance, we must suppress item
// in the CParticleTreeCtrl
if (v < Located->getSize())
{
nlassert(Node);
/// WARNING:
///TreeCtrl->suppressLocatedInstanceNbItem(*Node, v);
}
Located->resize(v);
}
void CLocatedPage::CLifeWrapper::set(const float &v) void CLocatedPage::CLifeWrapper::set(const float &v)
{ {
Located->setInitialLife(v); Located->setInitialLife(v);

View file

@ -61,20 +61,12 @@ private Q_SLOTS:
void editTriggerOnDeath(); void editTriggerOnDeath();
void setTriggerOnDeath(bool state); void setTriggerOnDeath(bool state);
void setMatrixMode(int index); void setMatrixMode(int index);
void setCount(); void setCurrentCount();
void setNewMaxSize(uint32 value);
private: private:
/// wrapper to tune the max number of particles
struct CMaxNbParticlesWrapper : public IPSWrapperUInt
{
CWorkspaceNode *Node;
NL3D::CPSLocated *Located;
uint32 get(void) const { return Located->getMaxSize(); }
void set(const uint32 &v);
} _MaxNbParticlesWrapper;
/// wrapper to tune the mass of particles /// wrapper to tune the mass of particles
struct CMassWrapper : public IPSWrapperFloat, IPSSchemeWrapperFloat struct CMassWrapper : public IPSWrapperFloat, IPSSchemeWrapperFloat
{ {

View file

@ -53,14 +53,15 @@ CSoundPage::CSoundPage(QWidget *parent)
// setup dialog the percent of sound emissions // setup dialog the percent of sound emissions
_ui.emissionWidget->setRange(0.f, 1.f); _ui.emissionWidget->setRange(0.f, 1.f);
_ui.emissionWidget->setWrapper(&_EmissionPercentWrapper);
connect(_ui.browsePushButton ,SIGNAL(clicked()), this, SLOT(browse())); connect(_ui.browsePushButton ,SIGNAL(clicked()), this, SLOT(browse()));
connect(_ui.playPushButton ,SIGNAL(clicked()), this, SLOT(play())); connect(_ui.playPushButton ,SIGNAL(clicked()), this, SLOT(play()));
connect(_ui.spawnCheckBox ,SIGNAL(toggled(bool)), this, SLOT(setSpawn(bool))); connect(_ui.spawnCheckBox ,SIGNAL(toggled(bool)), this, SLOT(setSpawn(bool)));
connect(_ui.muteCheckBox ,SIGNAL(toggled(bool)), this, SLOT(setMute(bool))); connect(_ui.muteCheckBox ,SIGNAL(toggled(bool)), this, SLOT(setMute(bool)));
connect(_ui.keepPitchCheckBox ,SIGNAL(toggled(bool)), this, SLOT(setKeepPitch(bool))); connect(_ui.keepPitchCheckBox ,SIGNAL(toggled(bool)), this, SLOT(setKeepPitch(bool)));
connect(_ui.soundNameLineEdit ,SIGNAL(textChanged(QString)), this, SLOT(setSoundName(QString))); connect(_ui.soundNameLineEdit ,SIGNAL(textChanged(QString)), this, SLOT(setSoundName(QString)));
connect(_ui.emissionWidget, SIGNAL(valueChanged(float)), this, SLOT(setEmissionPercent(float)));
} }
CSoundPage::~CSoundPage() CSoundPage::~CSoundPage()
@ -73,10 +74,8 @@ void CSoundPage::setEditedItem(CWorkspaceNode *ownerNode, NL3D::CPSLocatedBindab
_Node = ownerNode; _Node = ownerNode;
nlassert(_Sound); nlassert(_Sound);
_EmissionPercentWrapper.OwnerNode = _Node; _ui.emissionWidget->setValue(_Sound->getEmissionPercent(), false);
_EmissionPercentWrapper.S = _Sound;
_ui.emissionWidget->updateUi();
_GainWrapper.S = _Sound; _GainWrapper.S = _Sound;
_ui.gainWidget->setWorkspaceNode(_Node); _ui.gainWidget->setWorkspaceNode(_Node);
@ -165,4 +164,10 @@ void CSoundPage::setSoundName(const QString &text)
_Sound->setSoundName(NLMISC::CStringMapper::map(text.toStdString())); _Sound->setSoundName(NLMISC::CStringMapper::map(text.toStdString()));
} }
void CSoundPage::setEmissionPercent(float value)
{
_Sound->setEmissionPercent(value);
updateModifiedFlag();
}
} /* namespace NLQT */ } /* namespace NLQT */

View file

@ -62,7 +62,8 @@ private Q_SLOTS:
void setMute(bool state); void setMute(bool state);
void setKeepPitch(bool state); void setKeepPitch(bool state);
void setSoundName(const QString &text); void setSoundName(const QString &text);
void setEmissionPercent(float value);
private: private:
/// wrapper to set the gain of sounds /// wrapper to set the gain of sounds
@ -85,14 +86,6 @@ private:
void setScheme(scheme_type *s) { S->setPitchScheme(s); } void setScheme(scheme_type *s) { S->setPitchScheme(s); }
} _PitchWrapper; } _PitchWrapper;
/// wrapper to set the percentage of sound emissions
struct CEmissionPercentWrapper : public IPSWrapperFloat
{
NL3D::CPSSound *S;
float get(void) const { return S->getEmissionPercent(); }
void set(const float &v) { S->setEmissionPercent(v); }
} _EmissionPercentWrapper;
void updateModifiedFlag() { if (_Node) _Node->setModified(true); } void updateModifiedFlag() { if (_Node) _Node->setModified(true); }
/// the sound being edited /// the sound being edited