Index: /trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkDetailsDialog.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkDetailsDialog.cpp	(revision 66725)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkDetailsDialog.cpp	(revision 66726)
@@ -26,5 +26,4 @@
 
 /* GUI includes: */
-# include "QIDialogButtonBox.h"
 # include "QILineEdit.h"
 # include "UIGlobalSettingsNetwork.h"
@@ -35,7 +34,6 @@
 
 
-UIHostNetworkDetailsDialog::UIHostNetworkDetailsDialog(QWidget *pParent, UIDataHostNetwork &data)
-    : QIWithRetranslateUI2<QIDialog>(pParent)
-    , m_data(data)
+UIHostNetworkDetailsDialog::UIHostNetworkDetailsDialog(QWidget *pParent /* = 0 */)
+    : QIWithRetranslateUI2<QWidget>(pParent)
     , m_pTabWidget(0)
     , m_pLabelIPv4(0), m_pEditorIPv4(0), m_pLabelNMv4(0), m_pEditorNMv4(0)
@@ -48,9 +46,54 @@
 }
 
+void UIHostNetworkDetailsDialog::setData(const UIDataHostNetwork &data)
+{
+    /* Save old data: */
+    m_oldData = data;
+
+    /* Invent default old values if current old values are invalid: */
+    const quint32 uAddr = ipv4FromQStringToQuint32(m_oldData.m_interface.m_strAddress);
+    const quint32 uMask = ipv4FromQStringToQuint32(m_oldData.m_interface.m_strMask);
+    const quint32 uProp = uAddr & uMask;
+    const QString strMask = ipv4FromQuint32ToQString(uMask);
+    const QString strProp = ipv4FromQuint32ToQString(uProp);
+//    printf("Proposal is = %s x %s\n",
+//           strProp.toUtf8().constData(),
+//           strMask.toUtf8().constData());
+    if (   m_oldData.m_dhcpserver.m_strAddress.isEmpty()
+        || m_oldData.m_dhcpserver.m_strAddress == "0.0.0.0")
+        m_oldData.m_dhcpserver.m_strAddress = strProp;
+    if (   m_oldData.m_dhcpserver.m_strMask.isEmpty()
+        || m_oldData.m_dhcpserver.m_strMask == "0.0.0.0")
+        m_oldData.m_dhcpserver.m_strMask = strMask;
+    if (   m_oldData.m_dhcpserver.m_strLowerAddress.isEmpty()
+        || m_oldData.m_dhcpserver.m_strLowerAddress == "0.0.0.0")
+        m_oldData.m_dhcpserver.m_strLowerAddress = strProp;
+    if (   m_oldData.m_dhcpserver.m_strUpperAddress.isEmpty()
+        || m_oldData.m_dhcpserver.m_strUpperAddress == "0.0.0.0")
+        m_oldData.m_dhcpserver.m_strUpperAddress = strProp;
+
+    /* Copy old data to new one: */
+    m_newData = m_oldData;
+
+    /* Load 'Interface' data: */
+    loadDataForInterface();
+    /* Load 'DHCP server' data: */
+    loadDataForDHCPServer();
+}
+
+void UIHostNetworkDetailsDialog::clearData()
+{
+    /* Reset old/new data: */
+    m_oldData = UIDataHostNetwork();
+    m_newData = m_oldData;
+
+    /* Load 'Interface' data: */
+    loadDataForInterface();
+    /* Load 'DHCP server' data: */
+    loadDataForDHCPServer();
+}
+
 void UIHostNetworkDetailsDialog::retranslateUi()
 {
-    /* Translate this: */
-    setWindowTitle(tr("Host Network Details"));
-
     /* Translate tab-widget: */
     m_pTabWidget->setTabText(0, tr("&Adapter"));
@@ -80,13 +123,4 @@
 }
 
