source: src/global/ini.cpp @ 211

Revision 211, 2.8 KB checked in by Eoin, 13 years ago (diff)

Translation DLL Identification.

Line 
1
2#include <boost/foreach.hpp>
3
4#define WINVER 0x0500
5#define _WIN32_WINNT 0x0500
6#define _WIN32_IE 0x0500
7#define _RICHEDIT_VER 0x0200
8#define VC_EXTRALEAN
9
10#include <atlbase.h>
11#include <atlapp.h>
12
13extern CAppModule _Module;
14
15#include "tinyxml.hpp"
16#include "wtl_app.hpp"
17#include "logger.hpp"
18#include "string_conv.hpp"
19#include "ini.hpp"
20
21#define foreach BOOST_FOREACH
22
23namespace hal
24{
25
26class ini_impl
27{
28public:
29        ini_impl(std::wstring filename) :
30                working_file_(app().exe_path().branch_path()/filename)
31        {}
32       
33        void load_data()
34        {
35                if (!xml_.load_file(working_file_.string()))
36                {
37                        generate_default_file();
38                }
39        }
40       
41        void save_data()
42        {               
43        //      ::MessageBox(0, to_wstr(working_file_.string()).c_str(), L"INI", 0);
44                xml_.save_file(working_file_.string());
45        }
46       
47        bool save(boost::filesystem::path location, std::string data)
48        {
49                tinyxml::node* data_node = get_data_node(location);
50               
51                // Should have correct node             
52               
53                return true;
54        }
55
56        bool save(boost::filesystem::path location, tinyxml::node* data)
57        {
58                tinyxml::node* data_node = get_data_node(location);
59               
60                data_node->clear();
61                data_node->link_end_child(data);
62               
63                return true;
64        }
65       
66        tinyxml::node* load(boost::filesystem::path location)
67        {
68                tinyxml::node* data_node = get_data_node(location);
69               
70                tinyxml::node* data = data_node->first_child();
71               
72                if (data)
73                        return data->clone();
74                else
75                        return 0;
76        }
77
78private:
79        void generate_default_file()
80        {
81                xml_.link_end_child(new tinyxml::declaration("1.0", "", ""));
82               
83                xml_.link_end_child(new tinyxml::element("ini"));
84        }
85       
86        tinyxml::node* get_data_node(boost::filesystem::path location)
87        {
88                tinyxml::node* data_node = xml_.first_child("ini");
89               
90                if (!data_node)
91                {
92                        data_node = new tinyxml::element("ini");
93                        xml_.link_end_child(data_node);
94                }
95               
96                foreach(std::string elem, location)
97                {
98                        tinyxml::node* child_node = data_node->first_child(elem);
99                       
100                        if (!child_node)
101                        {
102                                child_node = new tinyxml::element(elem);
103                                data_node->link_end_child(child_node);
104                        }
105                       
106                        data_node = child_node;
107                }
108
109                return data_node;
110        }
111       
112        boost::filesystem::wpath working_file_;
113        tinyxml::document xml_;
114};
115
116ini_file::ini_file(std::wstring filename) :
117        pimpl(new ini_impl(filename))
118{}
119
120void ini_file::load_data()
121{
122        pimpl->load_data();
123}
124
125void ini_file::save_data()
126{
127        pimpl->save_data();
128}
129
130bool ini_file::save(boost::filesystem::path location, std::string data)
131{
132        return pimpl->save(location, data);
133}
134
135bool ini_file::save(boost::filesystem::path location, tinyxml::node* data)
136{
137        return pimpl->save(location, data);
138}
139
140tinyxml::node* ini_file::load(boost::filesystem::path location)
141{
142        return pimpl->load(location);
143}
144
145ini_file& ini()
146{
147        static ini_file ini(L"Halite.xml");
148        return ini;
149}
150
151} // namespace hal
Note: See TracBrowser for help on using the repository browser.