Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/console/src/core/ConfigValueContainer.h @ 1324

Last change on this file since 1324 was 1324, checked in by landauf, 17 years ago

Added a command-history to the console. you can scroll through all previously entered commands by pressing [up] key.
The history is stored in orxonox.ini in the section [Shell]. You can configure the maximal amount of stored commands (default: 100).
This allows you to use the history after orxonox was restarted.
The history uses a cyclic vector (with the configured size), meaning the newest command will overwrite the oldest entry (if the maximal size was reached).

additionally I fixed some bugs in ConfigValueContainer and added a mod-function to Math.h, that does basically the same as %, but without returning a negative value in case of a negative input.

-1 % 10 = -1
-11 % 10 = -1

mod(-1, 10) = 9
mod(-11, 10) = 9

File size: 6.3 KB
Line 
1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *                    > www.orxonox.net <
4 *
5 *
6 *   License notice:
7 *
8 *   This program is free software; you can redistribute it and/or
9 *   modify it under the terms of the GNU General Public License
10 *   as published by the Free Software Foundation; either version 2
11 *   of the License, or (at your option) any later version.
12 *
13 *   This program is distributed in the hope that it will be useful,
14 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *   GNU General Public License for more details.
17 *
18 *   You should have received a copy of the GNU General Public License
19 *   along with this program; if not, write to the Free Software
20 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21 *
22 *   Author:
23 *      Fabian 'x3n' Landau
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29/**
30    @file ConfigValueContainer.h
31    @brief Definition of the ConfigValueContainer class.
32
33    The ConfigValueContainer class contains all needed informations about a configurable variable:
34     - the name of the variable
35     - the name of the class the variable belongs to
36     - the default value
37     - the user-specified value
38     - a pointer to the entry in the config-file
39
40    This is needed to assign the configured values to all newly created objects.
41*/
42
43#ifndef _ConfigValueContainer_H__
44#define _ConfigValueContainer_H__
45
46#include "CorePrereqs.h"
47
48#include <string>
49#include <vector>
50
51#include "util/Math.h"
52#include "util/MultiTypeMath.h"
53#include "ConfigFileManager.h"
54
55namespace orxonox
56{
57    //! The ConfigValuecontainer contains all needed informations about a configurable variable.
58    /**
59        The ConfigValueContainer class contains all needed informations about a configurable variable:
60         - the name of the variable
61         - the name of the class the variable belongs to
62         - the default value
63         - the user-specified value
64         - a pointer to the entry in the config-file
65
66        This is needed to assign the configured values to all newly created objects.
67
68        The container searches for the entry in the config file.
69        If there is an entry, it parses the specified value and assigns it to the variable of the right type.
70        If there is no entry, it adds the entry with the default-value to the section of the variables class.
71        If there is no section, the section and the entry are added to the end of the config-file.
72    */
73    class _CoreExport ConfigValueContainer
74    {
75        public:
76            ConfigValueContainer(ConfigFileType type, Identifier* identifier, const std::string& varname, const MultiTypeMath& defvalue);
77            ConfigValueContainer(ConfigFileType type, Identifier* identifier, const std::string& varname, const std::vector<MultiTypeMath>& defvalue);
78
79            /** @brief Returns the configured value. @param value This is only needed to determine the right type. @return The value */
80            template <typename T>
81            inline ConfigValueContainer& getValue(T* value)
82                { this->value_.getValue(value); return *this; }
83            template <typename T>
84            inline ConfigValueContainer& getValue(std::vector<T>* value)
85            {
86                value->clear();
87                for (unsigned int i = 0; i < this->valueVector_.size(); i++)
88                    value->push_back(this->valueVector_[i]);
89                return *this;
90            }
91
92            template <typename T>
93            inline void setVectorType(const std::vector<T>& value)
94            {
95                this->value_ = T();
96            }
97
98            inline const std::string& getName() const
99                { return this->varname_; }
100            inline bool isVector() const
101                { return this->bIsVector_; }
102            inline unsigned int getVectorSize() const
103                { return this->valueVector_.size(); }
104
105            void description(const std::string& description);
106            const std::string& getDescription() const;
107
108            bool set(const MultiTypeMath& input);
109            bool tset(const MultiTypeMath& input);
110
111            bool set(unsigned int index, const MultiTypeMath& input);
112            bool tset(unsigned int index, const MultiTypeMath& input);
113            bool add(const MultiTypeMath& input);
114            bool remove(unsigned int index);
115
116            bool reset();
117            void update();
118
119            /** @brief Converts the config-value to a string. @return The string */
120            inline std::string toString() const
121                { return this->value_.toString(); }
122            /** @brief Returns the typename of the assigned config-value. @return The typename */
123            inline std::string getTypename() const
124                { return this->value_.getTypename(); }
125
126        private:
127            bool callFunctionWithIndex(bool (ConfigValueContainer::* function) (unsigned int, const MultiTypeMath&), const std::string& input);
128
129            bool                       bIsVector_;                  //!< True if the container contains a std::vector
130
131            ConfigFileType             type_;                       //!< The type of the corresponding config-file
132            Identifier*                identifier_;                 //!< The identifier of the class
133            std::string                sectionname_;                //!< The name of the class the variable belongs to
134            std::string                varname_;                    //!< The name of the variable
135            std::string                defvalueString_;             //!< The string of the default-value
136            std::vector<std::string>   defvalueStringVector_;       //!< A vector, containg the strings of the default-values in case we're storing a vector
137
138            MultiTypeMath              value_;                      //!< The value
139            std::vector<MultiTypeMath> valueVector_;                //!< A vector, containg the values in case we're storing a vector
140
141            bool                       bAddedDescription_;          //!< True if a description was added
142            LanguageEntryLabel         description_;                //!< The description
143    };
144}
145
146#endif /* _ConfigValueContainer_H__ */
Note: See TracBrowser for help on using the repository browser.