+ globals->get_commands()->addCommand("panel-mouse-click", this, &FGPanelNode::panelMouseClickCommand);
+
+ SGPropertyNode* pathNode = fgGetNode("/sim/panel/path");
+ _pathListener.reset(new PanelPathListener(this));
+ pathNode->addChangeListener(_pathListener.get());
+ setPanelPath(pathNode->getStringValue());
+
+ // for a 2D panel, various options adjust the transformation
+ // matrix. We need to pass this data on to OSG or its bounding box
+ // will be stale, and picking will break.
+ // http://code.google.com/p/flightgear-bugs/issues/detail?id=864
+ _listener = new PanelTransformListener(this);
+ fgGetNode("/sim/panel/x-offset", true)->addChangeListener(_listener);
+ fgGetNode("/sim/panel/y-offset", true)->addChangeListener(_listener);
+ fgGetNode("/sim/startup/xsize", true)->addChangeListener(_listener);
+ fgGetNode("/sim/startup/ysize", true)->addChangeListener(_listener);
+
+ commonInit();
+}
+
+FGPanelNode::~FGPanelNode()
+{
+ if (_is2d) {
+ globals->get_commands()->removeCommand("panel-mouse-click");
+ SGPropertyNode* pathNode = fgGetNode("/sim/panel/path");
+ pathNode->removeChangeListener(_pathListener.get());
+ }
+
+ if (_listener) {
+ fgGetNode("/sim/panel/x-offset", true)->removeChangeListener(_listener);
+ fgGetNode("/sim/panel/y-offset", true)->removeChangeListener(_listener);
+ fgGetNode("/sim/startup/xsize", true)->removeChangeListener(_listener);
+ fgGetNode("/sim/startup/ysize", true)->removeChangeListener(_listener);
+ delete _listener;
+ }