1/* 2 * Copyright 2004-2011 Haiku, Inc. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Andre Alves Garzia, andre@andregarzia.com 7 * Stephan Assmu�� 8 * Axel D��rfler 9 * Philippe Houdoin 10 * Fredrik Mod��en 11 * Hugo Santos 12 * Philippe Saint-Pierre 13 * Alexander von Gluck, kallisti5@unixzen.com 14 */ 15 16 17#include "InterfacesAddOn.h" 18#include "InterfaceWindow.h" 19 20#include <stdio.h> 21 22#include <Alert.h> 23#include <GroupLayout.h> 24#include <GroupLayoutBuilder.h> 25#include <ScrollView.h> 26 27 28NetworkSetupAddOn* 29get_nth_addon(image_id image, int index) 30{ 31 if (index == 0) 32 return new InterfacesAddOn(image); 33 return NULL; 34} 35 36 37// #pragma mark - 38 39 40InterfacesAddOn::InterfacesAddOn(image_id image) 41 : 42 NetworkSetupAddOn(image), 43 BBox(BRect(0, 0, 0, 0), NULL, B_FOLLOW_ALL, B_NAVIGABLE_JUMP, B_NO_BORDER) 44{ 45} 46 47 48InterfacesAddOn::~InterfacesAddOn() 49{ 50} 51 52 53const char* 54InterfacesAddOn::Name() 55{ 56 return "Interfaces"; 57} 58 59 60BView* 61InterfacesAddOn::CreateView(BRect *bounds) 62{ 63 BRect intViewRect = *bounds; 64 65 // Construct the ListView 66 fListview = new InterfacesListView(intViewRect, 67 "interfaces", B_FOLLOW_ALL_SIDES); 68 fListview->SetSelectionMessage(new BMessage(kMsgInterfaceSelected)); 69 fListview->SetInvocationMessage(new BMessage(kMsgInterfaceConfigure)); 70 71 BScrollView* scrollView = new BScrollView(NULL, fListview, 72 B_FOLLOW_ALL_SIDES, B_WILL_DRAW | B_FRAME_EVENTS, false, true); 73 74 // Construct the BButtons 75 fConfigure = new BButton(intViewRect, "configure", 76 "Configure" B_UTF8_ELLIPSIS, new BMessage(kMsgInterfaceConfigure)); 77 fConfigure->SetEnabled(false); 78 79 fOnOff = new BButton(intViewRect, "onoff", "Disable", 80 new BMessage(kMsgInterfaceToggle)); 81 fOnOff->SetEnabled(false); 82 83 fRenegotiate = new BButton(intViewRect, "heal", 84 "Renegotiate", new BMessage(kMsgInterfaceRenegotiate)); 85 fRenegotiate->SetEnabled(false); 86 87 // Build the layout 88 SetLayout(new BGroupLayout(B_VERTICAL)); 89 90 AddChild(BGroupLayoutBuilder(B_VERTICAL, 10) 91 .Add(scrollView) 92 .AddGroup(B_HORIZONTAL, 5) 93 .Add(fConfigure) 94 .Add(fOnOff) 95 .AddGlue() 96 .Add(fRenegotiate) 97 .End() 98 .SetInsets(10, 10, 10, 10) 99 ); 100 101 *bounds = Bounds(); 102 return this; 103} 104 105 106void 107InterfacesAddOn::AttachedToWindow() 108{ 109 fListview->SetTarget(this); 110 fConfigure->SetTarget(this); 111 fOnOff->SetTarget(this); 112 fRenegotiate->SetTarget(this); 113} 114 115 116status_t 117InterfacesAddOn::Save() 118{ 119 // TODO : Profile? 120 return fListview->SaveItems(); 121} 122 123 124void 125InterfacesAddOn::MessageReceived(BMessage* msg) 126{ 127 int nr = fListview->CurrentSelection(); 128 InterfaceListItem *item = NULL; 129 if (nr != -1) { 130 item = dynamic_cast<InterfaceListItem*>(fListview->ItemAt(nr)); 131 } 132 133 switch (msg->what) { 134 case kMsgInterfaceSelected: 135 { 136 fConfigure->SetEnabled(item != NULL); 137 fOnOff->SetEnabled(item != NULL); 138 fRenegotiate->SetEnabled(item != NULL); 139 if (!item) 140 break; 141 fConfigure->SetEnabled(!item->IsDisabled()); 142 fRenegotiate->SetEnabled(!item->IsDisabled()); 143 fOnOff->SetLabel(item->IsDisabled() ? "Enable" : "Disable"); 144 break; 145 } 146 147 case kMsgInterfaceConfigure: 148 { 149 if (!item) 150 break; 151 152 InterfaceWindow* sw = new InterfaceWindow(item->GetSettings()); 153 sw->Show(); 154 break; 155 } 156 157 case kMsgInterfaceToggle: 158 { 159 if (!item) 160 break; 161 162 item->SetDisabled(!item->IsDisabled()); 163 fConfigure->SetEnabled(!item->IsDisabled()); 164 fOnOff->SetLabel(item->IsDisabled() ? "Enable" : "Disable"); 165 fRenegotiate->SetEnabled(!item->IsDisabled()); 166 fListview->Invalidate(); 167 break; 168 } 169 170 case kMsgInterfaceRenegotiate: 171 { 172 if (!item) 173 break; 174 175 NetworkSettings* ns = item->GetSettings(); 176 ns->RenegotiateAddresses(); 177 break; 178 } 179 180 default: 181 BBox::MessageReceived(msg); 182 } 183} 184