Cleaned up Physfs/filesystem initialisation
[supertux.git] / src / supertux / command_line_arguments.hpp
1 //  SuperTux
2 //  Copyright (C) 2014 Ingo Ruhnke <grumbel@gmail.com>
3 //
4 //  This program is free software: you can redistribute it and/or modify
5 //  it under the terms of the GNU General Public License as published by
6 //  the Free Software Foundation, either version 3 of the License, or
7 //  (at your option) any later version.
8 //
9 //  This program is distributed in the hope that it will be useful,
10 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
11 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 //  GNU General Public License for more details.
13 //
14 //  You should have received a copy of the GNU General Public License
15 //  along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
17 #ifndef HEADER_SUPERTUX_SUPERTUX_OPTIONS_HPP
18 #define HEADER_SUPERTUX_SUPERTUX_OPTIONS_HPP
19
20 #include <boost/optional.hpp>
21
22 #include "math/size.hpp"
23 #include "util/log.hpp"
24 #include "video/video_system.hpp"
25
26 class Config;
27
28 /** Command line argument parsing */
29 class CommandLineArguments
30 {
31 public:
32   enum Action
33   {
34     NO_ACTION,
35     PRINT_VERSION,
36     PRINT_HELP,
37     PRINT_DATADIR
38   };
39
40 private:
41   Action m_action;
42   LogLevel m_log_level;
43
44 public:
45   boost::optional<Size> fullscreen_size;
46   boost::optional<int> fullscreen_refresh_rate;
47   boost::optional<Size> window_size;
48   boost::optional<Size> aspect_size;
49
50   // boost::optional<float> magnification;
51
52   boost::optional<bool> use_fullscreen;
53    boost::optional<VideoSystem::Enum> video;
54   // boost::optional<bool> try_vsync;
55   boost::optional<bool> show_fps;
56   boost::optional<bool> sound_enabled;
57   boost::optional<bool> music_enabled;
58   boost::optional<bool> console_enabled;
59
60   // boost::optional<int> random_seed;
61
62   boost::optional<std::string> start_level;
63   boost::optional<bool> enable_script_debugger;
64   boost::optional<std::string> start_demo;
65   boost::optional<std::string> record_demo;
66
67   // boost::optional<std::string> locale;
68
69 public:
70   CommandLineArguments();
71   ~CommandLineArguments();
72
73   Action get_action() const { return m_action; }
74   LogLevel get_log_level() const { return m_log_level; }
75
76   void parse_args(int argc, char** argv);
77
78   void print_help(const char* arg0);
79   void print_version();
80   void print_datadir();
81
82   void merge_into(Config& config);
83
84 private:
85   CommandLineArguments(const CommandLineArguments&) = delete;
86   CommandLineArguments& operator=(const CommandLineArguments&) = delete;
87 };
88
89 #endif
90
91 /* EOF */