diff --git a/src/Instrumentation/navradio.cxx b/src/Instrumentation/navradio.cxx index 3b9deed33..03e049b26 100644 --- a/src/Instrumentation/navradio.cxx +++ b/src/Instrumentation/navradio.cxx @@ -201,10 +201,13 @@ FGNavRadio::init () SGPropertyNode *subnode = node->getChild("frequencies", 0, true); freq_node = subnode->getChild("selected-mhz", 0, true); alt_freq_node = subnode->getChild("standby-mhz", 0, true); + freq_node->addChangeListener(this); + alt_freq_node->addChangeListener(this); + fmt_freq_node = subnode->getChild("selected-mhz-fmt", 0, true); fmt_alt_freq_node = subnode->getChild("standby-mhz-fmt", 0, true); is_loc_freq_node = subnode->getChild("is-localizer-frequency", 0, true ); - + // radials subnode = node->getChild("radials", 0, true); sel_radial_node = subnode->getChild("selected-deg", 0, true); @@ -376,15 +379,6 @@ FGNavRadio::update(double dt) return; // paused } - // Create "formatted" versions of the nav frequencies for - // instrument displays. - char tmp[16]; - sprintf( tmp, "%.2f", freq_node->getDoubleValue() ); - fmt_freq_node->setStringValue(tmp); - sprintf( tmp, "%.2f", alt_freq_node->getDoubleValue() ); - fmt_alt_freq_node->setStringValue(tmp); - is_loc_freq_node->setBoolValue( IsLocalizerFrequency( freq_node->getDoubleValue() )); - if (power_btn_node->getBoolValue() && (bus_power_node->getDoubleValue() > 1.0) && nav_serviceable_node->getBoolValue() ) @@ -399,6 +393,18 @@ FGNavRadio::update(double dt) updateAudio( dt ); } +void FGNavRadio::updateFormattedFrequencies() +{ + // Create "formatted" versions of the nav frequencies for + // instrument displays. + char tmp[16]; + sprintf( tmp, "%.2f", freq_node->getDoubleValue() ); + fmt_freq_node->setStringValue(tmp); + sprintf( tmp, "%.2f", alt_freq_node->getDoubleValue() ); + fmt_alt_freq_node->setStringValue(tmp); + is_loc_freq_node->setBoolValue( IsLocalizerFrequency( freq_node->getDoubleValue() )); +} + void FGNavRadio::clearOutputs() { inrange_node->setBoolValue( false ); @@ -711,6 +717,10 @@ void FGNavRadio::valueChanged (SGPropertyNode* prop) // slave-to-GPS enabled/disabled, resync NAV station (update all outputs) _navaid = NULL; _time_before_search_sec = 0; + } else if ((prop == freq_node) || (prop == alt_freq_node)) { + updateFormattedFrequencies(); + // force a frequency update + _time_before_search_sec = 0.0; } } diff --git a/src/Instrumentation/navradio.hxx b/src/Instrumentation/navradio.hxx index c731f1d2b..774408e18 100644 --- a/src/Instrumentation/navradio.hxx +++ b/src/Instrumentation/navradio.hxx @@ -164,6 +164,7 @@ class FGNavRadio : public SGSubsystem, public SGPropertyChangeListener void updateGlideSlope(double dt, const SGVec3d& aircraft, double signal_quality_norm); void updateGPSSlaved(); void updateCDI(double dt); + void updateFormattedFrequencies(); void clearOutputs();