Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/modules/notifications/NotificationQueue.h @ 7488

Last change on this file since 7488 was 7488, checked in by dafrick, 15 years ago

Some more documentation.
Making NotificationManager Root scope, cleaning up, especially in Notification (now it's just a data structure anymore).

  • Property svn:eol-style set to native
File size: 7.5 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 *      Damian 'Mozork' Frick
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29/**
30    @file NotificationQueue.h
31    @brief Definition of the NotificationQueue class.
32    @ingroup Notifications
33*/
34
35#ifndef _NotificationOueue_H__
36#define _NotificationOueue_H__
37
38#include "notifications/NotificationsPrereqs.h"
39
40#include <ctime>
41#include <set>
42#include <string>
43#include <vector>
44
45#include "tools/interfaces/Tickable.h"
46
47#include "interfaces/NotificationListener.h"
48#include "NotificationManager.h"
49
50namespace orxonox // tolua_export
51{ // tolua_export
52
53    //! Container to allow easy handling.
54    struct NotificationContainer
55    {
56        Notification* notification; // The Notification displayed.
57        time_t time; // The time the Notification was sent and thus first displayed.
58    };
59
60    //! Struct to allow ordering of @ref orxonox::NotificationContainer "NotificationContainers".
61    struct NotificationContainerCompare {
62        bool operator() (const NotificationContainer* const & a, const NotificationContainer* const & b) const
63            { return a->time < b->time; } // Ordered by time.
64    };
65
66    /**
67    @brief
68        Displays @ref orxonox::Notification "Notifications" from specific senders.
69
70        There are quite some parameters that influence the behaviour of the NotificationQueue:
71        - @b name The name of the NotificationQueue. It needs to be unique.
72        - @b senders The senders that are targets of this NotificationQueue, i.e. the names of senders whose Notifications this NotificationQueue displays.
73        - @b size The size of the NotificationQueue, it specifies how many @ref orxonox::Notification "Notifications" are displayed at once at the most.
74        - @b displayTime The time a @ref orxonox::Notification "Notification" is displayed with this NotificationQueue.
75
76    @author
77        Damian 'Mozork' Frick
78    */
79    class _NotificationsExport NotificationQueue // tolua_export
80        : public Tickable, public NotificationListener
81    { // tolua_export
82
83        public:
84            NotificationQueue(const std::string& name, const std::string& senders = NotificationManager::ALL, unsigned int size = NotificationQueue::DEFAULT_SIZE, unsigned int displayTime = NotificationQueue::DEFAULT_DISPLAY_TIME);
85            virtual ~NotificationQueue();
86
87            //! Destroys the NotificationQueue.
88            void destroy(bool noGraphics = false); // tolua_export
89
90            virtual void tick(float dt); //!< To update from time to time.
91
92            void update(void); //!< Updates the NotificationQueue.
93            void update(Notification* notification, const std::time_t & time); //!< Updates the NotificationQueue by adding an new Notification.
94
95            // tolua_begin
96            /**
97            @brief Get the name of the NotificationQueue.
98            @return Returns the name.
99            */
100            inline const std::string& getName() const
101                { return this->name_; }
102
103            void setMaxSize(unsigned int size); //!< Sets the maximum number of displayed Notifications.
104            /**
105            @brief Returns the maximum number of Notifications displayed.
106            @return Returns maximum size.
107            */
108            inline unsigned int getMaxSize() const
109                { return this->maxSize_; }
110
111            void setDisplayTime(unsigned int time); //!< Sets the maximum number of seconds a Notification is displayed.
112            /**
113            @brief Returns the time interval the Notification is displayed.
114            @return Returns the display time.
115            */
116            inline unsigned int getDisplayTime() const
117                { return this->displayTime_; }
118            // tolua_end
119
120            /**
121            @brief Returns the current number of Notifications displayed.
122            @return Returns the size of the NotificationQueue.
123            */
124            inline unsigned int getSize() const
125                { return this->size_; }
126
127            /**
128            @brief Returns the targets of this NotificationQueue, reps. the senders which Notifications are displayed in this NotificationQueue.
129            @return Returns a set of strings holding the different targets.
130            */
131            inline const std::set<std::string> & getTargetsSet()
132                { return this->targets_; }
133
134            // tolua_begin
135            void setTargets(const std::string & targets); //!< Set the targets of this NotificationQueue.
136            const std::string& getTargets(void) const; //!< Returns a string consisting of the concatination of the targets.
137            // tolua_end
138
139        private:
140            static const unsigned int DEFAULT_SIZE = 5; //!< The default maximum number of Notifications displayed.
141            static const unsigned int DEFAULT_DISPLAY_TIME = 30; //!< The default display time.
142
143            std::string name_; //!< The name of the NotificationQueue.
144
145            unsigned int maxSize_; //!< The maximal number of Notifications displayed.
146            unsigned int size_; //!< The number of Notifications displayed.
147            unsigned int displayTime_; //!< The time a Notification is displayed.
148
149            bool registered_; //!< Helper variable to remember whether the NotificationQueue is registered already.
150
151            std::set<std::string> targets_; //!< The targets the NotificationQueue displays Notifications of.
152
153            std::multiset<NotificationContainer*, NotificationContainerCompare> ordering_; //!< The NotificationContainers ordered by the time they were registered.
154            std::vector<NotificationContainer*> notifications_; //!< The NotificationContainers in the order they were added to the NotificationQueue.
155
156            float tickTime_; //!< Helper variable, to not have to check for Notifications that have been displayed too long, every tick.
157            NotificationContainer timeLimit_; //!< Helper object to check against to determine whether Notifications have expired.
158
159            void create(void); //!< Creates the NotificationQueue in lua.
160
161            void setName(const std::string& name); //!< Sets the name of the NotificationQueue.
162
163            void push(Notification* notification, const std::time_t & time); //!< Adds (pushes) a Notification to the NotificationQueue.
164            void pop(void); //!< Removes (pops) the least recently added Notification form the NotificationQueue.
165            void remove(const std::multiset<NotificationContainer*, NotificationContainerCompare>::iterator& containerIterator); //!< Removes the Notification that is stored in the input NotificationContainer.
166
167            void clear(bool noGraphics = false); //!< Clears the NotificationQueue by removing all NotificationContainers.
168
169    }; // tolua_export
170
171} // tolua_export
172
173#endif /* _NotificationOverlay_H__ */
Note: See TracBrowser for help on using the repository browser.