Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Last change on this file since 957 was 957, checked in by landauf, 16 years ago
  • added set and tset functions to the ConfigValueContainer to (temporary) set a config-value to a new value
  • ConfigValueContainer uses now the functions of MultiTypeMath to convert and assign values
  • added some errorhandling to the CommandExecutor in case there are not enough parameters when executing the command
  • added updateConfigValues function to Identifier
  • added addTime and removeTime functions to the Timer
  • some changes in Executor to allow adding description and default-values when using the ConsoleCommand macro
File size: 5.0 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            void description(const std::string& description);
82            const std::string& getDescription() const;
83
84            bool set(const std::string& input);
85            bool tset(const std::string& input);
86            bool reset();
87
88            /** @brief Converts the config-value to a string. @return The string */
89            inline std::string toString() const
90                { return this->value_.toString(); }
91            /** @brief Returns the typename of the assigned config-value. @return The typename */
92            inline std::string getTypename() const
93                { return this->value_.getTypename(); }
94
95        private:
96            static void readConfigFile(const std::string& filename);
97            static void writeConfigFile(const std::string& filename);
98            static std::list<std::string>& getConfigFileLines();
99            static bool finishedReadingConfigFile(bool finished = false);
100
101            bool parse(const std::string& input);
102            bool parse(const std::string& input, const MultiTypeMath& defvalue);
103
104            void setLineInConfigFile(const std::string& input);
105            void resetLineInConfigFile();
106            void searchLineInConfigFile();
107
108            std::string parseValueStringFromConfigFile(bool bStripped = true);
109
110            Identifier*         identifier_;                    //!< The name of the class the variable belongs to
111            std::string         varname_;                       //!< The name of the variable
112            std::string         defvalueString_;                //!< The string of the default-variable
113
114            MultiTypeMath       value_;                         //!< The value
115
116            std::list<std::string>::iterator configFileLine_;   //!< An iterator, pointing to the entry of the variable in the config-file
117
118            bool bAddedDescription_;                            //!< True if a description was added
119            LanguageEntryLabel description_;                    //!< The description
120    };
121}
122
123#endif /* _ConfigValueContainer_H__ */
Note: See TracBrowser for help on using the repository browser.