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