Index: /trunk/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetwork.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetwork.cpp	(revision 66611)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetwork.cpp	(revision 66612)
@@ -75,64 +75,54 @@
 
 
-/* Global settings / Network page / NAT network item: */
-class UIItemNetworkNAT : public QITreeWidgetItem
+/** Global settings: Network page: NAT network tree-widget item. */
+class UIItemNetworkNAT : public QITreeWidgetItem, public UIDataSettingsGlobalNetworkNAT
 {
 public:
 
-    /* Constructor: */
+    /** Constructs item. */
     UIItemNetworkNAT();
 
-    /* API: Get/return data to/form items: */
-    void fetchNetworkData(const UIDataSettingsGlobalNetworkNAT &data);
-    void uploadNetworkData(UIDataSettingsGlobalNetworkNAT &data);
+    /** Updates item fields from data. */
+    void updateFields();
+    /** Updates item data from fields. */
+    void updateData();
 
     /** Performs validation, updates @a messages list if something is wrong. */
     bool validate(UIValidationMessage &messages);
 
-    /* API: Update stuff: */
-    void updateInfo();
-    void updateData();
-
-    /* API: Network item getters: */
-    QString name() const { return m_data.m_strName; }
-    QString newName() const { return m_data.m_strNewName; }
+    /** Returns item name. */
+    QString name() const { return m_strName; }
+    /** Returns new item name. */
+    QString newName() const { return m_strNewName; }
+
+protected:
 
     /** Returns default text. */
     virtual QString defaultText() const /* override */;
-
-private:
-
-    /* Variable: Network data: */
-    UIDataSettingsGlobalNetworkNAT m_data;
 };
 
 
-/* Global settings / Network page / Host network item: */
-class UIItemNetworkHost : public QITreeWidgetItem
+/** Global settings: Network page: Host network tree-widget item. */
+class UIItemNetworkHost : public QITreeWidgetItem, public UIDataSettingsGlobalNetworkHost
 {
 public:
 
-    /* Constructor: */
+    /** Constructs item. */
     UIItemNetworkHost();
 
-    /* API: Get/return data to/form items: */
-    void fetchNetworkData(const UIDataSettingsGlobalNetworkHost &data);
-    void uploadNetworkData(UIDataSettingsGlobalNetworkHost &data);
+    /** Updates item fields from data. */
+    void updateFields();
 
     /** Performs validation, updates @a messages list if something is wrong. */
     bool validate(UIValidationMessage &messages);
 
-    /* API: Update stuff: */
-    void updateInfo();
-
-    /* API: Network item getters: */
-    QString name() const { return m_data.m_interface.m_strName; }
-
-private:
-
-    /* Variable: Network data: */
-    UIDataSettingsGlobalNetworkHost m_data;
+    /** Returns item name. */
+    QString name() const { return m_interface.m_strName; }
 };
 
+
+/*********************************************************************************************************************************
+*   Class UIItemNetworkNAT implementation.                                                                                       *
+*********************************************************************************************************************************/
 
 UIItemNetworkNAT::UIItemNetworkNAT()
@@ -141,17 +131,47 @@
 }
 
