Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/core2/src/orxonox/core/ConfigValueContainer.h @ 949

Last change on this file since 949 was 947, checked in by landauf, 16 years ago
  • added CommandExecutor
  • added ConsoleCommand macros
  • added getTypename to all MultiTypes
  • added 2 static maps to Identifier that contain all existing Identifiers with their names and lowercase names respectively.
  • added 2 maps to each Identifier that contain all console commands of the Identifier with their names and lowercase names respectively
  • using tolower(.) and toupper(.) instead of selfmade hacks in String.h
  • added AccessLevel enum
  • added some test-console-commands to OutputHandler, Ambient and SpaceShip
File size: 8.7 KB
Line 
1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *
4 *
5 *   License notice:
6 *
7 *   This program is free software; you can redistribute it and/or
8 *   modify it under the terms of the GNU General Public License
9 *   as published by the Free Software Foundation; either version 2
10 *   of the License, or (at your option) any later version.
11 *
12 *   This program is distributed in the hope that it will be useful,
13 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
14 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 *   GNU General Public License for more details.
16 *
17 *   You should have received a copy of the GNU General Public License
18 *   along with this program; if not, write to the Free Software
19 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
20 *
21 *   Author:
22 *      Fabian 'x3n' Landau
23 *   Co-authors:
24 *      ...
25 *
26 */
27
28/**
29    @file ConfigValueContainer.h
30    @brief Definition of the ConfigValueContainer class.
31
32    The ConfigValueContainer class contains all needed informations about a configurable variable:
33     - the name of the variable
34     - the name of the class the variable belongs to
35     - the default value
36     - the user-specified value
37     - a pointer to the entry in the config-file
38
39    This is needed to assign the configured values to all newly created objects.
40*/
41
42#ifndef _ConfigValueContainer_H__
43#define _ConfigValueContainer_H__
44
45#include <list>
46#include <string>
47
48#include "CorePrereqs.h"
49
50#include "util/Math.h"
51#include "util/MultiTypeMath.h"
52
53namespace orxonox
54{
55    //! The ConfigValuecontainer contains all needed informations about a configurable variable.
56    /**
57        The ConfigValueContainer class contains all needed informations about a configurable variable:
58         - the name of the variable
59         - the name of the class the variable belongs to
60         - the default value
61         - the user-specified value
62         - a pointer to the entry in the config-file
63
64        This is needed to assign the configured values to all newly created objects.
65
66        The container searches for the entry in the config file.
67        If there is an entry, it parses the specified value and assigns it to the variable of the right type.
68        If there is no entry, it adds the entry with the default-value to the section of the variables class.
69        If there is no section, the section and the entry are added to the end of the config-file.
70    */
71    class _CoreExport ConfigValueContainer
72    {
73        public:
74            ConfigValueContainer(const std::string& classname, const std::string& varname, MultiTypeMath defvalue);
75
76            /** @brief Returns the configured value. @param value This is only needed to determine the right type. @return The value */
77/*            template <typename T>
78            inline ConfigValueContainer& getValue(T& value)                           { this->value_.getValue(value); return *this; }
79*/
80            inline ConfigValueContainer& getValue(int* value)            { this->value_.getValue(value); return *this; }
81            inline ConfigValueContainer& getValue(unsigned int* value)   { this->value_.getValue(value); return *this; }
82            inline ConfigValueContainer& getValue(char* value)           { this->value_.getValue(value); return *this; }
83            inline ConfigValueContainer& getValue(unsigned char* value)  { this->value_.getValue(value); return *this; }
84            inline ConfigValueContainer& getValue(short* value)          { this->value_.getValue(value); return *this; }
85            inline ConfigValueContainer& getValue(unsigned short* value) { this->value_.getValue(value); return *this; }
86            inline ConfigValueContainer& getValue(long* value)           { this->value_.getValue(value); return *this; }
87            inline ConfigValueContainer& getValue(unsigned long* value)  { this->value_.getValue(value); return *this; }
88            inline ConfigValueContainer& getValue(float* value)          { this->value_.getValue(value); return *this; }
89            inline ConfigValueContainer& getValue(double* value)         { this->value_.getValue(value); return *this; }
90            inline ConfigValueContainer& getValue(long double* value)    { this->value_.getValue(value); return *this; }
91            inline ConfigValueContainer& getValue(bool* value)           { this->value_.getValue(value); return *this; }
92            inline ConfigValueContainer& getValue(std::string* value)    { this->value_.getValue(value); return *this; }
93            inline ConfigValueContainer& getValue(const char** value)    { this->value_.getValue(value); return *this; }
94            inline ConfigValueContainer& getValue(Vector2* value)        { this->value_.getValue(value); return *this; }
95            inline ConfigValueContainer& getValue(Vector3* value)        { this->value_.getValue(value); return *this; }
96            inline ConfigValueContainer& getValue(ColourValue* value)    { this->value_.getValue(value); return *this; }
97            inline ConfigValueContainer& getValue(Quaternion* value)     { this->value_.getValue(value); return *this; }
98            inline ConfigValueContainer& getValue(Radian* value)         { this->value_.getValue(value); return *this; }
99            inline ConfigValueContainer& getValue(Degree* value)         { this->value_.getValue(value); return *this; }
100
101            void description(const std::string& description);
102            const std::string& getDescription() const;
103
104            bool parseString(const std::string& input, const MultiTypeMath& defvalue = MT_null);
105            bool valueToString(std::string* output, MultiTypeMath& input);
106            void resetConfigFileEntry();
107            void resetConfigValue();
108
109            static std::string getStrippedLine(const std::string& line);
110            static bool isEmpty(const std::string& line);
111            static bool isComment(const std::string& line);
112
113            inline std::string getTypename() const
114                { return this->value_.getTypename(); }
115
116        private:
117            bool parseString(const std::string& input, int defvalue);
118            bool parseString(const std::string& input, unsigned int defvalue);
119            bool parseString(const std::string& input, char defvalue);
120            bool parseString(const std::string& input, unsigned char defvalue);
121            bool parseString(const std::string& input, short defvalue);
122            bool parseString(const std::string& input, unsigned short defvalue);
123            bool parseString(const std::string& input, long defvalue);
124            bool parseString(const std::string& input, unsigned long defvalue);
125            bool parseString(const std::string& input, float defvalue);
126            bool parseString(const std::string& input, double defvalue);
127            bool parseString(const std::string& input, long double defvalue);
128            bool parseString(const std::string& input, bool defvalue);
129            bool parseString(const std::string& input, const std::string& defvalue);
130            bool parseString(const std::string& input, const char* defvalue);
131            bool parseString(const std::string& input, const Vector2& defvalue);
132            bool parseString(const std::string& input, const Vector3& defvalue);
133            bool parseString(const std::string& input, const ColourValue& defvalue);
134            bool parseString(const std::string& input, const Quaternion& defvalue);
135            bool parseString(const std::string& input, const Radian& defvalue);
136            bool parseString(const std::string& input, const Degree& defvalue);
137
138            static std::list<std::string>& getConfigFileLines();
139            static bool finishedReadingConfigFile(bool finished = false);
140            void searchConfigFileLine();
141            std::string parseValueString(bool bStripped = true);
142
143            static void readConfigFile(const std::string& filename);
144            static void writeConfigFile(const std::string& filename);
145
146            std::string         classname_;                     //!< The name of the class the variable belongs to
147            std::string         varname_;                       //!< The name of the variable
148            std::string         defvalueString_;                //!< The string of the default-variable
149
150            MultiTypeMath       value_;                         //!< The value
151
152            std::list<std::string>::iterator configFileLine_;   //!< An iterator, pointing to the entry of the variable in the config-file
153
154            bool bAddedDescription_;                            //!< True if a description was added
155            LanguageEntryLabel description_;                    //!< The description
156    };
157}
158
159#endif /* _ConfigValueContainer_H__ */
Note: See TracBrowser for help on using the repository browser.