[haiku-commits] BRANCH axeld-github.network-preferences [574e5c855fc9] src/kits/shared src/preferences/network headers/private/shared

  • From: axeld-github.network-preferences <community@xxxxxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 3 Mar 2015 23:01:42 +0100 (CET)

added 2 changesets to branch 'refs/remotes/axeld-github/network-preferences'
old head: 557c74fbfc685880a6657774fff7e9ec2822248e
new head: 574e5c855fc9092e14d5fae76384f4fec8664e5e
overview: https://github.com/axeld/haiku/compare/557c74fbfc68...574e5c855fc9

----------------------------------------------------------------------------

a36204afab63: Network: also notify interface list items
  
  * When the network configuration changes.

574e5c855fc9: DriverSettingsMessageAdapter: optional field converter.
  
  * You can now optionally specify a converter that does the actual
    message to settings conversion, and vice versa.
  * This allows for more sophisticated and custom conversions.

                                   [ Axel Dörfler <axeld@xxxxxxxxxxxxxxxx> ]

----------------------------------------------------------------------------

6 files changed, 88 insertions(+), 25 deletions(-)
.../shared/DriverSettingsMessageAdapter.h        | 20 ++++++-
src/kits/shared/DriverSettingsMessageAdapter.cpp | 62 +++++++++++++++-----
src/preferences/network/InterfaceListItem.cpp    | 10 +++-
src/preferences/network/InterfaceListItem.h      |  2 +
src/preferences/network/NetworkWindow.cpp        | 14 ++++-
src/preferences/network/NetworkWindow.h          |  5 +-

############################################################################

Commit:      a36204afab63acf02fce9840bc32d0507ee30965
Author:      Axel Dörfler <axeld@xxxxxxxxxxxxxxxx>
Date:        Tue Mar  3 22:47:36 2015 UTC

Network: also notify interface list items

* When the network configuration changes.

----------------------------------------------------------------------------

