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:
parent
43b65f2eac
commit
e0dbadfc4e
@ -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);
|
||||
}
|
||||
|
@ -39,9 +39,11 @@ public:
|
||||
|
||||
void AttachedToWindow();
|
||||
void MessageReceived(BMessage* msg);
|
||||
void Show();
|
||||
|
||||
private:
|
||||
InterfaceView* _SettingsView();
|
||||
void _ShowPanel();
|
||||
private:
|
||||
InterfacesListView* fListView;
|
||||
};
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user