1/*
2 * Copyright 2008, Stephan Aßmus <superstippi@gmx.de>.
3 * Copyright 1998, Eric Shepherd.
4 * All rights reserved. Distributed under the terms of the Be Sample Code
5 * license.
6 */
7
8//! Be Newsletter Volume II, Issue 35; September 2, 1998 (Eric Shepherd)
9
10#include "SettingsMessage.h"
11
12#include <Entry.h>
13#include <File.h>
14#include <String.h>
15
16
17SettingsMessage::SettingsMessage(directory_which directory,
18		const char* filename)
19	: BMessage('pref')
20{
21	fStatus = find_directory(directory, &fPath);
22
23	if (fStatus == B_OK)
24		fStatus = fPath.Append(filename);
25
26	if (fStatus == B_OK)
27		fStatus = Load();
28}
29
30
31SettingsMessage::~SettingsMessage()
32{
33	Save();
34}
35
36
37status_t
38SettingsMessage::InitCheck() const
39{
40	return fStatus;
41}
42
43
44status_t
45SettingsMessage::Load()
46{
47	BFile file(fPath.Path(), B_READ_ONLY);
48	status_t status = file.InitCheck();
49
50	if (status == B_OK)
51		status = Unflatten(&file);
52
53	return status;
54}
55
56
57status_t
58SettingsMessage::Save() const
59{
60	BFile file(fPath.Path(), B_WRITE_ONLY | B_CREATE_FILE | B_ERASE_FILE);
61	status_t status = file.InitCheck();
62
63	if (status == B_OK)
64		status = Flatten(&file);
65
66	return status;
67}
68
69
70// #pragma mark -
71
72
73status_t
74SettingsMessage::SetValue(const char* name, bool value)
75{
76	if (ReplaceBool(name, value) == B_OK)
77		return B_OK;
78	return AddBool(name, value);
79}
80
81
82status_t
83SettingsMessage::SetValue(const char* name, int8 value)
84{
85	if (ReplaceInt8(name, value) == B_OK)
86		return B_OK;
87	return AddInt8(name, value);
88}
89
90
91status_t
92SettingsMessage::SetValue(const char* name, int16 value)
93{
94	if (ReplaceInt16(name, value) == B_OK)
95		return B_OK;
96	return AddInt16(name, value);
97}
98
99
100status_t
101SettingsMessage::SetValue(const char* name, int32 value)
102{
103	if (ReplaceInt32(name, value) == B_OK)
104		return B_OK;
105	return AddInt32(name, value);
106}
107
108
109status_t
110SettingsMessage::SetValue(const char* name, uint32 value)
111{
112	if (ReplaceInt32(name, (int32)value) == B_OK)
113		return B_OK;
114	return AddInt32(name, (int32)value);
115}
116
117
118status_t
119SettingsMessage::SetValue(const char* name, int64 value)
120{
121	if (ReplaceInt64(name, value) == B_OK)
122		return B_OK;
123	return AddInt64(name, value);
124}
125
126
127status_t
128SettingsMessage::SetValue(const char* name, float value)
129{
130	if (ReplaceFloat(name, value) == B_OK)
131		return B_OK;
132	return AddFloat(name, value);
133}
134
135
136status_t
137SettingsMessage::SetValue(const char* name, double value)
138{
139	if (ReplaceDouble(name, value) == B_OK)
140		return B_OK;
141	return AddDouble(name, value);
142}
143
144
145status_t
146SettingsMessage::SetValue(const char* name, const char* value)
147{
148	if (ReplaceString(name, value) == B_OK)
149		return B_OK;
150	return AddString(name, value);
151}
152
153
154status_t
155SettingsMessage::SetValue(const char* name, const BString& value)
156{
157	return SetValue(name, value.String());
158}
159
160
161status_t
162SettingsMessage::SetValue(const char* name, const BPoint& value)
163{
164	if (ReplacePoint(name, value) == B_OK)
165		return B_OK;
166	return AddPoint(name, value);
167}
168
169
170status_t
171SettingsMessage::SetValue(const char* name, const BRect& value)
172{
173	if (ReplaceRect(name, value) == B_OK)
174		return B_OK;
175	return AddRect(name, value);
176}
177
178
179status_t
180SettingsMessage::SetValue(const char* name, const entry_ref& value)
181{
182	if (ReplaceRef(name, &value) == B_OK)
183		return B_OK;
184	return AddRef(name, &value);
185}
186
187
188status_t
189SettingsMessage::SetValue(const char* name, const BMessage* value)
190{
191	if (ReplaceMessage(name, value) == B_OK)
192		return B_OK;
193	return AddMessage(name, value);
194}
195
196
197status_t
198SettingsMessage::SetValue(const char* name, const BFlattenable* value)
199{
200	if (ReplaceFlat(name, const_cast<BFlattenable*>(value)) == B_OK)
201		return B_OK;
202	return AddFlat(name, const_cast<BFlattenable*>(value));
203}
204
205
206// #pragma mark -
207
208bool
209SettingsMessage::GetValue(const char* name, bool defaultValue) const
210{
211	bool value;
212	if (FindBool(name, &value) != B_OK)
213		return defaultValue;
214	return value;
215}
216
217
218int8
219SettingsMessage::GetValue(const char* name, int8 defaultValue) const
220{
221	int8 value;
222	if (FindInt8(name, &value) != B_OK)
223		return defaultValue;
224	return value;
225}
226
227
228int16
229SettingsMessage::GetValue(const char* name, int16 defaultValue) const
230{
231	int16 value;
232	if (FindInt16(name, &value) != B_OK)
233		return defaultValue;
234	return value;
235}
236
237
238int32
239SettingsMessage::GetValue(const char* name, int32 defaultValue) const
240{
241	int32 value;
242	if (FindInt32(name, &value) != B_OK)
243		return defaultValue;
244	return value;
245}
246
247
248uint32
249SettingsMessage::GetValue(const char* name, uint32 defaultValue) const
250{
251	int32 value;
252	if (FindInt32(name, &value) != B_OK)
253		return defaultValue;
254	return (uint32)value;
255}
256
257
258int64
259SettingsMessage::GetValue(const char* name, int64 defaultValue) const
260{
261	int64 value;
262	if (FindInt64(name, &value) != B_OK)
263		return defaultValue;
264	return value;
265}
266
267
268float
269SettingsMessage::GetValue(const char* name, float defaultValue) const
270{
271	float value;
272	if (FindFloat(name, &value) != B_OK)
273		return defaultValue;
274	return value;
275}
276
277
278double
279SettingsMessage::GetValue(const char* name, double defaultValue) const
280{
281	double value;
282	if (FindDouble(name, &value) != B_OK)
283		return defaultValue;
284	return value;
285}
286
287
288BString
289SettingsMessage::GetValue(const char* name, const BString& defaultValue) const
290{
291	BString value;
292	if (FindString(name, &value) != B_OK)
293		return defaultValue;
294	return value;
295}
296
297
298BPoint
299SettingsMessage::GetValue(const char *name, BPoint defaultValue) const
300{
301	BPoint value;
302	if (FindPoint(name, &value) != B_OK)
303		return defaultValue;
304	return value;
305}
306
307
308BRect
309SettingsMessage::GetValue(const char* name, BRect defaultValue) const
310{
311	BRect value;
312	if (FindRect(name, &value) != B_OK)
313		return defaultValue;
314	return value;
315}
316
317
318entry_ref
319SettingsMessage::GetValue(const char* name, const entry_ref& defaultValue) const
320{
321	entry_ref value;
322	if (FindRef(name, &value) != B_OK)
323		return defaultValue;
324	return value;
325}
326
327
328BMessage
329SettingsMessage::GetValue(const char* name, const BMessage& defaultValue) const
330{
331	BMessage value;
332	if (FindMessage(name, &value) != B_OK)
333		return defaultValue;
334	return value;
335}
336
337