Index: trunk/src/VBox/Frontends/VirtualBox/src/manager/UIToolPaneGlobal.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/manager/UIToolPaneGlobal.cpp	(revision 74560)
+++ trunk/src/VBox/Frontends/VirtualBox/src/manager/UIToolPaneGlobal.cpp	(revision 74561)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2017 Oracle Corporation
+ * Copyright (C) 2017-2018 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -29,9 +29,8 @@
 /* GUI includes */
 # include "UIActionPoolSelector.h"
-# include "UIWelcomePane.h"
 # include "UIHostNetworkManager.h"
-# include "UIIconPool.h"
 # include "UIMediumManager.h"
 # include "UIToolPaneGlobal.h"
+# include "UIWelcomePane.h"
 
 /* Other VBox includes: */
@@ -42,8 +41,8 @@
 
 UIToolPaneGlobal::UIToolPaneGlobal(UIActionPool *pActionPool, QWidget *pParent /* = 0 */)
-    : QIWithRetranslateUI<QWidget>(pParent)
+    : QWidget(pParent)
     , m_pActionPool(pActionPool)
     , m_pLayout(0)
-    , m_pPaneDesktop(0)
+    , m_pPaneWelcome(0)
     , m_pPaneMedia(0)
     , m_pPaneNetwork(0)
@@ -96,16 +95,13 @@
             {
                 /* Create Desktop pane: */
-                m_pPaneDesktop = new UIWelcomePane;
-                if (m_pPaneDesktop)
+                m_pPaneWelcome = new UIWelcomePane;
+                if (m_pPaneWelcome)
                 {
                     /* Configure pane: */
-                    m_pPaneDesktop->setProperty("ToolType", QVariant::fromValue(ToolTypeGlobal_Welcome));
+                    m_pPaneWelcome->setProperty("ToolType", QVariant::fromValue(ToolTypeGlobal_Welcome));
 
                     /* Add into layout: */
-                    m_pLayout->addWidget(m_pPaneDesktop);
-                    m_pLayout->setCurrentWidget(m_pPaneDesktop);
-
-                    /* Retranslate Desktop pane: */
-                    retranslateDesktopPane();
+                    m_pLayout->addWidget(m_pPaneWelcome);
+                    m_pLayout->setCurrentWidget(m_pPaneWelcome);
                 }
                 break;
@@ -171,5 +167,5 @@
         switch (enmType)
         {
-            case ToolTypeGlobal_Welcome: m_pPaneDesktop = 0; break;
+            case ToolTypeGlobal_Welcome: m_pPaneWelcome = 0; break;
             case ToolTypeGlobal_Media:   m_pPaneMedia = 0; break;
             case ToolTypeGlobal_Network: m_pPaneNetwork = 0; break;
@@ -183,9 +179,4 @@
 }
 
-void UIToolPaneGlobal::retranslateUi()
-{
-    retranslateDesktopPane();
-}
-
 void UIToolPaneGlobal::prepare()
 {
@@ -195,7 +186,4 @@
     /* Create desktop pane: */
     openTool(ToolTypeGlobal_Media);
-
-    /* Apply language settings: */
-    retranslateUi();
 }
 
@@ -210,46 +198,2 @@
     }
 }
-
-void UIToolPaneGlobal::retranslateDesktopPane()
-{
-    if (!m_pPaneDesktop)
-        return;
-
-    /* Translate Global Tools welcome screen: */
-    m_pPaneDesktop->setToolsPaneIcon(UIIconPool::iconSet(":/tools_banner_global_200px.png"));
-    m_pPaneDesktop->setToolsPaneText(
-        tr("<h3>Welcome to VirtualBox!</h3>"
-           "<p>This window represents a set of global tools "
-           "which are currently opened (or can be opened). "
-           "They are not related to any particular machine but "
-           "to the complete VM collection. For a list of currently "
-           "available tools check the corresponding menu at the right "
-           "side of the main tool bar located at the top of the window. "
-           "This list will be extended with new tools in future releases.</p>"
-           "<p>You can press the <b>%1</b> key to get instant help, or visit "
-           "<a href=https://www.virtualbox.org>www.virtualbox.org</a> "
-           "for more information and latest news.</p>")
-           .arg(QKeySequence(QKeySequence::HelpContents).toString(QKeySequence::NativeText)));
-
-    /* Wipe out the tool descriptions: */
-    m_pPaneDesktop->removeToolDescriptions();
-
-    /* Add tool descriptions: */
-    QAction *pAction1 = m_pActionPool->action(UIActionIndexST_M_Tools_M_Global_S_VirtualMediaManager);
-    m_pPaneDesktop->addToolDescription(pAction1,
-                                       tr("Tool to observe virtual storage media. "
-                                          "Reflects all the chains of virtual disks you have registered "
-                                          "(per each storage type) within your virtual machines and allows for media "
-                                          "operations like copy, remove, release "
-                                          "(detach it from VMs where it is currently attached to) and observe their properties. "
-                                          "Allows to edit medium attributes like type, "
-                                          "location/name, description and size (for dynamical storages "
-                                          "only)."));
-    QAction *pAction2 = m_pActionPool->action(UIActionIndexST_M_Tools_M_Global_S_HostNetworkManager);
-    m_pPaneDesktop->addToolDescription(pAction2,
-                                       tr("Tool to control host-only network interfaces. "
-                                          "Reflects host-only networks, their DHCP servers and allows "
-                                          "for operations on the networks like possibility to create, remove "
-                                          "and observe their properties. Allows to edit various "
-                                          "attributes for host-only interface and corresponding DHCP server."));
-}
Index: trunk/src/VBox/Frontends/VirtualBox/src/manager/UIToolPaneGlobal.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/manager/UIToolPaneGlobal.h	(revision 74560)
+++ trunk/src/VBox/Frontends/VirtualBox/src/manager/UIToolPaneGlobal.h	(revision 74561)
@@ -5,5 +5,5 @@
 
 /*
- * Copyright (C) 2017 Oracle Corporation
+ * Copyright (C) 2017-2018 Oracle Corporation
  *
  * This file is part of VirtualBox Open Source Edition (OSE), as
@@ -23,5 +23,4 @@
 
 /* GUI includes: */
