Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Last change on this file since 972 was 972, checked in by landauf, 16 years ago

CommandExecutor autocompletes now to correct casing (even if you're writing all lowercase or UPPERCASE or sOMethINg eLSe)

File size: 5.1 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(Identifier* identifier, 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)
79                { this->value_.getValue(value); return *this; }
80
81            inline const std::string& getName()
82                { return this->varname_; }
83
84            void description(const std::string& description);
85            const std::string& getDescription() const;
86
87            bool set(const std::string& input);
88            bool tset(const std::string& input);
89            bool reset();
90
91            /** @brief Converts the config-value to a string. @return The string */
92            inline std::string toString() const
93                { return this->value_.toString(); }
94            /** @brief Returns the typename of the assigned config-value. @return The typename */
95            inline std::string getTypename() const
96                { return this->value_.getTypename(); }
97
98        private:
99            static void readConfigFile(const std::string& filename);
100            static void writeConfigFile(const std::string& filename);
101            static std::list<std::string>& getConfigFileLines();
102            static bool finishedReadingConfigFile(bool finished = false);
103
104            bool parse(const std::string& input);
105            bool parse(const std::string& input, const MultiTypeMath& defvalue);
106
107            void setLineInConfigFile(const std::string& input);
108            void resetLineInConfigFile();
109            void searchLineInConfigFile();
110
111            std::string parseValueStringFromConfigFile(bool bStripped = true);
112
113            Identifier*         identifier_;                    //!< The name of the class the variable belongs to
114            std::string         varname_;                       //!< The name of the variable
115            std::string         defvalueString_;                //!< The string of the default-variable
116
117            MultiTypeMath       value_;                         //!< The value
118
119            std::list<std::string>::iterator configFileLine_;   //!< An iterator, pointing to the entry of the variable in the config-file
120
121            bool bAddedDescription_;                            //!< True if a description was added
122            LanguageEntryLabel description_;                    //!< The description
123    };
124}
125
126#endif /* _ConfigValueContainer_H__ */
Note: See TracBrowser for help on using the repository browser.