@@ -137,12 +137,6 @@ void Parameter::setOwner (ParameterOwner* parameterOwner_)
137137 Parameter::registerParameter (this );
138138}
139139
140- void Parameter::linkParameter (Parameter* child1, Parameter* child2)
141- {
142- linkedParameters.add (child1);
143- linkedParameters.add (child2);
144- }
145-
146140void Parameter::setEnabled (bool enabled)
147141{
148142 isEnabledFlag = enabled;
@@ -227,38 +221,48 @@ Parameter::ChangeValue::ChangeValue (std::string key_, var newValue_)
227221 : key (key_), newValue (newValue_)
228222{
229223 Parameter* p = Parameter::parameterMap[key_];
230-
231- originalValue = p->currentValue ;
224+ if (p != nullptr )
225+ {
226+ originalValue = p->getValue ();
227+
228+ // Store linked parameter states before the change
229+ if (p->isLinked ())
230+ {
231+ p->storeLinkedStates ();
232+ }
233+ }
232234}
233235
234236bool Parameter::ChangeValue::perform ()
235237{
236238 Parameter* p = Parameter::parameterMap[key];
237-
238- if (! p->isEnabled () || p->currentValue == newValue)
239+ if (p == nullptr || !p->isEnabled () || p->getValue () == newValue)
239240 return false ;
240241
241- p->newValue = newValue;
242- p->getOwner ()->parameterChangeRequest (p);
243-
242+ p->setNextValue (newValue, false );
244243 p->valueChanged ();
245244
246- if (p->currentValue == p->previousValue )
247- return false ;
248- else
245+ // Compare current value with new value to check if the change was effective
246+ if (p->getValue () == newValue)
249247 return true ;
248+ else
249+ return false ;
250250}
251251
252252bool Parameter::ChangeValue::undo ()
253253{
254254 Parameter* p = Parameter::parameterMap[key];
255+ if (p == nullptr )
256+ return false ;
255257
256- p->newValue = originalValue;
257- p->getOwner ()->parameterChangeRequest (p);
258-
258+ p->setNextValue (originalValue, false );
259259 p->valueChanged ();
260260
261- // p->logValueChange();
261+ // Restore linked parameter states
262+ if (p->isLinked ())
263+ {
264+ p->restoreLinkedStates ();
265+ }
262266
263267 return true ;
264268}
@@ -1448,6 +1452,7 @@ void TimeParameter::setNextValue (var newValue_, bool undoable)
14481452 {
14491453 currentValue = newValue;
14501454 timeValue->setTimeFromString (currentValue.toString ());
1455+ getOwner ()->parameterChangeRequest (this );
14511456 valueChanged ();
14521457 }
14531458 }
@@ -1468,32 +1473,49 @@ TimeParameter::ChangeValue::ChangeValue (std::string key_, var newValue_)
14681473 : key (key_), newValue (newValue_)
14691474{
14701475 Parameter* p = Parameter::parameterMap[key_];
1471- originalValue = p->currentValue ;
1476+ if (p != nullptr )
1477+ {
1478+ originalValue = p->getValue ();
1479+
1480+ // Store linked parameter states before the change
1481+ if (p->isLinked ())
1482+ {
1483+ p->storeLinkedStates ();
1484+ }
1485+ }
14721486}
14731487
14741488bool TimeParameter::ChangeValue::perform ()
14751489{
1476- TimeParameter* p = (TimeParameter*) Parameter::parameterMap[key];
1477- p->getTimeValue ()->setTimeFromString (newValue.toString ());
1478-
1479- p->newValue = newValue;
1480- p->getOwner ()->parameterChangeRequest (p);
1490+ Parameter* p = Parameter::parameterMap[key];
1491+ if (p == nullptr || !p->isEnabled () || p->getValue () == newValue)
1492+ return false ;
14811493
1494+ p->setNextValue (newValue, false );
14821495 p->valueChanged ();
14831496
1484- return true ;
1497+ // Compare current value with new value to check if the change was effective
1498+ if (p->getValue () == newValue)
1499+ return true ;
1500+ else
1501+ return false ;
14851502}
14861503
14871504bool TimeParameter::ChangeValue::undo ()
14881505{
1489- TimeParameter* p = (TimeParameter*) Parameter::parameterMap[key];
1490- p->getTimeValue ()->setTimeFromString (originalValue.toString ());
1491-
1492- p->newValue = originalValue;
1493- p->getOwner ()->parameterChangeRequest (p);
1506+ Parameter* p = Parameter::parameterMap[key];
1507+ if (p == nullptr )
1508+ return false ;
14941509
1510+ p->setNextValue (originalValue, false );
14951511 p->valueChanged ();
14961512
1513+ // Restore linked parameter states
1514+ if (p->isLinked ())
1515+ {
1516+ p->restoreLinkedStates ();
1517+ }
1518+
14971519 return true ;
14981520}
14991521
0 commit comments