Index: /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 19836)
+++ /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 19837)
@@ -269,4 +269,5 @@
 	include/VBoxSettingsUtils.h \
 	include/VBoxVMSettingsGeneral.h \
+	include/VBoxVMSettingsSystem.h \
 	include/VBoxVMSettingsDisplay.h \
 	include/VBoxVMSettingsHD.h \
@@ -357,4 +358,5 @@
 	src/VBoxVMLogViewer.cpp \
 	src/VBoxVMSettingsGeneral.cpp \
+	src/VBoxVMSettingsSystem.cpp \
 	src/VBoxVMSettingsDisplay.cpp \
 	src/VBoxVMSettingsHD.cpp \
Index: /trunk/src/VBox/Frontends/VirtualBox/VBoxUI.pro
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/VBoxUI.pro	(revision 19836)
+++ /trunk/src/VBox/Frontends/VirtualBox/VBoxUI.pro	(revision 19837)
@@ -40,4 +40,5 @@
     ui/VBoxVMLogViewer.ui \
     ui/VBoxVMSettingsGeneral.ui \
+    ui/VBoxVMSettingsSystem.ui \
     ui/VBoxVMSettingsDisplay.ui \
     ui/VBoxVMSettingsHD.ui \
Index: /trunk/src/VBox/Frontends/VirtualBox/VirtualBox.qrc
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/VirtualBox.qrc	(revision 19836)
+++ /trunk/src/VBox/Frontends/VirtualBox/VirtualBox.qrc	(revision 19837)
@@ -336,4 +336,6 @@
     <file alias="connect_16px.png">images/connect_16px.png</file>
     <file alias="disconnect_16px.png">images/disconnect_16px.png</file>
+    <file alias="chipset_16px.png">images/chipset_16px.png</file>
+    <file alias="chipset_32px.png">images/chipset_32px.png</file>
  </qresource>
  </RCC>
Index: /trunk/src/VBox/Frontends/VirtualBox/include/VBoxGlobal.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/include/VBoxGlobal.h	(revision 19836)
+++ /trunk/src/VBox/Frontends/VirtualBox/include/VBoxGlobal.h	(revision 19837)
@@ -928,6 +928,4 @@
     QPixmap mWarningIcon, mErrorIcon;
 
-    mutable bool mDetailReportTemplatesReady;
-
     friend VBoxGlobal &vboxGlobal();
     friend class VBoxCallback;
Index: /trunk/src/VBox/Frontends/VirtualBox/include/VBoxSettingsDialog.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/include/VBoxSettingsDialog.h	(revision 19836)
+++ /trunk/src/VBox/Frontends/VirtualBox/include/VBoxSettingsDialog.h	(revision 19837)
@@ -75,4 +75,6 @@
                   VBoxSettingsPage* aPrefPage = NULL, int aParentId = -1);
 
+    virtual bool correlate (QWidget *aPage, QString &aWarning);
+
     VBoxSettingsSelector *mSelector;
     QStackedWidget *mStack;
