void AptDialog_OK (puObject *)
{
+ static const SGPropertyNode *longitude
+ = fgGetNode("/position/longitude-deg");
+ static const SGPropertyNode *latitude
+ = fgGetNode("/position/latitude-deg");
+ static const SGPropertyNode *master_freeze
+ = fgGetNode("/sim/freeze/master");
+
SGPath path( globals->get_fg_root() );
path.append( "Airports" );
path.append( "simple.mk4" );
FGAirport a;
- int freeze = globals->get_freeze();
- if(!freeze)
- globals->set_freeze( true );
+ bool freeze = master_freeze->getBoolValue();
+ if ( !freeze ) {
+ fgSetBool("/sim/freeze/master", true);
+ }
char *s;
AptDialogInput->getValue(&s);
<< AptId );
if ( airports.search( AptId, &a ) )
- {
- AptId = a.id.c_str(); /// NHV fix wrong case crash
- fgSetString("/sim/startup/airport-id", AptId.c_str() );
- // fgSetDouble("/position/altitude-ft", -9999.0 );
- // fgSetPosFromAirportID( AptId );
- fgSetPosFromAirportIDandHdg( AptId,
- cur_fdm_state->get_Psi() *
- SGD_RADIANS_TO_DEGREES);
- BusyCursor(0);
- fgReInitSubsystems();
- if ( global_tile_mgr.init() ) {
- // Load the local scenery data
- global_tile_mgr.update(
- cur_fdm_state->get_Longitude()
- * SGD_RADIANS_TO_DEGREES,
- cur_fdm_state->get_Latitude()
- * SGD_RADIANS_TO_DEGREES );
- } else {
- SG_LOG( SG_GENERAL, SG_ALERT,
- "Error in Tile Manager initialization!" );
- exit(-1);
- }
- BusyCursor(1);
- } else {
- AptId += " not in database.";
- mkDialog(AptId.c_str());
- }
+ {
+ // unbind the current fdm state so property changes
+ // don't get lost when we subsequently delete this fdm
+ // and create a new one.
+ cur_fdm_state->unbind();
+
+ AptId = a.id.c_str(); /// NHV fix wrong case crash
+ fgSetString("/sim/startup/airport-id", AptId.c_str() );
+ // fgSetDouble("/position/altitude-ft", -9999.0 );
+ // fgSetPosFromAirportID( AptId );
+ fgSetPosFromAirportIDandHdg( AptId,
+ cur_fdm_state->get_Psi() *
+ SGD_RADIANS_TO_DEGREES);
+ // BusyCursor(0);
+ fgReInitSubsystems();
+ global_tile_mgr.update( longitude->getDoubleValue(),
+ latitude->getDoubleValue() );
+ // BusyCursor(1);
+ } else {
+ AptId += " not in database.";
+ mkDialog(AptId.c_str());
+ }
+ }
+ if ( !freeze ) {
+ fgSetBool("/sim/freeze/master", false);
}
- if(!freeze)
- globals->set_freeze( false );
}
{
// strncpy( NewAirportId, fgGetString("/sim/startup/airport-id").c_str(), 16 );
sprintf( NewAirportId, "%s", fgGetString("/sim/startup/airport-id").c_str() );
- // cout << "NewAirport " << NewAirportId << endl;
+ // cout << "NewAirport " << NewAirportId << endl;
AptDialogInput->setValue( NewAirportId );
FG_PUSH_PUI_DIALOG( AptDialog );
void NewAirportInit(void)
{
sprintf( NewAirportId, "%s", fgGetString("/sim/startup/airport-id").c_str() );
- int len = 150 - puGetStringWidth( puGetDefaultLabelFont(),
- NewAirportLabel ) / 2;
+ int len = 150
+ - puGetDefaultLabelFont().getStringWidth( NewAirportLabel ) / 2;
AptDialog = new puDialogBox (150, 50);
{