diff --git a/src/preferences/network/InterfaceListItem.cpp 
b/src/preferences/network/InterfaceListItem.cpp
index d6ac0bd..f295576 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 ac8e6e0..6141a37 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 1b5deca..ada463a 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<BString, BListItem*>(
+               fInterfaceItemMap.insert(std::pair<BString, InterfaceListItem*>(
                        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 75ab6ec..b08b0d5 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<BNetworkSettingsAddOn> AddOnList;
        typedef BObjectList<BNetworkSettingsItem> ItemList;
-       typedef std::map<BString, BListItem*> ItemMap;
+       typedef std::map<BString, InterfaceListItem*> InterfaceItemMap;
        typedef std::map<BListItem*, BNetworkSettingsItem*> SettingsMap;
 
                        BNetworkSettings        fSettings;
                        AddOnList                       fAddOns;
 
                        BOutlineListView*       fListView;
-                       ItemMap                         fInterfaceItemMap;
+                       InterfaceItemMap        fInterfaceItemMap;
                        BListItem*                      fServicesItem;
                        BListItem*                      fDialUpItem;
                        BListItem*                      fOtherItem;

############################################################################

Commit:      574e5c855fc9092e14d5fae76384f4fec8664e5e
Author:      Axel Dörfler <axeld@xxxxxxxxxxxxxxxx>
Date:        Tue Mar  3 22:48:26 2015 UTC

DriverSettingsMessageAdapter: optional field converter.

* You can now optionally specify a converter that does the actual
  message to settings conversion, and vice versa.
* This allows for more sophisticated and custom conversions.

----------------------------------------------------------------------------

diff --git a/headers/private/shared/DriverSettingsMessageAdapter.h 
b/headers/private/shared/DriverSettingsMessageAdapter.h
index 3068d99..f08aa53 100644
--- a/headers/private/shared/DriverSettingsMessageAdapter.h
+++ b/headers/private/shared/DriverSettingsMessageAdapter.h
@@ -1,5 +1,5 @@
 /*
- * Copyright 2006-2013, Haiku, Inc. All Rights Reserved.
+ * Copyright 2006-2015, Haiku, Inc. All Rights Reserved.
  * Distributed under the terms of the MIT License.
  *
  * Authors:
@@ -14,11 +14,27 @@
 #include <Message.h>
 
 
+class DriverSettingsConverter {
+public:
+                                                               
DriverSettingsConverter();
+       virtual                                         
~DriverSettingsConverter();
+
+       virtual status_t                        ConvertFromDriverSettings(
+                                                                       const 
driver_parameter& parameter,
+                                                                       const 
char* name, uint32 type,
+                                                                       
BMessage& target) = 0;
+       virtual status_t                        ConvertToDriverSettings(const 
BMessage& source,
+                                                                       const 
char* name, int32 index,
+                                                                       uint32 
type, BString& value) = 0;
+};
+
+
 struct settings_template {
        uint32          type;
        const char*     name;
        const settings_template* sub_template;
        bool            parent_value;
+       DriverSettingsConverter* converter;
 };
 
 
@@ -49,7 +65,7 @@ private:
                        const settings_template* _FindParentValueTemplate(
                                                                        const 
settings_template* settingsTemplate);
                        status_t                        _AddParameter(const 
driver_parameter& parameter,
-                                                                       const 
char* name, uint32 type,
+                                                                       const 
settings_template& settingsTemplate,
                                                                        
BMessage& message);
 
                        status_t                        
_ConvertFromDriverParameter(
diff --git a/src/kits/shared/DriverSettingsMessageAdapter.cpp 
b/src/kits/shared/DriverSettingsMessageAdapter.cpp
index 08b8d91..e88a63b 100644
--- a/src/kits/shared/DriverSettingsMessageAdapter.cpp
+++ b/src/kits/shared/DriverSettingsMessageAdapter.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright 2006-2013, Haiku, Inc. All Rights Reserved.
+ * Copyright 2006-2015, Haiku, Inc. All Rights Reserved.
  * Distributed under the terms of the MIT License.
  *
  * Authors:
@@ -18,6 +18,19 @@
 #include <String.h>
 
 
+DriverSettingsConverter::DriverSettingsConverter()
+{
+}
+
+
+DriverSettingsConverter::~DriverSettingsConverter()
+{
+}
+
+
+// #pragma mark -
+
+
 DriverSettingsMessageAdapter::DriverSettingsMessageAdapter()
 {
 }
@@ -152,30 +165,42 @@ DriverSettingsMessageAdapter::_FindParentValueTemplate(
 
 status_t
 DriverSettingsMessageAdapter::_AddParameter(const driver_parameter& parameter,
-       const char* name, uint32 type, BMessage& message)
+       const settings_template& settingsTemplate, BMessage& message)
 {
        for (int32 i = 0; i < parameter.value_count; i++) {
-               switch (type) {
+               if (settingsTemplate.converter != NULL) {
+                       status_t status
+                               = 
settingsTemplate.converter->ConvertFromDriverSettings(
+                                       parameter, settingsTemplate.name, 
settingsTemplate.type,
+                                       message);
+                       if (status == B_OK)
+                               continue;
+                       if (status != B_NOT_SUPPORTED)
+                               return status;
+               }
+
+               switch (settingsTemplate.type) {
                        case B_STRING_TYPE:
-                               message.AddString(name, parameter.values[i]);
+                               message.AddString(settingsTemplate.name, 
parameter.values[i]);
                                break;
                        case B_INT32_TYPE:
-                               message.AddInt32(name, 
atoi(parameter.values[i]));
+                               message.AddInt32(settingsTemplate.name,
+                                       atoi(parameter.values[i]));
                                break;
                        case B_BOOL_TYPE:
                                if (!strcasecmp(parameter.values[i], "true")
                                        || !strcasecmp(parameter.values[i], 
"on")
                                        || !strcasecmp(parameter.values[i], 
"enabled")
                                        || !strcasecmp(parameter.values[i], 
"1"))
-                                       message.AddBool(name, true);
+                                       message.AddBool(settingsTemplate.name, 
true);
                                else
-                                       message.AddBool(name, false);
+                                       message.AddBool(settingsTemplate.name, 
false);
                                break;
                }
        }
-       if (type == B_BOOL_TYPE && parameter.value_count == 0) {
-               // boolean parameters are always true
-               message.AddBool(name, true);
+       if (settingsTemplate.type == B_BOOL_TYPE && parameter.value_count == 0) 
{
+               // Empty boolean parameters are always true
+               return message.AddBool(settingsTemplate.name, true);
        }
 
        return B_OK;
@@ -193,7 +218,7 @@ DriverSettingsMessageAdapter::_ConvertFromDriverParameter(
                return B_BAD_VALUE;
        }
 
-       _AddParameter(parameter, parameter.name, settingsTemplate->type, 
message);
+       _AddParameter(parameter, *settingsTemplate, message);
 
        if (settingsTemplate->type == B_MESSAGE_TYPE
                && parameter.parameter_count > 0) {
@@ -207,10 +232,8 @@ DriverSettingsMessageAdapter::_ConvertFromDriverParameter(
 
                        const settings_template* parentValueTemplate
                                = _FindParentValueTemplate(settingsTemplate);
-                       if (parentValueTemplate != NULL) {
-                               _AddParameter(parameter, 
parentValueTemplate->name,
-                                       parentValueTemplate->type, subMessage);
-                       }
+                       if (parentValueTemplate != NULL)
+                               _AddParameter(parameter, *parentValueTemplate, 
subMessage);
                }
                if (status == B_OK)
                        message.AddMessage(parameter.name, &subMessage);
@@ -251,6 +274,15 @@ DriverSettingsMessageAdapter::_AppendSettings(
                if (valueIndex > 0 && type != B_MESSAGE_TYPE)
                        settings.Append(" ");
 
+               if (valueTemplate->converter != NULL) {
+                       status_t status = 
valueTemplate->converter->ConvertToDriverSettings(
+                               message, name, type, valueIndex, settings);
+                       if (status == B_OK)
+                               continue;
+                       if (status != B_NOT_SUPPORTED)
+                               return status;
+               }
+
                switch (type) {
                        case B_BOOL_TYPE:
                        {


Other related posts:

  • » [haiku-commits] BRANCH axeld-github.network-preferences [574e5c855fc9] src/kits/shared src/preferences/network headers/private/shared - axeld-github . network-preferences