From 9461249c5a26278732e330fa8178a6b847f455e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Tue, 3 Mar 2015 22:47:36 +0000 Subject: [PATCH] Network: also notify interface list items * When the network configuration changes. --- src/preferences/network/InterfaceListItem.cpp | 10 +++++++--- src/preferences/network/InterfaceListItem.h | 2 ++ src/preferences/network/NetworkWindow.cpp | 14 +++++++++++--- src/preferences/network/NetworkWindow.h | 5 +++-- 4 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/preferences/network/InterfaceListItem.cpp b/src/preferences/network/InterfaceListItem.cpp index d6ac0bdc84..f295576c74 100644 --- a/src/preferences/network/InterfaceListItem.cpp +++ b/src/preferences/network/InterfaceListItem.cpp @@ -71,9 +71,6 @@ InterfaceListItem::DrawItem(BView* owner, BRect bounds, bool complete) list->FillRect(bounds); } - // TODO: only update periodically - _UpdateState(); - BBitmap* stateIcon = _StateIcon(); const char* stateText = _StateText(); @@ -154,6 +151,13 @@ InterfaceListItem::Update(BView* owner, const BFont* font) } +void +InterfaceListItem::ConfigurationUpdated(const BMessage& message) +{ + _UpdateState(); +} + + // #pragma mark - InterfaceListItem private methods diff --git a/src/preferences/network/InterfaceListItem.h b/src/preferences/network/InterfaceListItem.h index ac8e6e060c..6141a37d40 100644 --- a/src/preferences/network/InterfaceListItem.h +++ b/src/preferences/network/InterfaceListItem.h @@ -30,6 +30,8 @@ public: inline const char* Name() { return fInterface.Name(); } + void ConfigurationUpdated(const BMessage& message); + private: void _Init(); void _PopulateBitmaps(const char* mediaType); diff --git a/src/preferences/network/NetworkWindow.cpp b/src/preferences/network/NetworkWindow.cpp index 1b5decaedb..ada463a54a 100644 --- a/src/preferences/network/NetworkWindow.cpp +++ b/src/preferences/network/NetworkWindow.cpp @@ -294,7 +294,7 @@ NetworkWindow::_ScanInterfaces() InterfaceListItem* item = new InterfaceListItem(interface.Name()); item->SetExpanded(true); - fInterfaceItemMap.insert(std::pair( + fInterfaceItemMap.insert(std::pair( BString(interface.Name()), item)); fListView->AddItem(item); } @@ -349,10 +349,11 @@ NetworkWindow::_ScanAddOns() fAddOns.AddItem(addOn); // Per interface items - ItemMap::const_iterator iterator = fInterfaceItemMap.begin(); + InterfaceItemMap::const_iterator iterator + = fInterfaceItemMap.begin(); for (; iterator != fInterfaceItemMap.end(); iterator++) { const BString& interface = iterator->first; - BListItem* interfaceItem = iterator->second; + InterfaceListItem* interfaceItem = iterator->second; uint32 cookie = 0; while (true) { @@ -462,9 +463,16 @@ NetworkWindow::_BroadcastSettingsUpdate(uint32 type) void NetworkWindow::_BroadcastConfigurationUpdate(const BMessage& message) { + InterfaceItemMap::const_iterator itemIterator = fInterfaceItemMap.begin(); + for (; itemIterator != fInterfaceItemMap.end(); itemIterator++) + itemIterator->second->ConfigurationUpdated(message); + SettingsMap::const_iterator iterator = fSettingsMap.begin(); for (; iterator != fSettingsMap.end(); iterator++) iterator->second->ConfigurationUpdated(message); + + // TODO: improve invalidated region to the one that matters + fListView->Invalidate(); } diff --git a/src/preferences/network/NetworkWindow.h b/src/preferences/network/NetworkWindow.h index 75ab6ec804..b08b0d5e18 100644 --- a/src/preferences/network/NetworkWindow.h +++ b/src/preferences/network/NetworkWindow.h @@ -23,6 +23,7 @@ using namespace BNetworkKit; class BButton; class BMenu; +class InterfaceListItem; class InterfaceView; @@ -54,14 +55,14 @@ private: private: typedef BObjectList AddOnList; typedef BObjectList ItemList; - typedef std::map ItemMap; + typedef std::map InterfaceItemMap; typedef std::map SettingsMap; BNetworkSettings fSettings; AddOnList fAddOns; BOutlineListView* fListView; - ItemMap fInterfaceItemMap; + InterfaceItemMap fInterfaceItemMap; BListItem* fServicesItem; BListItem* fDialUpItem; BListItem* fOtherItem;