Index: /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.cpp	(revision 37105)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.cpp	(revision 37106)
@@ -19,4 +19,5 @@
 
 /* Global includes */
+#include <QProgressBar>
 #include <QPushButton>
 #include <QStackedWidget>
@@ -51,6 +52,10 @@
     , m_dialogType(settingsDialogType)
     , m_fPolished(false)
-    /* Loading stuff: */
+    /* Loading/saving stuff: */
     , m_fProcessed(false)
+    /* Status bar stuff: */
+    , m_pStatusBar(new QStackedWidget(this))
+    /* Process bar stuff: */
+    , m_pProcessBar(new QProgressBar(this))
     /* Error/Warning stuff: */
     , m_fValid(true)
@@ -104,6 +109,13 @@
     pStackLayout->addWidget(m_pStack);
 
+    /* Status bar: */
+    m_pStatusBar->addWidget(new QWidget);
+    m_pButtonBox->addExtraWidget(m_pStatusBar);
+
+    /* Setup process bar stuff: */
+    m_pStatusBar->addWidget(m_pProcessBar);
+
     /* Setup error & warning stuff: */
-    m_pButtonBox->addExtraWidget(m_pWarningPane);
+    m_pStatusBar->addWidget(m_pWarningPane);
     m_errorIcon = UIIconPool::defaultIcon(UIIconPool::MessageBoxCriticalIcon, this).pixmap(16, 16);
     m_warningIcon = UIIconPool::defaultIcon(UIIconPool::MessageBoxWarningIcon, this).pixmap(16, 16);
@@ -197,4 +209,22 @@
 }
 
+void UISettingsDialog::sltHandleProcessStarted()
+{
+    m_pProcessBar->setValue(0);
+    m_pStatusBar->setCurrentWidget(m_pProcessBar);
+}
+
+void UISettingsDialog::sltHandlePageProcessed()
+{
+    m_pProcessBar->setValue(m_pProcessBar->value() + 1);
+    if (m_pProcessBar->value() == m_pProcessBar->maximum())
+    {
+        if (!m_fValid || !m_fSilent)
+            m_pStatusBar->setCurrentWidget(m_pWarningPane);
+        else
+            m_pStatusBar->setCurrentIndex(0);
+    }
+}
+
 void UISettingsDialog::retranslateUi()
 {
@@ -245,5 +275,5 @@
     if (m_fPolished)
     {
-        if (!m_strErrorString.isEmpty())
+        if (!m_strErrorString.isEmpty() && m_pStatusBar->currentWidget() == m_pWarningPane)
             m_pLbWhatsThis->setText(m_strErrorString);
         else
@@ -261,5 +291,5 @@
     if (m_fPolished)
     {
-        if (!m_strWarningString.isEmpty())
+        if (!m_strWarningString.isEmpty() && m_pStatusBar->currentWidget() == m_pWarningPane)
             m_pLbWhatsThis->setText(m_strWarningString);
         else
@@ -295,4 +325,7 @@
         m_pages[cId] = m_pStack->addWidget(pPage);
 #endif /* !Q_WS_MAC */
+        /* Update process bar: */
+        m_pProcessBar->setMinimum(0);
+        m_pProcessBar->setMaximum(m_pStack->count());
     }
     if (pSettingsPage)
@@ -334,4 +367,5 @@
 
         m_fValid = fNewValid;
+        m_pButtonBox->button(QDialogButtonBox::Ok)->setEnabled(m_fValid);
         m_pWarningPane->setWarningPixmap(m_errorIcon);
         m_pWarningPane->setWarningText(m_strErrorHint);
@@ -339,6 +373,8 @@
         m_pWarningPane->setToolTip(m_strErrorString);
 #endif /* Q_WS_MAC */
-        m_pWarningPane->setVisible(!m_fValid);
-        m_pButtonBox->button(QDialogButtonBox::Ok)->setEnabled(m_fValid);
+        if (m_fValid && m_pStatusBar->currentWidget() == m_pWarningPane)
+            m_pStatusBar->setCurrentIndex(0);
+        else if (!m_fValid && m_pStatusBar->currentIndex() == 0)
+            m_pStatusBar->setCurrentWidget(m_pWarningPane);
 
         if (!m_fValid)
@@ -375,5 +411,8 @@
         m_pWarningPane->setToolTip(m_strWarningString);
 #endif /* Q_WS_MAC */
-        m_pWarningPane->setVisible(!m_fSilent);
+        if (m_fSilent && m_pStatusBar->currentWidget() == m_pWarningPane)
+            m_pStatusBar->setCurrentIndex(0);
+        else if (!m_fSilent && m_pStatusBar->currentIndex() == 0)
+            m_pStatusBar->setCurrentWidget(m_pWarningPane);
     }
 }
