Index: /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 17783)
+++ /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 17784)
@@ -272,4 +272,5 @@
 	include/VBoxVMSettingsAudio.h \
 	include/VBoxVMSettingsNetwork.h \
+	include/VBoxVMSettingsNetworkDetails.h \
 	include/VBoxVMSettingsSerial.h \
 	include/VBoxVMSettingsParallel.h \
@@ -352,4 +353,5 @@
 	src/VBoxVMSettingsAudio.cpp \
 	src/VBoxVMSettingsNetwork.cpp \
+	src/VBoxVMSettingsNetworkDetails.cpp \
 	src/VBoxVMSettingsSerial.cpp \
 	src/VBoxVMSettingsParallel.cpp \
Index: /trunk/src/VBox/Frontends/VirtualBox/VBoxUI.pro
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/VBoxUI.pro	(revision 17783)
+++ /trunk/src/VBox/Frontends/VirtualBox/VBoxUI.pro	(revision 17784)
@@ -45,4 +45,5 @@
     ui/VBoxVMSettingsHD.ui \
     ui/VBoxVMSettingsNetwork.ui \
+    ui/VBoxVMSettingsNetworkDetails.ui \
     ui/VBoxVMSettingsParallel.ui \
     ui/VBoxVMSettingsSF.ui \
Index: /trunk/src/VBox/Frontends/VirtualBox/VirtualBox.qrc
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/VirtualBox.qrc	(revision 17783)
+++ /trunk/src/VBox/Frontends/VirtualBox/VirtualBox.qrc	(revision 17784)
@@ -334,4 +334,6 @@
     <file alias="export_16px.png">images/export_16px.png</file>
     <file alias="vmw_ovf_import.png">images/vmw_ovf_import.png</file>
+    <file alias="connect_16px.png">images/connect_16px.png</file>
+    <file alias="disconnect_16px.png">images/disconnect_16px.png</file>
  </qresource>
  </RCC>
Index: /trunk/src/VBox/Frontends/VirtualBox/include/VBoxProblemReporter.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/include/VBoxProblemReporter.h	(revision 17783)
+++ /trunk/src/VBox/Frontends/VirtualBox/include/VBoxProblemReporter.h	(revision 17784)
@@ -263,8 +263,6 @@
 #if defined Q_WS_WIN
     int confirmDeletingHostInterface (const QString &aName, QWidget *aParent = 0);