-#include "QIWithRetranslateUI.h"
 #include "UIExtraDataDefs.h"
 
@@ -39,5 +38,5 @@
 
 /** QWidget subclass representing container for tool panes. */
-class UIToolPaneGlobal : public QIWithRetranslateUI<QWidget>
+class UIToolPaneGlobal : public QWidget
 {
     Q_OBJECT;
@@ -59,9 +58,4 @@
     void closeTool(ToolTypeGlobal enmType);
 
-protected:
-
-    /** Handles translation event. */
-    virtual void retranslateUi() /* override */;
-
 private:
 
@@ -73,7 +67,4 @@
     void cleanup();
 
-    /** Handles translation for Desktop pane. */
-    void retranslateDesktopPane();
-
     /** Holds the action pool reference. */
     UIActionPool *m_pActionPool;
@@ -81,6 +72,6 @@
     /** Holds the stacked-layout instance. */
     QStackedLayout             *m_pLayout;
-    /** Holds the Desktop pane instance. */
-    UIWelcomePane              *m_pPaneDesktop;
+    /** Holds the Welcome pane instance. */
+    UIWelcomePane              *m_pPaneWelcome;
     /** Holds the Virtual Media Manager instance. */
     UIMediumManagerWidget      *m_pPaneMedia;
Index: trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManagerWidget.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManagerWidget.cpp	(revision 74560)
+++ trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManagerWidget.cpp	(revision 74561)
@@ -337,4 +337,5 @@
                 switch (m_pPaneTools->toolsType())
                 {
+                    case UIToolsType_Welcome: enmType = ToolTypeGlobal_Welcome; break;
                     case UIToolsType_Media:   enmType = ToolTypeGlobal_Media; break;
                     case UIToolsType_Network: enmType = ToolTypeGlobal_Network; break;
@@ -599,4 +600,15 @@
             switch (currentGlobalTool())
             {
+                case ToolTypeGlobal_Welcome:
+                {
+                    m_pToolBar->addAction(actionPool()->action(UIActionIndex_M_Application_S_Preferences));
+                    m_pToolBar->addSeparator();
+                    m_pToolBar->addAction(actionPool()->action(UIActionIndexST_M_File_S_ImportAppliance));
+                    m_pToolBar->addAction(actionPool()->action(UIActionIndexST_M_File_S_ExportAppliance));
+                    m_pToolBar->addSeparator();
+                    m_pToolBar->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_New));
+                    m_pToolBar->addAction(actionPool()->action(UIActionIndexST_M_Machine_S_Add));
+                    break;
+                }
                 case ToolTypeGlobal_Media:
                 {
Index: trunk/src/VBox/Frontends/VirtualBox/src/manager/UIWelcomePane.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/manager/UIWelcomePane.cpp	(revision 74560)
+++ trunk/src/VBox/Frontends/VirtualBox/src/manager/UIWelcomePane.cpp	(revision 74561)
@@ -21,42 +21,22 @@
 
 /* Qt includes: */
-# include <QAction>
-# include <QApplication>
-# include <QEvent>
-# include <QGridLayout>
 # include <QHBoxLayout>
 # include <QLabel>
-# include <QPainter>
-# include <QScrollArea>
-# include <QScrollBar>
-# include <QStackedWidget>
 # include <QStyle>
 # include <QVBoxLayout>
 
 /* GUI includes */
+# include "QIWithRetranslateUI.h"
+# include "UIIconPool.h"
 # include "UIWelcomePane.h"
-# include "VBoxUtils.h"
-
-/* Other VBox includes: */
-# include <iprt/assert.h>
+
+/* Forward declarations: */
+class QEvent;
+class QHBoxLayout;
+class QString;
+class QResizeEvent;
+class QVBoxLayout;
 
 #endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
-
-
-/** QScrollArea extension to wrap a tools pane. */
-class UIScrollAreaTools : public QScrollArea
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs scroll-area passing @a pParent to the base-class. */
-    UIScrollAreaTools(QWidget *pParent = 0);
-
-protected:
-
-    /** Holds the minimum widget size. */
-    virtual QSize minimumSizeHint() const /* override */;
-};
 
 
@@ -74,5 +54,5 @@
 public:
 
-    /** Constructs scroll-area passing @a pParent to the base-class. */
+    /** Constructs wrappable label passing @a pParent to the base-class. */
     UIWrappableLabel(QWidget *pParent = 0);
 
@@ -91,127 +71,4 @@
     virtual QSize sizeHint() const /* override */;
 };
