1/*
2 * Copyright 1998-1999 Be, Inc. All Rights Reserved.
3 * Copyright 2003-2019 Haiku, Inc. All rights reserved.
4 * Distributed under the terms of the MIT License.
5 */
6#ifndef SETTINGS_H
7#define SETTINGS_H
8
9#include "SettingsHandler.h"
10
11void SetUpSettings(char* filename);
12void QuitSettings();
13
14class StringValueSetting : public SettingsArgvDispatcher {
15	// simple string setting
16public:
17								StringValueSetting(const char* name,
18									const char* defaultValue,
19									const char* valueExpectedErrorString,
20									const char* wrongValueErrorString = "");
21
22	virtual						~StringValueSetting();
23
24			void				ValueChanged(const char* newValue);
25			const char*			Value() const;
26	virtual const char*			Handle(const char* const *argv);
27
28protected:
29	virtual	void				SaveSettingValue(Settings*);
30	virtual	bool				NeedsSaving() const;
31
32			const char*			fDefaultValue;
33			const char*			fValueExpectedErrorString;
34			const char*			fWrongValueErrorString;
35			char*				fValue;
36};
37
38
39// string setting, values that do not match string enumeration
40// are rejected
41class EnumeratedStringValueSetting : public StringValueSetting {
42public:
43	// A pointer to a function returning a string for an index, or NULL
44	// if the index is out of bounds.
45	typedef const char* (*StringEnumerator)(int32);
46
47								EnumeratedStringValueSetting(const char* name,
48									const char* defaultValue,
49									StringEnumerator enumerator,
50									const char* valueExpectedErrorString,
51									const char* wrongValueErrorString);
52
53			void				ValueChanged(const char* newValue);
54	virtual const char*			Handle(const char* const *argv);
55
56private:
57			bool				_ValidateString(const char* string);
58			StringEnumerator	fEnumerator;
59};
60
61
62// simple int32 setting
63class ScalarValueSetting : public SettingsArgvDispatcher {
64public:
65								ScalarValueSetting(const char* name,
66									int32 defaultValue,
67									const char* valueExpectedErrorString,
68									const char* wrongValueErrorString,
69									int32 min = INT32_MIN,
70									int32 max = INT32_MAX);
71	virtual						~ScalarValueSetting();
72
73			void				ValueChanged(int32 newValue);
74			int32				Value() const;
75			void				GetValueAsString(char*) const;
76	virtual const char*			Handle(const char* const *argv);
77
78protected:
79	virtual void				SaveSettingValue(Settings*);
80	virtual bool				NeedsSaving() const;
81
82			int32				fDefaultValue;
83			int32				fValue;
84			int32				fMax;
85			int32				fMin;
86			const char*			fValueExpectedErrorString;
87			const char*			fWrongValueErrorString;
88};
89
90
91class BooleanValueSetting : public ScalarValueSetting {
92public:
93								BooleanValueSetting(const char* name,
94									bool defaultValue);
95	virtual						~BooleanValueSetting();
96
97			bool				Value() const;
98	virtual	const char*			Handle(const char* const *argv);
99
100protected:
101	virtual	void				SaveSettingValue(Settings*);
102};
103
104#endif	// SETTINGS_H
105