-void UIHostNetworkDetailsDialog::accept()
-{
-    /* Save before accept: */
-    save();
-
-    /* Call to base-class: */
-    QIDialog::accept();
-}
-
 void UIHostNetworkDetailsDialog::prepare()
 {
@@ -96,22 +130,16 @@
     /* Apply language settings: */
     retranslateUi();
-
-    /* Load: */
-    load();
 }
 
 void UIHostNetworkDetailsDialog::prepareThis()
 {
-    /* Apply window icons: */
-    setWindowIcon(UIIconPool::iconSetFull(":/edit_host_iface_22px.png", ":/edit_host_iface_16px.png"));
-
     /* Create layout: */
     QVBoxLayout *pLayout = new QVBoxLayout(this);
     AssertPtrReturnVoid(pLayout);
     {
+        /* Configure layout: */
+        pLayout->setContentsMargins(0, 0, 0, 0);
         /* Prepare tab-widget: */
         prepareTabWidget();
-        /* Prepare button-box: */
-        prepareButtonBox();
     }
 }
@@ -161,4 +189,6 @@
                 /* Configure editor: */
                 m_pLabelIPv4->setBuddy(m_pEditorIPv4);
+                connect(m_pEditorIPv4, &QLineEdit::textChanged,
+                        this, &UIHostNetworkDetailsDialog::sltTextChangedIPv4);
                 /* Add into layout: */
                 pLayoutInterface->addWidget(m_pEditorIPv4, 0, 1);
@@ -179,4 +209,6 @@
                 /* Configure editor: */
                 m_pLabelNMv4->setBuddy(m_pEditorNMv4);
+                connect(m_pEditorNMv4, &QLineEdit::textChanged,
+                        this, &UIHostNetworkDetailsDialog::sltTextChangedNMv4);
                 /* Add into layout: */
                 pLayoutInterface->addWidget(m_pEditorNMv4, 1, 1);
@@ -197,5 +229,6 @@
                 /* Configure editor: */
                 m_pLabelIPv6->setBuddy(m_pEditorIPv6);
-                m_pEditorIPv6->setFixedWidthByText(QString().fill('X', 32) + QString().fill(':', 7));
+                connect(m_pEditorIPv6, &QLineEdit::textChanged,
+                        this, &UIHostNetworkDetailsDialog::sltTextChangedIPv6);
                 /* Add into layout: */
                 pLayoutInterface->addWidget(m_pEditorIPv6, 2, 1);
@@ -216,4 +249,6 @@
                 /* Configure editor: */
                 m_pLabelNMv6->setBuddy(m_pEditorNMv6);
+                connect(m_pEditorNMv6, &QLineEdit::textChanged,
+                        this, &UIHostNetworkDetailsDialog::sltTextChangedNMv6);
                 /* Add into layout: */
                 pLayoutInterface->addWidget(m_pEditorNMv6, 3, 1);
@@ -252,5 +287,5 @@
                 /* Configure check-box: */
                 connect(m_pCheckBoxDHCP, &QCheckBox::stateChanged,
-                        this, &UIHostNetworkDetailsDialog::sltDhcpServerStatusChanged);
+                        this, &UIHostNetworkDetailsDialog::sltStatusChangedServer);
                 /* Add into layout: */
                 pLayoutDHCPServer->addWidget(m_pCheckBoxDHCP, 0, 0, 1, 2);
@@ -271,4 +306,6 @@
                 /* Configure editor: */
                 m_pLabelDHCPAddress->setBuddy(m_pEditorDHCPAddress);
+                connect(m_pEditorDHCPAddress, &QLineEdit::textChanged,
+                        this, &UIHostNetworkDetailsDialog::sltTextChangedAddress);
                 /* Add into layout: */
                 pLayoutDHCPServer->addWidget(m_pEditorDHCPAddress, 1, 2);
@@ -289,4 +326,6 @@
                 /* Configure editor: */
                 m_pLabelDHCPMask->setBuddy(m_pEditorDHCPMask);
+                connect(m_pEditorDHCPMask, &QLineEdit::textChanged,
+                        this, &UIHostNetworkDetailsDialog::sltTextChangedMask);
                 /* Add into layout: */
                 pLayoutDHCPServer->addWidget(m_pEditorDHCPMask, 2, 2);
@@ -307,4 +346,6 @@
                 /* Configure editor: */
                 m_pLabelDHCPLowerAddress->setBuddy(m_pEditorDHCPLowerAddress);
