From e0dbadfc4e76ff5a90d56834b9ab53301c8700df Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Mon, 10 Nov 2014 14:04:52 +0100 Subject: [PATCH] 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. --- .../InterfacesAddOn/InterfacesAddOn.cpp | 56 +++++++++++------- .../network/InterfacesAddOn/InterfacesAddOn.h | 2 + .../network/ServicesAddOn/ServicesAddOn.cpp | 57 ++++++++++++------- .../network/ServicesAddOn/ServicesAddOn.h | 2 + 4 files changed, 75 insertions(+), 42 deletions(-) diff --git a/src/preferences/network/InterfacesAddOn/InterfacesAddOn.cpp b/src/preferences/network/InterfacesAddOn/InterfacesAddOn.cpp index f5da22097d..25c9ab5d18 100644 --- a/src/preferences/network/InterfacesAddOn/InterfacesAddOn.cpp +++ b/src/preferences/network/InterfacesAddOn/InterfacesAddOn.cpp @@ -116,44 +116,58 @@ InterfacesAddOn::Revert() void InterfacesAddOn::MessageReceived(BMessage* msg) { - int nr = fListView->CurrentSelection(); - InterfaceListItem *item = NULL; - if (nr != -1) - item = dynamic_cast(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(view); } + + +void +InterfacesAddOn::_ShowPanel() +{ + int nr = fListView->CurrentSelection(); + InterfaceListItem *item = NULL; + if (nr != -1) + item = dynamic_cast(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); +} diff --git a/src/preferences/network/InterfacesAddOn/InterfacesAddOn.h b/src/preferences/network/InterfacesAddOn/InterfacesAddOn.h index 21704a128b..5363c3ab22 100644 --- a/src/preferences/network/InterfacesAddOn/InterfacesAddOn.h +++ b/src/preferences/network/InterfacesAddOn/InterfacesAddOn.h @@ -39,9 +39,11 @@ public: void AttachedToWindow(); void MessageReceived(BMessage* msg); + void Show(); private: InterfaceView* _SettingsView(); + void _ShowPanel(); private: InterfacesListView* fListView; }; diff --git a/src/preferences/network/ServicesAddOn/ServicesAddOn.cpp b/src/preferences/network/ServicesAddOn/ServicesAddOn.cpp index 3d648ccfed..f55e7a7975 100644 --- a/src/preferences/network/ServicesAddOn/ServicesAddOn.cpp +++ b/src/preferences/network/ServicesAddOn/ServicesAddOn.cpp @@ -83,27 +83,7 @@ ServicesAddOn::MessageReceived(BMessage* message) switch (message->what) { case kSelectionChanged: { - BStringItem* item = static_cast( - 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( + 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 + } +} diff --git a/src/preferences/network/ServicesAddOn/ServicesAddOn.h b/src/preferences/network/ServicesAddOn/ServicesAddOn.h index 311f48af93..bb0c0df68a 100644 --- a/src/preferences/network/ServicesAddOn/ServicesAddOn.h +++ b/src/preferences/network/ServicesAddOn/ServicesAddOn.h @@ -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;