namespace flightgear
{
-
+
+ /**
+ * return the default platform dependant download directory.
+ * This must be a user-writeable location, the question is if it should
+ * be a user visible location. On Windows we default to a subdir of
+ * Documents (FlightGear), on Unixes we default to FG_HOME, which is
+ * typically invisible.
+ */
+ std::string defaultDownloadDir();
+
+/// option processing can have various result values
+/// depending on what the user requested. Note processOptions only
+/// returns a subset of these.
+enum OptionResult
+{
+ FG_OPTIONS_OK = 0,
+ FG_OPTIONS_HELP = 1,
+ FG_OPTIONS_ERROR = 2,
+ FG_OPTIONS_EXIT = 3,
+ FG_OPTIONS_VERBOSE_HELP = 4,
+ FG_OPTIONS_SHOW_AIRCRAFT = 5,
+ FG_OPTIONS_SHOW_SOUND_DEVICES = 6,
+ FG_OPTIONS_NO_DEFAULT_CONFIG = 7
+};
+
class Options
{
private:
/**
* pass command line arguments, read default config files
*/
- void init(int argc, char* argv[]);
+ void init(int argc, char* argv[], const SGPath& appDataPath);
/**
* parse a config file (eg, .fgfsrc)
/**
* apply option values to the simulation state
- * (set properties, etc)
+ * (set properties, etc).
*/
- void processOptions();
-
+ OptionResult processOptions();
+
+ /**
+ * process command line options relating to scenery / aircraft / data paths
+ */
+ void initPaths();
+
/**
* init the aircraft options
*/
void initAircraft();
+
+ /**
+ * should defualt configuration files be loaded and processed or not?
+ * There's many configuration files we have historically read by default
+ * on startup - preferences.xml, fgfs.rc in various places and so on.
+ * --no-default-config allows this behaviour to be changed, so only
+ * expicitly listed files are read - this is useful for testing. Expose
+ * the value of the option here.
+ */
+ bool shouldLoadDefaultConfig() const;
+
+ /**
+ * check if the arguments array contains a particular string (with a '--' or
+ * '-' prefix).
+ * Used by early startup code before Options object is created
+ */
+ static bool checkForArg(int argc, char* argv[], const char* arg);
private:
void showUsage() const;
int parseOption(const std::string& s);
void processArgResult(int result);
-
- void setupRoot();
+
+ /**
+ * Setup the root base, and check it's valid. Bails out with exit(-1) if
+ * the root package was not found or is the incorrect version. Argv/argv
+ * are passed since we might potentially show a GUI dialog at this point
+ * to help the user our (finding a base package), and hence need to init Qt.
+ */
+ void setupRoot(int argc, char **argv);
std::string platformDefaultRoot() const;
} // of namespace flightgear
+void fgSetDefaults();
+
#endif /* _OPTIONS_HXX */