-
-
-/** Our own skinnable implementation of tool widget for UIWelcomePane. */
-class UIWidgetTool : public QWidget
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs tool widget on the basis of passed @a pAction and @a strDescription. */
-    UIWidgetTool(QAction *pAction, const QString &strDescription);
-
-protected:
-
-    /** Handles any Qt @a pEvent. */
-    virtual bool event(QEvent *pEvent) /* override */;
-
-    /** Handles paint @a pEvent. */
-    virtual void paintEvent(QPaintEvent *pEvent) /* override */;
-
-private:
-
-    /** Prepares all. */
-    void prepare();
-
-    /** Updates pixmap. */
-    void updatePixmap();
-
-    /** Holds the action reference. */
-    QAction *m_pAction;
-    /** Holds the widget description. */
-    QString  m_strDescription;
-
-    /** Holds whether the widget is hovered. */
-    bool  m_fHovered;
-
-    /** Holds the main layout instance. */
-    QGridLayout *m_pLayout;
-    /** Holds the icon label instance. */
-    QLabel      *m_pLabelIcon;
-    /** Holds the name label instance. */
-    QLabel      *m_pLabelName;
-    /** Holds the description label instance. */
-    QLabel      *m_pLabelDescription;
-};
-
-
-/** QStackedWidget subclass representing container which have two panes:
-  * 1. Text pane reflecting base information about VirtualBox,
-  * 2. Error pane reflecting information about currently chosen
-  *    inaccessible VM and allowing to operate over it. */
-class UIWelcomePanePrivate : public QStackedWidget
-{
-    Q_OBJECT;
-
-public:
-
-    /** Constructs private desktop pane passing @a pParent to the base-class. */
-    UIWelcomePanePrivate(QWidget *pParent);
-
-    /** Defines a tools pane welcome @a strText. */
-    void setToolsPaneText(const QString &strText);
-    /** Defines a tools pane welcome @a icon. */
-    void setToolsPaneIcon(const QIcon &icon);
-    /** Add a tool element.
-      * @param  pAction         Brings tool action reference.
-      * @param  strDescription  Brings the tool description. */
-    void addToolDescription(QAction *pAction, const QString &strDescription);
-    /** Removes all tool elements. */
-    void removeToolDescriptions();
-
-protected:
-
-    /** Handles any Qt @a pEvent. */
-    virtual bool event(QEvent *pEvent) /* override */;
-
-    /** Handles translation event. */
-    void retranslateUi();
-
-    /** Prepares tools pane. */
-    void prepareToolsPane();
-
-    /** Updates pixmap. */
-    void updatePixmap();
-
-private:
-
-    /** Holds the tools pane scroll-area instance. */
-    UIScrollAreaTools *m_pScrollArea;
-    /** Holds the tools pane instance. */
-    QWidget          *m_pToolsPane;
-    /** Holds the tools pane widget layout instance. */
-    QVBoxLayout      *m_pLayoutWidget;
-    /** Holds the tools pane text label instance. */
-    QLabel           *m_pLabelToolsPaneText;
-    /** Holds the tools pane icon label instance. */
-    QLabel           *m_pLabelToolsPaneIcon;
-
-    /** Holds the tools pane icon instance. */
-    QIcon  m_icon;
-};
-
-
-/*********************************************************************************************************************************
-*   Class UIScrollAreaTools implementation.                                                                                      *
-*********************************************************************************************************************************/
-
-UIScrollAreaTools::UIScrollAreaTools(QWidget *pParent /* = 0 */)
-    : QScrollArea(pParent)
-{
-}
-
-QSize UIScrollAreaTools::minimumSizeHint() const
-{
-    // WORKAROUND:
-    // The idea is simple, hold the minimum size hint to
-    // avoid horizontal scroll-bar, but allow vertical one.
-    return   widget()
-           ? QSize(  widget()->minimumSizeHint().width()
-                   + verticalScrollBar()->height(),
-                   200 /* what about something more dynamical? */)
-           : QScrollArea::minimumSizeHint();
-}
 
 
@@ -266,15 +123,11 @@
 
 /*********************************************************************************************************************************
-*   Class UIWidgetTool implementation.                                                                                           *
+*   Class UIWelcomePane implementation.                                                                                          *
 *********************************************************************************************************************************/
 
