Index: /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UIDetailsWidgetNATNetwork.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UIDetailsWidgetNATNetwork.cpp	(revision 87296)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UIDetailsWidgetNATNetwork.cpp	(revision 87297)
@@ -74,4 +74,9 @@
 }
 
+bool UIDetailsWidgetNATNetwork::revalidate()
+{
+    return m_pForwardingTableIPv4->validate() && m_pForwardingTableIPv6->validate();
+}
+
 void UIDetailsWidgetNATNetwork::retranslateUi()
 {
@@ -147,7 +152,4 @@
             setToolTip(tr("Apply Changes (%1)").arg(m_pButtonBoxForwarding->button(QDialogButtonBox::Ok)->shortcut().toString()));
     }
-
-    /* Retranslate validation: */
-    retranslateValidation();
 }
 
@@ -156,5 +158,4 @@
     m_newData.m_fEnabled = fChecked;
     loadDataForOptions();
-    revalidate();
     updateButtonStates();
 }
@@ -163,5 +164,4 @@
 {
     m_newData.m_strName = strText;
-    revalidate();
     updateButtonStates();
 }
@@ -170,5 +170,4 @@
 {
     m_newData.m_strCIDR = strText;
-    revalidate();
     updateButtonStates();
 }
@@ -177,5 +176,4 @@
 {
     m_newData.m_fSupportsDHCP = fChecked;
-    revalidate();
     updateButtonStates();
 }
@@ -184,5 +182,4 @@
 {
     m_newData.m_fSupportsIPv6 = fChecked;
-    revalidate();
     updateButtonStates();
 }
@@ -191,5 +188,4 @@
 {
     m_newData.m_fAdvertiseDefaultIPv6Route = fChecked;
-    revalidate();
     updateButtonStates();
 }
@@ -198,5 +194,4 @@
 {
     m_newData.m_rules4 = m_pForwardingTableIPv4->rules();
-    revalidate();
     updateButtonStates();
 }
@@ -205,5 +200,4 @@
 {
     m_newData.m_rules6 = m_pForwardingTableIPv6->rules();
-    revalidate();
     updateButtonStates();
 }
