]> git.mxchange.org Git - flightgear.git/blobdiff - src/Main/options.cxx
GUI windows are now draggable. This missing feature has annoyed me
[flightgear.git] / src / Main / options.cxx
index 1d76c20bdecc1574c7978df44371e068f4032076..0e19d6ee38f6f7f379c5826334d07d2873150ec1 100644 (file)
@@ -534,97 +534,19 @@ add_channel( const string& type, const string& channel_str ) {
     return true;
 }
 
-
-static void
-setup_wind (double min_hdg, double max_hdg, double speed, double gust)
-{
-                                // Initialize to a reasonable state
-  fgDefaultWeatherValue("wind-from-heading-deg", min_hdg);
-  fgDefaultWeatherValue("wind-speed-kt", speed);
-
-  SG_LOG(SG_GENERAL, SG_INFO, "WIND: " << min_hdg << '@' << 
-        speed << " knots" << endl);
-
-                                // Now, add some variety to the layers
-  min_hdg += 10;
-  if (min_hdg > 360)
-      min_hdg -= 360;
-  speed *= 1.1;
-  fgSetDouble("/environment/config/boundary/entry[1]/wind-from-heading-deg",
-              min_hdg);
-  fgSetDouble("/environment/config/boundary/entry[1]/wind-speed-kt",
-              speed);
-
-  min_hdg += 20;
-  if (min_hdg > 360)
-      min_hdg -= 360;
-  speed *= 1.1;
-  fgSetDouble("/environment/config/aloft/entry[0]/wind-from-heading-deg",
-              min_hdg);
-  fgSetDouble("/environment/config/aloft/entry[0]/wind-speed-kt",
-              speed);
-              
-  min_hdg += 10;
-  if (min_hdg > 360)
-      min_hdg -= 360;
-  speed *= 1.1;
-  fgSetDouble("/environment/config/aloft/entry[1]/wind-from-heading-deg",
-              min_hdg);
-  fgSetDouble("/environment/config/aloft/entry[1]/wind-speed-kt",
-              speed);
-              
-  min_hdg += 10;
-  if (min_hdg > 360)
-      min_hdg -= 360;
-  speed *= 1.1;
-  fgSetDouble("/environment/config/aloft/entry[2]/wind-from-heading-deg",
-              min_hdg);
-  fgSetDouble("/environment/config/aloft/entry[2]/wind-speed-kt",
-              speed);
-
-#ifdef FG_WEATHERCM
-  // convert to fps
-  speed *= SG_NM_TO_METER * SG_METER_TO_FEET * (1.0/3600);
-  while (min_hdg > 360)
-    min_hdg -= 360;
-  while (min_hdg <= 0)
-    min_hdg += 360;
-  min_hdg *= SGD_DEGREES_TO_RADIANS;
-  fgSetDouble("/environment/wind-from-north-fps", speed * cos(dir));
-  fgSetDouble("/environment/wind-from-east-fps", speed * sin(dir));
-#endif // FG_WEATHERCM
-}
-
+// The parse wp and parse flight-plan options don't work anymore, because 
+// the route manager and the airport subsystems have not yet been initialized
+// at this stage. 
 
 // Parse --wp=ID[@alt]