+                connect(m_pEditorDHCPLowerAddress, &QLineEdit::textChanged,
+                        this, &UIHostNetworkDetailsDialog::sltTextChangedLowerAddress);
                 /* Add into layout: */
                 pLayoutDHCPServer->addWidget(m_pEditorDHCPLowerAddress, 3, 2);
@@ -325,4 +366,6 @@
                 /* Configure editor: */
                 m_pLabelDHCPUpperAddress->setBuddy(m_pEditorDHCPUpperAddress);
+                connect(m_pEditorDHCPUpperAddress, &QLineEdit::textChanged,
+                        this, &UIHostNetworkDetailsDialog::sltTextChangedUpperAddress);
                 /* Add into layout: */
                 pLayoutDHCPServer->addWidget(m_pEditorDHCPUpperAddress, 4, 2);
@@ -353,39 +396,12 @@
 }
 
-void UIHostNetworkDetailsDialog::prepareButtonBox()
-{
-    /* Create dialog button-box: */
-    QIDialogButtonBox *pButtonBox = new QIDialogButtonBox;
-    AssertPtrReturnVoid(pButtonBox);
-    {
-        /* Configure button-box: */
-        pButtonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
-        connect(pButtonBox, &QIDialogButtonBox::accepted,
-                this, &UIHostNetworkDetailsDialog::accept);
-        connect(pButtonBox, &QIDialogButtonBox::rejected,
-                this, &UIHostNetworkDetailsDialog::reject);
-        /* Add button-box into layout: */
-        layout()->addWidget(pButtonBox);
-    }
-}
-
-void UIHostNetworkDetailsDialog::load()
-{
-    /* Load 'Interface' data: */
-    loadDataForInterface();
-
-    /* Load 'DHCP server' data: */
-    m_pCheckBoxDHCP->setChecked(m_data.m_dhcpserver.m_fEnabled);
-    loadDataForDHCPServer();
-}
-
 void UIHostNetworkDetailsDialog::loadDataForInterface()
 {
     /* Load IPv4 interface fields: */
-    m_pEditorIPv4->setText(m_data.m_interface.m_strAddress);
-    m_pEditorNMv4->setText(m_data.m_interface.m_strMask);
+    m_pEditorIPv4->setText(m_newData.m_interface.m_strAddress);
+    m_pEditorNMv4->setText(m_newData.m_interface.m_strMask);
 
     /* Toggle IPv6 interface fields availability: */
-    const bool fIsIpv6Supported = m_data.m_interface.m_fSupportedIPv6;
+    const bool fIsIpv6Supported = m_newData.m_interface.m_fSupportedIPv6;
     m_pLabelIPv6->setEnabled(fIsIpv6Supported);
     m_pLabelNMv6->setEnabled(fIsIpv6Supported);
@@ -394,6 +410,6 @@
 
     /* Load IPv6 interface fields: */
-    m_pEditorIPv6->setText(m_data.m_interface.m_strAddress6);
-    m_pEditorNMv6->setText(m_data.m_interface.m_strMaskLength6);
+    m_pEditorIPv6->setText(m_newData.m_interface.m_strAddress6);
+    m_pEditorNMv6->setText(m_newData.m_interface.m_strMaskLength6);
 }
 
