initial commit, lordsawar source, slightly modified
[lordsawar] / src / portlist.h
1 // Copyright (C) 2007, 2008, 2009 Ben Asselstine
2 //
3 //  This program is free software; you can redistribute it and/or modify
4 //  it under the terms of the GNU General Public License as published by
5 //  the Free Software Foundation; either version 3 of the License, or
6 //  (at your option) any later version.
7 //
8 //  This program is distributed in the hope that it will be useful,
9 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
10 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 //  GNU Library General Public License for more details.
12 //
13 //  You should have received a copy of the GNU General Public License
14 //  along with this program; if not, write to the Free Software
15 //  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 
16 //  02110-1301, USA.
17
18 #ifndef PORTLIST_H
19 #define PORTLIST_H
20
21 #include <sigc++/trackable.h>
22 #include "LocationList.h"
23
24 class XML_Helper;
25 class Port;
26
27 //! A list of the Port objects on the game map.
28 /** 
29  * The portlist keeps track of the ports located on the game map. It
30  * is implemented as a singleton because many classes use it for looking up
31  * ports.
32  */
33 class Portlist : public LocationList<Port*>, public sigc::trackable
34 {
35     public:
36         //! The xml tag of this object in a saved-game file.
37         static std::string d_tag; 
38
39         // Methods that operate on the class data but do not modify the class.
40
41         //! Saves the list of Port objects to the opened saved-game file.
42         bool save(XML_Helper* helper) const;
43
44
45         // Static Methods
46
47         //! Return the singleton instance.  Create a new one if needed.
48         static Portlist* getInstance();
49
50         //! Load the singleton instance from the opened saved-game file.
51         static Portlist* getInstance(XML_Helper* helper);
52
53         //! Explicitly delete the singleton instance.
54         static void deleteInstance();
55
56     protected:
57
58         //! Default constructor.
59         Portlist();
60
61         //! Loading constructor.
62         /**
63          * Load the list of Port objects from the opened saved-game file.
64          *
65          * @param helper  The opened saved-game file to load Port objects from.
66          */
67         Portlist(XML_Helper* helper);
68
69     private:
70         //! Callback for loading Port objects into the list of ports.
71         bool load(std::string tag, XML_Helper* helper);
72
73         // DATA
74
75         //! A static pointer for the singleton instance.
76         static Portlist* s_instance;
77 };
78
79 #endif