-UIWidgetTool::UIWidgetTool(QAction *pAction, const QString &strDescription)
-    : m_pAction(pAction)
-    , m_strDescription(strDescription)
-    , m_fHovered(false)
-    , m_pLayout(0)
+UIWelcomePane::UIWelcomePane(QWidget *pParent /* = 0 */)
+    : QIWithRetranslateUI<QWidget>(pParent)
+    , m_pLabelText(0)
     , m_pLabelIcon(0)
-    , m_pLabelName(0)
-    , m_pLabelDescription(0)
 {
     /* Prepare: */
@@ -282,290 +135,7 @@
 }
 
-bool UIWidgetTool::event(QEvent *pEvent)
+bool UIWelcomePane::event(QEvent *pEvent)
 {
     /* Handle known event types: */
-    switch (pEvent->type())
-    {
-        case QEvent::Show:
-        case QEvent::ScreenChangeInternal:
-        {
-            /* Update pixmap: */
-            updatePixmap();
-            break;
-        }
-
-        /* Update the hovered state on/off: */
-        case QEvent::Enter:
-        {
-            m_fHovered = true;
-            update();
-            break;
-        }
-        case QEvent::Leave:
-        {
-            m_fHovered = false;
-            update();
-            break;
-        }
-
-        /* Notify listeners about the item was clicked: */
-        case QEvent::MouseButtonRelease:
-        {
-            m_pAction->trigger();
-            break;
-        }
-
-        default:
-            break;
-    }
-    /* Call to base-class: */
-    return QWidget::event(pEvent);
-}
-
-void UIWidgetTool::paintEvent(QPaintEvent * /* pEvent */)
-{
-    /* Prepare painter: */
-    QPainter painter(this);
-
-    /* Prepare palette colors: */
-    const QPalette pal = palette();
-#ifdef VBOX_WS_MAC
-    const QColor color0 = pal.color(QPalette::Base);
-    const QColor color11 = pal.color(QPalette::Highlight).lighter(120);
-    const QColor color12 = pal.color(QPalette::Highlight);
-#else /* !VBOX_WS_MAC */
-    const QColor color0 = pal.color(QPalette::Base);
-    const QColor color11 = pal.color(QPalette::Highlight).lighter(150);
-    const QColor color12 = pal.color(QPalette::Highlight);
-#endif /* !VBOX_WS_MAC */
-    QColor color2 = pal.color(QPalette::Window).lighter(110);
-    color2.setAlpha(0);
-    QColor color3 = pal.color(QPalette::Window).darker(200);
-
-    /* Invent pixel metric: */
-    const int iMetric = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) / 4;
-    const int iIconMetric = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) * 1.375;
-    const int iIconMargin = iIconMetric / 2;
-
-    /* Background gradient: */
-    QLinearGradient grad(QPointF(width(), 0), QPointF(width() - (2 * iIconMargin + iIconMetric), 0));
-    {
-        grad.setColorAt(0, color11);
-        grad.setColorAt(0.95, color12);
-        grad.setColorAt(1, color2);
-    }
-
-    /* Top-left corner: */
-    QRadialGradient grad1(QPointF(iMetric, iMetric), iMetric);
-    {
-        grad1.setColorAt(0, color3);
-        grad1.setColorAt(1, color2);
-    }
-    /* Top-right corner: */
-    QRadialGradient grad2(QPointF(width() - iMetric, iMetric), iMetric);
-    {
-        grad2.setColorAt(0, color3);
-        grad2.setColorAt(1, color2);
-    }
-    /* Bottom-left corner: */
-    QRadialGradient grad3(QPointF(iMetric, height() - iMetric), iMetric);
-    {
-        grad3.setColorAt(0, color3);
-        grad3.setColorAt(1, color2);
-    }
-    /* Botom-right corner: */
-    QRadialGradient grad4(QPointF(width() - iMetric, height() - iMetric), iMetric);
-    {
-        grad4.setColorAt(0, color3);
-        grad4.setColorAt(1, color2);
-    }
-
-    /* Top line: */
-    QLinearGradient grad5(QPointF(iMetric, 0), QPointF(iMetric, iMetric));
-    {
-        grad5.setColorAt(0, color2);
-        grad5.setColorAt(1, color3);
-    }
-    /* Bottom line: */
-    QLinearGradient grad6(QPointF(iMetric, height()), QPointF(iMetric, height() - iMetric));
-    {
-        grad6.setColorAt(0, color2);
-        grad6.setColorAt(1, color3);
-    }
-    /* Left line: */
-    QLinearGradient grad7(QPointF(0, height() - iMetric), QPointF(iMetric, height() - iMetric));
-    {
-        grad7.setColorAt(0, color2);
-        grad7.setColorAt(1, color3);
-    }
-    /* Right line: */
-    QLinearGradient grad8(QPointF(width(), height() - iMetric), QPointF(width() - iMetric, height() - iMetric));
-    {
-        grad8.setColorAt(0, color2);
-        grad8.setColorAt(1, color3);
-    }
-
-    /* Paint hovered item cursor: */
-    if (m_fHovered)
-    {
-        painter.fillRect(QRect(iMetric, iMetric, width() - iMetric * 2, height() - iMetric * 2), color0);
-        painter.fillRect(QRect(width() - (height() - iMetric), iMetric, height() - iMetric * 2, height() - iMetric * 2), grad);
-    }
-
-    /* Paint shape/shadow: */
-    painter.fillRect(QRect(0,                 0,                  iMetric,               iMetric),                grad1);
-    painter.fillRect(QRect(width() - iMetric, 0,                  iMetric,               iMetric),                grad2);
-    painter.fillRect(QRect(0,                 height() - iMetric, iMetric,               iMetric),                grad3);
-    painter.fillRect(QRect(width() - iMetric, height() - iMetric, iMetric,               iMetric),                grad4);
-    painter.fillRect(QRect(iMetric,           0,                  width() - iMetric * 2, iMetric),                grad5);
-    painter.fillRect(QRect(iMetric,           height() - iMetric, width() - iMetric * 2, iMetric),                grad6);
-    painter.fillRect(QRect(0,                 iMetric,            iMetric,               height() - iMetric * 2), grad7);
-    painter.fillRect(QRect(width() - iMetric, iMetric,            iMetric,               height() - iMetric * 2), grad8);
-}
-
-void UIWidgetTool::prepare()
-{
-    /* Configure self: */
-    setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
-
-    /* Create main layout: */
-    m_pLayout = new QGridLayout(this);
-    AssertPtrReturnVoid(m_pLayout);
-    {
-        /* Invent pixel metric: */
-        const int iMetric = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) * 1.375;
-        const int iMargin = iMetric / 2;
-        const int iVerticalSpacing = iMargin / 2;
-        const int iHorizontalSpacing = iMargin * 2;
-
-        /* Configure layout: */
-        m_pLayout->setContentsMargins(iMargin + iVerticalSpacing, iMargin, iMargin, iMargin);
-        m_pLayout->setVerticalSpacing(iVerticalSpacing);
-        m_pLayout->setHorizontalSpacing(iHorizontalSpacing);
-
-        /* Create name label: */
-        m_pLabelName = new QLabel;
-        AssertPtrReturnVoid(m_pLabelName);
-        {
-            /* Configure label: */
-            QFont fontLabel = m_pLabelName->font();
-            fontLabel.setBold(true);
-            m_pLabelName->setFont(fontLabel);
-            m_pLabelName->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
-            m_pLabelName->setText(QString("%1     ").arg(m_pAction->text().remove('&')));
-
-            /* Add into layout: */
-            m_pLayout->addWidget(m_pLabelName, 0, 0);
-        }
-
-        /* Create description label: */
-        m_pLabelDescription = new UIWrappableLabel;
-        AssertPtrReturnVoid(m_pLabelDescription);
-        {
-            /* Configure label: */
-            m_pLabelDescription->setAttribute(Qt::WA_TransparentForMouseEvents);
-            m_pLabelDescription->setWordWrap(true);
-            m_pLabelDescription->setMinimumWidth(315);
-            m_pLabelDescription->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
-            m_pLabelDescription->setText(m_strDescription);
-
-            /* Add into layout: */
-            m_pLayout->addWidget(m_pLabelDescription, 1, 0);
-        }
-
-        /* Create icon label: */
-        m_pLabelIcon = new QLabel;
-        AssertPtrReturnVoid(m_pLabelIcon);
-        {
-            /* Configure label: */
-            m_pLabelIcon->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
-
-            /* Add into layout: */
-            m_pLayout->addWidget(m_pLabelIcon, 0, 1, 2, 1);
-            m_pLayout->setAlignment(m_pLabelIcon, Qt::AlignCenter);
-        }
-    }
-
-    /* Update pixmap: */
-    updatePixmap();
-}
-
-void UIWidgetTool::updatePixmap()
-{
-    const int iMetric = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize) * 1.375;
-    m_pLabelIcon->setPixmap(m_pAction->icon().pixmap(window()->windowHandle(), QSize(iMetric, iMetric)));
-}
-
-
-/*********************************************************************************************************************************
-*   Class UIWelcomePanePrivate implementation.                                                                                   *
-*********************************************************************************************************************************/
-
-UIWelcomePanePrivate::UIWelcomePanePrivate(QWidget *pParent)
-    : QStackedWidget(pParent)
-    , m_pScrollArea(0), m_pToolsPane(0), m_pLayoutWidget(0), m_pLabelToolsPaneText(0), m_pLabelToolsPaneIcon(0)
-{
-}
-
-void UIWelcomePanePrivate::setToolsPaneText(const QString &strText)
-{
-    /* Prepare tools pane if necessary: */
-    prepareToolsPane();
-
-    /* Assign corresponding text: */
-    m_pLabelToolsPaneText->setText(strText);
-
-    /* Raise corresponding widget: */
-    setCurrentWidget(m_pScrollArea);
-}
-
-void UIWelcomePanePrivate::setToolsPaneIcon(const QIcon &icon)
-{
-    /* Prepare tools pane if necessary: */
-    prepareToolsPane();
-
-    /* Save icon: */
-    m_icon = icon;
-    /* Update pixmap: */
-    updatePixmap();
-
-    /* Raise corresponding widget: */
-    setCurrentWidget(m_pScrollArea);
-}
-
-void UIWelcomePanePrivate::addToolDescription(QAction *pAction, const QString &strDescription)
-{
-    /* Prepare tools pane if necessary: */
-    prepareToolsPane();
-
-    /* Add tool widget on the basis of passed description: */
-    UIWidgetTool *pWidget = new UIWidgetTool(pAction, strDescription);
-    AssertPtrReturnVoid(pWidget);
-    {
-        /* Add into layout: */
-        m_pLayoutWidget->addWidget(pWidget);
-    }
-
-    /* Raise corresponding widget: */
-    setCurrentWidget(m_pScrollArea);
-}
-
-void UIWelcomePanePrivate::removeToolDescriptions()
-{
-    /* Clear the layout: */
-    QLayoutItem *pChild = 0;
-    while ((pChild = m_pLayoutWidget->takeAt(0)) != 0)
-    {
-        /* Delete widget wrapped by the item first: */
-        if (pChild->widget())
-            delete pChild->widget();
-        /* Then the item itself: */
-        delete pChild;
-    }
-}
-
-bool UIWelcomePanePrivate::event(QEvent *pEvent)
-{
-    /* Handle know event types: */
     switch (pEvent->type())
     {
@@ -582,135 +152,89 @@
 
     /* Call to base-class: */
-    return QStackedWidget::event(pEvent);
-}
-
-void UIWelcomePanePrivate::prepareToolsPane()
-{
-    /* Do nothing if already exists: */
-    if (m_pScrollArea)
-        return;
-
-    /* Create scroll-area: */
-    m_pScrollArea = new UIScrollAreaTools;
-    AssertPtrReturnVoid(m_pScrollArea);
+    return QIWithRetranslateUI<QWidget>::event(pEvent);
+}
+
+void UIWelcomePane::retranslateUi()
+{
+    /* Translate welcome text: */
+    m_pLabelText->setText(tr("<h3>Welcome to VirtualBox!</h3>"
+                             "<p>The left part of application window contains global tools and "
+                             "lists all virtual machines and virtual machine groups on your computer. "
+                             "You can import, add and create new VMs using corresponding toolbar buttons. "
+                             "You can popup a tools of currently selected element using corresponding element button.</p>"
+                             "<p>You can press the <b>%1</b> key to get instant help, or visit "
+                             "<a href=https://www.virtualbox.org>www.virtualbox.org</a> "
+                             "for more information and latest news.</p>")
+                             .arg(QKeySequence(QKeySequence::HelpContents).toString(QKeySequence::NativeText)));
+}
+
+void UIWelcomePane::prepare()
+{
+    /* Prepare default welcome icon: */
+    m_icon = UIIconPool::iconSet(":/tools_banner_global_200px.png");
+
+    /* Create main layout: */
+    QVBoxLayout *pMainLayout = new QVBoxLayout(this);
+    if (pMainLayout)
     {
-        /* Configure scroll-area: */
-        m_pScrollArea->setFrameShape(QFrame::NoFrame);
-        m_pScrollArea->setWidgetResizable(true);
-
-        /* Create tool pane: */
-        m_pToolsPane = new QWidget;
-        AssertPtrReturnVoid(m_pToolsPane);
+        /* Create welcome layout: */
+        QHBoxLayout *pLayoutWelcome = new QHBoxLayout;
+        if (pLayoutWelcome)
         {
-            /* Create main layout: */
-            QVBoxLayout *pMainLayout = new QVBoxLayout(m_pToolsPane);
-            AssertPtrReturnVoid(pMainLayout);
+            /* Configure layout: */
+            const int iL = qApp->style()->pixelMetric(QStyle::PM_LayoutLeftMargin) / 2;
+            pLayoutWelcome->setContentsMargins(iL, 0, 0, 0);
+
+            /* Create welcome text label: */
+            m_pLabelText = new UIWrappableLabel;
+            if (m_pLabelText)
             {
-                /* Create welcome layout: */
-                QHBoxLayout *pLayoutWelcome = new QHBoxLayout;
-                AssertPtrReturnVoid(pLayoutWelcome);
-                {
-                    /* Configure layout: */
-                    const int iL = qApp->style()->pixelMetric(QStyle::PM_LayoutLeftMargin) / 2;
-                    pLayoutWelcome->setContentsMargins(iL, 0, 0, 0);
-
-                    /* Create welcome text label: */
-                    m_pLabelToolsPaneText = new UIWrappableLabel;
-                    AssertPtrReturnVoid(m_pLabelToolsPaneText);
-                    {
-                        /* Configure label: */
-                        m_pLabelToolsPaneText->setWordWrap(true);
-                        m_pLabelToolsPaneText->setMinimumWidth(160);
-                        m_pLabelToolsPaneText->setAlignment(Qt::AlignLeading | Qt::AlignTop);
-                        m_pLabelToolsPaneText->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
-
-                        /* Add into layout: */
-                        pLayoutWelcome->addWidget(m_pLabelToolsPaneText);
-                    }
-
-                    /* Create welcome picture label: */
-                    m_pLabelToolsPaneIcon = new QLabel;
-                    AssertPtrReturnVoid(m_pLabelToolsPaneIcon);
-                    {
-                        /* Configure label: */
-                        m_pLabelToolsPaneIcon->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
-
-                        /* Add into layout: */
-                        pLayoutWelcome->addWidget(m_pLabelToolsPaneIcon);
-                        pLayoutWelcome->setAlignment(m_pLabelToolsPaneIcon, Qt::AlignHCenter | Qt::AlignTop);
-                    }
-
-                    /* Add into layout: */
-                    pMainLayout->addLayout(pLayoutWelcome);
-                }
-
-                /* Create widget layout: */
-                m_pLayoutWidget = new QVBoxLayout;
-                AssertPtrReturnVoid(m_pLayoutWidget);
-                {
-                    /* Add into layout: */
-                    pMainLayout->addLayout(m_pLayoutWidget);
-                }
-
-                /* Add stretch: */
-                pMainLayout->addStretch();
+                /* Configure label: */
+                m_pLabelText->setWordWrap(true);
+                m_pLabelText->setMinimumWidth(160); /// @todo make dynamic
+                m_pLabelText->setAlignment(Qt::AlignLeading | Qt::AlignTop);
+                m_pLabelText->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
+
+                /* Add into layout: */
+                pLayoutWelcome->addWidget(m_pLabelText);
             }
 
-            /* Add into the scroll-area: */
-            m_pScrollArea->setWidget(m_pToolsPane);
+            /* Create welcome picture label: */
+            m_pLabelIcon = new QLabel;
+            if (m_pLabelIcon)
+            {
+                /* Configure label: */
+                m_pLabelIcon->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+
+                /* Add into layout: */
+                pLayoutWelcome->addWidget(m_pLabelIcon);
+                pLayoutWelcome->setAlignment(m_pLabelIcon, Qt::AlignHCenter | Qt::AlignTop);
+            }
+
+            /* Add into layout: */
+            pMainLayout->addLayout(pLayoutWelcome);
         }
 
-        /* Add into the stack: */
-        addWidget(m_pScrollArea);
+        /* Add stretch: */
+        pMainLayout->addStretch();
     }
-}
-
-void UIWelcomePanePrivate::updatePixmap()
+
+    /* Translate finally: */
+    retranslateUi();
+    /* Update pixmap: */
+    updatePixmap();
+}
+
+void UIWelcomePane::updatePixmap()
 {
     /* Assign corresponding icon: */
-    const QList<QSize> aSizes = m_icon.availableSizes();
-    const QSize firstOne = aSizes.isEmpty() ? QSize(200, 200) : aSizes.first();
-    const double dRatio = QApplication::style()->pixelMetric(QStyle::PM_LargeIconSize) / 32;
     if (!m_icon.isNull())
-        m_pLabelToolsPaneIcon->setPixmap(m_icon.pixmap(window()->windowHandle(), QSize(firstOne.width() * dRatio, firstOne.height() * dRatio)));
-}
-
-
-/*********************************************************************************************************************************
-*   Class UIWelcomePane implementation.                                                                                          *
-*********************************************************************************************************************************/
-
-UIWelcomePane::UIWelcomePane(QWidget *pParent /* = 0 */)
-    : QWidget(pParent)
-{
-    /* Prepare main layout: */
-    QVBoxLayout *pMainLayout = new QVBoxLayout(this);
-    pMainLayout->setContentsMargins(0, 0, 0, 0);
-
-    /* Create desktop pane: */
-    m_pDesktopPrivate = new UIWelcomePanePrivate(this);
-
-    /* Add it to the layout: */
-    pMainLayout->addWidget(m_pDesktopPrivate);
-}
-
-void UIWelcomePane::setToolsPaneText(const QString &strText)
-{
-    m_pDesktopPrivate->setToolsPaneText(strText);
-}
-
-void UIWelcomePane::setToolsPaneIcon(const QIcon &icon)
-{
-    m_pDesktopPrivate->setToolsPaneIcon(icon);
-}
-
-void UIWelcomePane::addToolDescription(QAction *pAction, const QString &strDescription)
-{
-    m_pDesktopPrivate->addToolDescription(pAction, strDescription);
-}
-
-void UIWelcomePane::removeToolDescriptions()
-{
-    m_pDesktopPrivate->removeToolDescriptions();
+    {
+        const QList<QSize> sizes = m_icon.availableSizes();
+        const QSize firstOne = sizes.isEmpty() ? QSize(200, 200) : sizes.first();
+        m_pLabelIcon->setPixmap(m_icon.pixmap(window()->windowHandle(),
+                                                       QSize(firstOne.width(),
+                                                             firstOne.height())));
+    }
 }
 
