1/*
2 * Copyright 2015 Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Axel Dörfler, <axeld@pinc-software.de>
7 */
8
9
10#include <Catalog.h>
11#include <NetworkSettings.h>
12#include <NetworkSettingsAddOn.h>
13#include <StringItem.h>
14
15#include "DNSSettingsView.h"
16
17
18using namespace BNetworkKit;
19
20
21#undef B_TRANSLATION_CONTEXT
22#define B_TRANSLATION_CONTEXT "DNSClientServiceAddOn"
23
24
25class DNSClientServiceAddOn : public BNetworkSettingsAddOn {
26public:
27								DNSClientServiceAddOn(image_id image,
28									BNetworkSettings& settings);
29	virtual						~DNSClientServiceAddOn();
30
31	virtual	BNetworkSettingsItem*
32								CreateNextItem(uint32& cookie);
33};
34
35
36class DNSClientServiceItem : public BNetworkSettingsItem {
37public:
38								DNSClientServiceItem(
39									BNetworkSettings& settings);
40	virtual						~DNSClientServiceItem();
41
42	virtual	BNetworkSettingsType
43								Type() const;
44
45	virtual BListItem*			ListItem();
46	virtual BView*				View();
47
48	virtual	status_t			Revert();
49	virtual bool				IsRevertable();
50
51private:
52			BNetworkSettings&	fSettings;
53			BStringItem*		fItem;
54			DNSSettingsView*	fView;
55};
56
57
58// #pragma mark -
59
60
61DNSClientServiceItem::DNSClientServiceItem(BNetworkSettings& settings)
62	:
63	fSettings(settings),
64	fItem(new BStringItem(B_TRANSLATE("DNS settings"))),
65	fView(NULL)
66{
67}
68
69
70DNSClientServiceItem::~DNSClientServiceItem()
71{
72	if (fView->Parent() == NULL)
73		delete fView;
74
75	delete fItem;
76}
77
78
79BNetworkSettingsType
80DNSClientServiceItem::Type() const
81{
82	return B_NETWORK_SETTINGS_TYPE_SERVICE;
83}
84
85
86BListItem*
87DNSClientServiceItem::ListItem()
88{
89	return fItem;
90}
91
92
93BView*
94DNSClientServiceItem::View()
95{
96	if (fView == NULL)
97		fView = new DNSSettingsView(this);
98
99	return fView;
100}
101
102
103status_t
104DNSClientServiceItem::Revert()
105{
106	return B_OK;
107}
108
109
110bool
111DNSClientServiceItem::IsRevertable()
112{
113	return false;
114}
115
116
117// #pragma mark -
118
119
120DNSClientServiceAddOn::DNSClientServiceAddOn(image_id image,
121	BNetworkSettings& settings)
122	:
123	BNetworkSettingsAddOn(image, settings)
124{
125}
126
127
128DNSClientServiceAddOn::~DNSClientServiceAddOn()
129{
130}
131
132
133BNetworkSettingsItem*
134DNSClientServiceAddOn::CreateNextItem(uint32& cookie)
135{
136	if (cookie++ == 0)
137		return new DNSClientServiceItem(Settings());
138
139	return NULL;
140}
141
142
143// #pragma mark -
144
145
146extern "C"
147BNetworkSettingsAddOn*
148instantiate_network_settings_add_on(image_id image, BNetworkSettings& settings)
149{
150	return new DNSClientServiceAddOn(image, settings);
151}
152