Index: /trunk/src/VBox/Frontends/VirtualBox/include/VBoxSettingsDialogSpecific.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/include/VBoxSettingsDialogSpecific.h	(revision 19836)
+++ /trunk/src/VBox/Frontends/VirtualBox/include/VBoxSettingsDialogSpecific.h	(revision 19837)
@@ -76,4 +76,5 @@
     {
         GeneralId = 0,
+        SystemId,
         DisplayId,
         StorageId,
@@ -102,4 +103,6 @@
     QString dialogTitle() const;
 
+    bool correlate (QWidget *aPage, QString &aWarning);
+
 private slots:
 
Index: /trunk/src/VBox/Frontends/VirtualBox/include/VBoxVMSettingsGeneral.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/include/VBoxVMSettingsGeneral.h	(revision 19836)
+++ /trunk/src/VBox/Frontends/VirtualBox/include/VBoxVMSettingsGeneral.h	(revision 19837)
@@ -37,7 +37,5 @@
     VBoxVMSettingsGeneral();
 
-signals:
-
-    void tableChanged();
+    bool is64BitOSTypeSelected() const;
 
 protected:
@@ -47,5 +45,4 @@
 
     void setValidator (QIWidgetValidator *aVal);
-    bool revalidate (QString &aWarning, QString &aTitle);
 
     void setOrderAfter (QWidget *aWidget);
@@ -53,21 +50,6 @@
     void retranslateUi();
 
-private slots:
-
-    void valueChangedRAM (int aVal);
-    void textChangedRAM (const QString &aText);
-
-    void moveBootItemUp();
-    void moveBootItemDown();
-    void onCurrentBootItemChanged (QTreeWidgetItem *aItem,
-                                   QTreeWidgetItem *aPrev = 0);
-
-    void stateChangedVirt (int aState);
-
 private:
 
-    void adjustBootOrderTWSize();
-
-    bool eventFilter (QObject *aObject, QEvent *aEvent);
     void showEvent (QShowEvent *aEvent);
 
Index: /trunk/src/VBox/Frontends/VirtualBox/include/VBoxVMSettingsHD.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/include/VBoxVMSettingsHD.h	(revision 19836)
+++ /trunk/src/VBox/Frontends/VirtualBox/include/VBoxVMSettingsHD.h	(revision 19837)
@@ -385,5 +385,4 @@
     QString getWithNewHDWizard();
     int maxNameLength() const;
-    void prepareComboboxes();
     void removeFocus();
     KStorageControllerType currentControllerType() const
Index: /trunk/src/VBox/Frontends/VirtualBox/include/VBoxVMSettingsSystem.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/include/VBoxVMSettingsSystem.h	(revision 19837)
+++ /trunk/src/VBox/Frontends/VirtualBox/include/VBoxVMSettingsSystem.h	(revision 19837)
@@ -0,0 +1,81 @@
+/** @file
+ *
+ * VBox frontends: Qt4 GUI ("VirtualBox"):
+ * VBoxVMSettingsSystem class declaration
+ */
+
+/*
+ * Copyright (C) 2008-2009 Sun Microsystems, Inc.
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
+ * Clara, CA 95054 USA or visit http://www.sun.com if you need
+ * additional information or have any questions.
+ */
+
+#ifndef __VBoxVMSettingsSystem_h__
+#define __VBoxVMSettingsSystem_h__
+
+#include "COMDefs.h"
+#include "VBoxSettingsPage.h"
+#include "VBoxVMSettingsSystem.gen.h"
+
+class VBoxVMSettingsSystem : public VBoxSettingsPage,
+                             public Ui::VBoxVMSettingsSystem
+{
+    Q_OBJECT;
+
+public:
+
+    VBoxVMSettingsSystem();
+
+    bool isHWVirtExEnabled() const;
+
+signals:
+
+    void tableChanged();
+
+protected:
+
+    void getFrom (const CMachine &aMachine);
+    void putBackTo();
+
+    void setValidator (QIWidgetValidator *aVal);
+    bool revalidate (QString &aWarning, QString &aTitle);
+
+    void setOrderAfter (QWidget *aWidget);
+
+    void retranslateUi();
+
+private slots:
+
+    void valueChangedRAM (int aVal);
+    void textChangedRAM (const QString &aText);
+
+    void moveBootItemUp();
+    void moveBootItemDown();
+    void onCurrentBootItemChanged (QTreeWidgetItem *aItem,
+                                   QTreeWidgetItem *aPrev = 0);
+
+    void valueChangedCPU (int aVal);
+    void textChangedCPU (const QString &aText);
+
+private:
+
+    bool eventFilter (QObject *aObject, QEvent *aEvent);
+
+    void adjustBootOrderTWSize();
+
+    CMachine mMachine;
+    QIWidgetValidator *mValidator;
+};
+
+#endif // __VBoxVMSettingsSystem_h__
+
Index: /trunk/src/VBox/Frontends/VirtualBox/src/VBoxGlobal.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/VBoxGlobal.cpp	(revision 19836)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/VBoxGlobal.cpp	(revision 19837)
@@ -759,5 +759,4 @@
     , mMediaEnumThread (NULL)
     , mVerString ("1.0")
-    , mDetailReportTemplatesReady (false)
 {
 }
@@ -1581,4 +1580,5 @@
 QString VBoxGlobal::detailsReport (const CMachine &aMachine, bool aWithLinks)
 {
+    /* Details templates */
     static const char *sTableTpl =
         "<table border=0 cellspacing=1 cellpadding=0>%1</table>";
@@ -1598,46 +1598,29 @@
         "<tr><td width=40%><nobr>%1:</nobr></td><td/><td>%2</td></tr>";
 
-    static QString sGeneralFullHrefTpl, sGeneralFullBoldTpl;
-
-    /* Generate general template after every language change */
-    if (!mDetailReportTemplatesReady)
-    {
-        mDetailReportTemplatesReady = true;
-
-        QString generalItems
-            = QString (sSectionItemTpl2).arg (tr ("Name", "details report"), "%1")
-            + QString (sSectionItemTpl2).arg (tr ("OS Type", "details report"), "%2")
-            + QString (sSectionItemTpl2).arg (tr ("Base Memory", "details report"),
-                                              tr ("<nobr>%3 MB</nobr>", "details report"))
-            + QString (sSectionItemTpl2).arg (tr ("Boot Order", "details report"), "%4")
-            + QString (sSectionItemTpl2).arg (tr ("ACPI", "details report"), "%5")
-            + QString (sSectionItemTpl2).arg (tr ("IO APIC", "details report"), "%6")
-            + QString (sSectionItemTpl2).arg (tr ("VT-x/AMD-V", "details report"), "%7")
-            + QString (sSectionItemTpl2).arg (tr ("Nested Paging", "details report"), "%8")
-            + QString (sSectionItemTpl2).arg (tr ("PAE/NX", "details report"), "%9");
-
-        sGeneralFullHrefTpl = QString (sSectionHrefTpl)
-            .arg (2 + 9) /* rows */
-            .arg (":/machine_16px.png", /* icon */
-                  "#general", /* link */
-                  tr ("General", "details report"), /* title */
-                  generalItems); /* items */
-        sGeneralFullBoldTpl = QString (sSectionBoldTpl)
-            .arg (2 + 9) /* rows */
-            .arg (":/machine_16px.png", /* icon */
-                  "#general", /* link */
-                  tr ("General", "details report"), /* title */
-                  generalItems); /* items */
-    }
+    const QString &sectionTpl = aWithLinks ? sSectionHrefTpl : sSectionBoldTpl;
 
     /* Compose details report */
-    const QString &sectionTpl = aWithLinks ? sSectionHrefTpl : sSectionBoldTpl;
-    const QString &generalFullTpl = aWithLinks ? sGeneralFullHrefTpl : sGeneralFullBoldTpl;
-
     QString report;
-    QString item;
 
     /* General */
     {
+        QString item = QString (sSectionItemTpl2).arg (tr ("Name", "details report"),
+                                                       aMachine.GetName())
+                     + QString (sSectionItemTpl2).arg (tr ("OS Type", "details report"),
+                                                       vmGuestOSTypeDescription (aMachine.GetOSTypeId()));
+
+        report += sectionTpl
+                  .arg (2 + 2) /* rows */
+                  .arg (":/machine_16px.png", /* icon */
+                        "#general", /* link */
+                        tr ("General", "details report"), /* title */
+                        item); /* items */
+    }
+
+    /* System */
+    {
+        /* BIOS Settings holder */
+        CBIOSSettings biosSettings = aMachine.GetBIOSSettings();
+
         /* Boot order */
         QString bootOrder;
@@ -1654,6 +1637,4 @@
             bootOrder = toString (KDeviceType_Null);
 
-        CBIOSSettings biosSettings = aMachine.GetBIOSSettings();
-
         /* ACPI */
         QString acpi = biosSettings.GetACPIEnabled()
@@ -1666,4 +1647,9 @@
             : tr ("Disabled", "details report (IO APIC)");
 
+        /* PAE/NX */
+        QString pae = aMachine.GetPAEEnabled()
+            ? tr ("Enabled", "details report (PAE/NX)")
+            : tr ("Disabled", "details report (PAE/NX)");
+
         /* VT-x/AMD-V */
         QString virt = aMachine.GetHWVirtExEnabled() == KTSBool_True ?
@@ -1676,28 +1662,29 @@
             : tr ("Disabled", "details report (Nested Paging)");
 
-        /* PAE/NX */
-        QString pae = aMachine.GetPAEEnabled()
-            ? tr ("Enabled", "details report (PAE/NX)")
-            : tr ("Disabled", "details report (PAE/NX)");
-
-        /* General */
-        report = generalFullTpl
-                 .arg (aMachine.GetName())
-                 .arg (vmGuestOSTypeDescription (aMachine.GetOSTypeId()))
-                 .arg (aMachine.GetMemorySize())
-                 .arg (bootOrder)
-                 .arg (acpi)
-                 .arg (ioapic)
-                 .arg (virt)
-                 .arg (nested)
-                 .arg (pae);
+        QString item = QString (sSectionItemTpl2).arg (tr ("Base Memory", "details report"),
+                                                       tr ("<nobr>%1 MB</nobr>", "details report"))
+                       .arg (aMachine.GetMemorySize())
+                     + QString (sSectionItemTpl2).arg (tr ("CPU Count", "details report"),
+                                                       tr ("<nobr>%1</nobr>", "details report"))
+                       .arg (aMachine.GetCPUCount())
+                     + QString (sSectionItemTpl2).arg (tr ("Boot Order", "details report"), bootOrder)
+                     + QString (sSectionItemTpl2).arg (tr ("ACPI", "details report"), acpi)
+                     + QString (sSectionItemTpl2).arg (tr ("IO APIC", "details report"), ioapic)
+                     + QString (sSectionItemTpl2).arg (tr ("PAE/NX", "details report"), pae)
+                     + QString (sSectionItemTpl2).arg (tr ("VT-x/AMD-V", "details report"), virt)
+                     + QString (sSectionItemTpl2).arg (tr ("Nested Paging", "details report"), nested);
+
+        report += sectionTpl
+                  .arg (2 + 8) /* rows */
+                  .arg (":/chipset_16px.png", /* icon */
+                        "#system", /* link */
+                        tr ("System", "details report"), /* title */
+                        item); /* items */
     }
 
     /* Display */
     {
-        /* Erase temp item */
-        item = QString::null;
-
-        int rows = 2; /* including section header and footer */
+        /* Rows including section header and footer */
+        int rows = 2;
 
         /* Video tab */
@@ -1706,11 +1693,10 @@
             : tr ("Disabled", "details report (3D Acceleration)");
 
-        item += QString (sSectionItemTpl2)
-                .arg (tr ("Video Memory", "details report"),
-                      tr ("<nobr>%1 MB</nobr>", "details report"))
-                .arg (aMachine.GetVRAMSize());
-        item += QString (sSectionItemTpl2)
-                .arg (tr ("3D Acceleration", "details report"), "%2")
-                .arg (acc3d);
+        QString item = QString (sSectionItemTpl2)
+                       .arg (tr ("Video Memory", "details report"),
+                             tr ("<nobr>%1 MB</nobr>", "details report"))
+                       .arg (aMachine.GetVRAMSize())
+                     + QString (sSectionItemTpl2)
+                       .arg (tr ("3D Acceleration", "details report"), acc3d);
 
         rows += 2;
@@ -1731,5 +1717,4 @@
         }
 
-        /* Full report */
         report += sectionTpl
             .arg (rows) /* rows */
@@ -1742,8 +1727,8 @@
     /* Hard Disks */
     {
-        /* Erase temp item */
-        item = QString::null;
-
-        int rows = 2; /* including section header and footer */
+        /* Rows including section header and footer */
+        int rows = 2;
+
+        QString item;
 
         CHardDiskAttachmentVector vec = aMachine.GetHardDiskAttachments();
@@ -1789,4 +1774,6 @@
     /* DVD */
     {
+        QString item;
+
         CDVDDrive dvd = aMachine.GetDVDDrive();
         switch (dvd.GetState())
@@ -1820,4 +1807,5 @@
                 AssertMsgFailed (("Invalid DVD state: %d", dvd.GetState()));
         }
+
         report += sectionTpl
             .arg (2 + 1) /* rows */
@@ -1830,4 +1818,6 @@
     /* Floppy */
     {
+        QString item;
+
         CFloppyDrive floppy = aMachine.GetFloppyDrive();
         switch (floppy.GetState())
@@ -1861,4 +1851,5 @@
                 AssertMsgFailed (("Invalid floppy state: %d", floppy.GetState()));
         }
+
         report += sectionTpl
             .arg (2 + 1) /* rows */
@@ -1871,4 +1862,6 @@
     /* Audio */
     {
+        QString item;
+
         CAudioAdapter audio = aMachine.GetAudioAdapter();
         int rows = audio.GetEnabled() ? 3 : 2;
@@ -1894,6 +1887,5 @@
     /* Network */
     {
-        /* Erase temp item */
-        item = QString::null;
+        QString item;
 
         ulong count = mVBox.GetSystemProperties().GetNetworkAdapterCount();
@@ -1946,6 +1938,5 @@
     /* Serial Ports */
     {
-        /* Erase temp item */
-        item = QString::null;
+        QString item;
 
         ulong count = mVBox.GetSystemProperties().GetSerialPortCount();
@@ -1992,6 +1983,5 @@
     /* Parallel Ports */
     {
-        /* Erase temp item */
-        item = QString::null;
+        QString item;
 
         ulong count = mVBox.GetSystemProperties().GetParallelPortCount();
@@ -2032,4 +2022,6 @@
     /* USB */
     {
+        QString item;
+
         CUSBController ctl = aMachine.GetUSBController();
         if (!ctl.isNull())
@@ -2065,4 +2057,6 @@
     /* Shared Folders */
     {
+        QString item;
+
         ulong count = aMachine.GetSharedFolders().size();
         if (count > 0)
@@ -2969,6 +2963,4 @@
     mErrorIcon = standardIcon (QStyle::SP_MessageBoxCritical, 0).pixmap (16, 16);
     Assert (!mErrorIcon.isNull());
-
-    mDetailReportTemplatesReady = false;
 
     /* refresh media properties since they contain some translations too  */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/VBoxSettingsDialog.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/VBoxSettingsDialog.cpp	(revision 19836)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/VBoxSettingsDialog.cpp	(revision 19837)
@@ -133,6 +133,8 @@
     QString title = mSelector->itemTextByPage (page);
     bool valid = page->revalidate (warning, title);
+    if (valid && warning.isEmpty())
+        valid = correlate (page, warning);
     warning = warning.isEmpty() ? QString::null :
-        tr ("On the <b>%1</b> page, %2").arg (title, warning);
+              tr ("On the <b>%1</b> page, %2").arg (title, warning);
     aWval->setLastWarning (warning);
     valid ? setWarning (warning) : setError (warning);
@@ -272,4 +274,9 @@
     if (aPrefPage)
         attachValidator (aPrefPage);
+}
+
+bool VBoxSettingsDialog::correlate (QWidget*, QString&)
+{
+    return true;
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/VBoxSettingsDialogSpecific.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/VBoxSettingsDialogSpecific.cpp	(revision 19836)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/VBoxSettingsDialogSpecific.cpp	(revision 19837)
@@ -36,4 +36,5 @@
 
 #include "VBoxVMSettingsGeneral.h"
+#include "VBoxVMSettingsSystem.h"
 #include "VBoxVMSettingsDisplay.h"
 #include "VBoxVMSettingsHD.h"
@@ -243,8 +244,17 @@
     {
         prefPage = new VBoxVMSettingsGeneral();
-        connect (prefPage, SIGNAL (tableChanged()), this, SLOT (resetFirstRunFlag()));
         addItem (":/machine_32px.png", ":/machine_disabled_32px.png",
                  ":/machine_16px.png", ":/machine_disabled_16px.png",
                  GeneralId, "#general", prefPage);
+    }
+
+    /* System page */
+    if (isAvailable (SystemId))
+    {
+        prefPage = new VBoxVMSettingsSystem();
+        connect (prefPage, SIGNAL (tableChanged()), this, SLOT (resetFirstRunFlag()));
+        addItem (":/chipset_32px.png", ":/chipset_32px.png",
+                 ":/chipset_16px.png", ":/chipset_16px.png",
+                 SystemId, "#system", prefPage);
     }
 
@@ -398,4 +408,5 @@
 void VBoxVMSettingsDlg::getFrom()
 {
+    /* Load all the settings pages */
     QList <VBoxSettingsPage*> pages = mSelector->settingPages();
     foreach (VBoxSettingsPage *page, pages)
@@ -410,7 +421,17 @@
 void VBoxVMSettingsDlg::putBackTo()
 {
+    /* Commit all the settings pages */
     QList <VBoxSettingsPage*> pages = mSelector->settingPages();
     foreach (VBoxSettingsPage *page, pages)
         page->putBackTo();
+
+    /* Guest OS type & VT-x/AMD-V option correlation test */
+    VBoxVMSettingsGeneral *generalPage =
+        qobject_cast <VBoxVMSettingsGeneral*> (mSelector->idToPage (GeneralId));
+    VBoxVMSettingsSystem *systemPage =
+        qobject_cast <VBoxVMSettingsSystem*> (mSelector->idToPage (SystemId));
+    if (generalPage && systemPage &&
+        generalPage->is64BitOSTypeSelected() && !systemPage->isHWVirtExEnabled())
+        mMachine.SetHWVirtExEnabled (KTSBool_True);
 
     /* Clear the "GUI_FirstRun" extra data key in case if the boot order
@@ -434,4 +455,7 @@
     mSelector->setItemText (GeneralId, tr ("General"));
 
+    /* System page */
+    mSelector->setItemText (SystemId, tr ("System"));
+
     /* Display page */
     mSelector->setItemText (DisplayId, tr ("Display"));
@@ -497,4 +521,35 @@
 }
 
+bool VBoxVMSettingsDlg::correlate (QWidget *aPage, QString &aWarning)
+{
+    /* This method performs correlation option check between
+     * different pages of VM Settings dialog */
+
+    /* Guest OS type & VT-x/AMD-V option correlation test */
+    if (aPage == mSelector->idToPage (GeneralId) ||
+        aPage == mSelector->idToPage (SystemId))
+    {
+        VBoxVMSettingsGeneral *generalPage =
+            qobject_cast <VBoxVMSettingsGeneral*> (mSelector->idToPage (GeneralId));
+        VBoxVMSettingsSystem *systemPage =
+            qobject_cast <VBoxVMSettingsSystem*> (mSelector->idToPage (SystemId));
+
+        if (generalPage && systemPage &&
+            generalPage->is64BitOSTypeSelected() && !systemPage->isHWVirtExEnabled())
+        {
+            aWarning = tr (
+                "there is a 64 bits guest OS type assigned for this VM, which "
+                "requires virtualization feature (VT-x/AMD-V) to be enabled "
+                "too, else your guest will fail to detect a 64 bits CPU and "
+                "will not be able to boot, so this feature will be enabled "
+                "automatically when you'll accept VM Settings by pressing OK "
+                "button.");
+            return true;
+        }
+    }
+
+    return true;
+}
+
 void VBoxVMSettingsDlg::onMediaEnumerationDone()
 {
Index: /trunk/src/VBox/Frontends/VirtualBox/src/VBoxVMSettingsGeneral.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/VBoxVMSettingsGeneral.cpp	(revision 19836)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/VBoxVMSettingsGeneral.cpp	(revision 19837)
@@ -25,30 +25,6 @@
 #include "VBoxProblemReporter.h"
 #include "QIWidgetValidator.h"
-#include <iprt/asm.h>
-#include <VBox/x86.h>
 
 #include <QDir>
-
-#define ITEM_TYPE_ROLE Qt::UserRole + 1
-
-/**
- *  Calculates a suitable page step size for the given max value. The returned
- *  size is so that there will be no more than 32 pages. The minimum returned
- *  page size is 4.
- */
-static int calcPageStep (int aMax)
-{
-    /* reasonable max. number of page steps is 32 */
-    uint page = ((uint) aMax + 31) / 32;
-    /* make it a power of 2 */
-    uint p = page, p2 = 0x1;
-    while ((p >>= 1))
-        p2 <<= 1;
-    if (page != p2)
-        p2 <<= 1;
-    if (p2 < 4)
-        p2 = 4;
-    return (int) p2;
-}
 
 VBoxVMSettingsGeneral::VBoxVMSettingsGeneral()
@@ -58,54 +34,6 @@
     Ui::VBoxVMSettingsGeneral::setupUi (this);
 
-    mOSTypeSelector->setLayoutPosition (1);
-
-    /* Setup constants */
-    CSystemProperties sys = vboxGlobal().virtualBox().GetSystemProperties();
-    const uint MinRAM = sys.GetMinGuestRAM();
-    const uint MaxRAM = sys.GetMaxGuestRAM();
-
     /* Setup validators */
     mLeName->setValidator (new QRegExpValidator (QRegExp (".+"), this));
-    mLeRam->setValidator (new QIntValidator (MinRAM, MaxRAM, this));
-
-    /* Setup connections */
-    connect (mSlRam, SIGNAL (valueChanged (int)),
-             this, SLOT (valueChangedRAM (int)));
-    connect (mLeRam, SIGNAL (textChanged (const QString&)),
-             this, SLOT (textChangedRAM (const QString&)));
-    connect (mTbBootItemUp, SIGNAL (clicked()),
-             this, SLOT (moveBootItemUp()));
-    connect (mTbBootItemDown, SIGNAL (clicked()),
-             this, SLOT (moveBootItemDown()));
-    connect (mTwBootOrder, SIGNAL (moveItemUp()),
-             this, SLOT (moveBootItemUp()));
-    connect (mTwBootOrder, SIGNAL (moveItemDown()),
-             this, SLOT (moveBootItemDown()));
-    connect (mTwBootOrder, SIGNAL (itemToggled()),
-             this, SIGNAL (tableChanged()));
-    connect (mTwBootOrder, SIGNAL (currentItemChanged (QTreeWidgetItem*,
-                                                       QTreeWidgetItem*)),
-             this, SLOT (onCurrentBootItemChanged (QTreeWidgetItem*,
-                                                   QTreeWidgetItem*)));
-    connect (mCbVirt, SIGNAL (stateChanged (int)),
-             this, SLOT (stateChangedVirt (int)));
-
-    /* Setup iconsets */
-    mTbBootItemUp->setIcon (VBoxGlobal::iconSet (":/list_moveup_16px.png",
-                                                 ":/list_moveup_disabled_16px.png"));
-    mTbBootItemDown->setIcon (VBoxGlobal::iconSet (":/list_movedown_16px.png",
-                                                   ":/list_movedown_disabled_16px.png"));
-
-    /* Setup initial values */
-    mSlRam->setPageStep (calcPageStep (MaxRAM));
-    mSlRam->setSingleStep (mSlRam->pageStep() / 4);
-    mSlRam->setTickInterval (mSlRam->pageStep());
-    /* Setup the scale so that ticks are at page step boundaries */
-    mSlRam->setMinimum ((MinRAM / mSlRam->pageStep()) * mSlRam->pageStep());
-    mSlRam->setMaximum (MaxRAM);
-    /* Limit min/max. size of QLineEdit */
-    mLeRam->setFixedWidthByText (QString().fill ('9', 5));
-    /* Ensure mLeRam value and validation is updated */
-    valueChangedRAM (mSlRam->value());
 
     /* Shared Clipboard mode */
@@ -115,13 +43,11 @@
     mCbClipboard->addItem (""); /* KClipboardMode_Bidirectional */
 
-    /* IDE Controller Type */
-    mCbIDEController->addItem (""); /* KIDEControllerType_PIIX3 */
-    mCbIDEController->addItem (""); /* KIDEControllerType_PIIX4 */
-    mCbIDEController->addItem (""); /* KIDEControllerType_ICH6  */
-
-    qApp->installEventFilter (this);
-
     /* Applying language settings */
     retranslateUi();
+}
+
+bool VBoxVMSettingsGeneral::is64BitOSTypeSelected() const
+{
+    return mOSTypeSelector->type().GetIs64Bit();
 }
 
@@ -129,5 +55,4 @@
 {
     mMachine = aMachine;
-    CBIOSSettings biosSettings = mMachine.GetBIOSSettings();
 
     /* Name */
@@ -137,66 +62,7 @@
     mOSTypeSelector->setType (vboxGlobal().vmGuestOSType (aMachine.GetOSTypeId()));
 
-    /* RAM size */
-    mSlRam->setValue (aMachine.GetMemorySize());
-
-    /* Boot-order */
-    {
-        mTwBootOrder->clear();
-        /* Load boot-items of current VM */
-        QStringList uniqueList;
-        for (int i = 1; i <= 4; ++ i)
-        {
-            KDeviceType type = mMachine.GetBootOrder (i);
-            if (type != KDeviceType_Null)
-            {
-                QString name = vboxGlobal().toString (type);
-                QTreeWidgetItem *item =
-                    new QTreeWidgetItem (mTwBootOrder, QStringList (name));
-                QVariant vtype (type);
-                item->setData (0, ITEM_TYPE_ROLE, vtype);
-                item->setCheckState (0, Qt::Checked);
-                uniqueList << name;
-            }
-        }
-        /* Load other unique boot-items */
-        for (int i = KDeviceType_Floppy; i < KDeviceType_USB; ++ i)
-        {
-            QString name = vboxGlobal().toString ((KDeviceType) i);
-            if (!uniqueList.contains (name))
-            {
-                QTreeWidgetItem *item =
-                    new QTreeWidgetItem (mTwBootOrder, QStringList (name));
-                item->setData (0, ITEM_TYPE_ROLE, i);
-                item->setCheckState (0, Qt::Unchecked);
-                uniqueList << name;
-            }
-        }
-        adjustBootOrderTWSize();
-    }
-
-    /* ACPI */
-    mCbAcpi->setChecked (biosSettings.GetACPIEnabled());
-
-    /* IO APIC */
-    mCbApic->setChecked (biosSettings.GetIOAPICEnabled());
-
-    /* VT-x/AMD-V */
-    bool fVTxAMDVSupported = vboxGlobal().virtualBox().GetHost()
-                             .GetProcessorFeature (KProcessorFeature_HWVirtEx);
-    mCbVirt->setEnabled (fVTxAMDVSupported);
-    aMachine.GetHWVirtExEnabled() == KTSBool_True ?
-        mCbVirt->setCheckState (Qt::Checked) :
-        mCbVirt->setCheckState (Qt::Unchecked);
-
-    /* Nested Paging */
-    mCbNestedPaging->setEnabled (   fVTxAMDVSupported
-                                 && aMachine.GetHWVirtExEnabled() == KTSBool_True);
-    mCbNestedPaging->setChecked (aMachine.GetHWVirtExNestedPagingEnabled());
-
-    /* PAE/NX */
-    bool fPAESupported = vboxGlobal().virtualBox().GetHost()
-                         .GetProcessorFeature (KProcessorFeature_PAE);
-    mCbPae->setEnabled (fPAESupported);
-    mCbPae->setChecked (aMachine.GetPAEEnabled());
+    /* Remember mediums mounted at runtime */
+    QString saveRtimeImages = mMachine.GetExtraData (VBoxDefs::GUI_SaveMountedAtRuntime);
+    mCbSaveMounted->setChecked (saveRtimeImages != "no");
 
     /* Snapshot folder */
@@ -204,19 +70,9 @@
     mPsSnapshot->setHomeDir (QFileInfo (mMachine.GetSettingsFilePath()).absolutePath());
 
-    /* Description */
-    mTeDescription->setPlainText (aMachine.GetDescription());
-
     /* Shared clipboard mode */
     mCbClipboard->setCurrentIndex (aMachine.GetClipboardMode());
 
-    /* IDE controller type */
-    const QString ideName = QString("IDE");
-    CStorageController ideCtl = aMachine.GetStorageControllerByName(ideName);
-    mCbIDEController->setCurrentIndex (mCbIDEController->
-        findText (vboxGlobal().toString (ideCtl.GetControllerType())));
-
-    /* Other features */
-    QString saveRtimeImages = mMachine.GetExtraData (VBoxDefs::GUI_SaveMountedAtRuntime);
-    mCbSaveMounted->setChecked (saveRtimeImages != "no");
+    /* Description */
+    mTeDescription->setPlainText (aMachine.GetDescription());
 
     if (mValidator)
@@ -226,14 +82,4 @@
 void VBoxVMSettingsGeneral::putBackTo()
 {
-    /* Make auto-attenuation for some settings in this chapter: */
-
-    /* Enable VT-x/AMD-V feature if the guest is of 64 bits */
-    if (mOSTypeSelector->type().GetIs64Bit())
-        mCbVirt->setChecked (true);
-
-    /* Save user's predefined settings in this chapter: */
-
-    CBIOSSettings biosSettings = mMachine.GetBIOSSettings();
-
     /* Name */
     mMachine.SetName (mLeName->text());
@@ -243,46 +89,7 @@
     mMachine.SetOSTypeId (mOSTypeSelector->type().GetId());
 
-    /* RAM size */
-    mMachine.SetMemorySize (mSlRam->value());
-
-    /* boot order */
-    {
-        /* Search for checked items */
-        int index = 1;
-
-        for (int i = 0; i < mTwBootOrder->topLevelItemCount(); ++ i)
-        {
-            QTreeWidgetItem *item = mTwBootOrder->topLevelItem (i);
-            if (item->checkState (0) == Qt::Checked)
-            {
-                KDeviceType type = vboxGlobal().toDeviceType (item->text (0));
-                mMachine.SetBootOrder (index ++, type);
-            }
-        }
-
-        /* Search for non-checked items */
-        for (int i = 0; i < mTwBootOrder->topLevelItemCount(); ++ i)
-        {
-            QTreeWidgetItem *item = mTwBootOrder->topLevelItem (i);
-            if (item->checkState (0) != Qt::Checked)
-                mMachine.SetBootOrder (index ++, KDeviceType_Null);
-        }
-    }
-
-    /* ACPI */
-    biosSettings.SetACPIEnabled (mCbAcpi->isChecked());
-
-    /* IO APIC */
-    biosSettings.SetIOAPICEnabled (mCbApic->isChecked());
-
-    /* VT-x/AMD-V */
-    mMachine.SetHWVirtExEnabled (
-        mCbVirt->checkState() == Qt::Checked ? KTSBool_True : KTSBool_False);
-
-    /* Nested Paging */
-    mMachine.SetHWVirtExNestedPagingEnabled (mCbNestedPaging->isChecked());
-
-    /* PAE/NX */
-    mMachine.SetPAEEnabled (mCbPae->isChecked());
+    /* Remember mediums mounted at runtime */
+    mMachine.SetExtraData (VBoxDefs::GUI_SaveMountedAtRuntime,
+                           mCbSaveMounted->isChecked() ? "yes" : "no");
 
     /* Saved state folder */
@@ -295,20 +102,11 @@
     }
 
+    /* Shared clipboard mode */
+    mMachine.SetClipboardMode ((KClipboardMode) mCbClipboard->currentIndex());
+
     /* Description (set empty to null to avoid an empty <Description> node
      * in the settings file) */
     mMachine.SetDescription (mTeDescription->toPlainText().isEmpty() ?
                              QString::null : mTeDescription->toPlainText());
-
-    /* Shared clipboard mode */
-    mMachine.SetClipboardMode ((KClipboardMode) mCbClipboard->currentIndex());
-
-    /* IDE controller type */
-    const QString ideName = QString("IDE");
-    CStorageController ideCtl = mMachine.GetStorageControllerByName(ideName);
-    ideCtl.SetControllerType (vboxGlobal().toIDEControllerType (mCbIDEController->currentText()));
-
-    /* Other features */
-    mMachine.SetExtraData (VBoxDefs::GUI_SaveMountedAtRuntime,
-                           mCbSaveMounted->isChecked() ? "yes" : "no");
 }
 
@@ -316,116 +114,5 @@
 {
     mValidator = aVal;
-    connect (mCbVirt, SIGNAL (stateChanged (int)), mValidator, SLOT (revalidate()));
     connect (mOSTypeSelector, SIGNAL (osTypeChanged()), mValidator, SLOT (revalidate()));
-}
-
-bool VBoxVMSettingsGeneral::revalidate (QString &aWarning, QString & /* aTitle */)
-{
-    /* Come up with some nice round percent boundraries relative to
-       the system memory. A max of 75% on a 256GB config is ridiculous,
-       even on an 8GB rig reserving 2GB for the OS is way to conservative.
-       The max numbers can be estimated using the following program:
-
-            double calcMaxPct(uint64_t cbRam)
-            {
-                double cbRamOverhead = cbRam * 0.0390625; // 160 bytes per page.
-                double cbRamForTheOS = RT_MAX(RT_MIN(_512M, cbRam * 0.25), _64M);
-                double OSPct  = (cbRamOverhead + cbRamForTheOS) * 100.0 / cbRam;
-                double MaxPct = 100 - OSPct;
-                return MaxPct;
-            }
-
-            int main()
-            {
-                uint64_t cbRam = _1G;
-                for (; !(cbRam >> 33); cbRam += _1G)
-                    printf("%8lluGB %.1f%% %8lluKB\n", cbRam >> 30, calcMaxPct(cbRam),
-                           (uint64_t)(cbRam * calcMaxPct(cbRam) / 100.0) >> 20);
-                for (; !(cbRam >> 51); cbRam <<= 1)
-                    printf("%8lluGB %.1f%% %8lluKB\n", cbRam >> 30, calcMaxPct(cbRam),
-                           (uint64_t)(cbRam * calcMaxPct(cbRam) / 100.0) >> 20);
-                return 0;
-            }
-
-       Note. We might wanna put these calculations somewhere global later. */
-    ulong fullSize = vboxGlobal().virtualBox().GetHost().GetMemorySize();
-    double maxPct  = 0.75;
-    double warnPct = 0.50;
-    if (fullSize < 3072)
-        /* done */;
-    else if (fullSize < 4096)   /* 3GB */
-        maxPct  = 0.80;
-    else if (fullSize < 6144)   /* 4-5GB */
-    {
-        maxPct  = 0.84;
-        warnPct = 0.60;
-    }
-    else if (fullSize < 8192)   /* 6-7GB */
-    {
-        maxPct  = 0.88;
-        warnPct = 0.65;
-    }
-    else if (fullSize < 16384)  /* 8-15GB */
-    {
-        maxPct  = 0.90;
-        warnPct = 0.70;
-    }
-    else if (fullSize < 32768)  /* 16-31GB */
-    {
-        maxPct  = 0.93;
-        warnPct = 0.75;
-    }
-    else if (fullSize < 65536)  /* 32-63GB */
-    {
-        maxPct  = 0.94;
-        warnPct = 0.80;
-    }
-    else if (fullSize < 131072) /* 64-127GB */
-    {
-        maxPct  = 0.95;
-        warnPct = 0.85;
-    }
-    else                        /* 128GB- */
-    {
-        maxPct  = 0.96;
-        warnPct = 0.90;
-    }
-
-    /* System RAM amount test */
-    if (mSlRam->value() > maxPct * fullSize)
-    {
-        aWarning = tr (
-            "you have assigned more than <b>%1%</b> of your computer's memory "
-            "(<b>%2</b>) to the virtual machine. Not enough memory is left "
-            "for your host operating system. Please select a smaller amount.")
-            .arg ((unsigned)(maxPct * 100))
-            .arg (vboxGlobal().formatSize ((uint64_t)fullSize * _1M));
-        return false;
-    }
-    if (mSlRam->value() > warnPct * fullSize)
-    {
-        aWarning = tr (
-            "you have assigned more than <b>%1%</b> of your computer's memory "
-            "(<b>%2</b>) to the virtual machine. Not enough memory might be "
-            "left for your host operating system. Continue at your own risk.")
-            .arg ((unsigned)(warnPct * 100))
-            .arg (vboxGlobal().formatSize ((uint64_t)fullSize * _1M));
-        return true;
-    }
-
-    /* Guest OS type & VT-x/AMD-V option correlation test */
-    if (mOSTypeSelector->type().GetIs64Bit() && !mCbVirt->isChecked())
-    {
-        aWarning = tr (
-            "there is a 64 bits guest OS type assigned for this VM, which "
-            "requires virtualization feature (VT-x/AMD-V) to be enabled "
-            "too, else your guest will fail to detect a 64 bits CPU and "
-            "will not be able to boot, so this feature will be enabled "
-            "automatically when you'll accept VM Settings by pressing OK "
-            "button.");
-        return true;
-    }
-
-    return true;
 }
 
@@ -433,25 +120,13 @@
 {
     /* Setup Tab order */
-    setTabOrder (aWidget, mTabGeneral->focusProxy());
-    setTabOrder (mTabGeneral->focusProxy(), mLeName);
+    setTabOrder (aWidget, mTwGeneral->focusProxy());
+    setTabOrder (mTwGeneral->focusProxy(), mLeName);
     setTabOrder (mLeName, mOSTypeSelector);
-    setTabOrder (mOSTypeSelector, mSlRam);
-    setTabOrder (mSlRam, mLeRam);
 
-    setTabOrder (mLeRam, mTwBootOrder);
-    setTabOrder (mTwBootOrder, mTbBootItemUp);
-    setTabOrder (mTbBootItemUp, mTbBootItemDown);
-    setTabOrder (mTbBootItemDown, mCbAcpi);
-    setTabOrder (mCbAcpi, mCbApic);
-    setTabOrder (mCbApic, mCbVirt);
-    setTabOrder (mCbVirt, mCbNestedPaging);
-    setTabOrder (mCbNestedPaging, mCbPae);
-    setTabOrder (mCbPae, mCbClipboard);
-    setTabOrder (mCbClipboard, mCbIDEController);
-    setTabOrder (mCbIDEController, mPsSnapshot);
+    setTabOrder (mOSTypeSelector, mPsSnapshot);
+    setTabOrder (mPsSnapshot, mCbClipboard);
+    setTabOrder (mCbClipboard, mCbSaveMounted);
 
-    setTabOrder (mPsSnapshot, mTeDescription);
-
-    setTabOrder (mTeDescription, mCbSaveMounted);
+    setTabOrder (mCbSaveMounted, mTeDescription);
 }
 
@@ -460,23 +135,10 @@
     /* Translate uic generated strings */
     Ui::VBoxVMSettingsGeneral::retranslateUi (this);
-    mTwBootOrder->header()->setResizeMode (QHeaderView::ResizeToContents);
-    mTwBootOrder->resizeColumnToContents (0);
-    mTwBootOrder->updateGeometry();
 
-    CSystemProperties sys = vboxGlobal().virtualBox().GetSystemProperties();
-    mLbRamMin->setText (tr ("<qt>%1&nbsp;MB</qt>").arg (sys.GetMinGuestRAM()));
-    mLbRamMax->setText (tr ("<qt>%1&nbsp;MB</qt>").arg (sys.GetMaxGuestRAM()));
-
-    /* Retranslate the boot order items */
-    QTreeWidgetItemIterator it (mTwBootOrder);
-    while (*it)
-    {
-        QTreeWidgetItem *item = (*it);
-        item->setText (0, vboxGlobal().toString (
-             static_cast<KDeviceType> (item->data (0, ITEM_TYPE_ROLE).toInt())));
-        ++it;
-    }
-    /* Readjust the tree widget size */
-    adjustBootOrderTWSize();
+    /* Path selector */
+    mPsSnapshot->setWhatsThis (tr ("Displays the path where snapshots of this "
+                                   "virtual machine will be stored. Note that "
+                                   "snapshots can take quite a lot of disk "
+                                   "space."));
 
     /* Shared Clipboard mode */
@@ -485,134 +147,4 @@
     mCbClipboard->setItemText (2, vboxGlobal().toString (KClipboardMode_GuestToHost));
     mCbClipboard->setItemText (3, vboxGlobal().toString (KClipboardMode_Bidirectional));
-
-    /* IDE Controller Type */
-    mCbIDEController->setItemText (0, vboxGlobal().toString (KStorageControllerType_PIIX3));
-    mCbIDEController->setItemText (1, vboxGlobal().toString (KStorageControllerType_PIIX4));
-    mCbIDEController->setItemText (2, vboxGlobal().toString (KStorageControllerType_ICH6));
-
-    /* Path selector */
-    mPsSnapshot->setWhatsThis (tr ("Displays the path where snapshots of this "
-                                   "virtual machine will be stored. Note that "
-                                   "snapshots can take quite a lot of disk "
-                                   "space."));
-}
-
-
-void VBoxVMSettingsGeneral::valueChangedRAM (int aVal)
-{
-    mLeRam->setText (QString().setNum (aVal));
-}
-
-void VBoxVMSettingsGeneral::textChangedRAM (const QString &aText)
-{
-    mSlRam->setValue (aText.toInt());
-}
-
-void VBoxVMSettingsGeneral::moveBootItemUp()
-{
-    QTreeWidgetItem *item = mTwBootOrder->currentItem();
-    Assert (item);
-    if (!mTwBootOrder->itemAbove (item))
-        return;
-
-    int index = mTwBootOrder->indexOfTopLevelItem (item);
-    QTreeWidgetItem *takenItem = mTwBootOrder->takeTopLevelItem (index);
-    Assert (takenItem == item);
-
-    mTwBootOrder->insertTopLevelItem (index - 1, takenItem);
-    mTwBootOrder->setCurrentItem (item);
-
-    emit tableChanged();
-}
-
-void VBoxVMSettingsGeneral::moveBootItemDown()
-{
-    QTreeWidgetItem *item = mTwBootOrder->currentItem();
-    Assert (item);
-    if (!mTwBootOrder->itemBelow (item))
-        return;
-
-    int index = mTwBootOrder->indexOfTopLevelItem (item);
-    QTreeWidgetItem *takenItem = mTwBootOrder->takeTopLevelItem (index);
-    Assert (takenItem == item);
-
-    mTwBootOrder->insertTopLevelItem (index + 1, takenItem);
-    mTwBootOrder->setCurrentItem (item);
-
-    emit tableChanged();
-}
-
-void VBoxVMSettingsGeneral::onCurrentBootItemChanged (QTreeWidgetItem *aItem,
-                                                      QTreeWidgetItem *)
-{
-    bool upEnabled   = aItem && mTwBootOrder->itemAbove (aItem);
-    bool downEnabled = aItem && mTwBootOrder->itemBelow (aItem);
-    if ((mTbBootItemUp->hasFocus() && !upEnabled) ||
-        (mTbBootItemDown->hasFocus() && !downEnabled))
-        mTwBootOrder->setFocus();
-    mTbBootItemUp->setEnabled (upEnabled);
-    mTbBootItemDown->setEnabled (downEnabled);
-}
-
-void VBoxVMSettingsGeneral::stateChangedVirt (int /* aState */)
-{
-    mCbNestedPaging->setEnabled (mCbVirt->checkState());
-}
-
-void VBoxVMSettingsGeneral::adjustBootOrderTWSize()
-{
-    /* Calculate the optimal size of the tree widget & set it as fixed
-     * size. */
-    mTwBootOrder->setFixedSize (
-        static_cast<QAbstractItemView*> (mTwBootOrder)
-        ->sizeHintForColumn (0) + 2 * mTwBootOrder->frameWidth(),
-        static_cast<QAbstractItemView*> (mTwBootOrder)
-        ->sizeHintForRow (0) * mTwBootOrder->topLevelItemCount() +
-        2 * mTwBootOrder->frameWidth());
-
-    /* Update the layout system */
-    mWBootContainer->layout()->activate();
-    mTabAdvanced->layout()->activate();
-    mTabAdvanced->layout()->update();
-}
-
-bool VBoxVMSettingsGeneral::eventFilter (QObject *aObject, QEvent *aEvent)
-{
-    if (!aObject->isWidgetType())
-        return QWidget::eventFilter (aObject, aEvent);
-
-    QWidget *widget = static_cast<QWidget*> (aObject);
-    if (widget->window() != window())
-        return QWidget::eventFilter (aObject, aEvent);
-
-    switch (aEvent->type())
-    {
-        case QEvent::FocusIn:
-        {
-            /* Boot Table */
-            if (widget == mTwBootOrder)
-            {
-                if (!mTwBootOrder->currentItem())
-                    mTwBootOrder->setCurrentItem (mTwBootOrder->topLevelItem (0));
-                else
-                    onCurrentBootItemChanged (mTwBootOrder->currentItem());
-                mTwBootOrder->currentItem()->setSelected (true);
-            }
-            else if (widget != mTbBootItemUp && widget != mTbBootItemDown)
-            {
-                if (mTwBootOrder->currentItem())
-                {
-                    mTwBootOrder->currentItem()->setSelected (false);
-                    mTbBootItemUp->setEnabled (false);
-                    mTbBootItemDown->setEnabled (false);
-                }
-            }
-            break;
-        }
-        default:
-            break;
-    }
-
-    return QWidget::eventFilter (aObject, aEvent);
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/VBoxVMSettingsHD.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/VBoxVMSettingsHD.cpp	(revision 19836)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/VBoxVMSettingsHD.cpp	(revision 19837)
@@ -574,4 +574,5 @@
 
     /* Setup table-view */
+    mTwAts->setMinimumHeight (100);
     mTwAts->verticalHeader()->setDefaultSectionSize (
         (int) (mTwAts->fontMetrics().height() * 1.30 /* 130% of font height */));
@@ -637,4 +638,15 @@
              HDSettings::instance(), SLOT (update()));
 
+    /* IDE Controller Type */
+    mCbIDEController->addItem (""); /* KIDEControllerType_PIIX3 */
+    mCbIDEController->addItem (""); /* KIDEControllerType_PIIX4 */
+    mCbIDEController->addItem (""); /* KIDEControllerType_ICH6  */
+
+
+    /* Additional Controller Type */
+    mCbControllerType->addItem ("", KStorageControllerType_IntelAhci);
+    mCbControllerType->addItem ("", KStorageControllerType_LsiLogic);
+    mCbControllerType->addItem ("", KStorageControllerType_BusLogic);
+
     /* Install global event filter */
     qApp->installEventFilter (this);
@@ -648,4 +660,10 @@
     mMachine = aMachine;
     HDSettings::instance()->setMachine (mMachine);
+
+    /* IDE controller type */
+    const QString ideName = QString ("IDE");
+    CStorageController ideCtl = aMachine.GetStorageControllerByName (ideName);
+    mCbIDEController->setCurrentIndex (mCbIDEController->
+        findText (vboxGlobal().toString (ideCtl.GetControllerType())));
 
     /* For now we search for the first one which isn't IDE */
@@ -691,4 +709,9 @@
 void VBoxVMSettingsHD::putBackTo()
 {
+    /* IDE controller type */
+    const QString ideName = QString ("IDE");
+    CStorageController ideCtl = mMachine.GetStorageControllerByName(ideName);
+    ideCtl.SetControllerType (vboxGlobal().toIDEControllerType (mCbIDEController->currentText()));
+
     /* Detach all attached Hard Disks */
     CHardDiskAttachmentVector vec = mMachine.GetHardDiskAttachments();
@@ -702,5 +725,5 @@
         if (!mMachine.isOk())
         {
-            CStorageController ctl = mMachine.GetStorageControllerByName(hda.GetController());
+            CStorageController ctl = mMachine.GetStorageControllerByName (hda.GetController());
             vboxProblem().cannotDetachHardDisk (this, mMachine,
                 vboxGlobal().getMedium (CMedium (hda.GetHardDisk())).location(),
@@ -709,8 +732,7 @@
     }
 
-
     /* Clear all storage controllers beside the IDE one */
     CStorageController addController;
-    QVector<CStorageController> scs = mMachine.GetStorageControllers();
+    QVector <CStorageController> scs = mMachine.GetStorageControllers();
     foreach (const CStorageController &sc, scs)
         if (sc.GetBus() != KStorageBus_IDE)
@@ -748,11 +770,11 @@
         }
 
-        mMachine.AttachHardDisk(list [i].disk.id,
-                                ctrlName, list [i].slot.channel, list [i].slot.device);
+        mMachine.AttachHardDisk (list [i].disk.id,
+                                 ctrlName, list [i].slot.channel, list [i].slot.device);
         /* [dsen] check this */
         if (!mMachine.isOk())
             vboxProblem().cannotAttachHardDisk (this, mMachine,
                 vboxGlobal().getMedium (CMedium (vboxGlobal().virtualBox()
-                .GetHardDisk(list [i].disk.id))).location(),
+                .GetHardDisk (list [i].disk.id))).location(),
                 list [i].slot.bus, list [i].slot.channel, list [i].slot.device);
     }
@@ -804,6 +826,8 @@
 void VBoxVMSettingsHD::setOrderAfter (QWidget *aWidget)
 {
-    setTabOrder (aWidget, mAddControllerCheck);
-    setTabOrder (mAddControllerCheck, mTwAts);
+    setTabOrder (aWidget, mCbIDEController);
+    setTabOrder (mCbIDEController, mAddControllerCheck);
+    setTabOrder (mAddControllerCheck, mCbControllerType);
+    setTabOrder (mCbControllerType, mTwAts);
     setTabOrder (mTwAts, mShowDiffsCheck);
 }
@@ -814,4 +838,18 @@
     Ui::VBoxVMSettingsHD::retranslateUi (this);
 
+    /* IDE Controller Type */
+    mCbIDEController->setItemText (0, vboxGlobal().toString (KStorageControllerType_PIIX3));
+    mCbIDEController->setItemText (1, vboxGlobal().toString (KStorageControllerType_PIIX4));
+    mCbIDEController->setItemText (2, vboxGlobal().toString (KStorageControllerType_ICH6));
+
+    /* Additional Controller Type */
+    mCbControllerType->setItemText (0, QString ("%1 (%2)").arg (vboxGlobal().toString (KStorageBus_SATA))
+                                                          .arg (vboxGlobal().toString (KStorageControllerType_IntelAhci)));
+    mCbControllerType->setItemText (1, QString ("%1 (%2)").arg (vboxGlobal().toString (KStorageBus_SCSI))
+                                                          .arg (vboxGlobal().toString (KStorageControllerType_LsiLogic)));
+    mCbControllerType->setItemText (2, QString ("%1 (%2)").arg (vboxGlobal().toString (KStorageBus_SCSI))
+                                                          .arg (vboxGlobal().toString (KStorageControllerType_BusLogic)));
+
+    /* Attachments List */
     mNewAction->setText (tr ("&Add Attachment"));
     mDelAction->setText (tr ("&Remove Attachment"));
@@ -830,6 +868,4 @@
                                   "a hard disk to attach to the currently "
                                   "highlighted slot."));
-
-    prepareComboboxes();
 }
 
@@ -1182,21 +1218,4 @@
 }
 
-void VBoxVMSettingsHD::prepareComboboxes()
-{
-    /* Save the current selected value */
-    int current = mCbControllerType->currentIndex();
-    if (current == -1)
-        current = 0;
-    /* Clear the driver box */
-    mCbControllerType->clear();
-    /* Refill them */
-    mCbControllerType->addItem (QString ("%1 (%2)").arg (vboxGlobal().toString (KStorageBus_SATA)).arg (vboxGlobal().toString (KStorageControllerType_IntelAhci)), KStorageControllerType_IntelAhci);
-    mCbControllerType->addItem (QString ("%1 (%2)").arg (vboxGlobal().toString (KStorageBus_SCSI)).arg (vboxGlobal().toString (KStorageControllerType_LsiLogic)), KStorageControllerType_LsiLogic);
-    mCbControllerType->addItem (QString ("%1 (%2)").arg (vboxGlobal().toString (KStorageBus_SCSI)).arg (vboxGlobal().toString (KStorageControllerType_BusLogic)), KStorageControllerType_BusLogic);
-
-    /* Set the old value */
-    mCbControllerType->setCurrentIndex (current);
-}
-
 void VBoxVMSettingsHD::removeFocus()
 {
Index: /trunk/src/VBox/Frontends/VirtualBox/src/VBoxVMSettingsSystem.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/VBoxVMSettingsSystem.cpp	(revision 19837)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/VBoxVMSettingsSystem.cpp	(revision 19837)
@@ -0,0 +1,581 @@
+/** @file
+ *
+ * VBox frontends: Qt4 GUI ("VirtualBox"):
+ * VBoxVMSettingsSystem class implementation
+ */
+
+/*
+ * Copyright (C) 2008-2009 Sun Microsystems, Inc.
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
+ * Clara, CA 95054 USA or visit http://www.sun.com if you need
+ * additional information or have any questions.
+ */
+
+#include "QIWidgetValidator.h"
+#include "VBoxVMSettingsSystem.h"
+
+#define ITEM_TYPE_ROLE Qt::UserRole + 1
+
+/**
+ *  Calculates a suitable page step size for the given max value. The returned
+ *  size is so that there will be no more than 32 pages. The minimum returned
+ *  page size is 4.
+ */
+static int calcPageStep (int aMax)
+{
+    /* reasonable max. number of page steps is 32 */
+    uint page = ((uint) aMax + 31) / 32;
+    /* make it a power of 2 */
+    uint p = page, p2 = 0x1;
+    while ((p >>= 1))
+        p2 <<= 1;
+    if (page != p2)
+        p2 <<= 1;
+    if (p2 < 4)
+        p2 = 4;
+    return (int) p2;
+}
+
+VBoxVMSettingsSystem::VBoxVMSettingsSystem()
+{
+    /* Apply UI decorations */
+    Ui::VBoxVMSettingsSystem::setupUi (this);
+
+    /* Setup constants */
+    CSystemProperties sys = vboxGlobal().virtualBox().GetSystemProperties();
+    const uint MinRAM = sys.GetMinGuestRAM();
+    const uint MaxRAM = sys.GetMaxGuestRAM();
+    const uint MinCPU = sys.GetMinGuestCPUCount();
+    const uint MaxCPU = sys.GetMaxGuestCPUCount();
+
+    /* Setup validators */
+    mLeMemory->setValidator (new QIntValidator (MinRAM, MaxRAM, this));
+    mLeCPU->setValidator (new QIntValidator (MinCPU, MaxCPU, this));
+
+    /* Setup connections */
+    connect (mSlMemory, SIGNAL (valueChanged (int)),
+             this, SLOT (valueChangedRAM (int)));
+    connect (mLeMemory, SIGNAL (textChanged (const QString&)),
+             this, SLOT (textChangedRAM (const QString&)));
+
+    connect (mTbBootItemUp, SIGNAL (clicked()),
+             this, SLOT (moveBootItemUp()));
+    connect (mTbBootItemDown, SIGNAL (clicked()),
+             this, SLOT (moveBootItemDown()));
+    connect (mTwBootOrder, SIGNAL (moveItemUp()),
+             this, SLOT (moveBootItemUp()));
+    connect (mTwBootOrder, SIGNAL (moveItemDown()),
+             this, SLOT (moveBootItemDown()));
+    connect (mTwBootOrder, SIGNAL (itemToggled()),
+             this, SIGNAL (tableChanged()));
+    connect (mTwBootOrder, SIGNAL (currentItemChanged (QTreeWidgetItem*,
+                                                       QTreeWidgetItem*)),
+             this, SLOT (onCurrentBootItemChanged (QTreeWidgetItem*,
+                                                   QTreeWidgetItem*)));
+
+    connect (mSlCPU, SIGNAL (valueChanged (int)),
+             this, SLOT (valueChangedCPU (int)));
+    connect (mLeCPU, SIGNAL (textChanged (const QString&)),
+             this, SLOT (textChangedCPU (const QString&)));
+
+    /* Setup iconsets */
+    mTbBootItemUp->setIcon (VBoxGlobal::iconSet (":/list_moveup_16px.png",
+                                                 ":/list_moveup_disabled_16px.png"));
+    mTbBootItemDown->setIcon (VBoxGlobal::iconSet (":/list_movedown_16px.png",
+                                                   ":/list_movedown_disabled_16px.png"));
+
+    /* Setup memory slider */
+    mSlMemory->setPageStep (calcPageStep (MaxRAM));
+    mSlMemory->setSingleStep (mSlMemory->pageStep() / 4);
+    mSlMemory->setTickInterval (mSlMemory->pageStep());
+    /* Setup the scale so that ticks are at page step boundaries */
+    mSlMemory->setMinimum ((MinRAM / mSlMemory->pageStep()) * mSlMemory->pageStep());
+    mSlMemory->setMaximum (MaxRAM);
+    /* Limit min/max. size of QLineEdit */
+    mLeMemory->setFixedWidthByText (QString().fill ('8', 5));
+    /* Ensure mLeMemory value and validation is updated */
+    valueChangedRAM (mSlMemory->value());
+
+    /* Setup cpu slider */
+    mSlCPU->setPageStep (1);
+    mSlCPU->setSingleStep (1);
+    mSlCPU->setTickInterval (1);
+    /* Setup the scale so that ticks are at page step boundaries */
+    mSlCPU->setMinimum (MinCPU);
+    mSlCPU->setMaximum (MaxCPU);
+    /* Limit min/max. size of QLineEdit */
+    mLeCPU->setFixedWidthByText (QString().fill ('8', 3));
+    /* Ensure mLeMemory value and validation is updated */
+    valueChangedCPU (mSlCPU->value());
+
+    /* Install global event filter */
+    qApp->installEventFilter (this);
+
+    /* Applying language settings */
+    retranslateUi();
+}
+
+bool VBoxVMSettingsSystem::isHWVirtExEnabled() const
+{
+    return mCbVirt->isChecked();
+}
+
+void VBoxVMSettingsSystem::getFrom (const CMachine &aMachine)
+{
+    mMachine = aMachine;
+    CBIOSSettings biosSettings = mMachine.GetBIOSSettings();
+
+    /* RAM size */
+    mSlMemory->setValue (aMachine.GetMemorySize());
+
+    /* Boot-order */
+    {
+        mTwBootOrder->clear();
+        /* Load boot-items of current VM */
+        QStringList uniqueList;
+        for (int i = 1; i <= 4; ++ i)
+        {
+            KDeviceType type = mMachine.GetBootOrder (i);
+            if (type != KDeviceType_Null)
+            {
+                QString name = vboxGlobal().toString (type);
+                QTreeWidgetItem *item =
+                    new QTreeWidgetItem (mTwBootOrder, QStringList (name));
+                QVariant vtype (type);
+                item->setData (0, ITEM_TYPE_ROLE, vtype);
+                item->setCheckState (0, Qt::Checked);
+                uniqueList << name;
+            }
+        }
+        /* Load other unique boot-items */
+        for (int i = KDeviceType_Floppy; i < KDeviceType_USB; ++ i)
+        {
+            QString name = vboxGlobal().toString ((KDeviceType) i);
+            if (!uniqueList.contains (name))
+            {
+                QTreeWidgetItem *item =
+                    new QTreeWidgetItem (mTwBootOrder, QStringList (name));
+                item->setData (0, ITEM_TYPE_ROLE, i);
+                item->setCheckState (0, Qt::Unchecked);
+                uniqueList << name;
+            }
+        }
+        adjustBootOrderTWSize();
+    }
+
+    /* ACPI */
+    mCbAcpi->setChecked (biosSettings.GetACPIEnabled());
+
+    /* IO APIC */
+    mCbApic->setChecked (biosSettings.GetIOAPICEnabled());
+
+    /* CPU count */
+    bool fVTxAMDVSupported = vboxGlobal().virtualBox().GetHost()
+                             .GetProcessorFeature (KProcessorFeature_HWVirtEx);
+    mSlCPU->setEnabled (fVTxAMDVSupported);
+    mLeCPU->setEnabled (fVTxAMDVSupported);
+    mSlCPU->setValue (fVTxAMDVSupported ? aMachine.GetCPUCount() : 1);
+
+    /* PAE/NX */
+    bool fPAESupported = vboxGlobal().virtualBox().GetHost()
+                         .GetProcessorFeature (KProcessorFeature_PAE);
+    mCbPae->setEnabled (fPAESupported);
+    mCbPae->setChecked (aMachine.GetPAEEnabled());
+
+    /* VT-x/AMD-V */
+    mCbVirt->setEnabled (fVTxAMDVSupported);
+    mCbVirt->setChecked (aMachine.GetHWVirtExEnabled() == KTSBool_True);
+
+    /* Nested Paging */
+    mCbNestedPaging->setEnabled (fVTxAMDVSupported &&
+                                 aMachine.GetHWVirtExEnabled() == KTSBool_True);
+    mCbNestedPaging->setChecked (aMachine.GetHWVirtExNestedPagingEnabled());
+
+    if (mValidator)
+        mValidator->revalidate();
+}
+
+void VBoxVMSettingsSystem::putBackTo()
+{
+    CBIOSSettings biosSettings = mMachine.GetBIOSSettings();
+
+    /* RAM size */
+    mMachine.SetMemorySize (mSlMemory->value());
+
+    /* Boot order */
+    {
+        /* Search for checked items */
+        int index = 1;
+
+        for (int i = 0; i < mTwBootOrder->topLevelItemCount(); ++ i)
+        {
+            QTreeWidgetItem *item = mTwBootOrder->topLevelItem (i);
+            if (item->checkState (0) == Qt::Checked)
+            {
+                KDeviceType type = vboxGlobal().toDeviceType (item->text (0));
+                mMachine.SetBootOrder (index ++, type);
+            }
+        }
+
+        /* Search for non-checked items */
+        for (int i = 0; i < mTwBootOrder->topLevelItemCount(); ++ i)
+        {
+            QTreeWidgetItem *item = mTwBootOrder->topLevelItem (i);
+            if (item->checkState (0) != Qt::Checked)
+                mMachine.SetBootOrder (index ++, KDeviceType_Null);
+        }
+    }
+
+    /* ACPI */
+    biosSettings.SetACPIEnabled (mCbAcpi->isChecked());
+
+    /* IO APIC */
+    biosSettings.SetIOAPICEnabled (mCbApic->isChecked() ||
+                                   mSlCPU->value() > 1);
+
+    /* RAM size */
+    mMachine.SetCPUCount (mSlCPU->value());
+
+    /* PAE/NX */
+    mMachine.SetPAEEnabled (mCbPae->isChecked());
+
+    /* VT-x/AMD-V */
+    mMachine.SetHWVirtExEnabled (mCbVirt->checkState() == Qt::Checked ||
+                                 mSlCPU->value() > 1 ?
+                                 KTSBool_True : KTSBool_False);
+
+    /* Nested Paging */
+    mMachine.SetHWVirtExNestedPagingEnabled (mCbNestedPaging->isChecked());
+}
+
+void VBoxVMSettingsSystem::setValidator (QIWidgetValidator *aVal)
+{
+    mValidator = aVal;
+    connect (mCbApic, SIGNAL (stateChanged (int)), mValidator, SLOT (revalidate()));
+    connect (mCbVirt, SIGNAL (stateChanged (int)), mValidator, SLOT (revalidate()));
+}
+
+bool VBoxVMSettingsSystem::revalidate (QString &aWarning, QString & /* aTitle */)
+{
+    /* Come up with some nice round percent boundraries relative to
+     * the system memory. A max of 75% on a 256GB config is ridiculous,
+     * even on an 8GB rig reserving 2GB for the OS is way to conservative.
+     * The max numbers can be estimated using the following program:
+     *
+     *      double calcMaxPct(uint64_t cbRam)
+     *      {
+     *          double cbRamOverhead = cbRam * 0.0390625; // 160 bytes per page.
+     *          double cbRamForTheOS = RT_MAX(RT_MIN(_512M, cbRam * 0.25), _64M);
+     *          double OSPct  = (cbRamOverhead + cbRamForTheOS) * 100.0 / cbRam;
+     *          double MaxPct = 100 - OSPct;
+     *          return MaxPct;
+     *      }
+     *
+     *      int main()
+     *      {
+     *          uint64_t cbRam = _1G;
+     *          for (; !(cbRam >> 33); cbRam += _1G)
+     *              printf("%8lluGB %.1f%% %8lluKB\n", cbRam >> 30, calcMaxPct(cbRam),
+     *                     (uint64_t)(cbRam * calcMaxPct(cbRam) / 100.0) >> 20);
+     *          for (; !(cbRam >> 51); cbRam <<= 1)
+     *              printf("%8lluGB %.1f%% %8lluKB\n", cbRam >> 30, calcMaxPct(cbRam),
+     *                     (uint64_t)(cbRam * calcMaxPct(cbRam) / 100.0) >> 20);
+     *          return 0;
+     *      }
+     *
+     * Note. We might wanna put these calculations somewhere global later. */
+
+    /* System RAM amount test */
+    ulong fullSize = vboxGlobal().virtualBox().GetHost().GetMemorySize();
+    double maxPct  = 0.75;
+    double warnPct = 0.50;
+    if (fullSize < 3072)
+        /* done */;
+    else if (fullSize < 4096)   /* 3GB */
+        maxPct  = 0.80;
+    else if (fullSize < 6144)   /* 4-5GB */
+    {
+        maxPct  = 0.84;
+        warnPct = 0.60;
+    }
+    else if (fullSize < 8192)   /* 6-7GB */
+    {
+        maxPct  = 0.88;
+        warnPct = 0.65;
+    }
+    else if (fullSize < 16384)  /* 8-15GB */
+    {
+        maxPct  = 0.90;
+        warnPct = 0.70;
+    }
+    else if (fullSize < 32768)  /* 16-31GB */
+    {
+        maxPct  = 0.93;
+        warnPct = 0.75;
+    }
+    else if (fullSize < 65536)  /* 32-63GB */
+    {
+        maxPct  = 0.94;
+        warnPct = 0.80;
+    }
+    else if (fullSize < 131072) /* 64-127GB */
+    {
+        maxPct  = 0.95;
+        warnPct = 0.85;
+    }
+    else                        /* 128GB- */
+    {
+        maxPct  = 0.96;
+        warnPct = 0.90;
+    }
+
+    if (mSlMemory->value() > maxPct * fullSize)
+    {
+        aWarning = tr (
+            "you have assigned more than <b>%1%</b> of your computer's memory "
+            "(<b>%2</b>) to the virtual machine. Not enough memory is left "
+            "for your host operating system. Please select a smaller amount.")
+            .arg ((unsigned)(maxPct * 100))
+            .arg (vboxGlobal().formatSize ((uint64_t)fullSize * _1M));
+        return false;
+    }
+    if (mSlMemory->value() > warnPct * fullSize)
+    {
+        aWarning = tr (
+            "you have assigned more than <b>%1%</b> of your computer's memory "
+            "(<b>%2</b>) to the virtual machine. Not enough memory might be "
+            "left for your host operating system. Continue at your own risk.")
+            .arg ((unsigned)(warnPct * 100))
+            .arg (vboxGlobal().formatSize ((uint64_t)fullSize * _1M));
+        return true;
+    }
+
+    /* VCPU amount test */
+    int totalCPUs = vboxGlobal().virtualBox().GetHost().GetProcessorOnlineCount();
+    if (mSlCPU->value() > 2 * totalCPUs)
+    {
+        aWarning = tr (
+            "for performance reasons, the number of virtual CPUs attached to the "
+            "virtual machine may not be more than twice the number of physical "
+            "CPUs on the host (<b>%1</b>). Please reduce the number of virtual CPUs.")
+            .arg (totalCPUs);
+        return false;
+    }
+    if (mSlCPU->value() > totalCPUs)
+    {
+        aWarning = tr (
+            "you have assigned more virtual CPUs to the virtual machine than "
+            "the number of physical CPUs on your host system (<b>%1</b>). "
+            "This is likely to degrade the performance of your virtual machine. "
+            "Please consider reducing the number of virtual CPUs.")
+            .arg (totalCPUs);
+        return true;
+    }
+
+    /* VCPU IO-APIC test */
+    if (mSlCPU->value() > 1 && !mCbApic->isChecked())
+    {
+        aWarning = tr (
+            "there is more than one virtual CPU assigned for this VM, which "
+            "requires IO-APIC feature to be enabled too, else SMP will not be "
+            "able to work, so this feature will be enabled automatically when "
+            "you'll accept VM Settings by pressing OK button.");
+        return true;
+    }
+
+    /* VCPU VT-x/AMD-V test */
+    if (mSlCPU->value() > 1 && !mCbVirt->isChecked())
+    {
+        aWarning = tr (
+            "there is more than one virtual CPU assigned for this VM, which "
+            "requires virtualization feature (VT-x/AMD-V) to be enabled too, "
+            "else SMP will not be able to work, so this feature will be enabled "
+            "automatically when you'll accept VM Settings by pressing OK button.");
+        return true;
+    }
+
+    return true;
+}
+
+void VBoxVMSettingsSystem::setOrderAfter (QWidget *aWidget)
+{
+    setTabOrder (aWidget, mTwSystem->focusProxy());
+    setTabOrder (mTwSystem->focusProxy(), mSlMemory);
+    setTabOrder (mSlMemory, mLeMemory);
+    setTabOrder (mLeMemory, mTwBootOrder);
+    setTabOrder (mTwBootOrder, mTbBootItemUp);
+    setTabOrder (mTbBootItemUp, mTbBootItemDown);
+    setTabOrder (mTbBootItemDown, mCbAcpi);
+    setTabOrder (mCbAcpi, mCbApic);
+
+    setTabOrder (mCbApic, mSlCPU);
+    setTabOrder (mSlCPU, mLeCPU);
+    setTabOrder (mLeCPU, mCbPae);
+
+    setTabOrder (mCbPae, mCbVirt);
+    setTabOrder (mCbVirt, mCbNestedPaging);
+}
+
+void VBoxVMSettingsSystem::retranslateUi()
+{
+    /* Translate uic generated strings */
+    Ui::VBoxVMSettingsSystem::retranslateUi (this);
+
+    /* Adjust the boot order tree widget */
+    mTwBootOrder->header()->setResizeMode (QHeaderView::ResizeToContents);
+    mTwBootOrder->resizeColumnToContents (0);
+    mTwBootOrder->updateGeometry();
+    /* Retranslate the boot order items */
+    QTreeWidgetItemIterator it (mTwBootOrder);
+    while (*it)
+    {
+        QTreeWidgetItem *item = (*it);
+        item->setText (0, vboxGlobal().toString (
+             static_cast <KDeviceType> (item->data (0, ITEM_TYPE_ROLE).toInt())));
+        ++ it;
+    }
+    /* Readjust the tree widget items size */
+    adjustBootOrderTWSize();
+
+    CSystemProperties sys = vboxGlobal().virtualBox().GetSystemProperties();
+
+    /* Retranslate the memory slider legend */
+    mLbMemoryMin->setText (tr ("<qt>%1&nbsp;MB</qt>").arg (sys.GetMinGuestRAM()));
+    mLbMemoryMax->setText (tr ("<qt>%1&nbsp;MB</qt>").arg (sys.GetMaxGuestRAM()));
+
+    /* Retranslate the cpu slider legend */
+    mLbCPUMin->setText (tr ("<qt>%1&nbsp;CPU</qt>").arg (sys.GetMinGuestCPUCount()));
+    mLbCPUMax->setText (tr ("<qt>%1&nbsp;CPU</qt>").arg (sys.GetMaxGuestCPUCount()));
+}
+
+void VBoxVMSettingsSystem::valueChangedRAM (int aVal)
+{
+    mLeMemory->setText (QString().setNum (aVal));
+}
+
+void VBoxVMSettingsSystem::textChangedRAM (const QString &aText)
+{
+    mSlMemory->setValue (aText.toInt());
+}
+
+void VBoxVMSettingsSystem::moveBootItemUp()
+{
+    QTreeWidgetItem *item = mTwBootOrder->currentItem();
+    Assert (item);
+    if (!mTwBootOrder->itemAbove (item))
+        return;
+
+    int index = mTwBootOrder->indexOfTopLevelItem (item);
+    QTreeWidgetItem *takenItem = mTwBootOrder->takeTopLevelItem (index);
+    Assert (takenItem == item);
+
+    mTwBootOrder->insertTopLevelItem (index - 1, takenItem);
+    mTwBootOrder->setCurrentItem (item);
+
+    emit tableChanged();
+}
+
+void VBoxVMSettingsSystem::moveBootItemDown()
+{
+    QTreeWidgetItem *item = mTwBootOrder->currentItem();
+    Assert (item);
+    if (!mTwBootOrder->itemBelow (item))
+        return;
+
+    int index = mTwBootOrder->indexOfTopLevelItem (item);
+    QTreeWidgetItem *takenItem = mTwBootOrder->takeTopLevelItem (index);
+    Assert (takenItem == item);
+
+    mTwBootOrder->insertTopLevelItem (index + 1, takenItem);
+    mTwBootOrder->setCurrentItem (item);
+
+    emit tableChanged();
+}
+
+void VBoxVMSettingsSystem::onCurrentBootItemChanged (QTreeWidgetItem *aItem,
+                                                     QTreeWidgetItem *)
+{
+    bool upEnabled   = aItem && mTwBootOrder->itemAbove (aItem);
+    bool downEnabled = aItem && mTwBootOrder->itemBelow (aItem);
+    if ((mTbBootItemUp->hasFocus() && !upEnabled) ||
+        (mTbBootItemDown->hasFocus() && !downEnabled))
+        mTwBootOrder->setFocus();
+    mTbBootItemUp->setEnabled (upEnabled);
+    mTbBootItemDown->setEnabled (downEnabled);
+}
+
+void VBoxVMSettingsSystem::adjustBootOrderTWSize()
+{
+    /* Calculate the optimal size of the tree widget & set it as fixed
+     * size. */
+
+    QAbstractItemView *iv = qobject_cast <QAbstractItemView*> (mTwBootOrder);
+
+    mTwBootOrder->setFixedSize (
+        iv->sizeHintForColumn (0) + 2 * mTwBootOrder->frameWidth() + 4,
+        iv->sizeHintForRow (0) * mTwBootOrder->topLevelItemCount() + 2 * mTwBootOrder->frameWidth());
+
+    /* Update the layout system */
+    mLtBootOrder->activate();
+    mLtBootOrder->update();
+}
+
+void VBoxVMSettingsSystem::valueChangedCPU (int aVal)
+{
+    mLeCPU->setText (QString().setNum (aVal));
+}
+
+void VBoxVMSettingsSystem::textChangedCPU (const QString &aText)
+{
+    mSlCPU->setValue (aText.toInt());
+}
+
+bool VBoxVMSettingsSystem::eventFilter (QObject *aObject, QEvent *aEvent)
+{
+    if (!aObject->isWidgetType())
+        return QWidget::eventFilter (aObject, aEvent);
+
+    QWidget *widget = static_cast<QWidget*> (aObject);
+    if (widget->window() != window())
+        return QWidget::eventFilter (aObject, aEvent);
+
+    switch (aEvent->type())
+    {
+        case QEvent::FocusIn:
+        {
+            /* Boot Table */
+            if (widget == mTwBootOrder)
+            {
+                if (!mTwBootOrder->currentItem())
+                    mTwBootOrder->setCurrentItem (mTwBootOrder->topLevelItem (0));
+                else
+                    onCurrentBootItemChanged (mTwBootOrder->currentItem());
+                mTwBootOrder->currentItem()->setSelected (true);
+            }
+            else if (widget != mTbBootItemUp && widget != mTbBootItemDown)
+            {
+                if (mTwBootOrder->currentItem())
+                {
+                    mTwBootOrder->currentItem()->setSelected (false);
+                    mTbBootItemUp->setEnabled (false);
+                    mTbBootItemDown->setEnabled (false);
+                }
+            }
+            break;
+        }
+        default:
+            break;
+    }
+
+    return QWidget::eventFilter (aObject, aEvent);
+}
+
Index: /trunk/src/VBox/Frontends/VirtualBox/ui/VBoxVMSettingsGeneral.ui
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/ui/VBoxVMSettingsGeneral.ui	(revision 19836)
+++ /trunk/src/VBox/Frontends/VirtualBox/ui/VBoxVMSettingsGeneral.ui	(revision 19837)
@@ -23,11 +23,11 @@
     <x>0</x>
     <y>0</y>
-    <width>451</width>
-    <height>497</height>
+    <width>350</width>
+    <height>250</height>
    </rect>
   </property>
-  <layout class="QHBoxLayout" >
+  <layout class="QHBoxLayout" name="mLtMain" >
    <item>
-    <widget class="QTabWidget" name="mTabGeneral" >
+    <widget class="QTabWidget" name="mTwGeneral" >
      <property name="currentIndex" >
       <number>0</number>
@@ -37,18 +37,12 @@
        <string>&amp;Basic</string>
       </attribute>
-      <layout class="QVBoxLayout" >
-       <item>
-        <widget class="VBoxOSTypeSelectorWidget" name="mOSTypeSelector" >
-         <layout class="QGridLayout" >
-          <property name="leftMargin" >
-           <number>0</number>
-          </property>
-          <property name="topMargin" >
-           <number>0</number>
-          </property>
-          <property name="rightMargin" >
-           <number>0</number>
-          </property>
-          <property name="bottomMargin" >
+      <layout class="QVBoxLayout" name="mLtBasic" >
+       <property name="spacing" >
+        <number>0</number>
+       </property>
+       <item>
+        <widget class="VBoxOSTypeSelectorWidget" native="1" name="mOSTypeSelector" >
+         <layout class="QGridLayout" name="mLtOSTypeSelector" >
+          <property name="margin" >
            <number>0</number>
           </property>
@@ -71,115 +65,8 @@
              <string>Displays the name of the virtual machine.</string>
             </property>
-           </widget>
-          </item>
-          <item row="3" column="0" >
-           <widget class="QLabel" name="mLbRam" >
-            <property name="text" >
-             <string>Base &amp;Memory:</string>
-            </property>
-            <property name="alignment" >
-             <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-            </property>
-            <property name="buddy" >
-             <cstring>mLeRam</cstring>
-            </property>
-           </widget>
-          </item>
-          <item rowspan="2" row="3" column="1" colspan="2" >
-           <layout class="QGridLayout" >
-            <item rowspan="2" row="0" column="0" >
-             <layout class="QVBoxLayout" >
-              <property name="spacing" >
-               <number>0</number>
-              </property>
-              <item>
-               <widget class="QSlider" name="mSlRam" >
-                <property name="whatsThis" >
-                 <string>Controls the amount of memory provided to the virtual machine. If you assign too much, the machine might not start.</string>
-                </property>
-                <property name="orientation" >
-                 <enum>Qt::Horizontal</enum>
-                </property>
-                <property name="tickPosition" >
-                 <enum>QSlider::TicksBelow</enum>
-                </property>
-               </widget>
-              </item>
-              <item>
-               <layout class="QHBoxLayout" >
-                <item>
-                 <widget class="QLabel" name="mLbRamMin" >
-                  <property name="sizePolicy" >
-                   <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-                    <horstretch>0</horstretch>
-                    <verstretch>0</verstretch>
-                   </sizepolicy>
-                  </property>
-                 </widget>
-                </item>
-                <item>
-                 <spacer>
-                  <property name="orientation" >
-                   <enum>Qt::Horizontal</enum>
-                  </property>
-                  <property name="sizeHint" >
-                   <size>
-                    <width>0</width>
-                    <height>0</height>
-                   </size>
-                  </property>
-                 </spacer>
-                </item>
-                <item>
-                 <widget class="QLabel" name="mLbRamMax" >
-                  <property name="sizePolicy" >
-                   <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-                    <horstretch>0</horstretch>
-                    <verstretch>0</verstretch>
-                   </sizepolicy>
-                  </property>
-                  <property name="alignment" >
-                   <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-                  </property>
-                 </widget>
-                </item>
-               </layout>
-              </item>
-             </layout>
-            </item>
-            <item row="0" column="1" >
-             <layout class="QHBoxLayout" >
-              <property name="spacing" >
-               <number>4</number>
-              </property>
-              <item>
-               <widget class="QILineEdit" name="mLeRam" >
-                <property name="sizePolicy" >
-                 <sizepolicy vsizetype="Fixed" hsizetype="Maximum" >
-                  <horstretch>0</horstretch>
-                  <verstretch>0</verstretch>
-                 </sizepolicy>
-                </property>
-                <property name="whatsThis" >
-                 <string>Controls the amount of memory provided to the virtual machine. If you assign too much, the machine might not start.</string>
-                </property>
-               </widget>
-              </item>
-              <item>
-               <widget class="QLabel" name="mLbRamUnit" >
-                <property name="sizePolicy" >
-                 <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-                  <horstretch>0</horstretch>
-                  <verstretch>0</verstretch>
-                 </sizepolicy>
-                </property>
-                <property name="text" >
-                 <string>MB</string>
-                </property>
-               </widget>
-              </item>
-             </layout>
-            </item>
-           </layout>
+            <property name="text" >
+             <string/>
+            </property>
+           </widget>
           </item>
          </layout>
@@ -187,11 +74,11 @@
        </item>
        <item>
-        <spacer>
+        <spacer name="mSpVer1" >
          <property name="orientation" >
           <enum>Qt::Vertical</enum>
          </property>
-         <property name="sizeHint" >
+         <property name="sizeHint" stdset="0" >
           <size>
-           <width>20</width>
+           <width>0</width>
            <height>0</height>
           </size>
@@ -205,156 +92,103 @@
        <string>&amp;Advanced</string>
       </attribute>
-      <layout class="QGridLayout" >
-       <item row="0" column="0" >
-        <widget class="QLabel" name="mGbBootOrder" >
-         <property name="text" >
-          <string>Boo&amp;t Order:</string>
-         </property>
-         <property name="alignment" >
-          <set>Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing</set>
-         </property>
-         <property name="buddy" >
-          <cstring>mTwBootOrder</cstring>
-         </property>
-        </widget>
-       </item>
-       <item row="0" column="1" >
-        <widget class="QWidget" native="1" name="widget" >
-         <property name="sizePolicy" >
-          <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <layout class="QHBoxLayout" >
-          <property name="leftMargin" >
+      <layout class="QVBoxLayout" name="mLtAdvanced" >
+       <property name="spacing" >
+        <number>0</number>
+       </property>
+       <item>
+        <widget class="QWidget" native="1" name="mWtAdvanced" >
+         <layout class="QGridLayout" name="mLtAdvancedItems" >
+          <property name="margin" >
            <number>0</number>
           </property>
-          <property name="topMargin" >
-           <number>0</number>
-          </property>
-          <property name="rightMargin" >
-           <number>0</number>
-          </property>
-          <property name="bottomMargin" >
-           <number>0</number>
-          </property>
-          <item>
-           <widget class="QWidget" native="1" name="mWBootContainer" >
-            <layout class="QHBoxLayout" >
-             <property name="leftMargin" >
-              <number>0</number>
-             </property>
-             <property name="topMargin" >
-              <number>0</number>
-             </property>
-             <property name="rightMargin" >
-              <number>0</number>
-             </property>
-             <property name="bottomMargin" >
-              <number>0</number>
-             </property>
-             <item>
-              <layout class="QVBoxLayout" >
-               <property name="spacing" >
-                <number>0</number>
-               </property>
-               <item>
-                <widget class="BootItemsTable" name="mTwBootOrder" >
-                 <property name="whatsThis" >
-                  <string>Defines the boot device order. Use checkboxes to the left to enable or disable individual boot devices. Move items up and down to change the device order.</string>
-                 </property>
-                 <property name="verticalScrollBarPolicy" >
-                  <enum>Qt::ScrollBarAlwaysOff</enum>
-                 </property>
-                 <property name="horizontalScrollBarPolicy" >
-                  <enum>Qt::ScrollBarAlwaysOff</enum>
-                 </property>
-                 <property name="alternatingRowColors" >
-                  <bool>true</bool>
-                 </property>
-                 <property name="rootIsDecorated" >
-                  <bool>false</bool>
-                 </property>
-                 <property name="uniformRowHeights" >
-                  <bool>true</bool>
-                 </property>
-                 <column>
-                  <property name="text" >
-                   <string>[device]</string>
-                  </property>
-                 </column>
-                </widget>
-               </item>
-              </layout>
-             </item>
-             <item>
-              <layout class="QVBoxLayout" >
-               <property name="spacing" >
-                <number>0</number>
-               </property>
-               <item>
-                <widget class="QToolButton" name="mTbBootItemUp" >
-                 <property name="enabled" >
-                  <bool>false</bool>
-                 </property>
-                 <property name="focusPolicy" >
-                  <enum>Qt::StrongFocus</enum>
-                 </property>
-                 <property name="toolTip" >
-                  <string>Move Up (Ctrl-Up)</string>
-                 </property>
-                 <property name="whatsThis" >
-                  <string>Moves the selected boot device up.</string>
-                 </property>
-                 <property name="text" >
-                  <string/>
-                 </property>
-                 <property name="autoRaise" >
-                  <bool>true</bool>
-                 </property>
-                </widget>
-               </item>
-               <item>
-                <widget class="QToolButton" name="mTbBootItemDown" >
-                 <property name="enabled" >
-                  <bool>false</bool>
-                 </property>
-                 <property name="focusPolicy" >
-                  <enum>Qt::StrongFocus</enum>
-                 </property>
-                 <property name="toolTip" >
-                  <string>Move Down (Ctrl-Down)</string>
-                 </property>
-                 <property name="whatsThis" >
-                  <string>Moves the selected boot device down.</string>
-                 </property>
-                 <property name="text" >
-                  <string/>
-                 </property>
-                 <property name="autoRaise" >
-                  <bool>true</bool>
-                 </property>
-                </widget>
-               </item>
-               <item>
-                <spacer>
-                 <property name="orientation" >
-                  <enum>Qt::Vertical</enum>
-                 </property>
-                 <property name="sizeType" >
-                  <enum>QSizePolicy::Expanding</enum>
-                 </property>
-                 <property name="sizeHint" >
-                  <size>
-                   <width>4</width>
-                   <height>0</height>
-                  </size>
-                 </property>
-                </spacer>
-               </item>
-              </layout>
-             </item>
-            </layout>
+          <item row="0" column="0" >
+           <widget class="QLabel" name="mLbSnapshot" >
+            <property name="text" >
+             <string>S&amp;napshot Folder:</string>
+            </property>
+            <property name="alignment" >
+             <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+            </property>
+            <property name="buddy" >
+             <cstring>mPsSnapshot</cstring>
+            </property>
+           </widget>
+          </item>
+          <item row="0" column="1" colspan="2" >
+           <widget class="VBoxFilePathSelectorWidget" name="mPsSnapshot" >
+            <property name="sizePolicy" >
+             <sizepolicy vsizetype="Fixed" hsizetype="MinimumExpanding" >
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="0" >
+           <widget class="QLabel" name="mLbClipboard" >
+            <property name="text" >
+             <string>&amp;Shared Clipboard:</string>
+            </property>
+            <property name="alignment" >
+             <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+            </property>
+            <property name="buddy" >
+             <cstring>mCbClipboard</cstring>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="1" >
+           <widget class="QComboBox" name="mCbClipboard" >
+            <property name="sizePolicy" >
+             <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+            <property name="whatsThis" >
+             <string>Defines the mode of sharing the clipboard between the guest and the host OS. Note that this feature requires Guest Additions to be installed in the guest OS.</string>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="2" >
+           <spacer name="mSpHor1" >
+            <property name="orientation" >
+             <enum>Qt::Horizontal</enum>
+            </property>
+            <property name="sizeHint" stdset="0" >
+             <size>
+              <width>0</width>
+              <height>0</height>
+             </size>
+            </property>
+           </spacer>
+          </item>
+          <item row="2" column="1" >
+           <widget class="QCheckBox" name="mCbSaveMounted" >
+            <property name="sizePolicy" >
+             <sizepolicy vsizetype="Fixed" hsizetype="MinimumExpanding" >
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+            <property name="whatsThis" >
+             <string>If checked, any change to mounted CD/DVD or Floppy media performed during machine execution will be saved in the settings file in order to preserve the configuration of mounted media between runs.</string>
+            </property>
+            <property name="text" >
+             <string>&amp;Remember Runtime Changes</string>
+            </property>
+            <property name="checked" >
+             <bool>true</bool>
+            </property>
+           </widget>
+          </item>
+          <item row="2" column="0" >
+           <widget class="QLabel" name="mLbAdvanced" >
+            <property name="text" >
+             <string>Removable Media:</string>
+            </property>
+            <property name="alignment" >
+             <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+            </property>
            </widget>
           </item>
@@ -362,229 +196,13 @@
         </widget>
        </item>
-       <item row="1" column="0" >
-        <widget class="QLabel" name="mGbAdvanced" >
-         <property name="text" >
-          <string>Extended Features:</string>
-         </property>
-         <property name="alignment" >
-          <set>Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing</set>
-         </property>
-         <property name="buddy" >
-          <cstring>mCbAcpi</cstring>
-         </property>
-        </widget>
-       </item>
-       <item row="1" column="1" >
-        <layout class="QVBoxLayout" >
-         <item>
-          <widget class="QCheckBox" name="mCbAcpi" >
-           <property name="sizePolicy" >
-            <sizepolicy vsizetype="Fixed" hsizetype="MinimumExpanding" >
-             <horstretch>0</horstretch>
-             <verstretch>0</verstretch>
-            </sizepolicy>
-           </property>
-           <property name="whatsThis" >
-            <string>When checked, the virtual machine will support the Advanced Configuration and Power Management Interface (ACPI). &lt;b>Note:&lt;/b> don't disable this feature after having installed a Windows guest operating system!</string>
-           </property>
-           <property name="text" >
-            <string>Enable A&amp;CPI</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QCheckBox" name="mCbApic" >
-           <property name="sizePolicy" >
-            <sizepolicy vsizetype="Fixed" hsizetype="MinimumExpanding" >
-             <horstretch>0</horstretch>
-             <verstretch>0</verstretch>
-            </sizepolicy>
-           </property>
-           <property name="whatsThis" >
-            <string>When checked, the virtual machine will support the Input Output APIC (IO APIC), which may slightly decrease the VM performance. &lt;b>Note:&lt;/b> don't disable this feature after having installed a Windows guest operating system!</string>
-           </property>
-           <property name="text" >
-            <string>Enable IO A&amp;PIC</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QCheckBox" name="mCbVirt" >
-           <property name="sizePolicy" >
-            <sizepolicy vsizetype="Fixed" hsizetype="MinimumExpanding" >
-             <horstretch>0</horstretch>
-             <verstretch>0</verstretch>
-            </sizepolicy>
-           </property>
-           <property name="whatsThis" >
-            <string>When checked, the virtual machine will try to make use of the host CPU's hardware virtualization extensions such as Intel VT-x and AMD-V.</string>
-           </property>
-           <property name="text" >
-            <string>Enable &amp;VT-x/AMD-V</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <layout class="QHBoxLayout" >
-           <item>
-            <spacer>
-             <property name="orientation" >
-              <enum>Qt::Horizontal</enum>
-             </property>
-             <property name="sizeType" >
-              <enum>QSizePolicy::Fixed</enum>
-             </property>
-             <property name="sizeHint" >
-              <size>
-               <width>20</width>
-               <height>0</height>
-              </size>
-             </property>
-            </spacer>
-           </item>
-           <item>
-            <widget class="QCheckBox" name="mCbNestedPaging" >
-             <property name="sizePolicy" >
-              <sizepolicy vsizetype="Fixed" hsizetype="MinimumExpanding" >
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
-             </property>
-             <property name="whatsThis" >
-              <string>When checked, the virtual machine will try to make use of the nested paging extension of Intel VT-x and AMD-V.</string>
-             </property>
-             <property name="text" >
-              <string>Enable Nested Pa&amp;ging</string>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </item>
-         <item>
-          <widget class="QCheckBox" name="mCbPae" >
-           <property name="sizePolicy" >
-            <sizepolicy vsizetype="Fixed" hsizetype="MinimumExpanding" >
-             <horstretch>0</horstretch>
-             <verstretch>0</verstretch>
-            </sizepolicy>
-           </property>
-           <property name="whatsThis" >
-            <string>When checked, the Physical Address Extension (PAE) feature of the host CPU will be exposed to the virtual machine.</string>
-           </property>
-           <property name="text" >
-            <string>Enable PA&amp;E/NX</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </item>
-       <item row="2" column="0" >
-        <widget class="QLabel" name="mGbClipboard" >
-         <property name="text" >
-          <string>&amp;Shared Clipboard:</string>
-         </property>
-         <property name="alignment" >
-          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-         </property>
-         <property name="buddy" >
-          <cstring>mCbClipboard</cstring>
-         </property>
-        </widget>
-       </item>
-       <item rowspan="2" row="2" column="1" >
-        <layout class="QHBoxLayout" >
-         <item>
-          <layout class="QVBoxLayout" >
-           <item>
-            <widget class="QComboBox" name="mCbClipboard" >
-             <property name="sizePolicy" >
-              <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
-             </property>
-             <property name="whatsThis" >
-              <string>Defines the mode of sharing the clipboard between the guest and the host OS. Note that this feature requires Guest Additions to be installed in the guest OS.</string>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QComboBox" name="mCbIDEController" >
-             <property name="sizePolicy" >
-              <sizepolicy vsizetype="Fixed" hsizetype="Minimum" >
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
-             </property>
-             <property name="whatsThis" >
-              <string>Defines the type of the virtual IDE controller. Depending on this value, VirtualBox will provide different virtual IDE hardware devices to the guest OS.</string>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </item>
-         <item>
-          <spacer>
-           <property name="orientation" >
-            <enum>Qt::Horizontal</enum>
-           </property>
-           <property name="sizeType" >
-            <enum>QSizePolicy::Expanding</enum>
-           </property>
-           <property name="sizeHint" >
-            <size>
-             <width>40</width>
-             <height>20</height>
-            </size>
-           </property>
-          </spacer>
-         </item>
-        </layout>
-       </item>
-       <item row="3" column="0" >
-        <widget class="QLabel" name="mGbIDEController" >
-         <property name="text" >
-          <string>&amp;IDE Controller Type:</string>
-         </property>
-         <property name="alignment" >
-          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-         </property>
-         <property name="buddy" >
-          <cstring>mCbIDEController</cstring>
-         </property>
-        </widget>
-       </item>
-       <item row="4" column="0" >
-        <widget class="QLabel" name="mGbSnapshot" >
-         <property name="text" >
-          <string>S&amp;napshot Folder:</string>
-         </property>
-         <property name="alignment" >
-          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-         </property>
-         <property name="buddy" >
-          <cstring>mPsSnapshot</cstring>
-         </property>
-        </widget>
-       </item>
-       <item row="4" column="1" >
-        <widget class="VBoxFilePathSelectorWidget" name="mPsSnapshot" >
-         <property name="sizePolicy" >
-          <sizepolicy vsizetype="Fixed" hsizetype="MinimumExpanding" >
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-        </widget>
-       </item>
-       <item row="5" column="1" >
-        <spacer>
+       <item>
+        <spacer name="mSpVer2" >
          <property name="orientation" >
           <enum>Qt::Vertical</enum>
          </property>
-         <property name="sizeHint" >
+         <property name="sizeHint" stdset="0" >
           <size>
-           <width>20</width>
-           <height>40</height>
+           <width>0</width>
+           <height>0</height>
           </size>
          </property>
@@ -597,5 +215,8 @@
        <string>&amp;Description</string>
       </attribute>
-      <layout class="QVBoxLayout" >
+      <layout class="QVBoxLayout" name="mLtDescription" >
+       <property name="spacing" >
+        <number>0</number>
+       </property>
        <item>
         <widget class="QTextEdit" name="mTeDescription" >
@@ -607,79 +228,4 @@
          </property>
         </widget>
-       </item>
-      </layout>
-     </widget>
-     <widget class="QWidget" name="mTabOther" >
-      <attribute name="title" >
-       <string>&amp;Other</string>
-      </attribute>
-      <layout class="QGridLayout" >
-       <item row="0" column="0" >
-        <spacer>
-         <property name="orientation" >
-          <enum>Qt::Horizontal</enum>
-         </property>
-         <property name="sizeType" >
-          <enum>QSizePolicy::Fixed</enum>
-         </property>
-         <property name="sizeHint" >
-          <size>
-           <width>60</width>
-           <height>20</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-       <item row="0" column="1" >
-        <widget class="QLabel" name="mGbRuntime" >
-         <property name="text" >
-          <string>Runtime:</string>
-         </property>
-         <property name="alignment" >
-          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-         </property>
-         <property name="buddy" >
-          <cstring>mCbSaveMounted</cstring>
-         </property>
-        </widget>
-       </item>
-       <item row="0" column="2" >
-        <widget class="QCheckBox" name="mCbSaveMounted" >
-         <property name="whatsThis" >
-          <string>If checked, any change to mounted CD/DVD or Floppy media performed during machine execution will be saved in the settings file in order to preserve the configuration of mounted media between runs.</string>
-         </property>
-         <property name="text" >
-          <string>&amp;Remember Mounted Media</string>
-         </property>
-         <property name="checked" >
-          <bool>true</bool>
-         </property>
-        </widget>
-       </item>
-       <item row="0" column="3" >
-        <spacer>
-         <property name="orientation" >
-          <enum>Qt::Horizontal</enum>
-         </property>
-         <property name="sizeHint" >
-          <size>
-           <width>40</width>
-           <height>20</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-       <item row="1" column="2" >
-        <spacer>
-         <property name="orientation" >
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeHint" >
-          <size>
-           <width>20</width>
-           <height>40</height>
-          </size>
-         </property>
-        </spacer>
        </item>
       </layout>
@@ -701,19 +247,4 @@
    <container>1</container>
   </customwidget>
-  <customwidget>
-   <class>BootItemsTable</class>
-   <extends>QTreeWidget</extends>
-   <header>VBoxSettingsUtils.h</header>
-  </customwidget>
-  <customwidget>
-   <class>QILabelSeparator</class>
-   <extends>QLabel</extends>
-   <header>QILabelSeparator.h</header>
-  </customwidget>
-  <customwidget>
-   <class>QILineEdit</class>
-   <extends>QLineEdit</extends>
-   <header>QILineEdit.h</header>
-  </customwidget>
  </customwidgets>
  <resources/>
Index: /trunk/src/VBox/Frontends/VirtualBox/ui/VBoxVMSettingsHD.ui
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/ui/VBoxVMSettingsHD.ui	(revision 19836)
+++ /trunk/src/VBox/Frontends/VirtualBox/ui/VBoxVMSettingsHD.ui	(revision 19837)
@@ -28,5 +28,54 @@
    </rect>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
+  <layout class="QVBoxLayout" name="mLtMain">
+   <item>
+    <widget class="QLabel" name="mLbIDEController" >
+     <property name="sizePolicy" >
+      <sizepolicy vsizetype="Fixed" hsizetype="Minimum" >
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="text" >
+      <string>IDE &amp;Controller Type</string>
+     </property>
+     <property name="buddy" >
+      <cstring>mCbIDEController</cstring>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="mLtIDEControllers">
+     <item>
+      <spacer name="mSpIDEController">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeType">
+        <enum>QSizePolicy::Fixed</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>20</width>
+         <height>0</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QComboBox" name="mCbIDEController" >
+       <property name="sizePolicy" >
+        <sizepolicy vsizetype="Fixed" hsizetype="MinimumExpanding" >
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="whatsThis" >
+        <string>Defines the type of the virtual IDE controller. Depending on this value, VirtualBox will provide different virtual IDE hardware devices to the guest OS.</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
    <item>
     <widget class="QCheckBox" name="mAddControllerCheck">
@@ -40,7 +89,7 @@
    </item>
    <item>
-    <layout class="QHBoxLayout" name="horizontalLayout">
+    <layout class="QHBoxLayout" name="mLtAddControllers">
      <item>
-      <spacer name="horizontalSpacer">
+      <spacer name="mSpAddControllers">
        <property name="orientation">
         <enum>Qt::Horizontal</enum>
@@ -51,6 +100,6 @@
        <property name="sizeHint" stdset="0">
         <size>
-         <width>17</width>
-         <height>17</height>
+         <width>20</width>
+         <height>0</height>
         </size>
        </property>
@@ -84,10 +133,4 @@
    <item>
     <widget class="QWidget" name="mGbAts" native="true">
-     <property name="minimumSize">
-      <size>
-       <width>0</width>
-       <height>200</height>
-      </size>
-     </property>
      <layout class="QHBoxLayout">
       <property name="margin">
Index: /trunk/src/VBox/Frontends/VirtualBox/ui/VBoxVMSettingsSystem.ui
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/ui/VBoxVMSettingsSystem.ui	(revision 19837)
+++ /trunk/src/VBox/Frontends/VirtualBox/ui/VBoxVMSettingsSystem.ui	(revision 19837)
@@ -0,0 +1,621 @@
+<ui version="4.0" >
+ <comment>
+ VBox frontends: Qt4 GUI ("VirtualBox"):
+
+ Copyright (C) 2008 Sun Microsystems, Inc.
+
+ This file is part of VirtualBox Open Source Edition (OSE), as
+ available from http://www.virtualbox.org. This file is free software;
+ you can redistribute it and/or modify it under the terms of the GNU
+ General Public License (GPL) as published by the Free Software
+ Foundation, in version 2 as it comes in the "COPYING" file of the
+ VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+
+ Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
+ Clara, CA 95054 USA or visit http://www.sun.com if you need
+ additional information or have any questions.
+ </comment>
+ <class>VBoxVMSettingsSystem</class>
+ <widget class="QWidget" name="VBoxVMSettingsSystem" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>429</width>
+    <height>360</height>
+   </rect>
+  </property>
+  <layout class="QVBoxLayout" name="mLtMain" >
+   <item>
+    <widget class="QTabWidget" name="mTwSystem" >
+     <property name="currentIndex" >
+      <number>0</number>
+     </property>
+     <widget class="QWidget" name="mTabMotherboard" >
+      <attribute name="title" >
+       <string>&amp;Motherboard</string>
+      </attribute>
+      <layout class="QGridLayout" name="mLtMotherboard" >
+       <item row="0" column="0" >
+        <widget class="QLabel" name="mLbMemory" >
+         <property name="sizePolicy" >
+          <sizepolicy vsizetype="Fixed" hsizetype="Minimum" >
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="text" >
+          <string>Base &amp;Memory:</string>
+         </property>
+         <property name="alignment" >
+          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+         </property>
+         <property name="buddy" >
+          <cstring>mLeMemory</cstring>
+         </property>
+        </widget>
+       </item>
+       <item rowspan="2" row="0" column="1" >
+        <layout class="QVBoxLayout" name="mLtMemorySlider" >
+         <property name="spacing" >
+          <number>0</number>
+         </property>
+         <item>
+          <widget class="QSlider" name="mSlMemory" >
+           <property name="whatsThis" >
+            <string>Controls the amount of memory provided to the virtual machine. If you assign too much, the machine might not start.</string>
+           </property>
+           <property name="maximum" >
+            <number>4096</number>
+           </property>
+           <property name="singleStep" >
+            <number>200</number>
+           </property>
+           <property name="value" >
+            <number>512</number>
+           </property>
+           <property name="orientation" >
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="tickPosition" >
+            <enum>QSlider::TicksBelow</enum>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <layout class="QHBoxLayout" name="mLtMemoryLegend" >
+           <property name="spacing" >
+            <number>0</number>
+           </property>
+           <item>
+            <widget class="QLabel" name="mLbMemoryMin" >
+             <property name="sizePolicy" >
+              <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+               <horstretch>0</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <spacer name="mSpHor1" >
+             <property name="orientation" >
+              <enum>Qt::Horizontal</enum>
+             </property>
+             <property name="sizeHint" stdset="0" >
+              <size>
+               <width>0</width>
+               <height>0</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
+           <item>
+            <widget class="QLabel" name="mLbMemoryMax" >
+             <property name="sizePolicy" >
+              <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+               <horstretch>0</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
+             <property name="alignment" >
+              <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+        </layout>
+       </item>
+       <item row="0" column="2" >
+        <layout class="QHBoxLayout" name="mLtMemoryUnits" >
+         <item>
+          <widget class="QILineEdit" name="mLeMemory" >
+           <property name="sizePolicy" >
+            <sizepolicy vsizetype="Fixed" hsizetype="Minimum" >
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="whatsThis" >
+            <string>Controls the amount of memory provided to the virtual machine. If you assign too much, the machine might not start.</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QLabel" name="mLbMemoryUnit" >
+           <property name="sizePolicy" >
+            <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="text" >
+            <string>MB</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </item>
+       <item row="2" column="0" >
+        <widget class="QLabel" name="mLbBootOrder" >
+         <property name="sizePolicy" >
+          <sizepolicy vsizetype="Fixed" hsizetype="Minimum" >
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="text" >
+          <string>&amp;Boot Order:</string>
+         </property>
+         <property name="alignment" >
+          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+         </property>
+         <property name="buddy" >
+          <cstring>mTwBootOrder</cstring>
+         </property>
+        </widget>
+       </item>
+       <item rowspan="2" row="2" column="1" colspan="2" >
+        <layout class="QHBoxLayout" name="mLtBootOrder" >
+         <property name="spacing" >
+          <number>1</number>
+         </property>
+         <item>
+          <widget class="BootItemsTable" name="mTwBootOrder" >
+           <property name="sizePolicy" >
+            <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="whatsThis" >
+            <string>Defines the boot device order. Use checkboxes to the left to enable or disable individual boot devices. Move items up and down to change the device order.</string>
+           </property>
+           <property name="verticalScrollBarPolicy" >
+            <enum>Qt::ScrollBarAlwaysOff</enum>
+           </property>
+           <property name="horizontalScrollBarPolicy" >
+            <enum>Qt::ScrollBarAlwaysOff</enum>
+           </property>
+           <property name="alternatingRowColors" >
+            <bool>true</bool>
+           </property>
+           <property name="rootIsDecorated" >
+            <bool>false</bool>
+           </property>
+           <property name="uniformRowHeights" >
+            <bool>true</bool>
+           </property>
+           <property name="headerHidden" >
+            <bool>true</bool>
+           </property>
+           <column>
+            <property name="text" >
+             <string/>
+            </property>
+           </column>
+          </widget>
+         </item>
+         <item>
+          <layout class="QVBoxLayout" name="mLtBootOrderButtons" >
+           <property name="spacing" >
+            <number>0</number>
+           </property>
+           <item>
+            <widget class="QToolButton" name="mTbBootItemUp" >
+             <property name="enabled" >
+              <bool>false</bool>
+             </property>
+             <property name="focusPolicy" >
+              <enum>Qt::StrongFocus</enum>
+             </property>
+             <property name="toolTip" >
+              <string>Move Down (Ctrl-Down)</string>
+             </property>
+             <property name="whatsThis" >
+              <string>Moves the selected boot device down.</string>
+             </property>
+             <property name="text" >
+              <string/>
+             </property>
+             <property name="icon" >
+              <iconset>
+               <normaloff>../images/list_moveup_16px.png</normaloff>../images/list_moveup_16px.png</iconset>
+             </property>
+             <property name="autoRaise" >
+              <bool>true</bool>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <widget class="QToolButton" name="mTbBootItemDown" >
+             <property name="enabled" >
+              <bool>false</bool>
+             </property>
+             <property name="focusPolicy" >
+              <enum>Qt::StrongFocus</enum>
+             </property>
+             <property name="toolTip" >
+              <string>Move Up (Ctrl-Up)</string>
+             </property>
+             <property name="whatsThis" >
+              <string>Moves the selected boot device up.</string>
+             </property>
+             <property name="text" >
+              <string/>
+             </property>
+             <property name="icon" >
+              <iconset>
+               <normaloff>../images/list_movedown_16px.png</normaloff>../images/list_movedown_16px.png</iconset>
+             </property>
+             <property name="autoRaise" >
+              <bool>true</bool>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <spacer name="mSpVer2" >
+             <property name="orientation" >
+              <enum>Qt::Vertical</enum>
+             </property>
+             <property name="sizeHint" stdset="0" >
+              <size>
+               <width>0</width>
+               <height>0</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
+          </layout>
+         </item>
+         <item>
+          <spacer name="mSpHor2" >
+           <property name="orientation" >
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeHint" stdset="0" >
+            <size>
+             <width>0</width>
+             <height>0</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+        </layout>
+       </item>
+       <item row="4" column="0" >
+        <widget class="QLabel" name="mLbMotherboardExtended" >
+         <property name="sizePolicy" >
+          <sizepolicy vsizetype="Fixed" hsizetype="Minimum" >
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="text" >
+          <string>Extended Features:</string>
+         </property>
+         <property name="alignment" >
+          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+         </property>
+        </widget>
+       </item>
+       <item row="4" column="1" colspan="2" >
+        <widget class="QCheckBox" name="mCbAcpi" >
+         <property name="sizePolicy" >
+          <sizepolicy vsizetype="Fixed" hsizetype="Expanding" >
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="whatsThis" >
+          <string>When checked, the virtual machine will support the Advanced Configuration and Power Management Interface (ACPI). &lt;b>Note:&lt;/b> don't disable this feature after having installed a Windows guest operating system!</string>
+         </property>
+         <property name="text" >
+          <string>Enable &amp;ACPI</string>
+         </property>
+        </widget>
+       </item>
+       <item row="5" column="1" colspan="2" >
+        <widget class="QCheckBox" name="mCbApic" >
+         <property name="sizePolicy" >
+          <sizepolicy vsizetype="Fixed" hsizetype="Expanding" >
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="whatsThis" >
+          <string>When checked, the virtual machine will support the Input Output APIC (IO APIC), which may slightly decrease the VM performance. &lt;b>Note:&lt;/b> don't disable this feature after having installed a Windows guest operating system!</string>
+         </property>
+         <property name="text" >
+          <string>Enable &amp;IO APIC</string>
+         </property>
+        </widget>
+       </item>
+       <item row="6" column="0" colspan="3" >
+        <spacer name="mSpVer1" >
+         <property name="orientation" >
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0" >
+          <size>
+           <width>0</width>
+           <height>0</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="mTabProcessor" >
+      <attribute name="title" >
+       <string>&amp;Processor</string>
+      </attribute>
+      <layout class="QGridLayout" name="mLtProcessor" >
+       <item row="0" column="0" >
+        <widget class="QLabel" name="mLbCPU" >
+         <property name="sizePolicy" >
+          <sizepolicy vsizetype="Fixed" hsizetype="Minimum" >
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="text" >
+          <string>CPU &amp;Count:</string>
+         </property>
+         <property name="alignment" >
+          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+         </property>
+         <property name="buddy" >
+          <cstring>mLeCPU</cstring>
+         </property>
+        </widget>
+       </item>
+       <item rowspan="2" row="0" column="1" >
+        <layout class="QVBoxLayout" name="mLtCPUSlider" >
+         <property name="spacing" >
+          <number>0</number>
+         </property>
+         <item>
+          <widget class="QSlider" name="mSlCPU" >
+           <property name="whatsThis" >
+            <string>Controls the number of virtual CPUs in the virtual machine.</string>
+           </property>
+           <property name="maximum" >
+            <number>4096</number>
+           </property>
+           <property name="singleStep" >
+            <number>200</number>
+           </property>
+           <property name="value" >
+            <number>512</number>
+           </property>
+           <property name="orientation" >
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="tickPosition" >
+            <enum>QSlider::TicksBelow</enum>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <layout class="QHBoxLayout" name="mLtCPULegend" >
+           <property name="spacing" >
+            <number>0</number>
+           </property>
+           <item>
+            <widget class="QLabel" name="mLbCPUMin" >
+             <property name="sizePolicy" >
+              <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+               <horstretch>0</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
+            </widget>
+           </item>
+           <item>
+            <spacer name="mSpHor4" >
+             <property name="orientation" >
+              <enum>Qt::Horizontal</enum>
+             </property>
+             <property name="sizeHint" stdset="0" >
+              <size>
+               <width>0</width>
+               <height>0</height>
+              </size>
+             </property>
+            </spacer>
+           </item>
+           <item>
+            <widget class="QLabel" name="mLbCPUMax" >
+             <property name="sizePolicy" >
+              <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+               <horstretch>0</horstretch>
+               <verstretch>0</verstretch>
+              </sizepolicy>
+             </property>
+             <property name="alignment" >
+              <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+        </layout>
+       </item>
+       <item row="0" column="2" >
+        <widget class="QILineEdit" name="mLeCPU" >
+         <property name="sizePolicy" >
+          <sizepolicy vsizetype="Fixed" hsizetype="Minimum" >
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="whatsThis" >
+          <string>Controls the number of virtual CPUs in the virtual machine.</string>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="0" >
+        <widget class="QLabel" name="mLbProcessorExtended" >
+         <property name="text" >
+          <string>Extended Features:</string>
+         </property>
+         <property name="alignment" >
+          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="1" colspan="2" >
+        <widget class="QCheckBox" name="mCbPae" >
+         <property name="sizePolicy" >
+          <sizepolicy vsizetype="Fixed" hsizetype="MinimumExpanding" >
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="whatsThis" >
+          <string>When checked, the Physical Address Extension (PAE) feature of the host CPU will be exposed to the virtual machine.</string>
+         </property>
+         <property name="text" >
+          <string>Enable PA&amp;E/NX</string>
+         </property>
+        </widget>
+       </item>
+       <item row="3" column="0" colspan="3" >
+        <spacer name="mSpVer3" >
+         <property name="orientation" >
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0" >
+          <size>
+           <width>0</width>
+           <height>0</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="mTabAcceleration" >
+      <attribute name="title" >
+       <string>Acce&amp;leration</string>
+      </attribute>
+      <layout class="QGridLayout" name="mLtAcceleration" >
+       <item row="0" column="0" >
+        <widget class="QLabel" name="mLbVirt" >
+         <property name="text" >
+          <string>Hardware Virtualization:</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1" >
+        <widget class="QCheckBox" name="mCbVirt" >
+         <property name="sizePolicy" >
+          <sizepolicy vsizetype="Fixed" hsizetype="MinimumExpanding" >
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="whatsThis" >
+          <string>When checked, the virtual machine will try to make use of the host CPU's hardware virtualization extensions such as Intel VT-x and AMD-V.</string>
+         </property>
+         <property name="text" >
+          <string>Enable &amp;VT-x/AMD-V</string>
+         </property>
+         <property name="checked" >
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="1" >
+        <widget class="QCheckBox" name="mCbNestedPaging" >
+         <property name="sizePolicy" >
+          <sizepolicy vsizetype="Fixed" hsizetype="MinimumExpanding" >
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="whatsThis" >
+          <string>When checked, the virtual machine will try to make use of the nested paging extension of Intel VT-x and AMD-V.</string>
+         </property>
+         <property name="text" >
+          <string>Enable Nested Pa&amp;ging</string>
+         </property>
+         <property name="checked" >
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="0" colspan="2" >
+        <spacer name="verticalSpacer" >
+         <property name="orientation" >
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0" >
+          <size>
+           <width>20</width>
+           <height>40</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>BootItemsTable</class>
+   <extends>QTreeWidget</extends>
+   <header>VBoxSettingsUtils.h</header>
+  </customwidget>
+  <customwidget>
+   <class>QILineEdit</class>
+   <extends>QLineEdit</extends>
+   <header>QILineEdit.h</header>
+  </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>mCbVirt</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>mCbNestedPaging</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>195</x>
+     <y>50</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>196</x>
+     <y>72</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
