1/*
2 * Copyright 2004-2015 Haiku Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 */
6#ifndef _NETWORK_SETTINGS_ADD_ON_H
7#define _NETWORK_SETTINGS_ADD_ON_H
8
9
10#include <image.h>
11#include <ListItem.h>
12#include <Resources.h>
13#include <String.h>
14#include <View.h>
15
16
17class BNetworkAddress;
18
19
20namespace BNetworkKit {
21
22
23enum BNetworkSettingsType {
24	B_NETWORK_SETTINGS_TYPE_INTERFACE = 'intf',
25	B_NETWORK_SETTINGS_TYPE_SERVICE = 'serv',
26	B_NETWORK_SETTINGS_TYPE_DIAL_UP = 'dial',
27	B_NETWORK_SETTINGS_TYPE_VPN = 'vpnc',
28	B_NETWORK_SETTINGS_TYPE_OTHER = 'othr'
29};
30
31class BNetworkProfile;
32class BNetworkSettings;
33
34
35class BNetworkConfigurationListener {
36public:
37	virtual void				ConfigurationUpdated(
38									const BMessage& message) = 0;
39};
40
41
42class BNetworkSettingsListener {
43public:
44	virtual void				SettingsUpdated(uint32 type) = 0;
45};
46
47
48class BNetworkSettingsItem : public BNetworkConfigurationListener,
49	BNetworkSettingsListener {
50public:
51								BNetworkSettingsItem();
52	virtual						~BNetworkSettingsItem();
53
54	virtual	BNetworkSettingsType
55								Type() const = 0;
56	virtual BListItem*			ListItem() = 0;
57	virtual BView*				View() = 0;
58
59	virtual status_t			ProfileChanged(
60									const BNetworkProfile* newProfile);
61			const BNetworkProfile*
62								Profile() const;
63
64	virtual	status_t			Revert() = 0;
65	virtual bool				IsRevertable() = 0;
66
67	virtual void				SettingsUpdated(uint32 type);
68	virtual void				ConfigurationUpdated(const BMessage& message);
69
70	virtual	void				NotifySettingsUpdated();
71
72private:
73			const BNetworkProfile*
74								fProfile;
75};
76
77
78class BNetworkSettingsInterfaceItem : public BNetworkSettingsItem {
79public:
80								BNetworkSettingsInterfaceItem(
81									const char* interface);
82	virtual						~BNetworkSettingsInterfaceItem();
83
84	virtual	BNetworkSettingsType
85								Type() const;
86			const char*			Interface() const;
87
88private:
89			const char*			fInterface;
90};
91
92
93class BNetworkInterfaceListItem : public BListItem,
94	public BNetworkConfigurationListener {
95public:
96								BNetworkInterfaceListItem(int family,
97									const char* interface, const char* label,
98									BNetworkSettings& settings);
99								~BNetworkInterfaceListItem();
100
101			const char*			Label() const;
102
103	virtual	void				DrawItem(BView* owner,
104									BRect bounds, bool complete);
105	virtual	void				Update(BView* owner, const BFont* font);
106
107	virtual void				ConfigurationUpdated(const BMessage& message);
108
109private:
110			BFont				_AddressFont();
111			void				_UpdateState();
112
113private:
114			BNetworkSettings&	fSettings;
115			int					fFamily;
116			const char*			fInterface;
117			const char*			fLabel;
118			BString				fAddress;
119			bool				fDisabled;
120			float				fLineOffset;
121			float				fSpacing;
122};
123
124
125class BNetworkSettingsAddOn {
126public:
127								BNetworkSettingsAddOn(image_id image,
128									BNetworkSettings& settings);
129	virtual						~BNetworkSettingsAddOn();
130
131	virtual	BNetworkSettingsInterfaceItem*
132								CreateNextInterfaceItem(uint32& cookie,
133									const char* interface);
134	virtual	BNetworkSettingsItem*
135								CreateNextItem(uint32& cookie);
136
137			image_id			Image();
138			BResources*			Resources();
139			BNetworkSettings&	Settings();
140
141private:
142			image_id			fImage;
143			BResources*			fResources;
144			BNetworkSettings&	fSettings;
145};
146
147
148// Your add-on needs to export this hook in order to be picked up
149extern "C" BNetworkSettingsAddOn* instantiate_network_settings_add_on(
150	image_id image, BNetworkSettings& settings);
151
152
153}	// namespace BNetworkKit
154
155
156#endif // _NETWORK_SETTINGS_ADD_ON_H
157