--- /dev/null
+// preset_dlg.cxx -- Preset dialogs and funcitons
+//
+// Written by Curtis Olson, started November 2002.
+//
+// Copyright (C) 2002 Curtis L. Olson - curt@flightgear.org
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as
+// published by the Free Software Foundation; either version 2 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+// $Id$
+
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <simgear/compiler.h>
+
+#ifdef HAVE_WINDOWS_H
+# include <windows.h>
+#endif
+
+// #include <stdlib.h>
+
+// #include <simgear/constants.h>
+// #include <simgear/debug/logstream.hxx>
+#include <simgear/misc/sg_path.hxx>
+
+// #include <Include/general.hxx>
+
+// #include <GL/glut.h>
+// #include <GL/gl.h>
+
+#include <Airports/simple.hxx>
+#include <FDM/flight.hxx>
+#include <Main/fg_init.hxx>
+#include <Main/fg_props.hxx>
+#include <Scenery/tilemgr.hxx>
+
+#include "gui.h"
+#include "preset_dlg.hxx"
+
+
+static puDialogBox *PresetDialog = 0;
+static puFrame *PresetDialogFrame = 0;
+static puText *PresetDialogMessage = 0;
+static puInput *PresetDialogInput = 0;
+
+static const int MAX_VALUE = 16;
+static char PresetValue[MAX_VALUE];
+static char PresetSavedValue[MAX_VALUE];
+static char PresetLabel[] = "Enter New Airport ID";
+static string PresetProperty = "";
+
+static puOneShot *PresetDialogOkButton = 0;
+static puOneShot *PresetDialogCancelButton = 0;
+static puOneShot *PresetDialogResetButton = 0;
+
+
+static void PresetDialog_OK(puObject *)
+{
+ char *value;
+ PresetDialogInput->getValue(&value);
+ cout << "setting " << PresetProperty << " = " << value << endl;
+ fgSetString( PresetProperty.c_str(), value );
+ FG_POP_PUI_DIALOG( PresetDialog );
+
+ // consistancy handling for some specialized cases
+ if ( PresetProperty == "/sim/presets/airport-id" ) {
+ fgSetDouble("/sim/presets/longitude-deg", -9999.0 );
+ fgSetDouble("/sim/presets/latitude-deg", -9999.0 );
+ } else if ( PresetProperty == "/sim/presets/runway" ) {
+ fgSetDouble("/sim/presets/longitude-deg", -9999.0 );
+ fgSetDouble("/sim/presets/latitude-deg", -9999.0 );
+ } else if ( PresetProperty == "/sim/presets/offset-distance" ) {
+ if ( fabs(fgGetDouble("/sim/presets/altitude-ft")) > 0.000001
+ && fabs(fgGetDouble("/sim/presets/glideslope-deg")) > 0.000001 ) {
+ fgSetDouble("/sim/presets/altitude-ft", -9999.0);
+ cout << "nuking altitude" << endl;
+ }
+ } else if ( PresetProperty == "/sim/presets/altitude-ft" ) {
+ if ( fabs(fgGetDouble("/sim/presets/offset-distance")) > 0.000001
+ && fabs(fgGetDouble("/sim/presets/glideslope-deg")) > 0.000001 ) {
+ fgSetDouble("/sim/presets/offset-distance", 0.0);
+ cout << "nuking offset distance" << endl;
+ }
+ } else if ( PresetProperty == "/sim/presets/glideslope-deg" ) {
+ if ( fabs(fgGetDouble("/sim/presets/offset-distance")) > 0.000001
+ && fabs(fgGetDouble("/sim/presets/altitude-ft")) > 0.000001 ) {
+ fgSetDouble("/sim/presets/altitude-ft", -9999.0);
+ cout << "nuking altitude" << endl;
+ }
+ }
+}
+
+
+static void PresetDialog_Cancel(puObject *)
+{
+ FG_POP_PUI_DIALOG( PresetDialog );
+}
+
+
+static void PresetDialog_Reset(puObject *)
+{
+ PresetDialogInput->setValue( PresetSavedValue );
+ PresetDialogInput->setCursor( 0 ) ;
+}
+
+
+// Initialize the preset dialog box
+void fgPresetInit()
+{
+ sprintf( PresetValue, "%s", fgGetString("/sim/presets/airport-id") );
+ int len = 150
+ - puGetDefaultLabelFont().getStringWidth( PresetLabel ) / 2;
+
+ PresetDialog = new puDialogBox (150, 50);
+ {
+ PresetDialogFrame = new puFrame (0,0,350, 150);
+ PresetDialogMessage = new puText (len, 110);
+ PresetDialogMessage -> setLabel ("");
+
+ PresetDialogInput = new puInput (50, 70, 300, 100);
+ PresetDialogInput -> setValue ("");
+ PresetDialogInput -> acceptInput();
+
+ PresetDialogOkButton = new puOneShot (50, 10, 110, 50);
+ PresetDialogOkButton -> setLegend(gui_msg_OK);
+ PresetDialogOkButton -> setCallback (PresetDialog_OK);
+ PresetDialogOkButton -> makeReturnDefault(TRUE);
+
+ PresetDialogCancelButton = new puOneShot (140, 10, 210, 50);
+ PresetDialogCancelButton -> setLegend (gui_msg_CANCEL);
+ PresetDialogCancelButton -> setCallback (PresetDialog_Cancel);
+
+ PresetDialogResetButton = new puOneShot (240, 10, 300, 50);
+ PresetDialogResetButton -> setLegend (gui_msg_RESET);
+ PresetDialogResetButton -> setCallback (PresetDialog_Reset);
+ }
+ cout << "PresetInit " << PresetValue << endl;
+ FG_FINALIZE_PUI_DIALOG( PresetDialog );
+}
+
+
+void fgPresetAirport(puObject *cb)
+{
+ PresetDialogMessage -> setLabel( "Enter Airport ID:" );
+ PresetProperty = "/sim/presets/airport-id";
+ snprintf( PresetValue, MAX_VALUE, "%s",
+ fgGetString(PresetProperty.c_str()) );
+ snprintf( PresetSavedValue, MAX_VALUE, "%s",
+ fgGetString(PresetProperty.c_str()) );
+ PresetDialogInput->setValue( PresetValue );
+
+ FG_PUSH_PUI_DIALOG( PresetDialog );
+}
+
+
+void fgPresetRunway(puObject *cb)
+{
+ PresetDialogMessage -> setLabel( "Enter Runway Number:" );
+ PresetProperty = "/sim/presets/runway";
+ snprintf( PresetValue, MAX_VALUE, "%s",
+ fgGetString(PresetProperty.c_str()) );
+ snprintf( PresetSavedValue, MAX_VALUE, "%s",
+ fgGetString(PresetProperty.c_str()) );
+ PresetDialogInput->setValue( PresetValue );
+
+ FG_PUSH_PUI_DIALOG( PresetDialog );
+}
+
+
+void fgPresetOffsetDistance(puObject *cb)
+{
+ PresetDialogMessage -> setLabel( "Enter Offset Distance (miles):" );
+ PresetProperty = "/sim/presets/offset-distance";
+ snprintf( PresetValue, MAX_VALUE, "%s",
+ fgGetString(PresetProperty.c_str()) );
+ snprintf( PresetSavedValue, MAX_VALUE, "%s",
+ fgGetString(PresetProperty.c_str()) );
+ PresetDialogInput->setValue( PresetValue );
+
+ FG_PUSH_PUI_DIALOG( PresetDialog );
+}
+
+
+void fgPresetAltitude(puObject *cb)
+{
+ PresetDialogMessage -> setLabel( "Enter Altitude (feet):" );
+ PresetProperty = "/sim/presets/altitude-ft";
+ snprintf( PresetValue, MAX_VALUE, "%s",
+ fgGetString(PresetProperty.c_str()) );
+ snprintf( PresetSavedValue, MAX_VALUE, "%s",
+ fgGetString(PresetProperty.c_str()) );
+ PresetDialogInput->setValue( PresetValue );
+
+ FG_PUSH_PUI_DIALOG( PresetDialog );
+}
+
+
+void fgPresetGlideslope(puObject *cb)
+{
+ PresetDialogMessage -> setLabel( "Enter Glideslope (deg):" );
+ PresetProperty = "/sim/presets/glideslope-deg";
+ snprintf( PresetValue, MAX_VALUE, "%s",
+ fgGetString(PresetProperty.c_str()) );
+ snprintf( PresetSavedValue, MAX_VALUE, "%s",
+ fgGetString(PresetProperty.c_str()) );
+ PresetDialogInput->setValue( PresetValue );
+
+ FG_PUSH_PUI_DIALOG( PresetDialog );
+}
+
+
+void fgPresetAirspeed(puObject *cb)
+{
+ PresetDialogMessage -> setLabel( "Enter Airspeed (kts):" );
+ PresetProperty = "/sim/presets/airspeed-kt";
+ snprintf( PresetValue, MAX_VALUE, "%s",
+ fgGetString(PresetProperty.c_str()) );
+ snprintf( PresetSavedValue, MAX_VALUE, "%s",
+ fgGetString(PresetProperty.c_str()) );
+ PresetDialogInput->setValue( PresetValue );
+
+ FG_PUSH_PUI_DIALOG( PresetDialog );
+}
+
+
+void fgPresetCommit(puObject *)
+{
+ static const SGPropertyNode *longitude
+ = fgGetNode("/sim/presets/longitude-deg");
+ static const SGPropertyNode *latitude
+ = fgGetNode("/sim/presets/latitude-deg");
+ static const SGPropertyNode *master_freeze
+ = fgGetNode("/sim/freeze/master");
+
+ SGPath path( globals->get_fg_root() );
+ path.append( "Airports" );
+ path.append( "simple.mk4" );
+ FGAirports airports( path.c_str() );
+
+ FGAirport a;
+
+ bool freeze = master_freeze->getBoolValue();
+ if ( !freeze ) {
+ fgSetBool("/sim/freeze/master", true);
+ }
+
+ // 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();
+
+ // invalidate lon/lat if an airport is specified in the presets
+ string apt = fgGetString("/sim/presets/airport-id");
+ if ( !apt.empty() ) {
+ fgSetDouble("/sim/presets/longitude-deg", -9999.0 );
+ fgSetDouble("/sim/presets/latitude-deg", -9999.0 );
+ }
+
+ // set position from presets
+ fgInitPosition();
+
+ // BusyCursor(0);
+ fgReInitSubsystems();
+
+ cout << "before tile_mgr init " << longitude->getDoubleValue() << " "
+ << latitude->getDoubleValue() << endl;
+
+ double visibility_meters =
+ fgGetDouble("/environment/visibility-m");
+ global_tile_mgr.update( longitude->getDoubleValue(),
+ latitude->getDoubleValue(),
+ visibility_meters );
+ // BusyCursor(1);
+
+ if ( !freeze ) {
+ fgSetBool("/sim/freeze/master", false);
+ }
+}
+
+