1 //  Copyright (C) 2015 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 #pragma once
19 #ifndef BUILDER_CACHE_H
20 #define BUILDER_CACHE_H
21 
22 #include <map>
23 #include <gtkmm.h>
24 
25 //! A store of Gtk::Builder objects.
26 /**
27  * Why re-instantiate builder objects when we can just open them once?
28  *
29  */
30 class BuilderCache: public std::map<Glib::ustring, Glib::RefPtr<Gtk::Builder> >
31 {
32     public:
33         //! Returns the singleton instance. Creates a new one if required.
34         static BuilderCache* getInstance();
35 
36         //! Explicitly deletes the singleton instance.
37         static void deleteInstance();
38 
39         //! Go get a builder object by name.
40         static Glib::RefPtr<Gtk::Builder> get(Glib::ustring f);
41 
42         //! Go get a builder object by name.
43         static Glib::RefPtr<Gtk::Builder> editor_get(Glib::ustring f);
44 
45     protected:
46 
47 	// Constructor.
48         BuilderCache();
49 
50 	//! Destructor.
~BuilderCache()51         ~BuilderCache() {};
52 
53     private:
54 
55         void preloadAllBuilders(Glib::ustring dir);
56 
57 	// DATA
58 
59         static BuilderCache * s_instance;
60 };
61 
62 #endif // BUILDER_CACHE_H
63 
64 // End of file
65