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