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