Network prefs: update on tab switch

The rightmost part of the UI actually depends on which tab is selected
on the leftside. Intercept the tab change in the Show method, and
display the correct data.

Fixes #11400.
This commit is contained in:
Adrien Destugues 2014-11-10 14:04:52 +01:00
parent 43b65f2eac
commit e0dbadfc4e
4 changed files with 75 additions and 42 deletions

View File

@ -116,44 +116,58 @@ InterfacesAddOn::Revert()
void
InterfacesAddOn::MessageReceived(BMessage* msg)
{
int nr = fListView->CurrentSelection();
InterfaceListItem *item = NULL;
if (nr != -1)
item = dynamic_cast<InterfaceListItem*>(fListView->ItemAt(nr));
switch (msg->what) {
case kMsgInterfaceSelected:
{
if (item == NULL)
break;
BView* panel = Window()->FindView("panel");
BView* settingsView = panel->ChildAt(0);
// Remove currently displayed settings view
if (settingsView != NULL) {
settingsView->RemoveSelf();
delete settingsView;
}
settingsView = new InterfaceView(item->GetSettings());
Window()->FindView("panel")->AddChild(settingsView);
_ShowPanel();
break;
}
case B_OBSERVER_NOTICE_CHANGE:
fListView->Invalidate();
break;
default:
msg->PrintToStream();
BBox::MessageReceived(msg);
}
}
void
InterfacesAddOn::Show()
{
BView::Show();
_ShowPanel();
}
InterfaceView*
InterfacesAddOn::_SettingsView()
{
BView* view = Window()->FindView("panel")->ChildAt(0);
return dynamic_cast<InterfaceView*>(view);
}
void
InterfacesAddOn::_ShowPanel()
{
int nr = fListView->CurrentSelection();
InterfaceListItem *item = NULL;
if (nr != -1)
item = dynamic_cast<InterfaceListItem*>(fListView->ItemAt(nr));
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;
}
settingsView = new InterfaceView(item->GetSettings());
Window()->FindView("panel")->AddChild(settingsView);
}

View File

@ -39,9 +39,11 @@ public:
void AttachedToWindow();
void MessageReceived(BMessage* msg);
void Show();
private:
InterfaceView* _SettingsView();
void _ShowPanel();
private:
InterfacesListView* fListView;
};

View File

@ -83,27 +83,7 @@ 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
}
_ShowPanel();
break;
}
default:
@ -112,6 +92,14 @@ ServicesAddOn::MessageReceived(BMessage* message)
}
void
ServicesAddOn::Show()
{
BView::Show();
_ShowPanel();
}
status_t
ServicesAddOn::Save()
{
@ -219,3 +207,30 @@ ServicesAddOn::_ParseXinetd()
return B_ERROR;
}
void
ServicesAddOn::_ShowPanel()
{
BStringItem* item = static_cast<BStringItem*>(
fServicesListView->ItemAt(fServicesListView->CurrentSelection()));
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
}
}

View File

@ -22,6 +22,7 @@ class ServicesAddOn : public NetworkSetupAddOn, public BGroupView {
void AttachedToWindow();
void MessageReceived(BMessage*);
void Show();
status_t Save();
status_t Revert();
@ -29,6 +30,7 @@ class ServicesAddOn : public NetworkSetupAddOn, public BGroupView {
private:
status_t _ParseInetd();
status_t _ParseXinetd();
void _ShowPanel();
private:
BListView* fServicesListView;