@@ -408,8 +447,11 @@
 
 #ifndef Q_WS_MAC
-    if (strWhatsThisText.isEmpty() && !m_strErrorString.isEmpty())
-        strWhatsThisText = m_strErrorString;
-    else if (strWhatsThisText.isEmpty() && !m_strWarningString.isEmpty())
-        strWhatsThisText = m_strWarningString;
+    if (m_pStatusBar->currentWidget() == m_pWarningPane)
+    {
+        if (strWhatsThisText.isEmpty() && !m_strErrorString.isEmpty())
+            strWhatsThisText = m_strErrorString;
+        else if (strWhatsThisText.isEmpty() && !m_strWarningString.isEmpty())
+            strWhatsThisText = m_strWarningString;
+    }
     if (strWhatsThisText.isEmpty())
         strWhatsThisText = whatsThis();
Index: /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.h	(revision 37105)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialog.h	(revision 37106)
@@ -28,4 +28,5 @@
 /* Forward declarations: */
 class QIWidgetValidator;
+class QProgressBar;
 class QStackedWidget;
 class QTimer;
@@ -62,4 +63,8 @@
     /* Mark dialog as processed: */
     virtual void sltMarkProcessed();
+
+    /* Handlers for process bar: */
+    void sltHandleProcessStarted();
+    void sltHandlePageProcessed();
 
 protected:
@@ -116,6 +121,14 @@
     bool m_fPolished;
 
+    /* Loading/saving stuff: */
+    bool m_fProcessed;
+
+    /* Status bar widget: */
+    QStackedWidget *m_pStatusBar;
+
+    /* Process bar widget: */
+    QProgressBar *m_pProcessBar;
+
     /* Error & Warning stuff: */
-    bool m_fProcessed;
     bool m_fValid;
     bool m_fSilent;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialogSpecific.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialogSpecific.cpp	(revision 37105)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/settings/UISettingsDialogSpecific.cpp	(revision 37106)
@@ -86,8 +86,11 @@
         , m_iIdOfHighPriorityPage(-1)
     {
-        /* Connecting thread signals: */
+        /* Connecting this signals: */
         connect(this, SIGNAL(sigNotifyAboutPageProcessed(int)), this, SLOT(sltHandleProcessedPage(int)), Qt::QueuedConnection);
         connect(this, SIGNAL(sigNotifyAboutPagesProcessed()), this, SLOT(sltHandleProcessedPages()), Qt::QueuedConnection);
         connect(this, SIGNAL(finished()), this, SLOT(sltDestroySerializer()), Qt::QueuedConnection);
+        /* Connecting parent signals: */
+        connect(this, SIGNAL(sigNotifyAboutProcessStarted()), parent(), SLOT(sltHandleProcessStarted()), Qt::QueuedConnection);
+        connect(this, SIGNAL(sigNotifyAboutPageProcessed(int)), parent(), SLOT(sltHandlePageProcessed()), Qt::QueuedConnection);
 
         /* Set instance: */
@@ -153,4 +156,7 @@
 signals:
 
+    /* Signal to notify main GUI thread about process has been started: */
+    void sigNotifyAboutProcessStarted();
+
     /* Signal to notify main GUI thread about some page was processed: */
     void sigNotifyAboutPageProcessed(int iPageId);
@@ -163,4 +169,6 @@
     void start(Priority priority = InheritPriority)
     {
+        /* Notify listeners a bout we are starting: */
+        emit sigNotifyAboutProcessStarted();
         /* If serializer saves settings: */
         if (m_direction == UISettingsSerializeDirection_Save)
Index: /trunk/src/VBox/Frontends/VirtualBox/src/widgets/VBoxWarningPane.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/widgets/VBoxWarningPane.cpp	(revision 37105)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/widgets/VBoxWarningPane.cpp	(revision 37106)
@@ -7,5 +7,5 @@
 
 /*
- * Copyright (C) 2009 Oracle Corporation
+ * Copyright (C) 2009-2011 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -32,15 +32,14 @@
     pLayout->addWidget(&m_icon);
     pLayout->addWidget(&m_label);
-    setVisible(false);
 }
 
 void VBoxWarningPane::setWarningPixmap(const QPixmap &imgPixmap)
 {
-    m_icon.setPixmap (imgPixmap);
+    m_icon.setPixmap(imgPixmap);
 }
 
 void VBoxWarningPane::setWarningText(const QString &strText)
 {
-    m_label.setText (strText);
+    m_label.setText(strText);
 }
 