-void UIItemNetworkNAT::fetchNetworkData(const UIDataSettingsGlobalNetworkNAT &data)
-{
-    /* Get from the cache: */
-    m_data = data;
-
-    /* Fetch info: */
-    updateInfo();
-}
-
-void UIItemNetworkNAT::uploadNetworkData(UIDataSettingsGlobalNetworkNAT &data)
-{
-    /* Put to the cache: */
-    data = m_data;
+void UIItemNetworkNAT::updateFields()
+{
+    /* Compose item name/tool-tip: */
+    const QString strHeader("<tr><td><nobr>%1:&nbsp;</nobr></td><td><nobr>%2</nobr></td></tr>");
+    const QString strSubHeader("<tr><td><nobr>&nbsp;&nbsp;%1:&nbsp;</nobr></td><td><nobr>%2</nobr></td></tr>");
+    QString strToolTip;
+
+    /* Item name was not changed: */
+    setCheckState(0, m_fEnabled ? Qt::Checked : Qt::Unchecked);
+    if (m_strNewName == m_strName)
+    {
+        /* Just use the old one: */
+        setText(1, m_strName);
+        strToolTip += strHeader.arg(UIGlobalSettingsNetwork::tr("Network Name"), m_strName);
+    }
+    /* If name was changed: */
+    else
+    {
+        /* We should explain that: */
+        const QString oldName = m_strName;
+        const QString newName = m_strNewName.isEmpty() ? UIGlobalSettingsNetwork::tr("[empty]") : m_strNewName;
+        setText(1, UIGlobalSettingsNetwork::tr("%1 (renamed from %2)").arg(newName, oldName));
+        strToolTip += strHeader.arg(UIGlobalSettingsNetwork::tr("Old Network Name"), m_strName);
+        strToolTip += strHeader.arg(UIGlobalSettingsNetwork::tr("New Network Name"), m_strNewName);
+    }
+
+    /* Other tool-tip information: */
+    strToolTip += strHeader.arg(UIGlobalSettingsNetwork::tr("Network CIDR"), m_strCIDR);
+    strToolTip += strHeader.arg(UIGlobalSettingsNetwork::tr("Supports DHCP"),
+                                m_fSupportsDHCP ? UIGlobalSettingsNetwork::tr("yes") : UIGlobalSettingsNetwork::tr("no"));
+    strToolTip += strHeader.arg(UIGlobalSettingsNetwork::tr("Supports IPv6"),
+                                m_fSupportsIPv6 ? UIGlobalSettingsNetwork::tr("yes") : UIGlobalSettingsNetwork::tr("no"));
+    if (m_fSupportsIPv6 && m_fAdvertiseDefaultIPv6Route)
+        strToolTip += strSubHeader.arg(UIGlobalSettingsNetwork::tr("Default IPv6 route"), UIGlobalSettingsNetwork::tr("yes"));
+
+    /* Assign tool-tip finally: */
+    setToolTip(1, strToolTip);
+}
+
+void UIItemNetworkNAT::updateData()
+{
+    /* Update data: */
+    m_fEnabled = checkState(0) == Qt::Checked;
 }
 
@@ -163,8 +183,8 @@
     /* NAT network name validation: */
     bool fNameValid = true;
-    if (m_data.m_strNewName.isEmpty())
+    if (m_strNewName.isEmpty())
     {
         /* Emptiness validation: */
-        message.second << UIGlobalSettingsNetwork::tr("No new name specified for the NAT network previously called <b>%1</b>.").arg(m_data.m_strName);
+        message.second << UIGlobalSettingsNetwork::tr("No new name specified for the NAT network previously called <b>%1</b>.").arg(m_strName);
         fNameValid = false;
         fPass = false;
@@ -172,11 +192,11 @@
 
     /* NAT network CIDR validation: */
-    if (m_data.m_strCIDR.isEmpty())
+    if (m_strCIDR.isEmpty())
     {
         /* Emptiness validation: */
         if (fNameValid)
-            message.second << UIGlobalSettingsNetwork::tr("No CIDR specified for the NAT network <b>%1</b>.").arg(m_data.m_strNewName);
+            message.second << UIGlobalSettingsNetwork::tr("No CIDR specified for the NAT network <b>%1</b>.").arg(m_strNewName);
         else
-            message.second << UIGlobalSettingsNetwork::tr("No CIDR specified for the NAT network previously called <b>%1</b>.").arg(m_data.m_strName);
+            message.second << UIGlobalSettingsNetwork::tr("No CIDR specified for the NAT network previously called <b>%1</b>.").arg(m_strName);
         fPass = false;
     }
@@ -185,13 +205,13 @@
         /* Correctness validation: */
         RTNETADDRIPV4 network, mask;
-        int rc = RTCidrStrToIPv4(m_data.m_strCIDR.toUtf8().constData(), &network, &mask);
+        int rc = RTCidrStrToIPv4(m_strCIDR.toUtf8().constData(), &network, &mask);
         if (RT_FAILURE(rc))
         {
             if (fNameValid)
                 message.second << UIGlobalSettingsNetwork::tr("Invalid CIDR specified (<i>%1</i>) for the NAT network <b>%2</b>.")
-                                                              .arg(m_data.m_strCIDR, m_data.m_strNewName);
+                                                              .arg(m_strCIDR, m_strNewName);
             else
                 message.second << UIGlobalSettingsNetwork::tr("Invalid CIDR specified (<i>%1</i>) for the NAT network previously called <b>%2</b>.")
-                                                              .arg(m_data.m_strCIDR, m_data.m_strName);
+                                                              .arg(m_strCIDR, m_strName);
             fPass = false;
         }
@@ -202,52 +222,7 @@
 }
 
-void UIItemNetworkNAT::updateInfo()
-{
-    /* Compose item name/tool-tip: */
-    QString strHeader("<tr><td><nobr>%1:&nbsp;</nobr></td><td><nobr>%2</nobr></td></tr>");
-    QString strSubHeader("<tr><td><nobr>&nbsp;&nbsp;%1:&nbsp;</nobr></td><td><nobr>%2</nobr></td></tr>");
-    QString strToolTip;
-
-    /* Item name was not changed: */
-    setCheckState(0, m_data.m_fEnabled ? Qt::Checked : Qt::Unchecked);
-    if (m_data.m_strNewName == m_data.m_strName)
-    {
-        /* Just use the old one: */
-        setText(1, m_data.m_strName);
-        strToolTip += strHeader.arg(UIGlobalSettingsNetwork::tr("Network Name"), m_data.m_strName);
-    }
-    /* If name was changed: */
-    else
-    {
-        /* We should explain that: */
-        const QString oldName = m_data.m_strName;
-        const QString newName = m_data.m_strNewName.isEmpty() ? UIGlobalSettingsNetwork::tr("[empty]") : m_data.m_strNewName;
-        setText(1, UIGlobalSettingsNetwork::tr("%1 (renamed from %2)").arg(newName, oldName));
-        strToolTip += strHeader.arg(UIGlobalSettingsNetwork::tr("Old Network Name"), m_data.m_strName);
-        strToolTip += strHeader.arg(UIGlobalSettingsNetwork::tr("New Network Name"), m_data.m_strNewName);
-    }
-
-    /* Other tool-tip information: */
-    strToolTip += strHeader.arg(UIGlobalSettingsNetwork::tr("Network CIDR"), m_data.m_strCIDR);
-    strToolTip += strHeader.arg(UIGlobalSettingsNetwork::tr("Supports DHCP"),
-                                m_data.m_fSupportsDHCP ? UIGlobalSettingsNetwork::tr("yes") : UIGlobalSettingsNetwork::tr("no"));
-    strToolTip += strHeader.arg(UIGlobalSettingsNetwork::tr("Supports IPv6"),
-                                m_data.m_fSupportsIPv6 ? UIGlobalSettingsNetwork::tr("yes") : UIGlobalSettingsNetwork::tr("no"));
-    if (m_data.m_fSupportsIPv6 && m_data.m_fAdvertiseDefaultIPv6Route)
-        strToolTip += strSubHeader.arg(UIGlobalSettingsNetwork::tr("Default IPv6 route"), UIGlobalSettingsNetwork::tr("yes"));
-
-    /* Assign tool-tip finally: */
-    setToolTip(1, strToolTip);
-}
-
-void UIItemNetworkNAT::updateData()
-{
-    /* Update data: */
-    m_data.m_fEnabled = checkState(0) == Qt::Checked;
-}
-
 QString UIItemNetworkNAT::defaultText() const
 {
-    return m_data.m_fEnabled ?
+    return m_fEnabled ?
            tr("%1, %2", "col.2 text, col.1 name")
              .arg(text(1))
@@ -258,4 +233,8 @@
 
 
+/*********************************************************************************************************************************
+*   Class UIItemNetworkHost implementation.                                                                                      *
+*********************************************************************************************************************************/
+
 UIItemNetworkHost::UIItemNetworkHost()
     : QITreeWidgetItem()
@@ -263,17 +242,67 @@
 }
 
-void UIItemNetworkHost::fetchNetworkData(const UIDataSettingsGlobalNetworkHost &data)
-{
-    /* Get from the cache: */
-    m_data = data;
-
-    /* Fetch info: */
-    updateInfo();
-}
-
-void UIItemNetworkHost::uploadNetworkData(UIDataSettingsGlobalNetworkHost &data)
-{
-    /* Put to the cache: */
-    data = m_data;
+void UIItemNetworkHost::updateFields()
+{
+    /* Compose item name/tool-tip: */
+    setText(0, m_interface.m_strName);
+    const QString strHeader("<tr><td><nobr>%1:&nbsp;</nobr></td><td><nobr>%2</nobr></td></tr>");
+    const QString strSubHeader("<tr><td><nobr>&nbsp;&nbsp;%1:&nbsp;</nobr></td><td><nobr>%2</nobr></td></tr>");
+    QString strToolTip;
+
+    /* Host interface information: */
+    strToolTip += strHeader.arg(UIGlobalSettingsNetwork::tr("Adapter"))
+                           .arg(m_interface.m_fDhcpClientEnabled ?
+                                UIGlobalSettingsNetwork::tr("Automatically configured", "interface") :
+                                UIGlobalSettingsNetwork::tr("Manually configured", "interface"));
+    if (!m_interface.m_fDhcpClientEnabled)
+    {
+        strToolTip += strSubHeader.arg(UIGlobalSettingsNetwork::tr("IPv4 Address"))
+                                  .arg(m_interface.m_strInterfaceAddress.isEmpty() ?
+                                       UIGlobalSettingsNetwork::tr ("Not set", "address") :
+                                       m_interface.m_strInterfaceAddress) +
+                      strSubHeader.arg(UIGlobalSettingsNetwork::tr("IPv4 Network Mask"))
+                                  .arg(m_interface.m_strInterfaceMask.isEmpty() ?
+                                       UIGlobalSettingsNetwork::tr ("Not set", "mask") :
+                                       m_interface.m_strInterfaceMask);
+        if (m_interface.m_fIpv6Supported)
+        {
+            strToolTip += strSubHeader.arg(UIGlobalSettingsNetwork::tr("IPv6 Address"))
+                                      .arg(m_interface.m_strInterfaceAddress6.isEmpty() ?
+                                           UIGlobalSettingsNetwork::tr("Not set", "address") :
+                                           m_interface.m_strInterfaceAddress6) +
+                          strSubHeader.arg(UIGlobalSettingsNetwork::tr("IPv6 Network Mask Length"))
+                                      .arg(m_interface.m_strInterfaceMaskLength6.isEmpty() ?
+                                           UIGlobalSettingsNetwork::tr("Not set", "length") :
+                                           m_interface.m_strInterfaceMaskLength6);
+        }
+    }
+
+    /* DHCP server information: */
+    strToolTip += strHeader.arg(UIGlobalSettingsNetwork::tr("DHCP Server"))
+                           .arg(m_dhcpserver.m_fDhcpServerEnabled ?
+                                UIGlobalSettingsNetwork::tr("Enabled", "server") :
+                                UIGlobalSettingsNetwork::tr("Disabled", "server"));
+    if (m_dhcpserver.m_fDhcpServerEnabled)
+    {
+        strToolTip += strSubHeader.arg(UIGlobalSettingsNetwork::tr("Address"))
+                                  .arg(m_dhcpserver.m_strDhcpServerAddress.isEmpty() ?
+                                       UIGlobalSettingsNetwork::tr("Not set", "address") :
+                                       m_dhcpserver.m_strDhcpServerAddress) +
+                      strSubHeader.arg(UIGlobalSettingsNetwork::tr("Network Mask"))
+                                  .arg(m_dhcpserver.m_strDhcpServerMask.isEmpty() ?
+                                       UIGlobalSettingsNetwork::tr("Not set", "mask") :
+                                       m_dhcpserver.m_strDhcpServerMask) +
+                      strSubHeader.arg(UIGlobalSettingsNetwork::tr("Lower Bound"))
+                                  .arg(m_dhcpserver.m_strDhcpLowerAddress.isEmpty() ?
+                                       UIGlobalSettingsNetwork::tr("Not set", "bound") :
+                                       m_dhcpserver.m_strDhcpLowerAddress) +
+                      strSubHeader.arg(UIGlobalSettingsNetwork::tr("Upper Bound"))
+                                  .arg(m_dhcpserver.m_strDhcpUpperAddress.isEmpty() ?
+                                       UIGlobalSettingsNetwork::tr("Not set", "bound") :
+                                       m_dhcpserver.m_strDhcpUpperAddress);
+    }
+
+    /* Assign tool-tip finally: */
+    setToolTip(0, strToolTip);
 }
 
@@ -284,25 +313,25 @@
 
     /* Host interface validation: */
-    if (!m_data.m_interface.m_fDhcpClientEnabled)
-    {
-        if (!m_data.m_interface.m_strInterfaceAddress.trimmed().isEmpty() &&
-            (   !RTNetIsIPv4AddrStr(m_data.m_interface.m_strInterfaceAddress.toUtf8().constData())
-             || RTNetStrIsIPv4AddrAny(m_data.m_interface.m_strInterfaceAddress.toUtf8().constData())))
+    if (!m_interface.m_fDhcpClientEnabled)
+    {
+        if (!m_interface.m_strInterfaceAddress.trimmed().isEmpty() &&
+            (   !RTNetIsIPv4AddrStr(m_interface.m_strInterfaceAddress.toUtf8().constData())
+             || RTNetStrIsIPv4AddrAny(m_interface.m_strInterfaceAddress.toUtf8().constData())))
         {
             message.second << UIGlobalSettingsNetwork::tr("Host interface <b>%1</b> does not currently have a valid IPv4 address.").arg(text(0));
             fPass = false;
         }
-        if (!m_data.m_interface.m_strInterfaceMask.trimmed().isEmpty() &&
-            (   !RTNetIsIPv4AddrStr(m_data.m_interface.m_strInterfaceMask.toUtf8().constData())
-             || RTNetStrIsIPv4AddrAny(m_data.m_interface.m_strInterfaceMask.toUtf8().constData())))
+        if (!m_interface.m_strInterfaceMask.trimmed().isEmpty() &&
+            (   !RTNetIsIPv4AddrStr(m_interface.m_strInterfaceMask.toUtf8().constData())
+             || RTNetStrIsIPv4AddrAny(m_interface.m_strInterfaceMask.toUtf8().constData())))
         {
             message.second << UIGlobalSettingsNetwork::tr("Host interface <b>%1</b> does not currently have a valid IPv4 network mask.").arg(text(0));
             fPass = false;
         }
-        if (m_data.m_interface.m_fIpv6Supported)
-        {
-            if (!m_data.m_interface.m_strInterfaceAddress6.trimmed().isEmpty() &&
-                (   !RTNetIsIPv6AddrStr(m_data.m_interface.m_strInterfaceAddress6.toUtf8().constData())
-                 || RTNetStrIsIPv6AddrAny(m_data.m_interface.m_strInterfaceAddress6.toUtf8().constData())))
+        if (m_interface.m_fIpv6Supported)
+        {
+            if (!m_interface.m_strInterfaceAddress6.trimmed().isEmpty() &&
+                (   !RTNetIsIPv6AddrStr(m_interface.m_strInterfaceAddress6.toUtf8().constData())
+                 || RTNetStrIsIPv6AddrAny(m_interface.m_strInterfaceAddress6.toUtf8().constData())))
             {
                 message.second << UIGlobalSettingsNetwork::tr("Host interface <b>%1</b> does not currently have a valid IPv6 address.").arg(text(0));
@@ -310,5 +339,5 @@
             }
             bool fIsMaskPrefixLengthNumber = false;
-            const int iMaskPrefixLength = m_data.m_interface.m_strInterfaceMaskLength6.trimmed().toInt(&fIsMaskPrefixLengthNumber);
+            const int iMaskPrefixLength = m_interface.m_strInterfaceMaskLength6.trimmed().toInt(&fIsMaskPrefixLengthNumber);
             if (   !fIsMaskPrefixLengthNumber
                 || iMaskPrefixLength < 0
@@ -322,26 +351,26 @@
 
     /* DHCP server validation: */
-    if (m_data.m_dhcpserver.m_fDhcpServerEnabled)
-    {
-        if (   !RTNetIsIPv4AddrStr(m_data.m_dhcpserver.m_strDhcpServerAddress.toUtf8().constData())
-            || RTNetStrIsIPv4AddrAny(m_data.m_dhcpserver.m_strDhcpServerAddress.toUtf8().constData()))
+    if (m_dhcpserver.m_fDhcpServerEnabled)
+    {
+        if (   !RTNetIsIPv4AddrStr(m_dhcpserver.m_strDhcpServerAddress.toUtf8().constData())
+            || RTNetStrIsIPv4AddrAny(m_dhcpserver.m_strDhcpServerAddress.toUtf8().constData()))
         {
             message.second << UIGlobalSettingsNetwork::tr("Host interface <b>%1</b> does not currently have a valid DHCP server address.").arg(text(0));
             fPass = false;
         }
-        if (   !RTNetIsIPv4AddrStr(m_data.m_dhcpserver.m_strDhcpServerMask.toUtf8().constData())
-            || RTNetStrIsIPv4AddrAny(m_data.m_dhcpserver.m_strDhcpServerMask.toUtf8().constData()))
+        if (   !RTNetIsIPv4AddrStr(m_dhcpserver.m_strDhcpServerMask.toUtf8().constData())
+            || RTNetStrIsIPv4AddrAny(m_dhcpserver.m_strDhcpServerMask.toUtf8().constData()))
         {
             message.second << UIGlobalSettingsNetwork::tr("Host interface <b>%1</b> does not currently have a valid DHCP server mask.").arg(text(0));
             fPass = false;
         }
-        if (   !RTNetIsIPv4AddrStr(m_data.m_dhcpserver.m_strDhcpLowerAddress.toUtf8().constData())
-            || RTNetStrIsIPv4AddrAny(m_data.m_dhcpserver.m_strDhcpLowerAddress.toUtf8().constData()))
+        if (   !RTNetIsIPv4AddrStr(m_dhcpserver.m_strDhcpLowerAddress.toUtf8().constData())
+            || RTNetStrIsIPv4AddrAny(m_dhcpserver.m_strDhcpLowerAddress.toUtf8().constData()))
         {
             message.second << UIGlobalSettingsNetwork::tr("Host interface <b>%1</b> does not currently have a valid DHCP server lower address bound.").arg(text(0));
             fPass = false;
         }
-        if (   !RTNetIsIPv4AddrStr(m_data.m_dhcpserver.m_strDhcpUpperAddress.toUtf8().constData())
-            || RTNetStrIsIPv4AddrAny(m_data.m_dhcpserver.m_strDhcpUpperAddress.toUtf8().constData()))
+        if (   !RTNetIsIPv4AddrStr(m_dhcpserver.m_strDhcpUpperAddress.toUtf8().constData())
+            || RTNetStrIsIPv4AddrAny(m_dhcpserver.m_strDhcpUpperAddress.toUtf8().constData()))
         {
             message.second << UIGlobalSettingsNetwork::tr("Host interface <b>%1</b> does not currently have a valid DHCP server upper address bound.").arg(text(0));
@@ -354,69 +383,8 @@
 }
 
-void UIItemNetworkHost::updateInfo()
-{
-    /* Compose item name/tool-tip: */
-    setText(0, m_data.m_interface.m_strName);
-    QString strHeader("<tr><td><nobr>%1:&nbsp;</nobr></td><td><nobr>%2</nobr></td></tr>");
-    QString strSubHeader("<tr><td><nobr>&nbsp;&nbsp;%1:&nbsp;</nobr></td><td><nobr>%2</nobr></td></tr>");
-    QString strToolTip;
-
-    /* Host interface information: */
-    strToolTip += strHeader.arg(UIGlobalSettingsNetwork::tr("Adapter"))
-                           .arg(m_data.m_interface.m_fDhcpClientEnabled ?
-                                UIGlobalSettingsNetwork::tr("Automatically configured", "interface") :
-                                UIGlobalSettingsNetwork::tr("Manually configured", "interface"));
-    if (!m_data.m_interface.m_fDhcpClientEnabled)
-    {
-        strToolTip += strSubHeader.arg(UIGlobalSettingsNetwork::tr("IPv4 Address"))
-                                  .arg(m_data.m_interface.m_strInterfaceAddress.isEmpty() ?
-                                       UIGlobalSettingsNetwork::tr ("Not set", "address") :
-                                       m_data.m_interface.m_strInterfaceAddress) +
-                      strSubHeader.arg(UIGlobalSettingsNetwork::tr("IPv4 Network Mask"))
-                                  .arg(m_data.m_interface.m_strInterfaceMask.isEmpty() ?
-                                       UIGlobalSettingsNetwork::tr ("Not set", "mask") :
-                                       m_data.m_interface.m_strInterfaceMask);
-        if (m_data.m_interface.m_fIpv6Supported)
-        {
-            strToolTip += strSubHeader.arg(UIGlobalSettingsNetwork::tr("IPv6 Address"))
-                                      .arg(m_data.m_interface.m_strInterfaceAddress6.isEmpty() ?
-                                           UIGlobalSettingsNetwork::tr("Not set", "address") :
-                                           m_data.m_interface.m_strInterfaceAddress6) +
-                          strSubHeader.arg(UIGlobalSettingsNetwork::tr("IPv6 Network Mask Length"))
-                                      .arg(m_data.m_interface.m_strInterfaceMaskLength6.isEmpty() ?
-                                           UIGlobalSettingsNetwork::tr("Not set", "length") :
-                                           m_data.m_interface.m_strInterfaceMaskLength6);
-        }
-    }
-
-    /* DHCP server information: */
-    strToolTip += strHeader.arg(UIGlobalSettingsNetwork::tr("DHCP Server"))
-                           .arg(m_data.m_dhcpserver.m_fDhcpServerEnabled ?
-                                UIGlobalSettingsNetwork::tr("Enabled", "server") :
-                                UIGlobalSettingsNetwork::tr("Disabled", "server"));
-    if (m_data.m_dhcpserver.m_fDhcpServerEnabled)
-    {
-        strToolTip += strSubHeader.arg(UIGlobalSettingsNetwork::tr("Address"))
-                                  .arg(m_data.m_dhcpserver.m_strDhcpServerAddress.isEmpty() ?
-                                       UIGlobalSettingsNetwork::tr("Not set", "address") :
-                                       m_data.m_dhcpserver.m_strDhcpServerAddress) +
-                      strSubHeader.arg(UIGlobalSettingsNetwork::tr("Network Mask"))
-                                  .arg(m_data.m_dhcpserver.m_strDhcpServerMask.isEmpty() ?
-                                       UIGlobalSettingsNetwork::tr("Not set", "mask") :
-                                       m_data.m_dhcpserver.m_strDhcpServerMask) +
-                      strSubHeader.arg(UIGlobalSettingsNetwork::tr("Lower Bound"))
-                                  .arg(m_data.m_dhcpserver.m_strDhcpLowerAddress.isEmpty() ?
-                                       UIGlobalSettingsNetwork::tr("Not set", "bound") :
-                                       m_data.m_dhcpserver.m_strDhcpLowerAddress) +
-                      strSubHeader.arg(UIGlobalSettingsNetwork::tr("Upper Bound"))
-                                  .arg(m_data.m_dhcpserver.m_strDhcpUpperAddress.isEmpty() ?
-                                       UIGlobalSettingsNetwork::tr("Not set", "bound") :
-                                       m_data.m_dhcpserver.m_strDhcpUpperAddress);
-    }
-
-    /* Assign tool-tip finally: */
-    setToolTip(0, strToolTip);
-}
-
+
+/*********************************************************************************************************************************
+*   Class UIGlobalSettingsNetwork implementation.                                                                                *
+*********************************************************************************************************************************/
 
 UIGlobalSettingsNetwork::UIGlobalSettingsNetwork()
@@ -475,10 +443,10 @@
     /* Load old network data from the cache: */
     foreach (const UIDataSettingsGlobalNetworkNAT &network, oldNetworkData.m_networksNAT)
-        createTreeItemNetworkNAT(network);
+        createTreeWidgetItemForNetworkNAT(network);
     m_pTreeNetworkNAT->sortByColumn(1, Qt::AscendingOrder);
     m_pTreeNetworkNAT->setCurrentItem(m_pTreeNetworkNAT->topLevelItem(0));
     sltHandleCurrentItemChangeNetworkNAT();
     foreach (const UIDataSettingsGlobalNetworkHost &network, oldNetworkData.m_networksHost)
-        createTreeItemNetworkHost(network);
+        createTreeWidgetItemForNetworkHost(network);
     m_pTreeNetworkHost->sortByColumn(0, Qt::AscendingOrder);
     m_pTreeNetworkHost->setCurrentItem(m_pTreeNetworkHost->topLevelItem(0));
@@ -498,16 +466,12 @@
     for (int iNetworkIndex = 0; iNetworkIndex < m_pTreeNetworkNAT->topLevelItemCount(); ++iNetworkIndex)
     {
-        UIDataSettingsGlobalNetworkNAT data;
-        UIItemNetworkNAT *pItem = static_cast<UIItemNetworkNAT*>(m_pTreeNetworkNAT->topLevelItem(iNetworkIndex));
-        pItem->uploadNetworkData(data);
-        newNetworkData.m_networksNAT << data;
+        const UIItemNetworkNAT *pItem = static_cast<UIItemNetworkNAT*>(m_pTreeNetworkNAT->topLevelItem(iNetworkIndex));
+        newNetworkData.m_networksNAT << *pItem;
     }
     newNetworkData.m_networksHost.clear();
     for (int iNetworkIndex = 0; iNetworkIndex < m_pTreeNetworkHost->topLevelItemCount(); ++iNetworkIndex)
     {
-        UIDataSettingsGlobalNetworkHost data;
-        UIItemNetworkHost *pItem = static_cast<UIItemNetworkHost*>(m_pTreeNetworkHost->topLevelItem(iNetworkIndex));
-        pItem->uploadNetworkData(data);
-        newNetworkData.m_networksHost << data;
+        const UIItemNetworkHost *pItem = static_cast<UIItemNetworkHost*>(m_pTreeNetworkHost->topLevelItem(iNetworkIndex));
+        newNetworkData.m_networksHost << *pItem;
     }
 
@@ -685,5 +649,5 @@
     UIDataSettingsGlobalNetworkNAT data;
     loadDataNetworkNAT(network, data);
-    createTreeItemNetworkNAT(data, true);
+    createTreeWidgetItemForNetworkNAT(data, true);
     m_pTreeNetworkNAT->sortByColumn(1, Qt::AscendingOrder);
 }
@@ -696,11 +660,11 @@
 
     /* Edit current item data: */
-    UIDataSettingsGlobalNetworkNAT data;
-    pItem->uploadNetworkData(data);
+    UIDataSettingsGlobalNetworkNAT data = *pItem;
     UIGlobalSettingsNetworkDetailsNAT details(this, data);
     if (details.exec() == QDialog::Accepted)
     {
         /* Put data back: */
-        pItem->fetchNetworkData(data);
+        pItem->UIDataSettingsGlobalNetworkNAT::operator=(data);
+        pItem->updateFields();
         sltHandleCurrentItemChangeNetworkNAT();
         /* Revalidate: */
@@ -734,5 +698,5 @@
 
     /* Update tree: */
-    removeTreeItemNetworkNAT(pItem);
+    removeTreeWidgetItemOfNetworkNAT(pItem);
 }
 
@@ -802,5 +766,5 @@
     UIDataSettingsGlobalNetworkHost data;
     loadDataNetworkHost(iface, data);
-    createTreeItemNetworkHost(data, true);
+    createTreeWidgetItemForNetworkHost(data, true);
     m_pTreeNetworkHost->sortByColumn(0, Qt::AscendingOrder);
 }
@@ -813,11 +777,11 @@
 
     /* Edit current item data: */
-    UIDataSettingsGlobalNetworkHost data;
-    pItem->uploadNetworkData(data);
+    UIDataSettingsGlobalNetworkHost data = *pItem;
     UIGlobalSettingsNetworkDetailsHost details(this, data);
     if (details.exec() == QDialog::Accepted)
     {
         /* Put data back: */
-        pItem->fetchNetworkData(data);
+        pItem->UIDataSettingsGlobalNetworkHost::operator=(data);
+        pItem->updateFields();
         sltHandleCurrentItemChangeNetworkHost();
         /* Revalidate: */
@@ -864,5 +828,5 @@
 
     /* Update tree: */
-    removeTreeItemNetworkHost(pItem);
+    removeTreeWidgetItemOfNetworkHost(pItem);
 }
 
@@ -906,5 +870,5 @@
         /* Prepare 'NAT Network' tab: */
         prepareTabNAT();
-        /* Prepare 'Host-only Network' tab: */
+        /* Prepare 'Host Network' tab: */
         prepareTabHost();
         /* Prepare connections: */
@@ -986,5 +950,5 @@
 #endif
 
-        /* Host-only Network tree-widget created in the .ui file. */
+        /* Host Network tree-widget created in the .ui file. */
         AssertPtrReturnVoid(m_pTreeNetworkHost);
         {
@@ -994,5 +958,5 @@
         }
 
-        /* Host-only Network toolbar created in the .ui file. */
+        /* Host Network toolbar created in the .ui file. */
         AssertPtrReturnVoid(m_pToolbarNetworkHost);
         {
@@ -1002,5 +966,5 @@
             m_pToolbarNetworkHost->setOrientation(Qt::Vertical);
 
-            /* Create 'Add Host-only Network' action: */
+            /* Create 'Add Host Network' action: */
             m_pActionAddNetworkHost = m_pToolbarNetworkHost->addAction(UIIconPool::iconSet(":/add_host_iface_16px.png",
                                                                                            ":/add_host_iface_disabled_16px.png"),
@@ -1012,5 +976,5 @@
             }
 
-            /* Create 'Edit Host-only Network' action: */
+            /* Create 'Edit Host Network' action: */
             m_pActionEditNetworkHost = m_pToolbarNetworkHost->addAction(UIIconPool::iconSet(":/edit_host_iface_16px.png",
                                                                                             ":/edit_host_iface_disabled_16px.png"),
@@ -1022,5 +986,5 @@
             }
 
-            /* Create 'Remove Host-only Network' action: */
+            /* Create 'Remove Host Network' action: */
             m_pActionRemoveNetworkHost = m_pToolbarNetworkHost->addAction(UIIconPool::iconSet(":/remove_host_iface_16px.png",
                                                                                               ":/remove_host_iface_disabled_16px.png"),
@@ -1047,5 +1011,5 @@
             this, SLOT(sltHandleItemChangeNetworkNAT(QTreeWidgetItem *)));
 
-    /* Configure 'Host-only Network' connections: */
+    /* Configure 'Host Network' connections: */
     connect(m_pTreeNetworkHost, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)),
             this, SLOT(sltHandleCurrentItemChangeNetworkHost()));
@@ -1155,9 +1119,10 @@
 }
 
-void UIGlobalSettingsNetwork::createTreeItemNetworkNAT(const UIDataSettingsGlobalNetworkNAT &data, bool fChooseItem)
+void UIGlobalSettingsNetwork::createTreeWidgetItemForNetworkNAT(const UIDataSettingsGlobalNetworkNAT &data, bool fChooseItem)
 {
     /* Add new item to the tree: */
     UIItemNetworkNAT *pItem = new UIItemNetworkNAT;
-    pItem->fetchNetworkData(data);
+    pItem->UIDataSettingsGlobalNetworkNAT::operator=(data);
+    pItem->updateFields();
     m_pTreeNetworkNAT->addTopLevelItem(pItem);
     /* And choose it as current if necessary: */
@@ -1166,5 +1131,5 @@
 }
 
-void UIGlobalSettingsNetwork::removeTreeItemNetworkNAT(UIItemNetworkNAT *pItem)
+void UIGlobalSettingsNetwork::removeTreeWidgetItemOfNetworkNAT(UIItemNetworkNAT *pItem)
 {
     /* Delete passed item: */
@@ -1280,9 +1245,10 @@
 }
 
-void UIGlobalSettingsNetwork::createTreeItemNetworkHost(const UIDataSettingsGlobalNetworkHost &data, bool fChooseItem)
+void UIGlobalSettingsNetwork::createTreeWidgetItemForNetworkHost(const UIDataSettingsGlobalNetworkHost &data, bool fChooseItem)
 {
     /* Add new item to the tree: */
     UIItemNetworkHost *pItem = new UIItemNetworkHost;
-    pItem->fetchNetworkData(data);
+    pItem->UIDataSettingsGlobalNetworkHost::operator=(data);
+    pItem->updateFields();
     m_pTreeNetworkHost->addTopLevelItem(pItem);
     /* And choose it as current if necessary: */
@@ -1291,5 +1257,5 @@
 }
 
-void UIGlobalSettingsNetwork::removeTreeItemNetworkHost(UIItemNetworkHost *pItem)
+void UIGlobalSettingsNetwork::removeTreeWidgetItemOfNetworkHost(UIItemNetworkHost *pItem)
 {
     /* Delete passed item: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetwork.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetwork.h	(revision 66611)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetwork.h	(revision 66612)
@@ -114,7 +114,7 @@
     void saveDataNetworkNAT(const UIDataSettingsGlobalNetworkNAT &data);
     /** Creates a new item in the NAT network tree on the basis of passed @a data, @a fChooseItem if requested. */
-    void createTreeItemNetworkNAT(const UIDataSettingsGlobalNetworkNAT &data, bool fChooseItem = false);
+    void createTreeWidgetItemForNetworkNAT(const UIDataSettingsGlobalNetworkNAT &data, bool fChooseItem = false);
     /** Removes existing @a pItem from the NAT network tree. */
-    void removeTreeItemNetworkNAT(UIItemNetworkNAT *pItem);
+    void removeTreeWidgetItemOfNetworkNAT(UIItemNetworkNAT *pItem);
 
     /** Uploads host @a network data into passed @a data storage unit. */
@@ -123,7 +123,7 @@
     void saveDataNetworkHost(const UIDataSettingsGlobalNetworkHost &data);
     /** Creates a new item in the host network tree on the basis of passed @a data, @a fChooseItem if requested. */
-    void createTreeItemNetworkHost(const UIDataSettingsGlobalNetworkHost &data, bool fChooseItem = false);
+    void createTreeWidgetItemForNetworkHost(const UIDataSettingsGlobalNetworkHost &data, bool fChooseItem = false);
     /** Removes existing @a pItem from the host network tree. */
-    void removeTreeItemNetworkHost(UIItemNetworkHost *pItem);
+    void removeTreeWidgetItemOfNetworkHost(UIItemNetworkHost *pItem);
 
     /** Holds the Add NAT network action instance. */