@@ -401,5 +417,5 @@
 {
     /* Toggle DHCP server fields availability: */
-    const bool fIsDHCPServerEnabled = m_data.m_dhcpserver.m_fEnabled;
+    const bool fIsDHCPServerEnabled = m_newData.m_dhcpserver.m_fEnabled;
     m_pLabelDHCPAddress->setEnabled(fIsDHCPServerEnabled);
     m_pLabelDHCPMask->setEnabled(fIsDHCPServerEnabled);
@@ -412,52 +428,26 @@
 
     /* Load DHCP server fields: */
-    m_pEditorDHCPAddress->setText(m_data.m_dhcpserver.m_strAddress);
-    m_pEditorDHCPMask->setText(m_data.m_dhcpserver.m_strMask);
-    m_pEditorDHCPLowerAddress->setText(m_data.m_dhcpserver.m_strLowerAddress);
-    m_pEditorDHCPUpperAddress->setText(m_data.m_dhcpserver.m_strUpperAddress);
-
-    /* Invent default values where necessary: */
-    const quint32 uAddr = ipv4FromQStringToQuint32(m_data.m_interface.m_strAddress);
-    const quint32 uMask = ipv4FromQStringToQuint32(m_data.m_interface.m_strMask);
-    const quint32 uProp = uAddr & uMask;
-    const QString strMask = ipv4FromQuint32ToQString(uMask);
-    const QString strProp = ipv4FromQuint32ToQString(uProp);
-    //printf("Proposal is = %s x %s\n",
-    //       strProp.toUtf8().constData(),
-    //       strMask.toUtf8().constData());
-    if (   m_data.m_dhcpserver.m_strAddress.isEmpty()
-        || m_data.m_dhcpserver.m_strAddress == "0.0.0.0")
-        m_pEditorDHCPAddress->setText(strProp);
-    if (   m_data.m_dhcpserver.m_strMask.isEmpty()
-        || m_data.m_dhcpserver.m_strMask == "0.0.0.0")
-        m_pEditorDHCPMask->setText(strMask);
-    if (   m_data.m_dhcpserver.m_strLowerAddress.isEmpty()
-        || m_data.m_dhcpserver.m_strLowerAddress == "0.0.0.0")
-        m_pEditorDHCPLowerAddress->setText(strProp);
-    if (   m_data.m_dhcpserver.m_strUpperAddress.isEmpty()
-        || m_data.m_dhcpserver.m_strUpperAddress == "0.0.0.0")
-        m_pEditorDHCPUpperAddress->setText(strProp);
-}
-
-void UIHostNetworkDetailsDialog::save()
-{
-    /* Save interface data: */
-    m_data.m_interface.m_strAddress = m_pEditorIPv4->text();
-    m_data.m_interface.m_strMask = m_pEditorNMv4->text();
-    if (m_data.m_interface.m_fSupportedIPv6)
-    {
-        m_data.m_interface.m_strAddress6 = m_pEditorIPv6->text();
-        m_data.m_interface.m_strMaskLength6 = m_pEditorNMv6->text();
-    }
-
-    /* Save DHCP server data: */
-    m_data.m_dhcpserver.m_fEnabled = m_pCheckBoxDHCP->isChecked();
-    if (m_data.m_dhcpserver.m_fEnabled)
-    {
-        m_data.m_dhcpserver.m_strAddress = m_pEditorDHCPAddress->text();
-        m_data.m_dhcpserver.m_strMask = m_pEditorDHCPMask->text();
-        m_data.m_dhcpserver.m_strLowerAddress = m_pEditorDHCPLowerAddress->text();
-        m_data.m_dhcpserver.m_strUpperAddress = m_pEditorDHCPUpperAddress->text();
-    }
+    m_pCheckBoxDHCP->setChecked(fIsDHCPServerEnabled);
+    m_pEditorDHCPAddress->setText(m_newData.m_dhcpserver.m_strAddress);
+    m_pEditorDHCPMask->setText(m_newData.m_dhcpserver.m_strMask);
+    m_pEditorDHCPLowerAddress->setText(m_newData.m_dhcpserver.m_strLowerAddress);
+    m_pEditorDHCPUpperAddress->setText(m_newData.m_dhcpserver.m_strUpperAddress);
+}
+
+void UIHostNetworkDetailsDialog::notify()
+{
+//    if (m_oldData != m_newData)
+//        printf("Interface: %s, %s, %s, %s;  DHCP server: %d, %s, %s, %s, %s\n",
+//               m_newData.m_interface.m_strAddress.toUtf8().constData(),
+//               m_newData.m_interface.m_strMask.toUtf8().constData(),
+//               m_newData.m_interface.m_strAddress6.toUtf8().constData(),
+//               m_newData.m_interface.m_strMaskLength6.toUtf8().constData(),
+//               (int)m_newData.m_dhcpserver.m_fEnabled,
+//               m_newData.m_dhcpserver.m_strAddress.toUtf8().constData(),
+//               m_newData.m_dhcpserver.m_strMask.toUtf8().constData(),
+//               m_newData.m_dhcpserver.m_strLowerAddress.toUtf8().constData(),
+//               m_newData.m_dhcpserver.m_strUpperAddress.toUtf8().constData());
+
+    emit sigDataChanged(m_oldData != m_newData);
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkDetailsDialog.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkDetailsDialog.h	(revision 66725)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkDetailsDialog.h	(revision 66726)
@@ -19,6 +19,8 @@
 #define __UIHostNetworkDetailsDialog_h__
 
+/* Qt includes: */
+#include <QWidget>
+
 /* GUI includes: */
-#include "QIDialog.h"
 #include "QIWithRetranslateUI.h"
 
@@ -148,13 +150,25 @@
 
 
-/** Host Network Manager: Host network details dialog. */
-class UIHostNetworkDetailsDialog : public QIWithRetranslateUI2<QIDialog>
+/** Host Network Manager: Host network details widget. */
+class UIHostNetworkDetailsDialog : public QIWithRetranslateUI2<QWidget>
 {
     Q_OBJECT;
 
+signals:
+
+    /** Notifies listeners about data changed and whether it @a fDiffers. */
+    void sigDataChanged(bool fDiffers);
+
 public:
 
     /** Constructs host network details dialog for the passed @a pParent and @a data. */
-    UIHostNetworkDetailsDialog(QWidget *pParent, UIDataHostNetwork &data);
+    UIHostNetworkDetailsDialog(QWidget *pParent = 0);
+
+    /** Returns the host network data. */
+    const UIDataHostNetwork &data() const { return m_newData; }
+    /** Defines the host network @a data. */
+    void setData(const UIDataHostNetwork &data);
+    /** Clears the host network data. */
+    void clearData();
 
 protected:
@@ -165,9 +179,26 @@
 private slots:
 
-    /** Handles DHCP server status change. */
-    void sltDhcpServerStatusChanged() { loadDataForDHCPServer(); }
-
-    /** Accepts dialog changes. */
-    void accept();
+    /** @name Change handling stuff.
+     * @{ */
+        /** Handles interface IPv4 text change. */
+        void sltTextChangedIPv4(const QString &strText) { m_newData.m_interface.m_strAddress = strText; notify(); }
+        /** Handles interface NMv4 text change. */
+        void sltTextChangedNMv4(const QString &strText) { m_newData.m_interface.m_strMask = strText; notify(); }
+        /** Handles interface IPv6 text change. */
+        void sltTextChangedIPv6(const QString &strText) { m_newData.m_interface.m_strAddress6 = strText; notify(); }
+        /** Handles interface NMv6 text change. */
+        void sltTextChangedNMv6(const QString &strText) { m_newData.m_interface.m_strMaskLength6 = strText; notify(); }
+
+        /** Handles DHCP server status change. */
+        void sltStatusChangedServer(int iChecked) { m_newData.m_dhcpserver.m_fEnabled = (bool)iChecked; loadDataForDHCPServer(); notify(); }
+        /** Handles DHCP server address text change. */
+        void sltTextChangedAddress(const QString &strText) { m_newData.m_dhcpserver.m_strAddress = strText; notify(); }
+        /** Handles DHCP server mask text change. */
+        void sltTextChangedMask(const QString &strText)  { m_newData.m_dhcpserver.m_strMask = strText; notify(); }
+        /** Handles DHCP server lower address text change. */
+        void sltTextChangedLowerAddress(const QString &strText)  { m_newData.m_dhcpserver.m_strLowerAddress = strText; notify(); }
+        /** Handles DHCP server upper address text change. */
+        void sltTextChangedUpperAddress(const QString &strText)  { m_newData.m_dhcpserver.m_strUpperAddress = strText; notify(); }
+    /** @} */
 
 private:
@@ -185,18 +216,18 @@
         /** Prepares 'DHCP server' tab. */
         void prepareTabDHCPServer();
-        /** Prepares button-box. */
-        void prepareButtonBox();
-    /** @} */
-
-    /** @name Loading/saving stuff.
-     * @{ */
-        /** Loads data. */
-        void load();
+    /** @} */
+
+    /** @name Loading stuff.
+     * @{ */
         /** Loads interface data. */
         void loadDataForInterface();
         /** Loads server data. */
         void loadDataForDHCPServer();
-        /** Saves data. */
-        void save();
+    /** @} */
+
+    /** @name Change handling stuff.
+     * @{ */
+        /** Notifies listeners about data changed or not. */
+        void notify();
     /** @} */
 
@@ -211,6 +242,8 @@
     /** @name General variables.
      * @{ */
-        /** Holds the external data reference. */
-        UIDataHostNetwork &m_data;
+        /** Holds the old data copy. */
+        UIDataHostNetwork  m_oldData;
+        /** Holds the new data copy. */
+        UIDataHostNetwork  m_newData;
         /** Holds the tab-widget. */
         QITabWidget       *m_pTabWidget;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkManager.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkManager.cpp	(revision 66725)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkManager.cpp	(revision 66726)
@@ -24,4 +24,5 @@
 # include <QMenuBar>
 # include <QPushButton>
+# include <QSplitter>
 
 /* GUI includes: */
@@ -198,5 +199,7 @@
     , m_pActionRemove(0)
     , m_pActionEdit(0)
+    , m_pSplitter(0)
     , m_pTreeWidget(0)
+    , m_pDetailsWidget(0)
     , m_pButtonBox(0)
 {
@@ -433,4 +436,30 @@
 void UIHostNetworkManager::sltEditHostNetwork()
 {
+    /* Open details area: */
+    const QList<int> sizes = m_pSplitter->sizes();
+    AssertReturnVoid(sizes.size() >= 2);
+    if (sizes.at(1) == 0)
+    {
+        m_pSplitter->setSizes(QList<int>() << m_pSplitter->height() << 1);
+        m_pButtonBox->button(QDialogButtonBox::Apply)->show();
+    }
+    else
+    /* Close details area: */
+    if (sizes.at(1) > 0)
+    {
+        m_pSplitter->setSizes(QList<int>() << m_pSplitter->height() << 0);
+        m_pButtonBox->button(QDialogButtonBox::Apply)->hide();
+    }
+}
+
+void UIHostNetworkManager::sltHandleButtonClicked(QAbstractButton *pButton)
+{
+    /* Handle known button (Apply) only: */
+    if (pButton != m_pButtonBox->button(QDialogButtonBox::Apply))
+        return;
+
+    /* Disable button first of all: */
+    m_pButtonBox->button(QDialogButtonBox::Apply)->setEnabled(false);
+
     /* Get network item: */
     UIItemHostNetwork *pItem = static_cast<UIItemHostNetwork*>(m_pTreeWidget->currentItem());
@@ -439,10 +468,5 @@
     /* Get item data: */
     UIDataHostNetwork oldData = *pItem;
-    UIDataHostNetwork newData = oldData;
-
-    /* Show details dialog: */
-    UIHostNetworkDetailsDialog details(this, newData);
-    if (details.exec() != QDialog::Accepted)
-        return;
+    UIDataHostNetwork newData = m_pDetailsWidget->data();
 
     /* Get host for further activities: */
@@ -633,4 +657,15 @@
     m_pActionRemove->setEnabled(pItem);
     m_pActionEdit->setEnabled(pItem);
+
+    /* If there is an item => update details data: */
+    if (pItem)
+        m_pDetailsWidget->setData(*pItem);
+    else
+    {
+        /* Otherwise => clear details and close the area: */
+        m_pDetailsWidget->clearData();
+        m_pSplitter->setSizes(QList<int>() << m_pSplitter->height() << 0);
+        m_pButtonBox->button(QDialogButtonBox::Apply)->hide();
+    }
 }
 
@@ -765,6 +800,6 @@
             /* Prepare tool-bar: */
             prepareToolBar();
-            /* Prepare tree-widget: */
-            prepareTreeWidget();
+            /* Prepare splitter: */
+            prepareSplitter();
             /* Prepare button-box: */
             prepareButtonBox();
@@ -810,4 +845,24 @@
 }
 
+void UIHostNetworkManager::prepareSplitter()
+{
+    /* Create splitter: */
+    m_pSplitter = new QSplitter;
+    AssertPtrReturnVoid(m_pSplitter);
+    {
+        /* Prepare tree-widget: */
+        prepareTreeWidget();
+        /* Prepare details-widget: */
+        prepareDetailsWidget();
+        /* Configure splitter: */
+        m_pSplitter->setSizes(QList<int>() << m_pSplitter->height() << 0);
+        m_pSplitter->setOrientation(Qt::Vertical);
+        m_pSplitter->setCollapsible(0, false);
+        /* Add splitter into layout: */
+        QVBoxLayout *pMainLayout = qobject_cast<QVBoxLayout*>(centralWidget()->layout());
+        pMainLayout->addWidget(m_pSplitter);
+    }
+}
+
 void UIHostNetworkManager::prepareTreeWidget()
 {
@@ -832,7 +887,17 @@
         connect(m_pTreeWidget, &QITreeWidget::itemChanged,
                 this, &UIHostNetworkManager::sltHandleItemChange);
-        /* Add tree-widget into layout: */
-        QVBoxLayout *pMainLayout = qobject_cast<QVBoxLayout*>(centralWidget()->layout());
-        pMainLayout->addWidget(m_pTreeWidget);
+        /* Add tree-widget into splitter: */
+        m_pSplitter->addWidget(m_pTreeWidget);
+    }
+}
+
+void UIHostNetworkManager::prepareDetailsWidget()
+{
+    /* Create details-widget: */
+    m_pDetailsWidget = new UIHostNetworkDetailsDialog;
+    AssertPtrReturnVoid(m_pDetailsWidget);
+    {
+        /* Add details-widget into splitter: */
+        m_pSplitter->addWidget(m_pDetailsWidget);
     }
 }
@@ -845,8 +910,11 @@
     {
         /* Configure button-box: */
-        m_pButtonBox->setStandardButtons(QDialogButtonBox::Help | QDialogButtonBox::Close);
+        m_pButtonBox->setStandardButtons(QDialogButtonBox::Close | QDialogButtonBox::Apply);
         m_pButtonBox->button(QDialogButtonBox::Close)->setShortcut(Qt::Key_Escape);
-        connect(m_pButtonBox, &QIDialogButtonBox::helpRequested, &msgCenter(), &UIMessageCenter::sltShowHelpHelpDialog);
+        m_pButtonBox->button(QDialogButtonBox::Apply)->hide();
         connect(m_pButtonBox, &QIDialogButtonBox::rejected, this, &UIHostNetworkManager::close);
+        connect(m_pButtonBox, &QIDialogButtonBox::clicked, this, &UIHostNetworkManager::sltHandleButtonClicked);
+        connect(m_pDetailsWidget, &UIHostNetworkDetailsDialog::sigDataChanged,
+                m_pButtonBox->button(QDialogButtonBox::Apply), &QWidget::setEnabled);
         /* Add button-box into layout: */
         QVBoxLayout *pMainLayout = qobject_cast<QVBoxLayout*>(centralWidget()->layout());
Index: /trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkManager.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkManager.h	(revision 66725)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkManager.h	(revision 66726)
@@ -27,7 +27,10 @@
 /* Forward declarations: */
 class CHostNetworkInterface;
+class QAbstractButton;
+class QSplitter;
 class QTreeWidgetItem;
 class QIDialogButtonBox;
 class QITreeWidget;
+class UIHostNetworkDetailsDialog;
 class UIItemHostNetwork;
 class UIToolBar;
@@ -79,4 +82,10 @@
     /** @} */
 
+    /** @name Button-box stuff.
+     * @{ */
+        /** Handles button-box @a pButton click. */
+        void sltHandleButtonClicked(QAbstractButton *pButton);
+    /** @} */
+
     /** @name Tree-widget stuff.
      * @{ */
@@ -108,6 +117,10 @@
         /** Prepares tool-bar. */
         void prepareToolBar();
+        /** Prepares splitter. */
+        void prepareSplitter();
         /** Prepares tree-widget. */
         void prepareTreeWidget();
+        /** Prepares details-widget. */
+        void prepareDetailsWidget();
         /** Prepares button-box. */
         void prepareButtonBox();
@@ -158,8 +171,12 @@
     /** @} */
 
-    /** @name Tree-widget variables.
+    /** @name Splitter variables.
      * @{ */
+        /** Holds the splitter instance. */
+        QSplitter    *m_pSplitter;
         /** Holds the tree-widget instance. */
         QITreeWidget *m_pTreeWidget;
+        /** Holds the details-widget instance. */
+        UIHostNetworkDetailsDialog *m_pDetailsWidget;
     /** @} */
 
