Index: /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 45430)
+++ /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 45431)
@@ -280,4 +280,5 @@
 	src/globals/UIMessageCenter.h \
 	src/globals/UIModalWindowManager.h \
+	src/globals/UIPopupCenter.h \
 	src/globals/UIShortcutPool.h \
 	src/globals/VBoxGlobal.h \
@@ -515,4 +516,5 @@
 	src/globals/UIMessageCenter.cpp \
 	src/globals/UIModalWindowManager.cpp \
+	src/globals/UIPopupCenter.cpp \
 	src/globals/UIShortcutPool.cpp \
 	src/globals/VBoxGlobal.cpp \
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIPopupCenter.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIPopupCenter.cpp	(revision 45431)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIPopupCenter.cpp	(revision 45431)
@@ -0,0 +1,160 @@
+/* $Id$ */
+/** @file
+ *
+ * VBox frontends: Qt GUI ("VirtualBox"):
+ * UIPopupCenter class implementation
+ */
+
+/*
+ * Copyright (C) 2013 Oracle Corporation
+ *
+ * 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.
+ */
+
+/* Qt includes: */
+#include <QVBoxLayout>
+#include <QLabel>
+
+/* GUI includes: */
+#include "UIPopupCenter.h"
+#include "QIMessageBox.h"
+#include "UIModalWindowManager.h"
+
+/* static */
+UIPopupCenter* UIPopupCenter::m_spInstance = 0;
+UIPopupCenter* UIPopupCenter::instance() { return m_spInstance; }
+
+/* static */
+void UIPopupCenter::prepare()
+{
+    /* Make sure instance is not created yet: */
+    if (m_spInstance)
+        return;
+
+    /* Create instance: */
+    new UIPopupCenter;
+}
+
+/* static */
+void UIPopupCenter::cleanup()
+{
+    /* Make sure instance is still created: */
+    if (!m_spInstance)
+        return;
+
+    /* Create instance: */
+    delete m_spInstance;
+}
+
+UIPopupCenter::UIPopupCenter()
+{
+    /* Prepare instance: */
+    if (!m_spInstance)
+        m_spInstance = this;
+}
+
+UIPopupCenter::~UIPopupCenter()
+{
+    /* Cleanup instance: */
+    if (m_spInstance)
+        m_spInstance = 0;
+}
+
+void UIPopupCenter::message(QWidget *pParent,
+                            const QString &strMessage, const QString &strDetails,
+                            const char *pcszAutoConfirmId /*= 0*/,
+                            int iButton1 /*= 0*/, int iButton2 /*= 0*/, int iButton3 /*= 0*/,
+                            const QString &strButtonText1 /* = QString() */,
+                            const QString &strButtonText2 /* = QString() */,
+                            const QString &strButtonText3 /* = QString() */) const
+{
+    showPopupBox(pParent,
+                 strMessage, strDetails,
+                 iButton1, iButton2, iButton3,
+                 strButtonText1, strButtonText2, strButtonText3,
+                 QString(pcszAutoConfirmId));
+}
+
+void UIPopupCenter::error(QWidget *pParent,
+                          const QString &strMessage, const QString &strDetails,
+                          const char *pcszAutoConfirmId /*= 0*/) const
+{
+    message(pParent,
+            strMessage, strDetails,
+            pcszAutoConfirmId,
+            AlertButton_Ok | AlertButtonOption_Default);
+}
+
+void UIPopupCenter::alert(QWidget *pParent,
+                          const QString &strMessage,
+                          const char *pcszAutoConfirmId /*= 0*/) const
+{
+    error(pParent,
+          strMessage, QString(),
+          pcszAutoConfirmId);
+}
+
+void UIPopupCenter::question(QWidget *pParent,
+                             const QString &strMessage,
+                             const char *pcszAutoConfirmId /*= 0*/,
+                             int iButton1 /*= 0*/, int iButton2 /*= 0*/, int iButton3 /*= 0*/,
+                             const QString &strButtonText1 /*= QString()*/,
+                             const QString &strButtonText2 /*= QString()*/,
+                             const QString &strButtonText3 /*= QString()*/) const
+{
+    message(pParent,
+            strMessage, QString(),
+            pcszAutoConfirmId,
+            iButton1, iButton2, iButton3,
+            strButtonText1, strButtonText2, strButtonText3);
+}
+
+void UIPopupCenter::questionBinary(QWidget *pParent,
+                                   const QString &strMessage,
+                                   const char *pcszAutoConfirmId /*= 0*/,
+                                   const QString &strOkButtonText /*= QString()*/,
+                                   const QString &strCancelButtonText /*= QString()*/) const
+{
+    question(pParent,
+             strMessage,
+             pcszAutoConfirmId,
+             AlertButton_Ok | AlertButtonOption_Default,
+             AlertButton_Cancel | AlertButtonOption_Escape,
+             0 /* third button */,
+             strOkButtonText,
+             strCancelButtonText,
+             QString() /* third button */);
+}
+
+void UIPopupCenter::questionTrinary(QWidget *pParent,
+                                    const QString &strMessage,
+                                    const char *pcszAutoConfirmId /*= 0*/,
+                                    const QString &strChoice1ButtonText /*= QString()*/,
+                                    const QString &strChoice2ButtonText /*= QString()*/,
+                                    const QString &strCancelButtonText /*= QString()*/) const
+{
+    question(pParent,
+             strMessage,
+             pcszAutoConfirmId,
+             AlertButton_Choice1,
+             AlertButton_Choice2 | AlertButtonOption_Default,
+             AlertButton_Cancel | AlertButtonOption_Escape,
+             strChoice1ButtonText,
+             strChoice2ButtonText,
+             strCancelButtonText);
+}
+
+void UIPopupCenter::showPopupBox(QWidget *,
+                                 const QString &, const QString &,
+                                 int , int , int ,
+                                 const QString &, const QString &, const QString &,
+                                 const QString &) const
+{
+}
+
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIPopupCenter.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIPopupCenter.h	(revision 45431)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIPopupCenter.h	(revision 45431)
@@ -0,0 +1,112 @@
+/** @file
+ *
+ * VBox frontends: Qt GUI ("VirtualBox"):
+ * UIPopupCenter class declaration
+ */
+
+/*
+ * Copyright (C) 2013 Oracle Corporation
+ *
+ * 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.
+ */
+
+#ifndef __UIPopupCenter_h__
+#define __UIPopupCenter_h__
+
+/* Qt includes: */
+#include <QMap>
+#include <QObject>
+#include <QPointer>
+
+/* Global popup-center object: */
+class UIPopupCenter: public QObject
+{
+    Q_OBJECT;
+
+public:
+
+    /* Prepare/cleanup stuff: */
+    static void prepare();
+    static void cleanup();
+
+    /* API: Main message function, used directly only in exceptional cases: */
+    void message(QWidget *pParent,
+                 const QString &strMessage, const QString &strDetails,
+                 const char *pcszAutoConfirmId = 0,
+                 int iButton1 = 0, int iButton2 = 0, int iButton3 = 0,
+                 const QString &strButtonText1 = QString(),
+                 const QString &strButtonText2 = QString(),
+                 const QString &strButtonText3 = QString()) const;
+
+    /* API: Wrapper to 'message' function.
+     * Provides single OK button: */
+    void error(QWidget *pParent,
+               const QString &strMessage, const QString &strDetails,
+               const char *pcszAutoConfirmId = 0) const;
+
+    /* API: Wrapper to 'error' function.
+     * Omits details: */
+    void alert(QWidget *pParent,
+               const QString &strMessage,
+               const char *pcszAutoConfirmId = 0) const;
+
+    /* API: Wrapper to 'message' function.
+     * Omits details, provides two or three buttons: */
+    void question(QWidget *pParent,
+                  const QString &strMessage,
+                  const char *pcszAutoConfirmId = 0,
+                  int iButton1 = 0, int iButton2 = 0, int iButton3 = 0,
+                  const QString &strButtonText1 = QString(),
+                  const QString &strButtonText2 = QString(),
+                  const QString &strButtonText3 = QString()) const;
+
+    /* API: Wrapper to 'question' function,
+     * Question providing two buttons (OK and Cancel by default): */
+    void questionBinary(QWidget *pParent,
+                        const QString &strMessage,
+                        const char *pcszAutoConfirmId = 0,
+                        const QString &strOkButtonText = QString(),
+                        const QString &strCancelButtonText = QString()) const;
+
+    /* API: Wrapper to 'question' function,
+     * Question providing three buttons (Yes, No and Cancel by default): */
+    void questionTrinary(QWidget *pParent,
+                         const QString &strMessage,
+                         const char *pcszAutoConfirmId = 0,
+                         const QString &strChoice1ButtonText = QString(),
+                         const QString &strChoice2ButtonText = QString(),
+                         const QString &strCancelButtonText = QString()) const;
+
+private:
+
+    /* Constructor/destructor: */
+    UIPopupCenter();
+    ~UIPopupCenter();
+
+    /* Instance stuff: */
+    static UIPopupCenter* instance();
+    friend UIPopupCenter& popupCenter();
+
+    /* Helper: Popup-box stuff: */
+    void showPopupBox(QWidget *pParent,
+                      const QString &strMessage, const QString &strDetails,
+                      int iButton1, int iButton2, int iButton3,
+                      const QString &strButtonText1, const QString &strButtonText2, const QString &strButtonText3,
+                      const QString &strAutoConfirmId) const;
+
+    /* Variables: */
+    static UIPopupCenter* m_spInstance;
+    mutable QMap<QString, QPointer<QWidget> > m_popups;
+};
+
+/* Shortcut to the static UIPopupCenter::instance() method, for convenience: */
+inline UIPopupCenter& popupCenter() { return *UIPopupCenter::instance(); }
+
+#endif /* __UIPopupCenter_h__ */
+
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp	(revision 45430)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp	(revision 45431)
@@ -54,4 +54,5 @@
 #include "UISelectorWindow.h"
 #include "UIMessageCenter.h"
+#include "UIPopupCenter.h"
 #include "QIMessageBox.h"
 #include "QIDialogButtonBox.h"
@@ -4020,4 +4021,7 @@
 void VBoxGlobal::init()
 {
+    /* Create popup-center: */
+    UIPopupCenter::prepare();
+
 #ifdef DEBUG
     mVerString += " [DEBUG]";
@@ -4523,4 +4527,7 @@
     COMBase::CleanupCOM();
 
+    /* Destroy popup-center: */
+    UIPopupCenter::cleanup();
+
     mValid = false;
 }
