% % save the value content % % stack: field-name value % "***vrl " &3 &" " log() !Val.Fvalue !Val.Field % % check for change in the Value name % _Val.Fvalue unescape _Grid.Cell _Val.Field unescape eq$ { % % exactly same value name % "**same " logs _Grid.Row *gridtrak } { % % this is a new/replace value % check for Value existing % "**new/repl " logs _Val.Field unescape sel@ _\ "Valued" get *atvalues { % % this Value does exist in originally selected node % find the row it exists in and update that % "Grows" get - countdown { % % stack: new-cont row % *atvalues dup 2 "Cell" do % % check for row name matching % "Cell" get _Val.Field unescape eq$ { % % same field name as original, this is the row % "*samefld " logs *gridtrak true } { % % not the correct row, keep looking % pop false } ifelse ? } for % % stack: new-cont % } { % % this value does not exist in originally selected node % add a new row with this value info, signal a change in tree values % dup _Val.Field unescape "Grows" get *gridvalc } ifelse % % stack: new-cont % } ifelse % % replace value content % _Val.Field unescape "Vf " &2 &" - " &3 logs sel@ \!