Index: trunk/src/VBox/Frontends/VirtualBox/src/manager/UIWelcomePane.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/manager/UIWelcomePane.h	(revision 74560)
+++ trunk/src/VBox/Frontends/VirtualBox/src/manager/UIWelcomePane.h	(revision 74561)
@@ -20,14 +20,15 @@
 
 /* Qt includes: */
+#include <QIcon>
 #include <QWidget>
 
+/* GUI includes: */
+#include "QIWithRetranslateUI.h"
+
 /* Forward declarations: */
-class QIcon;
-class QString;
-class UIWelcomePanePrivate;
-
+class QLabel;
 
 /** QWidget subclass holding Welcome information about VirtualBox. */
-class UIWelcomePane : public QWidget
+class UIWelcomePane : public QIWithRetranslateUI<QWidget>
 {
     Q_OBJECT;
@@ -38,19 +39,27 @@
     UIWelcomePane(QWidget *pParent = 0);
 
-    /** Defines a tools pane welcome @a strText. */
-    void setToolsPaneText(const QString &strText);
-    /** Defines a tools pane welcome @a icon. */
-    void setToolsPaneIcon(const QIcon &icon);
-    /** Add a tool element.
-      * @param  pAction         Brings tool action reference.
-      * @param  strDescription  Brings the tool description. */
-    void addToolDescription(QAction *pAction, const QString &strDescription);
-    /** Removes all tool elements. */
-    void removeToolDescriptions();
+protected:
+
+    /** Handles any Qt @a pEvent. */
+    virtual bool event(QEvent *pEvent) /* override */;
+
+    /** Handles translation event. */
+    virtual void retranslateUi() /* override */;
 
 private:
 
-    /** Holds the private Welcome pane instance. */
-    UIWelcomePanePrivate *m_pDesktopPrivate;
+    /** Prepares all. */
+    void prepare();
+
+    /** Updates pixmap. */
+    void updatePixmap();
+
+    /** Holds the icon instance. */
+    QIcon  m_icon;
+
+    /** Holds the text label instance. */
+    QLabel *m_pLabelText;
+    /** Holds the icon label instance. */
+    QLabel *m_pLabelIcon;
 };
 