-static bool 
+static void 
 parse_wp( const string& arg ) {
-    string id, alt_str;
-    double alt = 0.0;
-
-    string::size_type pos = arg.find( "@" );
-    if ( pos != string::npos ) {
-       id = arg.substr( 0, pos );
-       alt_str = arg.substr( pos + 1 );
-       // cout << "id str = " << id << "  alt str = " << alt_str << endl;
-       alt = atof( alt_str.c_str() );
-       if ( !strcmp(fgGetString("/sim/startup/units"), "feet") ) {
-           alt *= SG_FEET_TO_METER;
-       }
-    } else {
-       id = arg;
-    }
-
-    FGAirport a;
-    if ( fgFindAirportID( id, &a ) ) {
-        FGRouteMgr *rm = (FGRouteMgr *)globals->get_subsystem("route-manager");
-       SGWayPoint wp( a.longitude, a.latitude, alt, SGWayPoint::WGS84, id );
-       rm->add_waypoint( wp );
-
-       return true;
-    } else {
-       return false;
+    string_list *waypoints = globals->get_initial_waypoints();
+    if (!waypoints) {
+        waypoints = new string_list;
     }
+    waypoints->push_back(arg);
+    globals->set_initial_waypoints(waypoints);
 }
 
 
@@ -632,31 +554,34 @@ parse_wp( const string& arg ) {
 static bool 
 parse_flightplan(const string& arg)
 {
-    sg_gzifstream in(arg.c_str());
-    if ( !in.is_open() ) {
-       return false;
-    }
-    while ( true ) {
-       string line;
-
+  string_list *waypoints = globals->get_initial_waypoints();
+  if (!waypoints)
+    waypoints = new string_list;
+  sg_gzifstream in(arg.c_str());
+  if ( !in.is_open() ) {
+    return false;
+  }
+  while ( true ) {
+    string line;
+    
 #if defined( macintosh )
-        getline( in, line, '\r' );
+    getline( in, line, '\r' );
 #else
-       getline( in, line, '\n' );
+    getline( in, line, '\n' );
 #endif
-
-        // catch extraneous (DOS) line ending character
-        if ( line[line.length() - 1] < 32 ) {
-            line = line.substr( 0, line.length()-1 );
-        }
-
-       if ( in.eof() ) {
-           break;
-       }
-       parse_wp(line);
+    
+    // catch extraneous (DOS) line ending character
+    if ( line[line.length() - 1] < 32 ) {
+      line = line.substr( 0, line.length()-1 );
     }
-
-    return true;
+    
+    if ( in.eof() ) {
+      break;
+    }
+    waypoints->push_back(line);
+  }
+  globals->set_initial_waypoints(waypoints);
+  return true;
 }
 
 static int
@@ -930,6 +855,32 @@ fgOptStartDateGmt( const char *arg )
     return FG_OPTIONS_OK;
 }
 
+static int
+fgSetupProxy( const char *arg )
+{
+    string options = arg;
+    string host, port, auth;
+    unsigned int pos;
+
+    host = port = auth = "";
+    if ((pos = options.find("@")) != string::npos) 
+        auth = options.substr(0, pos++);
+    else
+        pos = 0;
+
+    host = options.substr(pos, options.size());
+    if ((pos = host.find(":")) != string::npos) {
+        port = host.substr(++pos, host.size());
+        host.erase(--pos, host.size());
+    }
+
+    fgSetString("/sim/presets/proxy/host", host.c_str());
+    fgSetString("/sim/presets/proxy/port", port.c_str());
+    fgSetString("/sim/presets/proxy/authentication", auth.c_str());
+
+    return FG_OPTIONS_OK;
+}
+
 static int
 fgOptTraceRead( const char *arg )
 {
@@ -1026,7 +977,7 @@ fgOptRandomWind( const char *arg )
     double max_hdg = min_hdg + (20 - sqrt(sg_random() * 400));
     double speed = sg_random() * sg_random() * 40;
     double gust = speed + (10 - sqrt(sg_random() * 100));
-    setup_wind(min_hdg, max_hdg, speed, gust);
+    fgSetupWind(min_hdg, max_hdg, speed, gust);
     return FG_OPTIONS_OK;
 }
 
@@ -1038,7 +989,7 @@ fgOptWind( const char *arg )
        SG_LOG( SG_GENERAL, SG_ALERT, "bad wind value " << arg );
        return FG_OPTIONS_ERROR;
     }
-    setup_wind(min_hdg, max_hdg, speed, gust);
+    fgSetupWind(min_hdg, max_hdg, speed, gust);
     return FG_OPTIONS_OK;
 }
 
@@ -1352,6 +1303,7 @@ struct OptionDesc {
     {"rul",                          true,  OPTION_CHANNEL, "", false, "", 0 },
     {"joyclient",                    true,  OPTION_CHANNEL, "", false, "", 0 },
     {"jsclient",                     true,  OPTION_CHANNEL, "", false, "", 0 },
+    {"proxy",                        true,  OPTION_FUNC,    "", false, "", fgSetupProxy },
 #ifdef FG_MPLAYER_AS
     {"callsign",                     true, OPTION_STRING,  "sim/multiplay/callsign", false, "", 0 },
     {"multiplay",                    true,  OPTION_CHANNEL, "", false, "", 0 },
@@ -1600,6 +1552,7 @@ fgUsage (bool verbose)
 
     SGPropertyNode options_root;
 
+    SG_LOG( SG_GENERAL, SG_ALERT, "" ); // To popup the console on Windows
     cout << endl;
 
     try {
@@ -1720,6 +1673,10 @@ fgUsage (bool verbose)
         cout << endl;
         cout << "For a complete list of options use --help --verbose" << endl;
     }
+#ifdef _MSC_VER
+    cout << "Hit a key to continue..." << endl;
+    cin.get();
+#endif
 }
 
 static void fgSearchAircraft(const SGPath &path, string_list &aircraft,
@@ -1796,8 +1753,13 @@ void fgShowAircraft(const SGPath &path, bool recursive) {
     fgSearchAircraft( path, aircraft, recursive );
 
     sort(aircraft.begin(), aircraft.end());
+    SG_LOG( SG_GENERAL, SG_ALERT, "" ); // To popup the console on Windows
     cout << "Available aircraft:" << endl;
     for ( unsigned int i = 0; i < aircraft.size(); i++ ) {
         cout << aircraft[i] << endl;
     }
+#ifdef _MSC_VER
+    cout << "Hit a key to continue..." << endl;
+    cin.get();
+#endif
 }