-    void cannotCreateHostInterface (const CHost &aHost,
-                                    QWidget *aParent = 0);
-    void cannotCreateHostInterface (const CProgress &aProgress, const QString &aName,
-                                    QWidget *aParent = 0);
+    void cannotCreateHostInterface (const CHost &aHost, QWidget *aParent = 0);
+    void cannotCreateHostInterface (const CProgress &aProgress, QWidget *aParent = 0);
     void cannotRemoveHostInterface (const CHost &aHost,
                                     const CHostNetworkInterface &aIface,
Index: /trunk/src/VBox/Frontends/VirtualBox/include/VBoxVMSettingsNetwork.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/include/VBoxVMSettingsNetwork.h	(revision 17783)
+++ /trunk/src/VBox/Frontends/VirtualBox/include/VBoxVMSettingsNetwork.h	(revision 17784)
@@ -6,5 +6,5 @@
 
 /*
- * Copyright (C) 2006-2008 Sun Microsystems, Inc.
+ * Copyright (C) 2008 Sun Microsystems, Inc.
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -24,18 +24,14 @@
 #define __VBoxVMSettingsNetwork_h__
 
+/* VBox Includes */
+#include "COMDefs.h"
 #include "VBoxSettingsPage.h"
 #include "VBoxVMSettingsNetwork.gen.h"
-#include "COMDefs.h"
 
-#if defined (Q_WS_WIN) || defined (VBOX_WITH_NETFLT)
-class QTreeWidget;
-class QTreeWidgetItem;
-#endif
+/* VBox Forwardes */
+class VBoxVMSettingsNetworkPage;
+class VBoxVMSettingsNetworkDetails;
 
-/*
- * QWidget sub-class which represents one tab-page per each network adapter.
- * It has generated UI part.
- */
-class VBoxVMSettingsNetwork : public QIWithRetranslateUI<QWidget>,
+class VBoxVMSettingsNetwork : public QIWithRetranslateUI <QWidget>,
                               public Ui::VBoxVMSettingsNetwork
 {
@@ -44,21 +40,16 @@
 public:
 
-    VBoxVMSettingsNetwork();
+    VBoxVMSettingsNetwork (VBoxVMSettingsNetworkPage *aParent);
 
     void getFromAdapter (const CNetworkAdapter &aAdapter);
     void putBackToAdapter();
 
-    QString pageTitle() const;
-
     void setValidator (QIWidgetValidator *aValidator);
+    bool revalidate (QString &aWarning, QString &aTitle);
 
     QWidget* setOrderAfter (QWidget *aAfter);
 
-    void setNetworksList (const QStringList &aList);
-
-#if defined (Q_WS_WIN) || defined (VBOX_WITH_NETFLT)
-    void setInterfaceName (const QString &);
-    QString interfaceName() const;
-#endif
+    QString pageTitle() const;
+    QString currentName (KNetworkAttachmentType aType = KNetworkAttachmentType_Null) const;
 
 protected:
@@ -68,79 +59,18 @@
 private slots:
 
-    void adapterToggled (bool aOn);
-    void naTypeChanged (const QString &aString);
-    void genMACClicked();
+    void updateCableConnectedState();
+    void detailsClicked();
 
 private:
 
-    void prepareComboboxes();
+    void populateComboboxes();
+    KNetworkAttachmentType attachmentType() const;
 
-    void setTapEnabled (bool aEnabled);
-    void setTapVisible (bool aVisible);
-
+    VBoxVMSettingsNetworkPage *mParent;
+    VBoxVMSettingsNetworkDetails *mDetails;
     CNetworkAdapter mAdapter;
     QIWidgetValidator *mValidator;
-
-#if defined (Q_WS_WIN) || defined (VBOX_WITH_NETFLT)
-    QString mInterfaceName;
-#endif
 };
 
-
-#if defined (Q_WS_WIN) || defined (VBOX_WITH_NETFLT)
-/*
- * QGroupBox sub-class which represents network interface list.
- */
-class VBoxNIList : public QIWithRetranslateUI<QWidget>
-{
-    Q_OBJECT;
-
-public:
-
-    VBoxNIList (QWidget *aParent);
-
-    bool isWrongInterface() const;
-    void setCurrentInterface (const QString &aName);
-#if defined (Q_WS_WIN) && defined(VBOX_WITH_NETFLT)
-    void updateInterfacesList(KNetworkAttachmentType enmAttachmentType);
-#endif
-signals:
-
-    void listChanged();
-    void currentInterfaceChanged (const QString &);
-
-private slots:
-
-    void onCurrentItemChanged (QTreeWidgetItem *aCurrent, QTreeWidgetItem *aPrev = 0);
-    void addHostInterface();
-    void delHostInterface();
-
-protected:
-
-    void retranslateUi();
-
-private:
-#if defined (Q_WS_WIN) && defined(VBOX_WITH_NETFLT)
-    void populateInterfacesList(KNetworkAttachmentType enmAttachmentType);
-#else
-    void populateInterfacesList();
-#endif
-    QILabelSeparator *mLbTitle;
-    QTreeWidget      *mList;
-
-# if defined (Q_WS_WIN)
-    QAction *mAddAction;
-    QAction *mDelAction;
-#  ifdef VBOX_WITH_NETFLT
-    KNetworkAttachmentType mEnmAttachmentType;
-#  endif
-# endif
-};
-#endif /* Q_WS_WIN || VBOX_WITH_NETFLT */
-
-
-/*
- * QWidget sub-class which represents network settings page itself.
- */
 class VBoxVMSettingsNetworkPage : public VBoxSettingsPage
 {
@@ -151,4 +81,8 @@
     VBoxVMSettingsNetworkPage();
 
+    QStringList natList() const;
+    QStringList netList() const;
+    QStringList intList (KHostNetworkInterfaceType aType) const;
+
 protected:
 
@@ -156,38 +90,13 @@
     void putBackTo();
 
-    void setValidator (QIWidgetValidator *aVal);
+    void setValidator (QIWidgetValidator *aValidator);
     bool revalidate (QString &aWarning, QString &aTitle);
 
     void retranslateUi();
 
-private slots:
-
-    void updateNetworksList();
-#if defined (VBOX_WITH_NETFLT)
-    void updateInterfaceList();
-#endif
-#if defined (Q_WS_WIN) || defined (VBOX_WITH_NETFLT)
-    void onCurrentPageChanged (int);
-    void onCurrentInterfaceChanged (const QString &);
-#endif
-
 private:
 
-    void populateNetworksList();
-
-    /* Widgets */
+    QIWidgetValidator *mValidator;
     QTabWidget *mTwAdapters;
-#if defined (Q_WS_WIN) || defined (VBOX_WITH_NETFLT)
-    VBoxNIList *mNIList;
-#endif
-
-    /* Widget Validator*/
-    QIWidgetValidator *mValidator;
-
-    /* Lists */
-    QStringList mListNetworks;
-
-    /* Flags */
-    bool mLockNetworkListUpdate;
 };
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/VBoxGlobal.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/VBoxGlobal.cpp	(revision 17783)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/VBoxGlobal.cpp	(revision 17784)
@@ -1896,10 +1896,16 @@
                      * an additional symbolic network/interface name field, use
                      * this name instead */
-                    if (type == KNetworkAttachmentType_Bridged)
-                        attType = attType.arg (tr ("host interface, %1",
+                    if (type == KNetworkAttachmentType_NAT)
+                        attType = attType.arg (tr ("NAT, '%1'",
+                            "details report (network)").arg (adapter.GetNATNetwork()));
+                    else if (type == KNetworkAttachmentType_Bridged)
+                        attType = attType.arg (tr ("Bridged network, %1",
                             "details report (network)").arg (adapter.GetHostInterface()));
                     else if (type == KNetworkAttachmentType_Internal)
-                        attType = attType.arg (tr ("internal network, '%1'",
+                        attType = attType.arg (tr ("Internal network, '%1'",
                             "details report (network)").arg (adapter.GetInternalNetwork()));
+                    else if (type == KNetworkAttachmentType_HostOnly)
+                        attType = attType.arg (tr ("Host-only network, '%1'",
+                            "details report (network)").arg (adapter.GetHostInterface()));
                     else
                         attType = attType.arg (vboxGlobal().toString (type));
@@ -2916,5 +2922,5 @@
         tr ("NAT", "NetworkAttachmentType");
     mNetworkAttachmentTypes [KNetworkAttachmentType_Bridged] =
-        tr ("Bridged Interface", "NetworkAttachmentType");
+        tr ("Bridged Network", "NetworkAttachmentType");
     mNetworkAttachmentTypes [KNetworkAttachmentType_Internal] =
         tr ("Internal Network", "NetworkAttachmentType");
Index: /trunk/src/VBox/Frontends/VirtualBox/src/VBoxProblemReporter.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/VBoxProblemReporter.cpp	(revision 17783)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/VBoxProblemReporter.cpp	(revision 17784)
@@ -1337,14 +1337,13 @@
 {
     message (parent ? parent : mainWindowShown(), Error,
-        tr ("Failed to create the host network interface ."),
+        tr ("Failed to create the host-only network interface."),
         formatErrorInfo (host));
 }
 
 void VBoxProblemReporter::cannotCreateHostInterface (
-    const CProgress &progress, const QString &name, QWidget *parent)
+    const CProgress &progress, QWidget *parent)
 {
     message (parent ? parent : mainWindowShown(), Error,
-        tr ("Failed to create the host network interface <b>%1</b>.")
-            .arg (name),
+        tr ("Failed to create the host-only network interface."),
         formatErrorInfo (progress.GetErrorInfo()));
 }
Index: /trunk/src/VBox/Frontends/VirtualBox/src/VBoxVMSettingsNetwork.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/VBoxVMSettingsNetwork.cpp	(revision 17783)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/VBoxVMSettingsNetwork.cpp	(revision 17784)
@@ -6,5 +6,5 @@
 
 /*
- * Copyright (C) 2006-2008 Sun Microsystems, Inc.
+ * Copyright (C) 2008 Sun Microsystems, Inc.
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -21,37 +21,15 @@
  */
 
-/* Common Includes */
-#include "VBoxVMSettingsNetwork.h"
+/* VBox Includes */
 #include "QIWidgetValidator.h"
 #include "VBoxGlobal.h"
-#if defined (Q_WS_WIN) || defined (VBOX_WITH_NETFLT)
-#include "VBoxToolBar.h"
-#include "VBoxSettingsUtils.h"
-#include "VBoxProblemReporter.h"
-#endif
-
-/* Qt Includes */
-#if defined (Q_WS_X11) && !defined (VBOX_WITH_NETFLT)
-#include <QFileDialog>
-#endif
-#if defined (Q_WS_WIN) || defined (VBOX_WITH_NETFLT)
-#include <QTreeWidget>
-#endif
-
-/* Common Stuff */
-#if defined (Q_WS_WIN) || defined (VBOX_WITH_NETFLT)
-static QTreeWidgetItem* findItem (QTreeWidget *aList,
-                                  const QString &aMatch)
-{
-    QList<QTreeWidgetItem*> list =
-        aList->findItems (aMatch, Qt::MatchExactly, 0);
-    return list.count() ? list [0] : 0;
-}
-#endif
-
+#include "VBoxVMSettingsNetwork.h"
+#include "VBoxVMSettingsNetworkDetails.h"
 
 /* VBoxVMSettingsNetwork Stuff */
-VBoxVMSettingsNetwork::VBoxVMSettingsNetwork()
-    : QIWithRetranslateUI<QWidget> (0)
+VBoxVMSettingsNetwork::VBoxVMSettingsNetwork (VBoxVMSettingsNetworkPage *aParent)
+    : QIWithRetranslateUI <QWidget> (0)
+    , mParent (aParent)
+    , mDetails (new VBoxVMSettingsNetworkDetails (this))
     , mValidator (0)
 {
@@ -59,12 +37,7 @@
     Ui::VBoxVMSettingsNetwork::setupUi (this);
 
-    /* Setup common validators */
-    mLeMAC->setValidator (new QRegExpValidator
-        (QRegExp ("[0-9A-Fa-f][02468ACEace][0-9A-Fa-f]{10}"), this));
-
-    /* Setup dialog for current platform */
-#if !defined (Q_WS_X11) || defined (VBOX_WITH_NETFLT)
-    setTapVisible (false);
-#endif
+    /* Setup widgets */
+    mTbDetails->setIcon (VBoxGlobal::iconSet (
+        ":/global_settings_16px.png", ":/global_settings_disabled_16px.png"));
 
     /* Applying language settings */
@@ -75,5 +48,5 @@
      * available on Mac OS X. Not sure why this happens but this seems to help
      * against. */
-    QList<QWidget*> list = findChildren<QWidget*>();
+    QList <QWidget*> list = findChildren <QWidget*>();
     foreach (QWidget *w, list)
         if (w->parent() == this)
@@ -86,41 +59,38 @@
     mAdapter = aAdapter;
 
+    /* Load adapter state */
     mGbAdapter->setChecked (aAdapter.GetEnabled());
 
-    int aPos = mCbAType->findText (
-        vboxGlobal().toString (aAdapter.GetAdapterType()));
-    mCbAType->setCurrentIndex (aPos == -1 ? 0 : aPos);
-
-    int naPos = mCbNAType->findText (
-        vboxGlobal().toString (aAdapter.GetAttachmentType()));
-    mCbNAType->setCurrentIndex (naPos == -1 ? 0 : naPos);
-    naTypeChanged (mCbNAType->currentText());
-
-    mLeMAC->setText (aAdapter.GetMACAddress());
-
-    mCbCable->setChecked (aAdapter.GetCableConnected());
-
-    int inPos = mCbNetwork->findText (aAdapter.GetInternalNetwork());
-    mCbNetwork->setCurrentIndex (inPos == -1 ? 0 : inPos);
-
-#if defined (Q_WS_WIN) || defined (VBOX_WITH_NETFLT)
-    mInterfaceName = aAdapter.GetHostInterface().isEmpty() ?
-                     QString::null : aAdapter.GetHostInterface();
-#endif
-#if defined (Q_WS_X11) && !defined (VBOX_WITH_NETFLT)
-    mLeInterface_x11->setText (aAdapter.GetHostInterface());
-#endif
+    /* Load adapter type */
+    int adapterPos = mCbAdapterType->findData (aAdapter.GetAdapterType());
+    mCbAdapterType->setCurrentIndex (adapterPos == -1 ? 0 : adapterPos);
+
+    /* Load cable-connected status */
+    mTbCable->setProperty ("EXT_Checked", QVariant (aAdapter.GetCableConnected()));
+    updateCableConnectedState();
+
+    /* Load network attachment type */
+    int attachmentPos = mCbAttachmentType->findData (aAdapter.GetAttachmentType());
+    mCbAttachmentType->setCurrentIndex (attachmentPos == -1 ? 0 : attachmentPos);
+
+    /* Load details page */
+    mDetails->getFromAdapter (aAdapter);
 }
 
 void VBoxVMSettingsNetwork::putBackToAdapter()
 {
+    /* Save adapter state */
     mAdapter.SetEnabled (mGbAdapter->isChecked());
 
-    mAdapter.SetAdapterType (vboxGlobal().
-        toNetworkAdapterType (mCbAType->currentText()));
-
-    KNetworkAttachmentType type =
-        vboxGlobal().toNetworkAttachmentType (mCbNAType->currentText());
-    switch (type)
+    /* Save adapter type */
+    KNetworkAdapterType type = (KNetworkAdapterType)
+        mCbAdapterType->itemData (mCbAdapterType->currentIndex()).toInt();
+    mAdapter.SetAdapterType (type);
+
+    /* Save cable-connected status */
+    mAdapter.SetCableConnected (mTbCable->property ("EXT_Checked").toBool());
+
+    /* Save network attachment type */
+    switch (attachmentType())
     {
         case KNetworkAttachmentType_Null:
@@ -140,93 +110,62 @@
             break;
         default:
-            AssertMsgFailed (("Invalid network attachment type: %d", type));
-            break;
-    }
-
-    mAdapter.SetMACAddress (mLeMAC->text());
-
-    mAdapter.SetCableConnected (mCbCable->isChecked());
-
-    if (type == KNetworkAttachmentType_Bridged
-#if defined (Q_WS_WIN) && defined (VBOX_WITH_NETFLT)
-            || type == KNetworkAttachmentType_HostOnly
-#endif
-            )
-    {
-#if defined (Q_WS_WIN) || defined (VBOX_WITH_NETFLT)
-        mAdapter.SetHostInterface (mInterfaceName);
-#endif
-#if defined (Q_WS_X11) && !defined (VBOX_WITH_NETFLT)
-        QString iface = mLeInterface_x11->text();
-        mAdapter.SetHostInterface (iface.isEmpty() ? QString::null : iface);
-#endif
-    }
-    else if (type == KNetworkAttachmentType_Internal)
-        mAdapter.SetInternalNetwork (mCbNetwork->currentText());
+            AssertMsgFailed (("Invalid network attachment type: (%d).", attachmentType()));
+    }
+
+    /* Save details page */
+    mDetails->putBackToAdapter();
+}
+
+void VBoxVMSettingsNetwork::setValidator (QIWidgetValidator *aValidator)
+{
+    mValidator = aValidator;
+
+    connect (mGbAdapter, SIGNAL (toggled (bool)),
+             mValidator, SLOT (revalidate()));
+    connect (mCbAttachmentType, SIGNAL (activated (const QString&)),
+             mValidator, SLOT (revalidate()));
+    connect (mTbCable, SIGNAL (clicked (bool)),
+             this, SLOT (updateCableConnectedState()));
+    connect (mTbDetails, SIGNAL (clicked (bool)),
+             this, SLOT (detailsClicked()));
+
+    mValidator->revalidate();
+}
+
+bool VBoxVMSettingsNetwork::revalidate (QString &aWarning, QString &aTitle)
+{
+    bool valid = mGbAdapter->isChecked() ?
+                 mDetails->revalidate (attachmentType(), aWarning) : true;
+
+    if (!valid)
+        aTitle += ": " + vboxGlobal().removeAccelMark (pageTitle());
+
+    return valid;
+}
+
+QWidget* VBoxVMSettingsNetwork::setOrderAfter (QWidget *aAfter)
+{
+    setTabOrder (aAfter, mGbAdapter);
+    setTabOrder (mGbAdapter, mCbAdapterType);
+    setTabOrder (mCbAdapterType, mTbCable);
+    setTabOrder (mTbCable, mCbAttachmentType);
+    return mCbAttachmentType;
 }
 
 QString VBoxVMSettingsNetwork::pageTitle() const
 {
-    QString pageTitle;
+    QString title;
     if (!mAdapter.isNull())
     {
-        pageTitle = VBoxGlobal::tr ("Adapter %1", "network")
+        title = VBoxGlobal::tr ("Adapter %1", "network")
             .arg (QString ("&%1").arg (mAdapter.GetSlot() + 1));
     }
-    return pageTitle;
-}
-
-void VBoxVMSettingsNetwork::setValidator (QIWidgetValidator *aValidator)
-{
-    mValidator = aValidator;
-
-    connect (mGbAdapter, SIGNAL (toggled (bool)),
-             this, SLOT (adapterToggled (bool)));
-    connect (mCbNAType, SIGNAL (activated (const QString&)),
-             this, SLOT (naTypeChanged (const QString&)));
-    connect (mCbNetwork, SIGNAL (activated (const QString&)),
-             mValidator, SLOT (revalidate()));
-    connect (mPbMAC, SIGNAL (clicked()), this, SLOT (genMACClicked()));
-
-    mValidator->revalidate();
-}
-
-QWidget* VBoxVMSettingsNetwork::setOrderAfter (QWidget *aAfter)
-{
-    setTabOrder (aAfter, mGbAdapter);
-    setTabOrder (mGbAdapter, mCbAType);
-    setTabOrder (mCbAType, mCbNAType);
-    setTabOrder (mCbNAType, mCbNetwork);
-    setTabOrder (mCbNetwork, mLeMAC);
-    setTabOrder (mLeMAC, mPbMAC);
-    setTabOrder (mPbMAC, mCbCable);
-    setTabOrder (mCbCable, mLeInterface_x11);
-    return mLeInterface_x11;
-}
-
-void VBoxVMSettingsNetwork::setNetworksList (const QStringList &aList)
-{
-    QString curText = mCbNetwork->currentText();
-    mCbNetwork->clear();
-    mCbNetwork->clearEditText();
-    mCbNetwork->insertItems (0, aList);
-    mCbNetwork->setCurrentIndex (mCbNetwork->findText (curText));
-    if (mValidator)
-        mValidator->revalidate();
-}
-
-#if defined (Q_WS_WIN) || defined (VBOX_WITH_NETFLT)
-void VBoxVMSettingsNetwork::setInterfaceName (const QString &aName)
-{
-    mInterfaceName = aName;
-    if (mValidator)
-        mValidator->revalidate();
-}
-
-QString VBoxVMSettingsNetwork::interfaceName() const
-{
-    return mInterfaceName;
-}
-#endif
+    return title;
+}
+
+QString VBoxVMSettingsNetwork::currentName (KNetworkAttachmentType aType) const
+{
+    return mDetails->currentName (aType);
+}
 
 void VBoxVMSettingsNetwork::retranslateUi()
@@ -235,489 +174,250 @@
     Ui::VBoxVMSettingsNetwork::retranslateUi (this);
 
-    prepareComboboxes();
-}
-
-void VBoxVMSettingsNetwork::adapterToggled (bool aOn)
-{
-    if (!aOn)
-    {
-        mCbNAType->setCurrentIndex (0);
-        naTypeChanged (mCbNAType->currentText());
-    }
-    if (mValidator)
-        mValidator->revalidate();
-}
-
-void VBoxVMSettingsNetwork::naTypeChanged (const QString &aString)
-{
-    bool enableIntNet = vboxGlobal().toNetworkAttachmentType (aString) ==
-                        KNetworkAttachmentType_Internal;
-    mLbNetwork->setEnabled (enableIntNet);
-    mCbNetwork->setEnabled (enableIntNet);
-#if defined (Q_WS_X11) && !defined (VBOX_WITH_NETFLT)
-    bool enableHostIf = vboxGlobal().toNetworkAttachmentType (aString) ==
-                        KNetworkAttachmentType_Bridged;
-    setTapEnabled (enableHostIf);
-#endif
-    if (mValidator)
-        mValidator->revalidate();
-}
-
-void VBoxVMSettingsNetwork::genMACClicked()
-{
-    mAdapter.SetMACAddress (QString::null);
-    mLeMAC->setText (mAdapter.GetMACAddress());
-}
-
-void VBoxVMSettingsNetwork::prepareComboboxes()
-{
-    /* Save the current selected value */
-    int currentAdapter = mCbAType->currentIndex();
-    /* Clear the driver box */
-    mCbAType->clear();
-    /* Refill them */
-    mCbAType->insertItem (0,
+    /* Translate combo-boxes content */
+    populateComboboxes();
+}
+
+void VBoxVMSettingsNetwork::updateCableConnectedState()
+{
+    if (sender())
+    {
+        /* If click called with slot - toggle button's state */
+        bool value = mTbCable->property ("EXT_Checked").toBool();
+        mTbCable->setProperty ("EXT_Checked", QVariant (!value));
+    }
+
+    /* Feat the icon relatively button state */
+    mTbCable->setIcon (VBoxGlobal::iconSet (mTbCable->
+        property ("EXT_Checked").toBool() ? ":/connect_16px.png" :
+                                            ":/disconnect_16px.png"));
+}
+
+void VBoxVMSettingsNetwork::detailsClicked()
+{
+    /* Reload alternate list */
+    KNetworkAttachmentType type = attachmentType();
+    QStringList list;
+    switch (type)
+    {
+        case KNetworkAttachmentType_NAT:
+            list = mParent->natList();
+            break;
+        case KNetworkAttachmentType_Bridged:
+            list = mParent->intList (KHostNetworkInterfaceType_Bridged);
+            break;
+        case KNetworkAttachmentType_Internal:
+            list = mParent->netList();
+            break;
+        case KNetworkAttachmentType_HostOnly:
+            list = mParent->intList (KHostNetworkInterfaceType_HostOnly);
+            break;
+        default:
+            break;
+    }
+    mDetails->loadList (type, list);
+    mDetails->activateWindow();
+    mDetails->exec();
+    Assert (mValidator);
+    mValidator->revalidate();
+}
+
+void VBoxVMSettingsNetwork::populateComboboxes()
+{
+    /* Save the current selected adapter */
+    int currentAdapter = mCbAdapterType->currentIndex();
+
+    /* Clear the adapters combo-box */
+    mCbAdapterType->clear();
+
+    /* Populate adapters */
+    mCbAdapterType->insertItem (0,
         vboxGlobal().toString (KNetworkAdapterType_Am79C970A));
-    mCbAType->setItemData (0,
-        mCbAType->itemText(0), Qt::ToolTipRole);
-    mCbAType->insertItem (1,
+    mCbAdapterType->setItemData (0,
+        KNetworkAdapterType_Am79C970A);
+    mCbAdapterType->setItemData (0,
+        mCbAdapterType->itemText (0), Qt::ToolTipRole);
+    mCbAdapterType->insertItem (1,
         vboxGlobal().toString (KNetworkAdapterType_Am79C973));
-    mCbAType->setItemData (1,
-        mCbAType->itemText(1), Qt::ToolTipRole);
+    mCbAdapterType->setItemData (1,
+        KNetworkAdapterType_Am79C973);
+    mCbAdapterType->setItemData (1,
+        mCbAdapterType->itemText (1), Qt::ToolTipRole);
 #ifdef VBOX_WITH_E1000
-    mCbAType->insertItem (2,
+    mCbAdapterType->insertItem (2,
         vboxGlobal().toString (KNetworkAdapterType_I82540EM));
-    mCbAType->setItemData (2,
-        mCbAType->itemText(2), Qt::ToolTipRole);
-    mCbAType->insertItem (3,
+    mCbAdapterType->setItemData (2,
+        KNetworkAdapterType_I82540EM);
+    mCbAdapterType->setItemData (2,
+        mCbAdapterType->itemText (2), Qt::ToolTipRole);
+    mCbAdapterType->insertItem (3,
         vboxGlobal().toString (KNetworkAdapterType_I82543GC));
-    mCbAType->setItemData (3,
-        mCbAType->itemText(3), Qt::ToolTipRole);
-#endif
+    mCbAdapterType->setItemData (3,
+        KNetworkAdapterType_I82543GC);
+    mCbAdapterType->setItemData (3,
+        mCbAdapterType->itemText (3), Qt::ToolTipRole);
+#endif /* VBOX_WITH_E1000 */
+
     /* Set the old value */
-    mCbAType->setCurrentIndex (currentAdapter);
-
-    /* Save the current selected value */
-    int currentAttachment = mCbNAType->currentIndex();
-    /* Clear the driver box */
-    mCbNAType->clear();
-    /* Refill them */
-    mCbNAType->insertItem (0,
+    mCbAdapterType->setCurrentIndex (currentAdapter == -1 ?
+                                     0 : currentAdapter);
+
+
+    /* Save the current selected attachment type */
+    int currentAttachment = mCbAttachmentType->currentIndex();
+
+    /* Clear the attachments combo-box */
+    mCbAttachmentType->clear();
+
+    /* Populate attachments */
+    mCbAttachmentType->insertItem (0,
         vboxGlobal().toString (KNetworkAttachmentType_Null));
-    mCbNAType->setItemData (0,
-        mCbNAType->itemText(0), Qt::ToolTipRole);
-    mCbNAType->insertItem (1,
+    mCbAttachmentType->setItemData (0,
+        KNetworkAttachmentType_Null);
+    mCbAttachmentType->setItemData (0,
+        mCbAttachmentType->itemText (0), Qt::ToolTipRole);
+    mCbAttachmentType->insertItem (1,
         vboxGlobal().toString (KNetworkAttachmentType_NAT));
-    mCbNAType->setItemData (1,
-        mCbNAType->itemText(1), Qt::ToolTipRole);
-    mCbNAType->insertItem (2,
+    mCbAttachmentType->setItemData (1,
+        KNetworkAttachmentType_NAT);
+    mCbAttachmentType->setItemData (1,
+        mCbAttachmentType->itemText (1), Qt::ToolTipRole);
+    mCbAttachmentType->insertItem (2,
         vboxGlobal().toString (KNetworkAttachmentType_Bridged));
-    mCbNAType->setItemData (2,
-        mCbNAType->itemText(2), Qt::ToolTipRole);
-    mCbNAType->insertItem (3,
+    mCbAttachmentType->setItemData (2,
+        KNetworkAttachmentType_Bridged);
+    mCbAttachmentType->setItemData (2,
+        mCbAttachmentType->itemText (2), Qt::ToolTipRole);
+    mCbAttachmentType->insertItem (3,
         vboxGlobal().toString (KNetworkAttachmentType_Internal));
-    mCbNAType->setItemData (3,
-        mCbNAType->itemText(3), Qt::ToolTipRole);
-#if defined(RT_OS_LINUX) || defined (RT_OS_WINDOWS)
-    mCbNAType->insertItem (4,
+    mCbAttachmentType->setItemData (3,
+        KNetworkAttachmentType_Internal);
+    mCbAttachmentType->setItemData (3,
+        mCbAttachmentType->itemText (3), Qt::ToolTipRole);
+#if defined (RT_OS_LINUX) || defined (RT_OS_WINDOWS)
+    mCbAttachmentType->insertItem (4,
         vboxGlobal().toString (KNetworkAttachmentType_HostOnly));
-    mCbNAType->setItemData (4,
-        mCbNAType->itemText(4), Qt::ToolTipRole);
-#endif /* RT_OS_LINUX */
+    mCbAttachmentType->setItemData (4,
+        KNetworkAttachmentType_HostOnly);
+    mCbAttachmentType->setItemData (4,
+        mCbAttachmentType->itemText (4), Qt::ToolTipRole);
+#endif /* RT_OS_LINUX || RT_OS_WINDOWS */
+
     /* Set the old value */
-    mCbNAType->setCurrentIndex (currentAttachment);
-}
-
-void VBoxVMSettingsNetwork::setTapEnabled (bool aEnabled)
-{
-    mGbTap->setEnabled (aEnabled);
-    mLbInterface_x11->setEnabled (aEnabled);
-    mLeInterface_x11->setEnabled (aEnabled);
-}
-
-void VBoxVMSettingsNetwork::setTapVisible (bool aVisible)
-{
-    mGbTap->setVisible (aVisible);
-    mLbInterface_x11->setVisible (aVisible);
-    mLeInterface_x11->setVisible (aVisible);
-#ifdef Q_WS_MAC
-    /* Make sure the layout is recalculated (Important on the mac). */
-    layout()->activate();
-#endif
-}
-
-/* VBoxNIList Stuff */
-#if defined (Q_WS_WIN) || defined (VBOX_WITH_NETFLT)
-class VBoxNIListItem : public QTreeWidgetItem
-{
-public:
-
-    enum { typeId = QTreeWidgetItem::UserType + 1 };
-
-    VBoxNIListItem (QTreeWidget *aParent, const QString &aName, bool aWrong = false)
-        : QTreeWidgetItem (aParent, QStringList (aName), typeId)
-        , mWrong (aWrong)
-    {
-        init();
-    }
-
-    VBoxNIListItem (const QString &aName, bool aWrong = false)
-        : QTreeWidgetItem (QStringList (aName), typeId)
-        , mWrong (aWrong)
-    {
-        init();
-    }
-
-    void init()
-    {
-        /* Force the fake item's font to italic */
-        if (mWrong)
-        {
-            QFont fnt = font (0);
-            fnt.setItalic (true);
-            setFont (0, fnt);
-        }
-    }
-
-    bool isWrong() { return mWrong; }
-
-private:
-
-    bool mWrong;
-};
-
-VBoxNIList::VBoxNIList (QWidget *aParent)
-    : QIWithRetranslateUI<QWidget> (aParent)
-{
-    QVBoxLayout *mainLayout = new QVBoxLayout (this);
-    VBoxGlobal::setLayoutMargin (mainLayout, 0);
-    mLbTitle = new QILabelSeparator();
-    mainLayout->addWidget (mLbTitle);
-//    mainLayout->addItem (new QSpacerItem (8, 16, QSizePolicy::Fixed, QSizePolicy::Minimum), 1, 0);
-    /* Creating List Widget */
-    QHBoxLayout *layout = new QHBoxLayout ();
-    mainLayout->addLayout (layout);
-    mList = new QTreeWidget (this);
-    setFocusProxy (mList);
-    mLbTitle->setBuddy (mList);
-    mList->setColumnCount (1);
-    mList->header()->hide();
-    mList->setContextMenuPolicy (Qt::ActionsContextMenu);
-    mList->setRootIsDecorated (false);
-    layout->addWidget (mList);
-
-    /* Prepare actions */
-# if defined (Q_WS_WIN)
-    mAddAction = new QAction (mList);
-    mDelAction = new QAction (mList);
-    mList->addAction (mAddAction);
-    mList->addAction (mDelAction);
-    mAddAction->setShortcut (QKeySequence ("Ins"));
-    mDelAction->setShortcut (QKeySequence ("Del"));
-    mAddAction->setIcon (VBoxGlobal::iconSet (":/add_host_iface_16px.png",
-                                              ":/add_host_iface_disabled_16px.png"));
-    mDelAction->setIcon (VBoxGlobal::iconSet (":/remove_host_iface_16px.png",
-                                              ":/remove_host_iface_disabled_16px.png"));
-# endif /* Q_WS_WIN */
-
-# if defined (Q_WS_WIN)
-    /* Prepare toolbar */
-    VBoxToolBar *toolBar = new VBoxToolBar (this);
-    toolBar->setUsesTextLabel (false);
-    toolBar->setIconSize (QSize (16, 16));
-    toolBar->setOrientation (Qt::Vertical);
-    toolBar->addAction (mAddAction);
-    toolBar->addAction (mDelAction);
-    layout->addWidget (toolBar);
-# endif /* Q_WS_WIN */
-
-    /* Setup connections */
-    connect (mList, SIGNAL (currentItemChanged (QTreeWidgetItem *, QTreeWidgetItem *)),
-             this, SLOT (onCurrentItemChanged (QTreeWidgetItem *, QTreeWidgetItem *)));
-# if defined (Q_WS_WIN)
-    connect (mAddAction, SIGNAL (triggered (bool)),
-             this, SLOT (addHostInterface()));
-    connect (mDelAction, SIGNAL (triggered (bool)),
-             this, SLOT (delHostInterface()));
-# endif /* Q_WS_WIN */
-
-#if !defined(Q_WS_WIN) || !defined(VBOX_WITH_NETFLT)
-    /* Populating interface list */
-    populateInterfacesList();
-#endif
-
-    /* Applying language settings */
-    retranslateUi();
-}
-
-bool VBoxNIList::isWrongInterface() const
-{
-    return !mList->currentItem();
-}
-
-void VBoxNIList::setCurrentInterface (const QString &aName)
-{
-    /* Remove wrong item if present */
-    for (int i = 0; i < mList->topLevelItemCount(); ++ i)
-    {
-        VBoxNIListItem *item =
-            mList->topLevelItem (i)->type() == VBoxNIListItem::typeId ?
-            static_cast<VBoxNIListItem*> (mList->topLevelItem (i)) : 0;
-        Assert (item);
-        if (item && item->isWrong())
-            delete item;
-    }
-
-    if (aName.isEmpty())
-    {
-#ifdef VBOX_WITH_NETFLT
-        /* Always select the first item to have an initial value. */
-        QTreeWidgetItem *item = mList->topLevelItem (0);
-        if (item)
-        {
-            item->setSelected (true);
-            mList->setCurrentItem (item);
-            onCurrentItemChanged (mList->currentItem());
-        }
-#else
-        /* Make sure no one of items selected in the list currently */
-        mList->setCurrentItem (NULL);
-        mList->clearSelection();
-#endif
-    }
-    else
-    {
-        /* Search for the required item */
-        QTreeWidgetItem *querryItem = findItem (mList, aName);
-
-        /* Create fake required item if real is not present */
-        if (!querryItem)
-            querryItem = new VBoxNIListItem (mList, aName, true);
-
-        /* Set the required item to be the current */
-        mList->setCurrentItem (querryItem);
-    }
-}
-
-void VBoxNIList::onCurrentItemChanged (QTreeWidgetItem *aCurrent,
-                                       QTreeWidgetItem *)
-{
-# if defined (Q_WS_WIN)
-#  if defined (VBOX_WITH_NETFLT)
-    if(mEnmAttachmentType == KNetworkAttachmentType_HostOnly)
-#  endif
-    {
-        VBoxNIListItem *item = aCurrent &&
-            aCurrent->type() == VBoxNIListItem::typeId ?
-            static_cast<VBoxNIListItem*> (aCurrent) : 0;
-        mDelAction->setEnabled (item && !item->isWrong());
-    }
-#  if defined (VBOX_WITH_NETFLT)
-    else
-    {
-        mDelAction->setEnabled (false);
-    }
-#  endif
-# else
-    NOREF (aCurrent);
-# endif
-
-    emit currentInterfaceChanged (mList->currentItem() ?
-        mList->currentItem()->text (0) : QString::null);
-}
-
-void VBoxNIList::addHostInterface()
-{
-# if defined (Q_WS_WIN)
-    /* Allow the started helper process to make itself the foreground window */
-    AllowSetForegroundWindow (ASFW_ANY);
-
-    /* Search for the max available interface index */
-    int ifaceNumber = 0;
-    QString ifaceName = tr ("VirtualBox Host Interface %1");
-    QRegExp regExp (QString ("^") + ifaceName.arg ("([0-9]+)") + QString ("$"));
-    for (int index = 0; index < mList->topLevelItemCount(); ++ index)
-    {
-        QString iface = mList->topLevelItem (index)->text (0);
-        int pos = regExp.indexIn (iface);
-        if (pos != -1)
-            ifaceNumber = regExp.cap (1).toInt() > ifaceNumber ?
-                          regExp.cap (1).toInt() : ifaceNumber;
-    }
-
-    /* Create interface */
-    CHost host = vboxGlobal().virtualBox().GetHost();
-    CHostNetworkInterface iFace;
-    CProgress progress = host.CreateHostOnlyNetworkInterface (iFace);
-    if (host.isOk())
-    {
-        QString iName = iFace.GetName();
-
-        vboxProblem().showModalProgressDialog (progress, iName, this);
-        /* Add&Select newly created interface */
-        if (progress.GetResultCode() == 0)
-            new VBoxNIListItem (mList, iName);
-        else
-            vboxProblem().cannotCreateHostInterface (progress, iName, this);
-    }
-    else
-        vboxProblem().cannotCreateHostInterface (host, this);
-
-    emit listChanged();
-
-    /* Allow the started helper process to make itself the foreground window */
-    AllowSetForegroundWindow (ASFW_ANY);
-# endif /* Q_WS_WIN */
-}
-
-void VBoxNIList::delHostInterface()
-{
-    Assert (mList->currentItem());
-
-# if defined (Q_WS_WIN)
-    /* Allow the started helper process to make itself the foreground window */
-    AllowSetForegroundWindow (ASFW_ANY);
-
-    /* Check interface name */
-    QString iName = mList->currentItem()->text (0);
-    if (iName.isEmpty())
-        return;
-
-    /* Asking user about deleting selected network interface */
-    int delNetIface = vboxProblem().message (this, VBoxProblemReporter::Question,
-        tr ("<p>Do you want to remove the selected host network interface "
-            "<nobr><b>%1</b>?</nobr></p>"
-            "<p><b>Note:</b> This interface may be in use by one or more "
-            "network adapters of this or another VM. After it is removed, these "
-            "adapters will no longer work until you correct their settings by "
-            "either choosing a different interface name or a different adapter "
-            "attachment type.</p>").arg (iName),
-        0, /* autoConfirmId */
-        QIMessageBox::Ok | QIMessageBox::Default,
-        QIMessageBox::Cancel | QIMessageBox::Escape);
-    if (delNetIface == QIMessageBox::Cancel)
-        return;
-
-    CHost host = vboxGlobal().virtualBox().GetHost();
-    CHostNetworkInterfaceVector interfaces =
-        host.GetNetworkInterfaces();
-    CHostNetworkInterface iFace;
-    for (CHostNetworkInterfaceVector::ConstIterator it = interfaces.begin();
-         it != interfaces.end(); ++it)
-        if (it->GetName() == iName)
-            iFace = *it;
-    if (!iFace.isNull())
-    {
-        /* Delete interface */
-        CProgress progress = host.RemoveHostOnlyNetworkInterface (iFace.GetId(), iFace);
-        if (host.isOk())
-        {
-            vboxProblem().showModalProgressDialog (progress, iName, this);
-            if (progress.GetResultCode() == 0)
-                delete findItem (mList, iName);
-            else
-                vboxProblem().cannotRemoveHostInterface (progress, iFace, this);
-        }
-    }
-
-    if (!host.isOk())
-        vboxProblem().cannotRemoveHostInterface (host, iFace, this);
-
-    emit listChanged();
-# endif /* Q_WS_WIN */
-}
-
-void VBoxNIList::retranslateUi()
-{
-    mLbTitle->setText (tr ("Host &Interfaces"));
-
-    mList->setWhatsThis (tr ("Lists all available host interfaces."));
-
-# if defined (Q_WS_WIN)
-    mAddAction->setText (tr ("A&dd New Host Interface"));
-    mDelAction->setText (tr ("&Remove Selected Host Interface"));
-    mAddAction->setWhatsThis (tr ("Adds a new host interface."));
-    mDelAction->setWhatsThis (tr ("Removes the selected host interface."));
-    mAddAction->setToolTip (mAddAction->text().remove ('&') +
-        QString (" (%1)").arg (mAddAction->shortcut().toString()));
-    mDelAction->setToolTip (mDelAction->text().remove ('&') +
-        QString (" (%1)").arg (mDelAction->shortcut().toString()));
-# endif /* Q_WS_WIN */
-}
-
-#if defined(Q_WS_WIN) && defined(VBOX_WITH_NETFLT)
-void VBoxNIList::updateInterfacesList(KNetworkAttachmentType enmAttachmentType)
-{
-    bool bHostOnly = enmAttachmentType == KNetworkAttachmentType_HostOnly;
-    mEnmAttachmentType = enmAttachmentType;
-    mAddAction->setEnabled(bHostOnly);
-    mDelAction->setEnabled(bHostOnly);
-    populateInterfacesList(enmAttachmentType);
-}
-
-void VBoxNIList::populateInterfacesList(KNetworkAttachmentType enmAttachmentType)
-#else
-void VBoxNIList::populateInterfacesList()
-#endif
-{
-    /* Load current inner list */
-    QList<QTreeWidgetItem*> itemsList;
-    CHostNetworkInterfaceVector interfaces = vboxGlobal().virtualBox().GetHost().GetNetworkInterfaces();
-    for (CHostNetworkInterfaceVector::ConstIterator it = interfaces.begin();
-         it != interfaces.end(); ++it)
-    {
-#if defined(Q_WS_WIN) && defined(VBOX_WITH_NETFLT)
-        /* display real for not host-only and viceversa */
-        if((enmAttachmentType == KNetworkAttachmentType_HostOnly)
-                == (it->GetInterfaceType() == KHostNetworkInterfaceType_HostOnly))
-#endif
-            itemsList << new VBoxNIListItem (it->GetName());
-    }
-
-    /* Save current list item name */
-    QString currentListItemName = mList->currentItem() ?
-        mList->currentItem()->text (0) : QString::null;
-
-    /* Load current list items */
-    mList->clear();
-    if (!itemsList.isEmpty())
-        mList->insertTopLevelItems (0, itemsList);
-
-    /* Select current list item */
-    QTreeWidgetItem *item = findItem (mList, currentListItemName);
-    mList->setCurrentItem (item ? item : mList->topLevelItem (0));
-
-    /* Update item's state */
-    onCurrentItemChanged (mList->currentItem());
-}
-#endif /* Q_WS_WIN || VBOX_WITH_NETFLT */
-
+    mCbAttachmentType->setCurrentIndex (currentAttachment);
+}
+
+KNetworkAttachmentType VBoxVMSettingsNetwork::attachmentType() const
+{
+    return (KNetworkAttachmentType) mCbAttachmentType->itemData (
+           mCbAttachmentType->currentIndex()).toInt();
+}
 
 /* VBoxVMSettingsNetworkPage Stuff */
 VBoxVMSettingsNetworkPage::VBoxVMSettingsNetworkPage()
     : mValidator (0)
-    , mLockNetworkListUpdate (true)
-{
-    QVBoxLayout *layout = new QVBoxLayout (this);
-    layout->setContentsMargins (0, 5, 0, 5);
+{
+    /* Setup Main Layout */
+    QVBoxLayout *mainLayout = new QVBoxLayout (this);
+    mainLayout->setContentsMargins (0, 5, 0, 5);
 
     /* Creating Tab Widget */
     mTwAdapters = new QTabWidget (this);
-    layout->addWidget (mTwAdapters);
-    /* Prepare Networks Lists */
-    populateNetworksList();
-
-#if defined (Q_WS_WIN) || defined (VBOX_WITH_NETFLT)
-    /* Creating Interfaces List */
-    mNIList = new VBoxNIList (this);
-    layout->addWidget (mNIList);
-#else
-//    layout->addItem (new QSpacerItem (0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding));
-#endif
-//    layout->activate();
+    mainLayout->addWidget (mTwAdapters);
+}
+
+QStringList VBoxVMSettingsNetworkPage::natList() const
+{
+    QStringList list;
+
+    /* Load total NAT names list of all VMs */
+    CVirtualBox vbox = vboxGlobal().virtualBox();
+    ulong count = qMin ((ULONG) 4, vbox.GetSystemProperties().GetNetworkAdapterCount());
+    CMachineVector vec = vbox.GetMachines();
+    for (CMachineVector::ConstIterator m = vec.begin(); m != vec.end(); ++ m)
+    {
+        if (m->GetAccessible())
+        {
+            for (ulong slot = 0; slot < count; ++ slot)
+            {
+                QString name = m->GetNetworkAdapter (slot).GetNATNetwork();
+                if (!name.isEmpty() && !list.contains (name))
+                    list << name;
+            }
+        }
+    }
+
+    /* Append NAT names list with names from all the pages */
+    for (int index = 0; index < mTwAdapters->count(); ++ index)
+    {
+        VBoxVMSettingsNetwork *page =
+            qobject_cast <VBoxVMSettingsNetwork*> (mTwAdapters->widget (index));
+        if (page)
+        {
+            QString name = page->currentName (KNetworkAttachmentType_NAT);
+            if (!name.isEmpty() && !list.contains (name))
+                list << name;
+        }
+    }
+
+    return list;
+}
+
+QStringList VBoxVMSettingsNetworkPage::netList() const
+{
+    QStringList list;
+
+    /* Load total network list of all VMs */
+    CVirtualBox vbox = vboxGlobal().virtualBox();
+    ulong count = qMin ((ULONG) 4, vbox.GetSystemProperties().GetNetworkAdapterCount());
+    CMachineVector vec =  vbox.GetMachines();
+    for (CMachineVector::ConstIterator m = vec.begin(); m != vec.end(); ++ m)
+    {
+        if (m->GetAccessible())
+        {
+            for (ulong slot = 0; slot < count; ++ slot)
+            {
+                QString name = m->GetNetworkAdapter (slot).GetInternalNetwork();
+                if (!name.isEmpty() && !list.contains (name))
+                    list << name;
+            }
+        }
+    }
+
+    /* Append network list with names from all the pages */
+    for (int index = 0; index < mTwAdapters->count(); ++ index)
+    {
+        VBoxVMSettingsNetwork *page =
+            qobject_cast <VBoxVMSettingsNetwork*> (mTwAdapters->widget (index));
+        if (page)
+        {
+            QString name = page->currentName (KNetworkAttachmentType_Internal);
+            if (!name.isEmpty() && !list.contains (name))
+                list << name;
+        }
+    }
+
+    return list;
+}
+
+QStringList VBoxVMSettingsNetworkPage::intList (KHostNetworkInterfaceType aType) const
+{
+    QStringList list;
+
+    /* Load total interfaces list */
+    CHostNetworkInterfaceVector interfaces =
+        vboxGlobal().virtualBox().GetHost().GetNetworkInterfaces();
+    for (CHostNetworkInterfaceVector::ConstIterator it = interfaces.begin();
+         it != interfaces.end(); ++ it)
+    {
+        if (it->GetInterfaceType() == aType)
+            list << it->GetName();
+    }
+
+    return list;
 }
 
 void VBoxVMSettingsNetworkPage::getFrom (const CMachine &aMachine)
 {
+    /* Setup tab order */
     Assert (mFirstWidget);
     setTabOrder (mFirstWidget, mTwAdapters->focusProxy());
@@ -733,8 +433,7 @@
 
         /* Creating Adapter's page */
-        VBoxVMSettingsNetwork *page = new VBoxVMSettingsNetwork();
+        VBoxVMSettingsNetwork *page = new VBoxVMSettingsNetwork (this);
 
         /* Loading Adapter's data into page */
-        page->setNetworksList (mListNetworks);
         page->getFromAdapter (adapter);
 
@@ -747,22 +446,5 @@
         /* Setup tab order */
         lastFocusWidget = page->setOrderAfter (lastFocusWidget);
-
-        /* Setup connections */
-#if defined (VBOX_WITH_NETFLT)
-        connect (page->mCbNAType, SIGNAL (currentIndexChanged (int)),
-                 this, SLOT (updateInterfaceList()));
-#endif
-        connect (page->mCbNetwork, SIGNAL (editTextChanged (const QString&)),
-                 this, SLOT (updateNetworksList()));
-    }
-
-#if defined (Q_WS_WIN) || defined (VBOX_WITH_NETFLT)
-    setTabOrder (lastFocusWidget, mNIList->focusProxy());
-    connect (mTwAdapters, SIGNAL (currentChanged (int)),
-             this, SLOT (onCurrentPageChanged (int)));
-    connect (mNIList, SIGNAL (currentInterfaceChanged (const QString &)),
-             this, SLOT (onCurrentInterfaceChanged (const QString &)));
-    onCurrentPageChanged (mTwAdapters->currentIndex());
-#endif
+    }
 
     /* Applying language settings */
@@ -774,8 +456,8 @@
     for (int i = 0; i < mTwAdapters->count(); ++ i)
     {
-        VBoxVMSettingsNetwork *page = static_cast<VBoxVMSettingsNetwork*>
-            (mTwAdapters->widget (i));
-        if (page)
-            page->putBackToAdapter();
+        VBoxVMSettingsNetwork *page =
+            qobject_cast <VBoxVMSettingsNetwork*> (mTwAdapters->widget (i));
+        Assert (page);
+        page->putBackToAdapter();
     }
 }
@@ -784,11 +466,7 @@
 {
     mValidator = aVal;
-#if defined (Q_WS_WIN) || defined (VBOX_WITH_NETFLT)
-    connect (mNIList, SIGNAL (listChanged()), mValidator, SLOT (revalidate()));
-#endif
-}
-
-bool VBoxVMSettingsNetworkPage::revalidate (QString &aWarning,
-                                            QString &aTitle)
+}
+
+bool VBoxVMSettingsNetworkPage::revalidate (QString &aWarning, QString &aTitle)
 {
     bool valid = true;
@@ -796,34 +474,9 @@
     for (int i = 0; i < mTwAdapters->count(); ++ i)
     {
-        VBoxVMSettingsNetwork *page = static_cast<VBoxVMSettingsNetwork*>
-            (mTwAdapters->widget (i));
+        VBoxVMSettingsNetwork *page =
+            qobject_cast <VBoxVMSettingsNetwork*> (mTwAdapters->widget (i));
         Assert (page);
-
-        KNetworkAttachmentType type =
-            vboxGlobal().toNetworkAttachmentType (page->mCbNAType->currentText());
-
-#if defined (Q_WS_WIN) || defined (VBOX_WITH_NETFLT)
-        if ((type == KNetworkAttachmentType_Bridged
-#if defined (Q_WS_WIN) && defined (VBOX_WITH_NETFLT)
-                || type == KNetworkAttachmentType_HostOnly
-#endif
-                ) && page->interfaceName().isNull())
-        {
-            valid = false;
-            aWarning = tr ("No host network interface is selected");
-        } else
-#endif
-        if (type == KNetworkAttachmentType_Internal &&
-            page->mCbNetwork->currentText().isEmpty())
-        {
-            valid = false;
-            aWarning = tr ("Internal network name is not set");
-        }
-
-        if (!valid)
-        {
-            aTitle += ": " + vboxGlobal().removeAccelMark (page->pageTitle());
-            break;
-        }
+        valid = page->revalidate (aWarning, aTitle);
+        if (!valid) break;
     }
 
@@ -836,111 +489,8 @@
     {
         VBoxVMSettingsNetwork *page =
-            static_cast<VBoxVMSettingsNetwork*> (mTwAdapters->widget (i));
+            qobject_cast <VBoxVMSettingsNetwork*> (mTwAdapters->widget (i));
+        Assert (page);
         mTwAdapters->setTabText (i, page->pageTitle());
     }
 }
 
-void VBoxVMSettingsNetworkPage::updateNetworksList()
-{
-    /* Lock to prevent few simultaneously update */
-    if (mLockNetworkListUpdate)
-        return;
-    mLockNetworkListUpdate = true;
-
-    /* Compose latest list from current + new on all pages */
-    QStringList curList (mListNetworks);
-    for (int index = 0; index < mTwAdapters->count(); ++ index)
-    {
-        VBoxVMSettingsNetwork *page =
-            static_cast<VBoxVMSettingsNetwork*> (mTwAdapters->widget (index));
-        if (page)
-        {
-            QString curText = page->mCbNetwork->currentText();
-            if (!curText.isEmpty() && !curList.contains (curText))
-                curList << curText;
-        }
-    }
-
-    /* Load latest list to all pages */
-    for (int index = 0; index < mTwAdapters->count(); ++ index)
-    {
-        VBoxVMSettingsNetwork *page =
-            static_cast<VBoxVMSettingsNetwork*> (mTwAdapters->widget (index));
-        if (page)
-            page->setNetworksList (curList);
-    }
-
-    /* Allow further Network List update */
-    mLockNetworkListUpdate = false;
-}
-
-#if defined (VBOX_WITH_NETFLT)
-void VBoxVMSettingsNetworkPage::updateInterfaceList()
-{
-    VBoxVMSettingsNetwork *page =
-        static_cast <VBoxVMSettingsNetwork*> (mTwAdapters->currentWidget());
-    KNetworkAttachmentType enmType = vboxGlobal().toNetworkAttachmentType (page->mCbNAType->currentText());
-
-    bool isHostInterfaceAttached = enmType == KNetworkAttachmentType_Bridged;
-
-    mNIList->setEnabled (isHostInterfaceAttached);
-# ifdef Q_WS_WIN
-    if(!isHostInterfaceAttached)
-    {
-        mNIList->setEnabled (enmType == KNetworkAttachmentType_HostOnly);
-    }
-    mNIList->updateInterfacesList(enmType);
-# endif
-}
-#endif
-
-#if defined (Q_WS_WIN) || defined (VBOX_WITH_NETFLT)
-void VBoxVMSettingsNetworkPage::onCurrentPageChanged (int aIndex)
-{
-    VBoxVMSettingsNetwork *page =
-        static_cast<VBoxVMSettingsNetwork*> (mTwAdapters->widget (aIndex));
-    Assert (page);
-    mNIList->setCurrentInterface (page->interfaceName());
-
-#if defined (VBOX_WITH_NETFLT)
-    updateInterfaceList();
-#endif
-}
-
-void VBoxVMSettingsNetworkPage::onCurrentInterfaceChanged (const QString &aName)
-{
-    VBoxVMSettingsNetwork *page =
-        static_cast<VBoxVMSettingsNetwork*> (mTwAdapters->currentWidget());
-    Assert (page);
-    page->setInterfaceName (aName);
-}
-#endif
-
-void VBoxVMSettingsNetworkPage::populateNetworksList()
-{
-    /* Clear inner list */
-    mListNetworks.clear();
-
-    /* Load internal network list */
-    CVirtualBox vbox = vboxGlobal().virtualBox();
-    ulong count = qMin ((ULONG) 4, vbox.GetSystemProperties().GetNetworkAdapterCount());
-    CMachineVector vec =  vbox.GetMachines();
-    for (CMachineVector::ConstIterator m = vec.begin();
-         m != vec.end(); ++ m)
-    {
-        if (m->GetAccessible())
-        {
-            for (ulong slot = 0; slot < count; ++ slot)
-            {
-                CNetworkAdapter adapter = m->GetNetworkAdapter (slot);
-                if (adapter.GetAttachmentType() == KNetworkAttachmentType_Internal &&
-                    !mListNetworks.contains (adapter.GetInternalNetwork()))
-                    mListNetworks << adapter.GetInternalNetwork();
-            }
-        }
-    }
-
-    /* Allow further Network List update */
-    mLockNetworkListUpdate = false;
-}
-
Index: /trunk/src/VBox/Frontends/VirtualBox/ui/VBoxVMSettingsNetwork.ui
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/ui/VBoxVMSettingsNetwork.ui	(revision 17783)
+++ /trunk/src/VBox/Frontends/VirtualBox/ui/VBoxVMSettingsNetwork.ui	(revision 17784)
@@ -28,5 +28,5 @@
   </property>
   <layout class="QGridLayout" >
-   <item row="0" column="0" colspan="2" >
+   <item row="0" column="0" colspan="3" >
     <widget class="QCheckBox" name="mGbAdapter" >
      <property name="whatsThis" >
@@ -75,5 +75,5 @@
        <widget class="QLabel" name="mLbAType" >
         <property name="text" >
-         <string>A&amp;dapter Type:</string>
+         <string>Adapter &amp;Type:</string>
         </property>
         <property name="alignment" >
@@ -81,12 +81,22 @@
         </property>
         <property name="buddy" >
-         <cstring>mCbAType</cstring>
+         <cstring>mCbAdapterType</cstring>
         </property>
        </widget>
       </item>
       <item row="0" column="1" >
-       <widget class="QComboBox" name="mCbAType" >
+       <widget class="QComboBox" name="mCbAdapterType" >
         <property name="whatsThis" >
          <string>Selects the type of the virtual network adapter. Depending on this value, VirtualBox will provide different network hardware to the virtual machine.</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="2" >
+       <widget class="QToolButton" name="mTbCable" >
+        <property name="whatsThis" >
+         <string>Indicates whether the virtual network cable is plugged in on machine startup or not.</string>
+        </property>
+        <property name="autoRaise" >
+         <bool>true</bool>
         </property>
        </widget>
@@ -101,10 +111,10 @@
         </property>
         <property name="buddy" >
-         <cstring>mCbNAType</cstring>
+         <cstring>mCbAttachmentType</cstring>
         </property>
        </widget>
       </item>
       <item row="1" column="1" >
-       <widget class="QComboBox" name="mCbNAType" >
+       <widget class="QComboBox" name="mCbAttachmentType" >
         <property name="whatsThis" >
          <string>Controls the way how this virtual adapter is attached to the real network of the Host OS.</string>
@@ -112,106 +122,11 @@
        </widget>
       </item>
-      <item row="2" column="0" >
-       <widget class="QLabel" name="mLbNetwork" >
-        <property name="text" >
-         <string>&amp;Network Name:</string>
+      <item row="1" column="2" >
+       <widget class="QToolButton" name="mTbDetails" >
+        <property name="whatsThis" >
+         <string>Open extended settings dialog for current attachment type.</string>
         </property>
-        <property name="alignment" >
-         <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-        </property>
-        <property name="buddy" >
-         <cstring>mCbNetwork</cstring>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="1" >
-       <widget class="QComboBox" name="mCbNetwork" >
-        <property name="whatsThis" >
-         <string>Displays the name of the internal network selected for this adapter.</string>
-        </property>
-        <property name="editable" >
+        <property name="autoRaise" >
          <bool>true</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="3" column="0" >
-       <widget class="QLabel" name="mLbMAC" >
-        <property name="text" >
-         <string>&amp;MAC Address:</string>
-        </property>
-        <property name="alignment" >
-         <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-        </property>
-        <property name="buddy" >
-         <cstring>mLeMAC</cstring>
-        </property>
-       </widget>
-      </item>
-      <item row="3" column="1" >
-       <widget class="QLineEdit" name="mLeMAC" >
-        <property name="sizePolicy" >
-         <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="whatsThis" >
-         <string>Displays the MAC address of this adapter. It contains exactly 12 characters chosen from {0-9,A-F}. Note that the second character must be an even digit.</string>
-        </property>
-       </widget>
-      </item>
-      <item row="3" column="2" >
-       <widget class="QPushButton" name="mPbMAC" >
-        <property name="whatsThis" >
-         <string>Generates a new random MAC address.</string>
-        </property>
-        <property name="text" >
-         <string>&amp;Generate</string>
-        </property>
-       </widget>
-      </item>
-      <item row="4" column="1" >
-       <widget class="QCheckBox" name="mCbCable" >
-        <property name="whatsThis" >
-         <string>Indicates whether the virtual network cable is plugged in on machine startup or not.</string>
-        </property>
-        <property name="text" >
-         <string>Ca&amp;ble Connected</string>
-        </property>
-       </widget>
-      </item>
-      <item row="5" column="0" colspan="3" >
-       <widget class="QILabelSeparator" name="mGbTap" >
-        <property name="text" >
-         <string>Host Interface Settings</string>
-        </property>
-        <property name="buddy" >
-         <cstring>mLeInterface_x11</cstring>
-        </property>
-       </widget>
-      </item>
-      <item row="6" column="0" >
-       <widget class="QLabel" name="mLbInterface_x11" >
-        <property name="text" >
-         <string>&amp;Interface Name:</string>
-        </property>
-        <property name="alignment" >
-         <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-        </property>
-        <property name="buddy" >
-         <cstring>mLeInterface_x11</cstring>
-        </property>
-       </widget>
-      </item>
-      <item row="6" column="1" >
-       <widget class="QLineEdit" name="mLeInterface_x11" >
-        <property name="sizePolicy" >
-         <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="whatsThis" >
-         <string>Displays the TAP interface name.</string>
         </property>
        </widget>
@@ -248,11 +163,4 @@
   </layout>
  </widget>
- <customwidgets>
-  <customwidget>
-   <class>QILabelSeparator</class>
-   <extends>QLabel</extends>
-   <header>QILabelSeparator.h</header>
-  </customwidget>
- </customwidgets>
  <resources/>
  <connections>