Index: trunk/src/VBox/Frontends/VirtualBox/src/manager/tools/UIToolsModel.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/manager/tools/UIToolsModel.cpp	(revision 74560)
+++ trunk/src/VBox/Frontends/VirtualBox/src/manager/tools/UIToolsModel.cpp	(revision 74561)
@@ -410,4 +410,5 @@
     classes << UIToolsClass_Global;
     classes << UIToolsClass_Global;
+    classes << UIToolsClass_Global;
     classes << UIToolsClass_Machine;
     classes << UIToolsClass_Machine;
@@ -416,4 +417,5 @@
     /* Prepare types: */
     QList<UIToolsType> types;
+    types << UIToolsType_Welcome;
     types << UIToolsType_Media;
     types << UIToolsType_Network;
@@ -424,4 +426,5 @@
     /* Prepare icons: */
     QList<QIcon> icons;
+    icons << UIIconPool::iconSet(":/log_viewer_save_22px.png"); /// @toso use proper one
     icons << UIIconPool::iconSet(":/media_manager_22px.png");
     icons << UIIconPool::iconSet(":/host_iface_manager_22px.png");
@@ -432,4 +435,5 @@
     /* Prepare names: */
     QList<QString> names;
+    names << tr("Welcome");
     names << tr("Media");
     names << tr("Network");
@@ -475,5 +479,5 @@
     UIToolsType enmTypeGlobal = typeFromString(values.value(0));
     if (!isTypeOfClass(enmTypeGlobal, UIToolsClass_Global))
-        enmTypeGlobal = UIToolsType_Media;
+        enmTypeGlobal = UIToolsType_Welcome;
     foreach (UIToolsItem *pItem, items())
         if (pItem->itemType() == enmTypeGlobal)
@@ -538,4 +542,5 @@
     QMap<UIToolsType, QString> values;
     /* Global classes: */
+    values[UIToolsType_Welcome]   = "Welcome";
     values[UIToolsType_Media]     = "Media";
     values[UIToolsType_Network]   = "Network";
@@ -553,4 +558,5 @@
     QMap<QString, UIToolsType> values;
     /* Global classes: */
+    values["Welcome"]   = UIToolsType_Welcome;
     values["Media"]     = UIToolsType_Media;
     values["Network"]   = UIToolsType_Network;
@@ -572,4 +578,5 @@
             switch (enmType)
             {
+                case UIToolsType_Welcome:
                 case UIToolsType_Media:
                 case UIToolsType_Network:
