NetworkSetup: add the Services tab
* UI still needs some tweaking * The Services tab has a list of services. This currently include DNS and will soon also include the services listed in xinetd. * The DNS tab allows to manage DNS servers (settings can't be saved yet)
This commit is contained in:
@@ -50,7 +50,7 @@ InterfacesAddOn::InterfacesAddOn(image_id image)
|
|||||||
NetworkSetupAddOn(image),
|
NetworkSetupAddOn(image),
|
||||||
BBox(NULL, B_NAVIGABLE_JUMP, B_NO_BORDER)
|
BBox(NULL, B_NAVIGABLE_JUMP, B_NO_BORDER)
|
||||||
{
|
{
|
||||||
fSettingsView = NULL;
|
SetName("Interfaces");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -59,13 +59,6 @@ InterfacesAddOn::~InterfacesAddOn()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const char*
|
|
||||||
InterfacesAddOn::Name()
|
|
||||||
{
|
|
||||||
return "Interfaces";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
BView*
|
BView*
|
||||||
InterfacesAddOn::CreateView()
|
InterfacesAddOn::CreateView()
|
||||||
{
|
{
|
||||||
@@ -101,8 +94,10 @@ status_t
|
|||||||
InterfacesAddOn::Save()
|
InterfacesAddOn::Save()
|
||||||
{
|
{
|
||||||
// TODO : Profile?
|
// TODO : Profile?
|
||||||
|
|
||||||
fSettingsView->Apply();
|
InterfaceView* settingsView = _SettingsView();
|
||||||
|
if (settingsView != NULL)
|
||||||
|
settingsView->Apply();
|
||||||
return fListView->SaveItems();
|
return fListView->SaveItems();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,7 +105,9 @@ InterfacesAddOn::Save()
|
|||||||
status_t
|
status_t
|
||||||
InterfacesAddOn::Revert()
|
InterfacesAddOn::Revert()
|
||||||
{
|
{
|
||||||
fSettingsView->Revert();
|
InterfaceView* settingsView = _SettingsView();
|
||||||
|
if (settingsView != NULL)
|
||||||
|
settingsView->Revert();
|
||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,14 +126,17 @@ InterfacesAddOn::MessageReceived(BMessage* msg)
|
|||||||
if (item == NULL)
|
if (item == NULL)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// TODO it would be better to reuse the view instead of recreating
|
BView* panel = Window()->FindView("panel");
|
||||||
// one.
|
BView* settingsView = panel->ChildAt(0);
|
||||||
if (fSettingsView != NULL) {
|
|
||||||
fSettingsView->RemoveSelf();
|
// Remove currently displayed settings view
|
||||||
delete fSettingsView;
|
if (settingsView != NULL) {
|
||||||
|
settingsView->RemoveSelf();
|
||||||
|
delete settingsView;
|
||||||
}
|
}
|
||||||
fSettingsView = new InterfaceView(item->GetSettings());
|
|
||||||
AddChild(fSettingsView);
|
settingsView = new InterfaceView(item->GetSettings());
|
||||||
|
Window()->FindView("panel")->AddChild(settingsView);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -148,3 +148,11 @@ InterfacesAddOn::MessageReceived(BMessage* msg)
|
|||||||
BBox::MessageReceived(msg);
|
BBox::MessageReceived(msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
InterfaceView*
|
||||||
|
InterfacesAddOn::_SettingsView()
|
||||||
|
{
|
||||||
|
BView* view = Window()->FindView("panel")->ChildAt(0);
|
||||||
|
return dynamic_cast<InterfaceView*>(view);
|
||||||
|
}
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ public:
|
|||||||
InterfacesAddOn(image_id addon_image);
|
InterfacesAddOn(image_id addon_image);
|
||||||
~InterfacesAddOn();
|
~InterfacesAddOn();
|
||||||
|
|
||||||
const char* Name();
|
|
||||||
status_t Save();
|
status_t Save();
|
||||||
status_t Revert();
|
status_t Revert();
|
||||||
|
|
||||||
@@ -41,9 +40,10 @@ public:
|
|||||||
void AttachedToWindow();
|
void AttachedToWindow();
|
||||||
void MessageReceived(BMessage* msg);
|
void MessageReceived(BMessage* msg);
|
||||||
|
|
||||||
|
private:
|
||||||
|
InterfaceView* _SettingsView();
|
||||||
private:
|
private:
|
||||||
InterfacesListView* fListView;
|
InterfacesListView* fListView;
|
||||||
InterfaceView* fSettingsView;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ Preference NetworkSetup :
|
|||||||
;
|
;
|
||||||
|
|
||||||
SubInclude HAIKU_TOP src tests kits net preflet InterfacesAddOn ;
|
SubInclude HAIKU_TOP src tests kits net preflet InterfacesAddOn ;
|
||||||
#SubInclude HAIKU_TOP src tests kits net preflet ServicesAddOn ;
|
SubInclude HAIKU_TOP src tests kits net preflet ServicesAddOn ;
|
||||||
#SubInclude HAIKU_TOP src tests kits net preflet DummyAddOn ;
|
#SubInclude HAIKU_TOP src tests kits net preflet DummyAddOn ;
|
||||||
#SubInclude HAIKU_TOP src tests kits net preflet MultipleAddOns ;
|
#SubInclude HAIKU_TOP src tests kits net preflet MultipleAddOns ;
|
||||||
#SubInclude HAIKU_TOP src tests kits net preflet DialUpAddOn ;
|
#SubInclude HAIKU_TOP src tests kits net preflet DialUpAddOn ;
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ NetworkSetupWindow::NetworkSetupWindow(const char *title)
|
|||||||
|
|
||||||
// ---- Settings section
|
// ---- Settings section
|
||||||
|
|
||||||
fPanel = new BGroupView(B_VERTICAL);
|
fPanel = new BTabView("tabs", B_WIDTH_FROM_LABEL);
|
||||||
|
|
||||||
fApplyButton = new BButton("apply", B_TRANSLATE("Apply"),
|
fApplyButton = new BButton("apply", B_TRANSLATE("Apply"),
|
||||||
new BMessage(kMsgApply));
|
new BMessage(kMsgApply));
|
||||||
@@ -71,7 +71,10 @@ NetworkSetupWindow::NetworkSetupWindow(const char *title)
|
|||||||
.AddGlue()
|
.AddGlue()
|
||||||
.End()
|
.End()
|
||||||
#endif
|
#endif
|
||||||
.Add(fPanel)
|
.AddGroup(B_HORIZONTAL, B_USE_DEFAULT_SPACING)
|
||||||
|
.Add(fPanel)
|
||||||
|
.Add(new BGroupView("panel"))
|
||||||
|
.End()
|
||||||
.AddGroup(B_HORIZONTAL, B_USE_DEFAULT_SPACING)
|
.AddGroup(B_HORIZONTAL, B_USE_DEFAULT_SPACING)
|
||||||
.Add(fRevertButton)
|
.Add(fRevertButton)
|
||||||
.AddGlue()
|
.AddGlue()
|
||||||
@@ -81,7 +84,7 @@ NetworkSetupWindow::NetworkSetupWindow(const char *title)
|
|||||||
B_USE_SMALL_SPACING, B_USE_SMALL_SPACING)
|
B_USE_SMALL_SPACING, B_USE_SMALL_SPACING)
|
||||||
);
|
);
|
||||||
|
|
||||||
_BuildShowTabView(kMsgAddonShow);
|
_BuildShowTabView();
|
||||||
|
|
||||||
fAddonView = NULL;
|
fAddonView = NULL;
|
||||||
|
|
||||||
@@ -146,18 +149,6 @@ NetworkSetupWindow::MessageReceived(BMessage* msg)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case kMsgAddonShow: {
|
|
||||||
if (fAddonView)
|
|
||||||
fAddonView->RemoveSelf();
|
|
||||||
|
|
||||||
fAddonView = NULL;
|
|
||||||
if (msg->FindPointer("addon_view", (void **) &fAddonView) != B_OK)
|
|
||||||
break;
|
|
||||||
|
|
||||||
fPanel->AddChild(fAddonView);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
inherited::MessageReceived(msg);
|
inherited::MessageReceived(msg);
|
||||||
}
|
}
|
||||||
@@ -226,7 +217,7 @@ NetworkSetupWindow::_BuildProfilesMenu(BMenu* menu, int32 msg_what)
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
NetworkSetupWindow::_BuildShowTabView(int32 msg_what)
|
NetworkSetupWindow::_BuildShowTabView()
|
||||||
{
|
{
|
||||||
BPath path;
|
BPath path;
|
||||||
BPath addon_path;
|
BPath addon_path;
|
||||||
@@ -290,20 +281,13 @@ NetworkSetupWindow::_BuildShowTabView(int32 msg_what)
|
|||||||
while ((fNetworkAddOnMap[fAddonCount]
|
while ((fNetworkAddOnMap[fAddonCount]
|
||||||
= get_nth_addon(addon_id, tabCount)) != NULL) {
|
= get_nth_addon(addon_id, tabCount)) != NULL) {
|
||||||
printf("Adding Tab: %d\n", fAddonCount);
|
printf("Adding Tab: %d\n", fAddonCount);
|
||||||
BMessage* msg = new BMessage(msg_what);
|
|
||||||
|
|
||||||
BView* addon_view
|
BView* addon_view
|
||||||
= fNetworkAddOnMap[fAddonCount]->CreateView();
|
= fNetworkAddOnMap[fAddonCount]->CreateView();
|
||||||
|
|
||||||
msg->AddInt32("image_id", addon_id);
|
|
||||||
msg->AddString("addon_path", addon_path.Path());
|
|
||||||
msg->AddPointer("addon", fNetworkAddOnMap[fAddonCount]);
|
|
||||||
msg->AddPointer("addon_view", addon_view);
|
|
||||||
|
|
||||||
// FIXME rework this: we don't want to use a tab view here,
|
// FIXME rework this: we don't want to use a tab view here,
|
||||||
// instead add-ons should populate the "interfaces" list with
|
// instead add-ons should populate the "interfaces" list with
|
||||||
// interfaces, services, etc.
|
// interfaces, services, etc.
|
||||||
fPanel->AddChild(addon_view);
|
fPanel->AddTab(addon_view);
|
||||||
fAddonCount++;
|
fAddonCount++;
|
||||||
// Number of tab addons total
|
// Number of tab addons total
|
||||||
tabCount++;
|
tabCount++;
|
||||||
|
|||||||
@@ -33,7 +33,6 @@ class NetworkSetupWindow : public BWindow
|
|||||||
|
|
||||||
typedef BWindow inherited;
|
typedef BWindow inherited;
|
||||||
|
|
||||||
static const uint32 kMsgAddonShow = 'show';
|
|
||||||
static const uint32 kMsgProfileSelected = 'prof';
|
static const uint32 kMsgProfileSelected = 'prof';
|
||||||
static const uint32 kMsgProfileManage = 'mngp';
|
static const uint32 kMsgProfileManage = 'mngp';
|
||||||
static const uint32 kMsgProfileNew = 'newp';
|
static const uint32 kMsgProfileNew = 'newp';
|
||||||
@@ -45,7 +44,7 @@ class NetworkSetupWindow : public BWindow
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void _BuildProfilesMenu(BMenu* menu, int32 msg);
|
void _BuildProfilesMenu(BMenu* menu, int32 msg);
|
||||||
void _BuildShowTabView(int32 msg);
|
void _BuildShowTabView();
|
||||||
|
|
||||||
BButton* fHelpButton;
|
BButton* fHelpButton;
|
||||||
BButton* fRevertButton;
|
BButton* fRevertButton;
|
||||||
@@ -53,7 +52,7 @@ class NetworkSetupWindow : public BWindow
|
|||||||
|
|
||||||
NetworkAddOnMap fNetworkAddOnMap;
|
NetworkAddOnMap fNetworkAddOnMap;
|
||||||
|
|
||||||
BView* fPanel;
|
BTabView* fPanel;
|
||||||
BView* fAddonView;
|
BView* fAddonView;
|
||||||
int fAddonCount;
|
int fAddonCount;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -0,0 +1,112 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2014 Haiku Inc. All rights reserved.
|
||||||
|
* Distributed under the terms of the MIT License.
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* Adrien Destugues, [email protected]
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "DNSSettingsView.h"
|
||||||
|
|
||||||
|
#include <Button.h>
|
||||||
|
#include <LayoutBuilder.h>
|
||||||
|
#include <ListView.h>
|
||||||
|
#include <ScrollView.h>
|
||||||
|
#include <TextControl.h>
|
||||||
|
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <resolv.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
|
||||||
|
|
||||||
|
static const int32 kAddServer = 'adds';
|
||||||
|
static const int32 kDeleteServer = 'dels';
|
||||||
|
static const int32 kEditServer = 'edit';
|
||||||
|
|
||||||
|
|
||||||
|
DNSSettingsView::DNSSettingsView()
|
||||||
|
{
|
||||||
|
fServerListView = new BListView("nameservers");
|
||||||
|
fTextControl = new BTextControl("", "", NULL);
|
||||||
|
fTextControl->SetModificationMessage(new BMessage(kEditServer));
|
||||||
|
|
||||||
|
fAddButton = new BButton("Add", new BMessage(kAddServer));
|
||||||
|
fUpButton = new BButton("Move up", NULL);
|
||||||
|
fDownButton = new BButton("Move down", NULL);
|
||||||
|
fRemoveButton = new BButton("Remove", new BMessage(kDeleteServer));
|
||||||
|
|
||||||
|
BLayoutBuilder::Group<>(this)
|
||||||
|
.AddGrid(B_HORIZONTAL)
|
||||||
|
.Add(fTextControl, 0, 0)
|
||||||
|
.Add(fAddButton, 1, 0)
|
||||||
|
.Add(new BScrollView("scroll", fServerListView, 0, false, true),
|
||||||
|
0, 1, 1, 4)
|
||||||
|
.Add(fUpButton, 1, 1)
|
||||||
|
.Add(fDownButton, 1, 2)
|
||||||
|
.Add(fRemoveButton, 1, 3)
|
||||||
|
.End()
|
||||||
|
.End();
|
||||||
|
|
||||||
|
_ParseResolvConf();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
DNSSettingsView::AttachedToWindow()
|
||||||
|
{
|
||||||
|
fAddButton->SetTarget(this);
|
||||||
|
fRemoveButton->SetTarget(this);
|
||||||
|
fUpButton->SetTarget(this);
|
||||||
|
fDownButton->SetTarget(this);
|
||||||
|
|
||||||
|
fTextControl->SetTarget(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
DNSSettingsView::MessageReceived(BMessage* message)
|
||||||
|
{
|
||||||
|
switch(message->what) {
|
||||||
|
case kAddServer:
|
||||||
|
{
|
||||||
|
const char* address = fTextControl->Text();
|
||||||
|
fServerListView->AddItem(new BStringItem(address));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case kDeleteServer:
|
||||||
|
{
|
||||||
|
fServerListView->RemoveItem(fServerListView->CurrentSelection());
|
||||||
|
}
|
||||||
|
case kEditServer:
|
||||||
|
{
|
||||||
|
struct in_addr dummy;
|
||||||
|
bool success = inet_aton(fTextControl->Text(), &dummy);
|
||||||
|
fTextControl->MarkAsInvalid(!success);
|
||||||
|
fAddButton->SetEnabled(success);
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
BGroupView::MessageReceived(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
DNSSettingsView::_ParseResolvConf()
|
||||||
|
{
|
||||||
|
res_init();
|
||||||
|
res_state state = __res_state();
|
||||||
|
|
||||||
|
if (state != NULL) {
|
||||||
|
for (int i = 0; i < state->nscount; i++) {
|
||||||
|
fServerListView->AddItem(
|
||||||
|
new BStringItem(inet_ntoa(state->nsaddr_list[i].sin_addr)));
|
||||||
|
}
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
return B_ERROR;
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2014 Haiku Inc. All rights reserved.
|
||||||
|
* Distributed under the terms of the MIT License.
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* Adrien Destugues, [email protected]
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <GroupView.h>
|
||||||
|
|
||||||
|
|
||||||
|
class BButton;
|
||||||
|
class BListView;
|
||||||
|
class BTextControl;
|
||||||
|
|
||||||
|
|
||||||
|
class DNSSettingsView: public BGroupView
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DNSSettingsView();
|
||||||
|
void AttachedToWindow();
|
||||||
|
void MessageReceived(BMessage* message);
|
||||||
|
|
||||||
|
private:
|
||||||
|
status_t _ParseResolvConf();
|
||||||
|
|
||||||
|
private:
|
||||||
|
BListView* fServerListView;
|
||||||
|
BTextControl* fTextControl;
|
||||||
|
|
||||||
|
BButton* fAddButton;
|
||||||
|
BButton* fRemoveButton;
|
||||||
|
BButton* fUpButton;
|
||||||
|
BButton* fDownButton;
|
||||||
|
};
|
||||||
@@ -2,8 +2,10 @@ SubDir HAIKU_TOP src tests kits net preflet ServicesAddOn ;
|
|||||||
|
|
||||||
UseHeaders [ FDirName $(HAIKU_TOP) src tests kits net preflet ] ;
|
UseHeaders [ FDirName $(HAIKU_TOP) src tests kits net preflet ] ;
|
||||||
|
|
||||||
Addon Services :
|
Addon Services :
|
||||||
ServicesAddOn.cpp
|
ServicesAddOn.cpp
|
||||||
: be <nogrist>NetworkSetup [ TargetLibstdc++ ] # $(HAIKU_NETWORK_LIBS)
|
|
||||||
|
DNSSettingsView.cpp
|
||||||
|
: be <nogrist>NetworkSetup network [ TargetLibstdc++ ]
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,9 @@
|
|||||||
* Alexander von Gluck, [email protected]
|
* Alexander von Gluck, [email protected]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "ServicesAddOn.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
@@ -13,8 +16,12 @@
|
|||||||
#include <ListView.h>
|
#include <ListView.h>
|
||||||
#include <ScrollView.h>
|
#include <ScrollView.h>
|
||||||
#include <String.h>
|
#include <String.h>
|
||||||
|
#include <Window.h>
|
||||||
|
|
||||||
#include "ServicesAddOn.h"
|
#include "DNSSettingsView.h"
|
||||||
|
|
||||||
|
|
||||||
|
static const int32 kSelectionChanged = 'ssrv';
|
||||||
|
|
||||||
|
|
||||||
NetworkSetupAddOn*
|
NetworkSetupAddOn*
|
||||||
@@ -32,37 +39,80 @@ get_nth_addon(image_id image, int index)
|
|||||||
|
|
||||||
ServicesAddOn::ServicesAddOn(image_id image)
|
ServicesAddOn::ServicesAddOn(image_id image)
|
||||||
:
|
:
|
||||||
NetworkSetupAddOn(image)
|
NetworkSetupAddOn(image),
|
||||||
|
BGroupView("Services")
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BView*
|
BView*
|
||||||
ServicesAddOn::CreateView(BRect* bounds)
|
ServicesAddOn::CreateView()
|
||||||
{
|
{
|
||||||
BRect r = *bounds;
|
fServicesListView = new BListView("system_services",
|
||||||
if (r.Width() < 100 || r.Height() < 100)
|
B_SINGLE_SELECTION_LIST);
|
||||||
r.Set(0, 0, 100, 100);
|
fServicesListView->SetSelectionMessage(new BMessage(kSelectionChanged));
|
||||||
|
|
||||||
BRect rlv = r.InsetByCopy(2, 2);
|
BScrollView* sv = new BScrollView( "ScrollView",
|
||||||
rlv.right -= B_V_SCROLL_BAR_WIDTH;
|
fServicesListView, B_WILL_DRAW | B_FRAME_EVENTS, false, true);
|
||||||
fServicesListView = new BListView(rlv, "system_services",
|
|
||||||
B_SINGLE_SELECTION_LIST, B_FOLLOW_ALL_SIDES);
|
|
||||||
|
|
||||||
BScrollView* sv = new BScrollView( "system_services_scrollview",
|
fServicesListView->AddItem(new BStringItem("DNS"));
|
||||||
fServicesListView, B_FOLLOW_ALL_SIDES,
|
|
||||||
B_WILL_DRAW | B_FRAME_EVENTS, false, true);
|
|
||||||
|
|
||||||
if (ParseInetd() != B_OK)
|
#if 0
|
||||||
ParseXinetd();
|
// Enable this when the inetd view is ready
|
||||||
|
if (_ParseInetd() != B_OK)
|
||||||
|
_ParseXinetd();
|
||||||
|
#endif
|
||||||
|
|
||||||
*bounds = r;
|
AddChild(sv);
|
||||||
return sv;
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ServicesAddOn::AttachedToWindow()
|
||||||
|
{
|
||||||
|
fServicesListView->SetTarget(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ServicesAddOn::MessageReceived(BMessage* message)
|
||||||
|
{
|
||||||
|
switch(message->what) {
|
||||||
|
case kSelectionChanged:
|
||||||
|
{
|
||||||
|
BStringItem* item = static_cast<BStringItem*>(
|
||||||
|
fServicesListView->ItemAt(message->FindInt32("index")));
|
||||||
|
|
||||||
|
if (item == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
BView* panel = Window()->FindView("panel");
|
||||||
|
BView* settingsView = panel->ChildAt(0);
|
||||||
|
|
||||||
|
// Remove currently displayed settings view
|
||||||
|
if (settingsView != NULL) {
|
||||||
|
settingsView->RemoveSelf();
|
||||||
|
delete settingsView;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp(item->Text(), "DNS") == 0) {
|
||||||
|
settingsView = new DNSSettingsView();
|
||||||
|
panel->AddChild(settingsView);
|
||||||
|
} else {
|
||||||
|
// TODO show a standard "inetd service" view
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
BGroupView::MessageReceived(message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
ServicesAddOn::ParseInetd()
|
ServicesAddOn::_ParseInetd()
|
||||||
{
|
{
|
||||||
FILE *f = fopen("/etc/inetd.conf", "r");
|
FILE *f = fopen("/etc/inetd.conf", "r");
|
||||||
if (f) {
|
if (f) {
|
||||||
@@ -102,7 +152,7 @@ ServicesAddOn::ParseInetd()
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
ServicesAddOn::ParseXinetd()
|
ServicesAddOn::_ParseXinetd()
|
||||||
{
|
{
|
||||||
FILE *f = fopen("/boot/system/settings/network/services", "r");
|
FILE *f = fopen("/boot/system/settings/network/services", "r");
|
||||||
if (f) {
|
if (f) {
|
||||||
|
|||||||
@@ -9,13 +9,24 @@
|
|||||||
|
|
||||||
#include "NetworkSetupAddOn.h"
|
#include "NetworkSetupAddOn.h"
|
||||||
|
|
||||||
class ServicesAddOn : public NetworkSetupAddOn {
|
#include <GroupView.h>
|
||||||
protected:
|
|
||||||
BListView* fServicesListView;
|
|
||||||
|
class BListView;
|
||||||
|
|
||||||
|
|
||||||
|
class ServicesAddOn : public NetworkSetupAddOn, public BGroupView {
|
||||||
public:
|
public:
|
||||||
ServicesAddOn(image_id addon_image);
|
ServicesAddOn(image_id addon_image);
|
||||||
BView* CreateView(BRect* bounds);
|
BView* CreateView();
|
||||||
const char* Name() { return "Services"; };
|
|
||||||
status_t ParseInetd();
|
void AttachedToWindow();
|
||||||
status_t ParseXinetd();
|
void MessageReceived(BMessage*);
|
||||||
|
|
||||||
|
private:
|
||||||
|
status_t _ParseInetd();
|
||||||
|
status_t _ParseXinetd();
|
||||||
|
|
||||||
|
private:
|
||||||
|
BListView* fServicesListView;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user