@@ -422,5 +416,7 @@
             {
                 /* Prepare IPv4 forwarding table: */
-                m_pForwardingTableIPv4 = new UIPortForwardingTable(UIPortForwardingDataList(), false, true);
+                m_pForwardingTableIPv4 = new UIPortForwardingTable(UIPortForwardingDataList(),
+                                                                   false /* ip IPv6 protocol */,
+                                                                   false /* allow empty guest IPs */);
                 if (m_pForwardingTableIPv4)
                 {
@@ -430,5 +426,7 @@
                 }
                 /* Prepare IPv6 forwarding table: */
-                m_pForwardingTableIPv6 = new UIPortForwardingTable(UIPortForwardingDataList(), true, true);
+                m_pForwardingTableIPv6 = new UIPortForwardingTable(UIPortForwardingDataList(),
+                                                                   true /* ip IPv6 protocol */,
+                                                                   false /* allow empty guest IPs */);
                 if (m_pForwardingTableIPv6)
                 {
@@ -502,127 +500,4 @@
 }
 
-void UIDetailsWidgetNATNetwork::revalidate(QWidget * /*pWidget*/ /* = 0 */)
-{
-#if 0
-    /* Validate 'Interface' tab content: */
-    if (!pWidget || pWidget == m_pErrorPaneAutomatic)
-    {
-        const bool fError =    m_newData.m_interface.m_fDHCPEnabled
-                            && !m_newData.m_dhcpserver.m_fEnabled;
-        m_pErrorPaneAutomatic->setVisible(fError);
-    }
-    if (!pWidget || pWidget == m_pErrorPaneManual)
-    {
-        const bool fError = false;
-        m_pErrorPaneManual->setVisible(fError);
-    }
-    if (!pWidget || pWidget == m_pErrorPaneIPv4)
-    {
-        const bool fError =    !m_newData.m_interface.m_fDHCPEnabled
-                            && !m_newData.m_interface.m_strAddress.trimmed().isEmpty()
-                            && (   !RTNetIsIPv4AddrStr(m_newData.m_interface.m_strAddress.toUtf8().constData())
-                                || RTNetStrIsIPv4AddrAny(m_newData.m_interface.m_strAddress.toUtf8().constData()));
-        m_pErrorPaneIPv4->setVisible(fError);
-    }
-    if (!pWidget || pWidget == m_pErrorPaneNMv4)
-    {
-        const bool fError =    !m_newData.m_interface.m_fDHCPEnabled
-                            && !m_newData.m_interface.m_strMask.trimmed().isEmpty()
-                            && (   !RTNetIsIPv4AddrStr(m_newData.m_interface.m_strMask.toUtf8().constData())
-                                || RTNetStrIsIPv4AddrAny(m_newData.m_interface.m_strMask.toUtf8().constData()));
-        m_pErrorPaneNMv4->setVisible(fError);
-    }
-    if (!pWidget || pWidget == m_pErrorPaneIPv6)
-    {
-        const bool fError =    !m_newData.m_interface.m_fDHCPEnabled
-                            && m_newData.m_interface.m_fSupportedIPv6
-                            && !m_newData.m_interface.m_strAddress6.trimmed().isEmpty()
-                            && (   !RTNetIsIPv6AddrStr(m_newData.m_interface.m_strAddress6.toUtf8().constData())
-                                || RTNetStrIsIPv6AddrAny(m_newData.m_interface.m_strAddress6.toUtf8().constData()));
-        m_pErrorPaneIPv6->setVisible(fError);
-    }
-    if (!pWidget || pWidget == m_pErrorPaneNMv6)
-    {
-        bool fIsMaskPrefixLengthNumber = false;
-        const int iMaskPrefixLength = m_newData.m_interface.m_strPrefixLength6.trimmed().toInt(&fIsMaskPrefixLengthNumber);
-        const bool fError =    !m_newData.m_interface.m_fDHCPEnabled
-                            && m_newData.m_interface.m_fSupportedIPv6
-                            && (   !fIsMaskPrefixLengthNumber
-                                || iMaskPrefixLength < 0
-                                || iMaskPrefixLength > 128);
-        m_pErrorPaneNMv6->setVisible(fError);
-    }
-
-    /* Validate 'DHCP server' tab content: */
-    if (!pWidget || pWidget == m_pErrorPaneDHCPAddress)
-    {
-        const bool fError =    m_newData.m_dhcpserver.m_fEnabled
-                            && (   !RTNetIsIPv4AddrStr(m_newData.m_dhcpserver.m_strAddress.toUtf8().constData())
-                                || RTNetStrIsIPv4AddrAny(m_newData.m_dhcpserver.m_strAddress.toUtf8().constData()));
-        m_pErrorPaneDHCPAddress->setVisible(fError);
-    }
-    if (!pWidget || pWidget == m_pErrorPaneDHCPMask)
-    {
-        const bool fError =    m_newData.m_dhcpserver.m_fEnabled
-                            && (   !RTNetIsIPv4AddrStr(m_newData.m_dhcpserver.m_strMask.toUtf8().constData())
-                                || RTNetStrIsIPv4AddrAny(m_newData.m_dhcpserver.m_strMask.toUtf8().constData()));
-        m_pErrorPaneDHCPMask->setVisible(fError);
-    }
-    if (!pWidget || pWidget == m_pErrorPaneDHCPLowerAddress)
-    {
-        const bool fError =    m_newData.m_dhcpserver.m_fEnabled
-                            && (   !RTNetIsIPv4AddrStr(m_newData.m_dhcpserver.m_strLowerAddress.toUtf8().constData())
-                                || RTNetStrIsIPv4AddrAny(m_newData.m_dhcpserver.m_strLowerAddress.toUtf8().constData()));
-        m_pErrorPaneDHCPLowerAddress->setVisible(fError);
-    }
-    if (!pWidget || pWidget == m_pErrorPaneDHCPUpperAddress)
-    {
-        const bool fError =    m_newData.m_dhcpserver.m_fEnabled
-                            && (   !RTNetIsIPv4AddrStr(m_newData.m_dhcpserver.m_strUpperAddress.toUtf8().constData())
-                                || RTNetStrIsIPv4AddrAny(m_newData.m_dhcpserver.m_strUpperAddress.toUtf8().constData()));
-        m_pErrorPaneDHCPUpperAddress->setVisible(fError);
-    }
-
-    /* Retranslate validation: */
-    retranslateValidation(pWidget);
-#endif
-}
-
-void UIDetailsWidgetNATNetwork::retranslateValidation(QWidget * /*pWidget*/ /* = 0 */)
-{
-#if 0
-    /* Translate 'Interface' tab content: */
-    if (!pWidget || pWidget == m_pErrorPaneAutomatic)
-        m_pErrorPaneAutomatic->setToolTip(tr("Host interface <nobr><b>%1</b></nobr> is set to obtain the address automatically "
-                                             "but the corresponding DHCP server is not enabled.").arg(m_newData.m_interface.m_strName));
-    if (!pWidget || pWidget == m_pErrorPaneIPv4)
-        m_pErrorPaneIPv4->setToolTip(tr("Host interface <nobr><b>%1</b></nobr> does not currently have a valid "
-                                        "IPv4 address.").arg(m_newData.m_interface.m_strName));
-    if (!pWidget || pWidget == m_pErrorPaneNMv4)
-        m_pErrorPaneNMv4->setToolTip(tr("Host interface <nobr><b>%1</b></nobr> does not currently have a valid "
-                                        "IPv4 network mask.").arg(m_newData.m_interface.m_strName));
-    if (!pWidget || pWidget == m_pErrorPaneIPv6)
-        m_pErrorPaneIPv6->setToolTip(tr("Host interface <nobr><b>%1</b></nobr> does not currently have a valid "
-                                        "IPv6 address.").arg(m_newData.m_interface.m_strName));
-    if (!pWidget || pWidget == m_pErrorPaneNMv6)
-        m_pErrorPaneNMv6->setToolTip(tr("Host interface <nobr><b>%1</b></nobr> does not currently have a valid "
-                                        "IPv6 prefix length.").arg(m_newData.m_interface.m_strName));
-
-    /* Translate 'DHCP server' tab content: */
-    if (!pWidget || pWidget == m_pErrorPaneDHCPAddress)
-        m_pErrorPaneDHCPAddress->setToolTip(tr("Host interface <nobr><b>%1</b></nobr> does not currently have a valid "
-                                               "DHCP server address.").arg(m_newData.m_interface.m_strName));
-    if (!pWidget || pWidget == m_pErrorPaneDHCPMask)
-        m_pErrorPaneDHCPMask->setToolTip(tr("Host interface <nobr><b>%1</b></nobr> does not currently have a valid "
-                                            "DHCP server mask.").arg(m_newData.m_interface.m_strName));
-    if (!pWidget || pWidget == m_pErrorPaneDHCPLowerAddress)
-        m_pErrorPaneDHCPLowerAddress->setToolTip(tr("Host interface <nobr><b>%1</b></nobr> does not currently have a valid "
-                                                    "DHCP server lower address bound.").arg(m_newData.m_interface.m_strName));
-    if (!pWidget || pWidget == m_pErrorPaneDHCPUpperAddress)
-        m_pErrorPaneDHCPUpperAddress->setToolTip(tr("Host interface <nobr><b>%1</b></nobr> does not currently have a valid "
-                                                    "DHCP server upper address bound.").arg(m_newData.m_interface.m_strName));
-#endif
-}
-
 void UIDetailsWidgetNATNetwork::updateButtonStates()
 {
Index: /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UIDetailsWidgetNATNetwork.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UIDetailsWidgetNATNetwork.h	(revision 87296)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UIDetailsWidgetNATNetwork.h	(revision 87297)
@@ -125,4 +125,7 @@
     void setData(const UIDataNATNetwork &data, bool fHoldPosition = false);
 
+    /** Revalidates changes. */
+    bool revalidate();
+
 protected:
 
@@ -182,8 +185,4 @@
     /** @name Change handling stuff.
       * @{ */
-        /** Revalidates changes for passed @a pWidget. */
-        void revalidate(QWidget *pWidget = 0);
-        /** Retranslates validation for passed @a pWidget. */
-        void retranslateValidation(QWidget *pWidget = 0);
         /** Updates button states. */
         void updateButtonStates();
Index: /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UINetworkManager.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UINetworkManager.cpp	(revision 87296)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/networkmanager/UINetworkManager.cpp	(revision 87297)
@@ -1106,4 +1106,8 @@
     /* Check NAT network details-widget: */
     AssertMsgReturnVoid(m_pDetailsWidgetNATNetwork, ("NAT network details-widget isn't created!\n"));
+
+    /* Revalidate NAT network details: */
+    if (!m_pDetailsWidgetNATNetwork->revalidate())
+        return;
 
     /* Get item data: */
