]> git.mxchange.org Git - simgear.git/commit
Melchior FRANZ:
authorehofman <ehofman>
Mon, 30 Jan 2006 10:56:34 +0000 (10:56 +0000)
committerehofman <ehofman>
Mon, 30 Jan 2006 10:56:34 +0000 (10:56 +0000)
commit33f176b8f996bc7ed8e5cd5cdf1f2f3019cbd7a5
treeac8b705ab9a8dc66a008f2c3aa3a9e1517f2df23
parent42f21972fd47a2a5bb7d8365dbc6bf50acb54d8b
Melchior FRANZ:

add optional arg to SGPropertyNode::addChangeListener that triggers
the listener function call initially. This is useful for cases where
a freshly installed listener wants to treat the current property
value as changed from 'unknown' to the actual value right away.

Examples can be found in the Nasal incarnation setlistener(),
where we have for example this (in $FG_ROOT/Nasal/gui.nas):

  INIT = func {
      ...
      setlistener("/sim/rendering/fps-display", fpsDisplay);
      if (getprop("/sim/rendering/fps-display")) {
          fgcommand("dialog-show", props.Node.new({"dialog-name": "fps"}));
      }
  }

That is: we first attach a listener that cares for changes to the FPS
display switch, but then we have to manually open the dialog initially.
That's a duplication of code and could be as simple as this
(INIT part only):

  INIT = func {
      ...
      setlistener("/sim/rendering/fps-display", fpsDisplay, 1);
  }

That is: the optional third arg makes fpsDisplay be called initially,
and then again with every write action. My first solution was in the
Nasal code only, but Andy (rightfully) says that this should rather
be in sg.
simgear/props/props.cxx
simgear/props/props.hxx