Index: /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 76943)
+++ /trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk	(revision 76944)
@@ -832,6 +832,7 @@
 	src/medium/viso/UIVisoContentBrowser.h \
 	src/medium/viso/UIVisoCreator.h \
-	src/medium/viso/UIVisoConfigurationDialog.h \
-	src/medium/viso/UIVisoCreatorOptionsDialog.h \
+	src/medium/viso/UIVisoCreatorPanel.h \
+	src/medium/viso/UIVisoConfigurationPanel.h \
+	src/medium/viso/UIVisoCreatorOptionsPanel.h \
 	src/medium/viso/UIVisoHostBrowser.h \
 	src/settings/UISettingsDialog.h \
@@ -1297,6 +1298,7 @@
 	src/medium/viso/UIVisoContentBrowser.cpp \
 	src/medium/viso/UIVisoCreator.cpp \
-	src/medium/viso/UIVisoConfigurationDialog.cpp \
-	src/medium/viso/UIVisoCreatorOptionsDialog.cpp \
+	src/medium/viso/UIVisoCreatorPanel.cpp \
+	src/medium/viso/UIVisoConfigurationPanel.cpp \
+	src/medium/viso/UIVisoCreatorOptionsPanel.cpp \
 	src/medium/viso/UIVisoHostBrowser.cpp \
 	src/objects/UIRichTextString.cpp \
Index: unk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoConfigurationDialog.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoConfigurationDialog.cpp	(revision 76943)
+++ 	(revision )
@@ -1,122 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIVisoConfigurationDialog class implementation.
- */
-
-/*
- * Copyright (C) 2006-2019 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 <QCheckBox>
-#include <QGridLayout>
-#include <QTextEdit>
-#include <QPushButton>
-#include <QSplitter>
-#include <QStyle>
-#include <QTextBlock>
-
-/* GUI includes: */
-#include "QIDialogButtonBox.h"
-#include "QILabel.h"
-#include "QILineEdit.h"
-#include "UIVisoConfigurationDialog.h"
-#include "UIVisoCreator.h"
-
-UIVisoConfigurationDialog::UIVisoConfigurationDialog(const VisoOptions &visoOptions,
-                                                     QWidget *pParent /* =0 */)
-    : QIDialog(pParent)
-    , m_pMainLayout(0)
-    , m_pButtonBox(0)
-    , m_pVisoNameLineEdit(0)
-    , m_pCustomOptionsTextEdit(0)
-    , m_visoOptions(visoOptions)
-{
-    prepareObjects();
-    prepareConnections();
-}
-
-UIVisoConfigurationDialog::~UIVisoConfigurationDialog()
-{
-}
-
-const VisoOptions &UIVisoConfigurationDialog::visoOptions() const
-{
-    return m_visoOptions;
-}
-
-void UIVisoConfigurationDialog::accept()
-{
-    if (m_pVisoNameLineEdit)
-        m_visoOptions.m_strVisoName = m_pVisoNameLineEdit->text();
-
-    if (m_pCustomOptionsTextEdit)
-    {
-        QTextDocument *pDocument = m_pCustomOptionsTextEdit->document();
-        if (pDocument)
-        {
-            for(QTextBlock block = pDocument->begin(); block != pDocument->end()/*.isValid()*/; block = block.next())
-                    m_visoOptions.m_customOptions << block.text();
-        }
-    }
-
-    QIDialog::accept();
-}
-
-void UIVisoConfigurationDialog::prepareObjects()
-{
-    m_pMainLayout = new QGridLayout;
-
-    if (!m_pMainLayout)
-        return;
-
-    /* Name edit and and label: */
-    QILabel *pVisoNameLabel = new QILabel(UIVisoCreator::tr("VISO Name:"));
-    m_pVisoNameLineEdit = new QILineEdit;
-    if (pVisoNameLabel && m_pVisoNameLineEdit)
-    {
-        m_pVisoNameLineEdit->setText(m_visoOptions.m_strVisoName);
-        pVisoNameLabel->setBuddy(m_pVisoNameLineEdit);
-        m_pMainLayout->addWidget(pVisoNameLabel, 0, 0, 1, 1);
-        m_pMainLayout->addWidget(m_pVisoNameLineEdit, 0, 1, 1, 1);
-    }
-
-    /* Cutom Viso options stuff: */
-    QILabel *pCustomOptionsLabel = new QILabel(UIVisoCreator::tr("Custom VISO options:"));
-    m_pCustomOptionsTextEdit = new QTextEdit;
-    if (pCustomOptionsLabel && m_pCustomOptionsTextEdit)
-    {
-        m_pCustomOptionsTextEdit->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
-        pCustomOptionsLabel->setBuddy(m_pCustomOptionsTextEdit);
-        m_pMainLayout->addWidget(pCustomOptionsLabel, 1, 0, 1, 1, Qt::AlignTop);
-        m_pMainLayout->addWidget(m_pCustomOptionsTextEdit, 1, 1, 1, 1);
-        foreach (const QString &strLine, m_visoOptions.m_customOptions)
-            m_pCustomOptionsTextEdit->append(strLine);
-    }
-
-    m_pButtonBox = new QIDialogButtonBox;
-    if (m_pButtonBox)
-    {
-        m_pButtonBox->setStandardButtons(QDialogButtonBox::Cancel | QDialogButtonBox::Ok);
-        m_pButtonBox->button(QDialogButtonBox::Cancel)->setShortcut(Qt::Key_Escape);
-        m_pMainLayout->addWidget(m_pButtonBox, 2, 0, 1, 2);
-    }
-    setLayout(m_pMainLayout);
-}
-
-void UIVisoConfigurationDialog::prepareConnections()
-{
-    if (m_pButtonBox)
-    {
-        connect(m_pButtonBox, &QIDialogButtonBox::rejected, this, &UIVisoConfigurationDialog::close);
-        connect(m_pButtonBox, &QIDialogButtonBox::accepted, this, &UIVisoConfigurationDialog::accept);
-    }
-}
Index: unk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoConfigurationDialog.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoConfigurationDialog.h	(revision 76943)
+++ 	(revision )
@@ -1,65 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIVisoConfigurationDialog class declaration.
- */
-
-/*
- * Copyright (C) 2006-2019 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 FEQT_INCLUDED_SRC_medium_viso_UIVisoConfigurationDialog_h
-#define FEQT_INCLUDED_SRC_medium_viso_UIVisoConfigurationDialog_h
-#ifndef RT_WITHOUT_PRAGMA_ONCE
-# pragma once
-#endif
-
-/* GUI includes: */
-#include "QIDialog.h"
-#include "QIWithRetranslateUI.h"
-#include "UIVisoCreatorDefs.h"
-
-/* Forward declarations: */
-class QGridLayout;
-class QTextEdit;
-class QIDialogButtonBox;
-class QILineEdit;
-class QITabWidget;
-
-class UIVisoConfigurationDialog : public QIDialog
-{
-    Q_OBJECT;
-
-public:
-    UIVisoConfigurationDialog(const VisoOptions &visoOptions,
-                              QWidget *pParent = 0);
-    ~UIVisoConfigurationDialog();
-    const VisoOptions &visoOptions() const;
-
-public slots:
-
-    void accept() /* override */;
-
-
-private:
-
-    void prepareObjects();
-    void prepareConnections();
-
-    QGridLayout          *m_pMainLayout;
-    QIDialogButtonBox    *m_pButtonBox;
-    QILineEdit           *m_pVisoNameLineEdit;
-    QTextEdit           *m_pCustomOptionsTextEdit;
-    VisoOptions          m_visoOptions;
-
-    friend class UIVisoCreator;
-};
-
-#endif /* !FEQT_INCLUDED_SRC_medium_viso_UIVisoConfigurationDialog_h */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoConfigurationPanel.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoConfigurationPanel.cpp	(revision 76944)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoConfigurationPanel.cpp	(revision 76944)
@@ -0,0 +1,189 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIVisoConfigurationPanel class implementation.
+ */
+
+/*
+ * Copyright (C) 2006-2019 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 <QCheckBox>
+#include <QGridLayout>
+#include <QTextEdit>
+#include <QPushButton>
+#include <QSplitter>
+#include <QStyle>
+#include <QTextBlock>
+
+/* GUI includes: */
+#include <QComboBox>
+#include "QIDialogButtonBox.h"
+#include "UIIconPool.h"
+#include "QILabel.h"
+#include "QILineEdit.h"
+#include "QIToolButton.h"
+#include "UIVisoConfigurationPanel.h"
+
+UIVisoConfigurationPanel::UIVisoConfigurationPanel(QWidget *pParent /* =0 */)
+    : UIVisoCreatorPanel(pParent)
+    , m_pVisoNameLabel(0)
+    , m_pCustomOptionsLabel(0)
+    , m_pVisoNameLineEdit(0)
+    , m_pCustomOptionsComboBox(0)
+    , m_pDeleteButton(0)
+{
+    prepareObjects();
+    prepareConnections();
+}
+
+UIVisoConfigurationPanel::~UIVisoConfigurationPanel()
+{
+}
+
+QString UIVisoConfigurationPanel::panelName() const
+{
+    return "ConfigurationPanel";
+}
+
+void UIVisoConfigurationPanel::setVisoName(const QString& strVisoName)
+{
+    if (m_pVisoNameLineEdit)
+        m_pVisoNameLineEdit->setText(strVisoName);
+}
+
+void UIVisoConfigurationPanel::setVisoCustomOptions(const QStringList& visoCustomOptions)
+{
+    if (!m_pCustomOptionsComboBox)
+        return;
+    m_pCustomOptionsComboBox->clear();
+    foreach (const QString &strOption, visoCustomOptions)
+    {
+        m_pCustomOptionsComboBox->addItem(strOption);
+    }
+}
+
+void UIVisoConfigurationPanel::prepareObjects()
+{
+    if (!mainLayout())
+        return;
+
+    /* Name edit and and label: */
+    m_pVisoNameLabel = new QILabel(QApplication::translate("UIVisoCreator", "VISO Name:"));
+    m_pVisoNameLineEdit = new QILineEdit;
+    if (m_pVisoNameLabel && m_pVisoNameLineEdit)
+    {
+        m_pVisoNameLabel->setBuddy(m_pVisoNameLineEdit);
+        mainLayout()->addWidget(m_pVisoNameLabel, 0, Qt::AlignLeft);
+        mainLayout()->addWidget(m_pVisoNameLineEdit, 0, Qt::AlignLeft);
+    }
+
+    addVerticalSeparator();
+
+
+    /* Cutom Viso options stuff: */
+    m_pCustomOptionsLabel = new QILabel(QApplication::translate("UIVisoCreator", "Custom VISO options:"));
+    m_pCustomOptionsComboBox = new QComboBox;
+    m_pDeleteButton = new QIToolButton;
+
+    if (m_pCustomOptionsLabel && m_pCustomOptionsComboBox && m_pDeleteButton)
+    {
+        m_pDeleteButton->setIcon(UIIconPool::iconSet(":/log_viewer_delete_current_bookmark_16px.png"));
+
+        m_pCustomOptionsComboBox->setEditable(true);
+        m_pCustomOptionsLabel->setBuddy(m_pCustomOptionsComboBox);
+
+        mainLayout()->addWidget(m_pCustomOptionsLabel, 0, Qt::AlignLeft);
+        mainLayout()->addWidget(m_pCustomOptionsComboBox, Qt::AlignLeft);
+        mainLayout()->addWidget(m_pDeleteButton, 0, Qt::AlignLeft);
+    }
+    retranslateUi();
+}
+
+void UIVisoConfigurationPanel::prepareConnections()
+{
+    if (m_pVisoNameLineEdit)
+        connect(m_pVisoNameLineEdit, &QILineEdit::editingFinished, this, &UIVisoConfigurationPanel::sltHandleVisoNameChanged);
+    if (m_pDeleteButton)
+        connect(m_pDeleteButton, &QIToolButton::clicked, this, &UIVisoConfigurationPanel::sltHandleDeleteCurrentCustomOption);
+}
+
+bool UIVisoConfigurationPanel::eventFilter(QObject *pObject, QEvent *pEvent)
+{
+    /* Depending on event-type: */
+    switch (pEvent->type())
+    {
+        /* Process key press only: */
+    case QEvent::KeyPress:
+        {
+            /* Cast to corresponding key press event: */
+            QKeyEvent *pKeyEvent = static_cast<QKeyEvent*>(pEvent);
+
+             if (pKeyEvent->key() == Qt::Key_Return && m_pCustomOptionsComboBox && m_pCustomOptionsComboBox->hasFocus())
+                 addCustomVisoOption();
+            return true;
+            break;
+        }
+    default:
+        break;
+    }
+    /* Call to base-class: */
+    return UIVisoCreatorPanel::eventFilter(pObject, pEvent);
+}
+
+void UIVisoConfigurationPanel::retranslateUi()
+{
+    if (m_pVisoNameLabel)
+        m_pVisoNameLabel->setText(QApplication::translate("UIVisoCreator", "VISO Name:"));
+    if (m_pCustomOptionsLabel)
+        m_pCustomOptionsLabel->setText(QApplication::translate("UIVisoCreator", "Custom VISO options:"));
+    if (m_pDeleteButton)
+        m_pDeleteButton->setToolTip(QApplication::translate("UIVisoCreator", "Remove current option."));
+}
+
+void UIVisoConfigurationPanel::addCustomVisoOption()
+{
+    if (!m_pCustomOptionsComboBox)
+        return;
+    if (m_pCustomOptionsComboBox->currentText().isEmpty())
+        return;
+
+    emitCustomVisoOptions();
+    m_pCustomOptionsComboBox->clearEditText();
+}
+
+void UIVisoConfigurationPanel::emitCustomVisoOptions()
+{
+    if (!m_pCustomOptionsComboBox)
+        return;
+    QStringList customVisoOptions;
+    for (int i = 0; i < m_pCustomOptionsComboBox->count(); ++i)
+        customVisoOptions << m_pCustomOptionsComboBox->itemText(i);
+
+    if (!customVisoOptions.isEmpty())
+        emit sigCustomVisoOptionsChanged(customVisoOptions);
+}
+
+void UIVisoConfigurationPanel::sltHandleVisoNameChanged()
+{
+    if (m_pVisoNameLineEdit)
+        emit sigVisoNameChanged(m_pVisoNameLineEdit->text());
+}
+
+void UIVisoConfigurationPanel::sltHandleDeleteCurrentCustomOption()
+{
+    if (!m_pCustomOptionsComboBox)
+        return;
+    if (m_pCustomOptionsComboBox->currentText().isEmpty())
+        return;
+    m_pCustomOptionsComboBox->removeItem(m_pCustomOptionsComboBox->currentIndex());
+    emitCustomVisoOptions();
+}
Index: /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoConfigurationPanel.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoConfigurationPanel.h	(revision 76944)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoConfigurationPanel.h	(revision 76944)
@@ -0,0 +1,81 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIVisoConfigurationPanel class declaration.
+ */
+
+/*
+ * Copyright (C) 2006-2019 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 FEQT_INCLUDED_SRC_medium_viso_UIVisoConfigurationPanel_h
+#define FEQT_INCLUDED_SRC_medium_viso_UIVisoConfigurationPanel_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+/* GUI includes: */
+#include "UIVisoCreatorPanel.h"
+#include "UIVisoCreatorDefs.h"
+
+/* Forward declarations: */
+class QGridLayout;
+class QTextEdit;
+class QComboBox;
+class QILabel;
+class QILineEdit;
+class QITabWidget;
+class QIToolButton;
+class UIVisoCreator;
+
+class UIVisoConfigurationPanel : public UIVisoCreatorPanel
+{
+    Q_OBJECT;
+
+public:
+    UIVisoConfigurationPanel(QWidget *pParent = 0);
+    ~UIVisoConfigurationPanel();
+    virtual QString panelName() const /* override */;
+    void setVisoName(const QString& strVisoName);
+    void setVisoCustomOptions(const QStringList& visoCustomOptions);
+
+signals:
+
+    void sigVisoNameChanged(const QString &strVisoName);
+    void sigCustomVisoOptionsChanged(const QStringList &customVisoOptions);
+
+
+protected:
+
+    bool eventFilter(QObject *pObject, QEvent *pEvent) /* override */;
+    void retranslateUi() /* override */;
+
+private slots:
+
+    void sltHandleVisoNameChanged();
+    void sltHandleDeleteCurrentCustomOption();
+
+private:
+
+    void prepareObjects();
+    void prepareConnections();
+    void addCustomVisoOption();
+    void emitCustomVisoOptions();
+
+    QILabel      *m_pVisoNameLabel;
+    QILabel      *m_pCustomOptionsLabel;
+    QILineEdit   *m_pVisoNameLineEdit;
+    QComboBox    *m_pCustomOptionsComboBox;
+    QIToolButton *m_pDeleteButton;
+
+    friend class UIVisoCreator;
+};
+
+#endif /* !FEQT_INCLUDED_SRC_medium_viso_UIVisoConfigurationPanel_h */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreator.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreator.cpp	(revision 76943)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreator.cpp	(revision 76944)
@@ -29,6 +29,6 @@
 #include "UIVisoHostBrowser.h"
 #include "UIVisoCreator.h"
-#include "UIVisoConfigurationDialog.h"
-#include "UIVisoCreatorOptionsDialog.h"
+#include "UIVisoConfigurationPanel.h"
+#include "UIVisoCreatorOptionsPanel.h"
 #include "UIVisoContentBrowser.h"
 
@@ -49,8 +49,11 @@
     , m_pVisoContentBrowserMenu(0)
     , m_strMachineName(strMachineName)
+    , m_pCreatorOptionsPanel(0)
+    , m_pConfigurationPanel(0)
 {
     prepareActions();
     prepareObjects();
     prepareConnections();
+    manageEscapeShortCut();
 }
 
@@ -105,30 +108,80 @@
 }
 
-void UIVisoCreator::sltHandleOptionsAction()
-{
-    UIVisoCreatorOptionsDialog *pDialog = new UIVisoCreatorOptionsDialog(m_browserOptions, this);
-
-    if(!pDialog)
-        return;
-    if (pDialog->execute(true, false))
-    {
-        /** Check if any of the options has been modified: */
-        checkBrowserOptions(pDialog->browserOptions());
-    }
-    delete pDialog;
-}
-
-void UIVisoCreator::sltHandleConfigurationAction()
-{
-    UIVisoConfigurationDialog *pDialog = new UIVisoConfigurationDialog(m_visoOptions, this);
-
-    if(!pDialog)
-        return;
-    if (pDialog->execute(true, false))
-    {
-        /** Check if any of the options has been modified: */
-        checkVisoOptions(pDialog->visoOptions());
-    }
-    delete pDialog;
+// void UIVisoCreator::sltHandleOptionsAction()
+// {
+//     // UIVisoCreatorOptionsDialog *pDialog = new UIVisoCreatorOptionsDialog(this, m_browserOptions, this);
+
+//     // if(!pDialog)
+//     //     return;
+//     // if (pDialog->execute(true, false))
+//     // {
+//     //     /** Check if any of the options has been modified: */
+//     //     checkBrowserOptions(pDialog->browserOptions());
+//     // }
+//     // delete pDialog;
+// }
+
+// void UIVisoCreator::sltHandleConfigurationAction()
+// {
+//     // UIVisoConfigurationDialog *pDialog = new UIVisoConfigurationDialog(m_visoOptions, this);
+
+//     // if(!pDialog)
+//     //     return;
+//     // if (pDialog->execute(true, false))
+//     // {
+//     //     /** Check if any of the options has been modified: */
+//     //     checkVisoOptions(pDialog->visoOptions());
+//     // }
+//     // delete pDialog;
+// }
+
+void UIVisoCreator::sltPanelActionToggled(bool fChecked)
+{
+    QAction *pSenderAction = qobject_cast<QAction*>(sender());
+    if (!pSenderAction)
+        return;
+    UIVisoCreatorPanel* pPanel = 0;
+    /* Look for the sender() within the m_panelActionMap's values: */
+    for (QMap<UIVisoCreatorPanel*, QAction*>::const_iterator iterator = m_panelActionMap.begin();
+        iterator != m_panelActionMap.end(); ++iterator)
+    {
+        if (iterator.value() == pSenderAction)
+            pPanel = iterator.key();
+    }
+    if (!pPanel)
+        return;
+    if (fChecked)
+        showPanel(pPanel);
+    else
+        hidePanel(pPanel);
+}
+
+void UIVisoCreator::sltHandleVisoNameChanged(const QString &strVisoName)
+{
+    if (m_visoOptions.m_strVisoName == strVisoName)
+        return;
+    m_visoOptions.m_strVisoName = strVisoName;
+    if(m_pVisoBrowser)
+        m_pVisoBrowser->setVisoName(m_visoOptions.m_strVisoName);
+}
+
+void UIVisoCreator::sltHandleCustomVisoOptionsChanged(const QStringList &customVisoOptions)
+{
+    if (m_visoOptions.m_customOptions == customVisoOptions)
+        return;
+    m_visoOptions.m_customOptions = customVisoOptions;
+}
+
+void UIVisoCreator::sltHandleShowHiddenObjectsChange(bool fShow)
+{
+    if (m_browserOptions.m_fShowHiddenObjects == fShow)
+        return;
+    m_browserOptions.m_fShowHiddenObjects = fShow;
+    m_pHostBrowser->showHideHiddenObjects(fShow);
+}
+
+void UIVisoCreator::sltHandleHidePanel(UIVisoCreatorPanel *pPanel)
+{
+    hidePanel(pPanel);
 }
 
@@ -144,4 +197,12 @@
     if (!m_pMainLayout || !menuBar())
         return;
+
+    /* Configure layout: */
+    m_pMainLayout->setContentsMargins(1, 1, 1, 1);
+#ifdef VBOX_WS_MAC
+    m_pMainLayout->setSpacing(10);
+#else
+    m_pMainLayout->setSpacing(qApp->style()->pixelMetric(QStyle::PM_LayoutVerticalSpacing) / 2);
+#endif
 
     m_pMainMenu = menuBar()->addMenu(tr("VISO"));
@@ -184,4 +245,5 @@
                 this, &UIVisoCreator::sltHandleAddObjectsToViso);
     }
+
     m_pVisoBrowser = new UIVisoContentBrowser(0 /* parent */, m_pVisoContentBrowserMenu);
     if (m_pVisoBrowser)
@@ -190,4 +252,25 @@
         m_pVisoBrowser->setVisoName(m_visoOptions.m_strVisoName);
     }
+
+    m_pConfigurationPanel = new UIVisoConfigurationPanel(this);
+    if (m_pConfigurationPanel)
+    {
+        m_pVerticalSplitter->addWidget(m_pConfigurationPanel);
+        m_panelActionMap.insert(m_pConfigurationPanel, m_pActionConfiguration);
+        m_pConfigurationPanel->hide();
+        m_pConfigurationPanel->setVisoName(m_visoOptions.m_strVisoName);
+        m_pConfigurationPanel->setVisoCustomOptions(m_visoOptions.m_customOptions);
+        installEventFilter(m_pConfigurationPanel);
+    }
+
+    m_pCreatorOptionsPanel = new UIVisoCreatorOptionsPanel(this);
+    if (m_pCreatorOptionsPanel)
+    {
+        m_pCreatorOptionsPanel->setShowHiddenbjects(m_browserOptions.m_fShowHiddenObjects);
+        m_pMainLayout->addWidget(m_pCreatorOptionsPanel);
+        m_panelActionMap.insert(m_pCreatorOptionsPanel, m_pActionOptions);
+        m_pCreatorOptionsPanel->hide();
+    }
+
     m_pButtonBox = new QIDialogButtonBox;
     if (m_pButtonBox)
@@ -196,4 +279,5 @@
         m_pButtonBox->button(QDialogButtonBox::Cancel)->setShortcut(Qt::Key_Escape);
         m_pMainLayout->addWidget(m_pButtonBox);
+
     }
     retranslateUi();
@@ -207,8 +291,26 @@
         connect(m_pButtonBox, &QIDialogButtonBox::accepted, this, &UIVisoCreator::accept);
     }
+
     if (m_pActionConfiguration)
-        connect(m_pActionConfiguration, &QAction::triggered, this, &UIVisoCreator::sltHandleConfigurationAction);
+        connect(m_pActionConfiguration, &QAction::triggered, this, &UIVisoCreator::sltPanelActionToggled);
     if (m_pActionOptions)
-        connect(m_pActionOptions, &QAction::triggered, this, &UIVisoCreator::sltHandleOptionsAction);
+        connect(m_pActionOptions, &QAction::triggered, this, &UIVisoCreator::sltPanelActionToggled);
+
+    if (m_pConfigurationPanel)
+    {
+        connect(m_pConfigurationPanel, &UIVisoConfigurationPanel::sigVisoNameChanged,
+                this, &UIVisoCreator::sltHandleVisoNameChanged);
+        connect(m_pConfigurationPanel, &UIVisoConfigurationPanel::sigCustomVisoOptionsChanged,
+                this, &UIVisoCreator::sltHandleCustomVisoOptionsChanged);
+        connect(m_pConfigurationPanel, &UIVisoConfigurationPanel::sigHidePanel,
+                this, &UIVisoCreator::sltHandleHidePanel);
+    }
+    if (m_pCreatorOptionsPanel)
+    {
+        connect(m_pCreatorOptionsPanel, &UIVisoCreatorOptionsPanel::sigShowHiddenObjects,
+                this, &UIVisoCreator::sltHandleShowHiddenObjectsChange);
+        connect(m_pCreatorOptionsPanel, &UIVisoCreatorOptionsPanel::sigHidePanel,
+                this, &UIVisoCreator::sltHandleHidePanel);
+    }
 }
 
@@ -218,4 +320,5 @@
     if (m_pActionConfiguration)
     {
+        m_pActionConfiguration->setCheckable(true);
         m_pActionConfiguration->setIcon(UIIconPool::iconSetFull(":/file_manager_options_32px.png",
                                                           ":/%file_manager_options_16px.png",
@@ -227,4 +330,6 @@
     if (m_pActionOptions)
     {
+        m_pActionOptions->setCheckable(true);
+
         m_pActionOptions->setIcon(UIIconPool::iconSetFull(":/file_manager_options_32px.png",
                                                           ":/%file_manager_options_16px.png",
@@ -234,27 +339,54 @@
 }
 
-void UIVisoCreator::checkBrowserOptions(const BrowserOptions &browserOptions)
-{
-    if (browserOptions == m_browserOptions)
-        return;
-    if (browserOptions.m_bShowHiddenObjects != m_browserOptions.m_bShowHiddenObjects)
-    {
-        if (m_pHostBrowser)
-            m_pHostBrowser->showHideHiddenObjects(browserOptions.m_bShowHiddenObjects);
-        if(m_pVisoBrowser)
-            m_pVisoBrowser->showHideHiddenObjects(browserOptions.m_bShowHiddenObjects);
-    }
-    m_browserOptions = browserOptions;
-}
-
-void UIVisoCreator::checkVisoOptions(const VisoOptions &visoOptions)
-{
-    if (visoOptions == m_visoOptions)
-        return;
-    if (visoOptions.m_strVisoName != m_visoOptions.m_strVisoName)
-    {
-        if(m_pVisoBrowser)
-            m_pVisoBrowser->setVisoName(visoOptions.m_strVisoName);
-    }
-    m_visoOptions = visoOptions;
-}
+
+void UIVisoCreator::hidePanel(UIVisoCreatorPanel* panel)
+{
+    if (panel && panel->isVisible())
+        panel->setVisible(false);
+    QMap<UIVisoCreatorPanel*, QAction*>::iterator iterator = m_panelActionMap.find(panel);
+    if (iterator != m_panelActionMap.end())
+    {
+        if (iterator.value() && iterator.value()->isChecked())
+            iterator.value()->setChecked(false);
+    }
+    m_visiblePanelsList.removeAll(panel);
+    manageEscapeShortCut();
+}
+
+void UIVisoCreator::showPanel(UIVisoCreatorPanel* panel)
+{
+    if (panel && panel->isHidden())
+        panel->setVisible(true);
+    QMap<UIVisoCreatorPanel*, QAction*>::iterator iterator = m_panelActionMap.find(panel);
+    if (iterator != m_panelActionMap.end())
+    {
+        if (!iterator.value()->isChecked())
+            iterator.value()->setChecked(true);
+    }
+    if (!m_visiblePanelsList.contains(panel))
+        m_visiblePanelsList.push_back(panel);
+    manageEscapeShortCut();
+}
+
+
+
+void UIVisoCreator::manageEscapeShortCut()
+{
+    /* if there are no visible panels then assign esc. key to cancel button of the button box: */
+    if (m_visiblePanelsList.isEmpty())
+    {
+        if (m_pButtonBox && m_pButtonBox->button(QDialogButtonBox::Cancel))
+            m_pButtonBox->button(QDialogButtonBox::Cancel)->setShortcut(QKeySequence(Qt::Key_Escape));
+        return;
+    }
+    if (m_pButtonBox && m_pButtonBox->button(QDialogButtonBox::Cancel))
+        m_pButtonBox->button(QDialogButtonBox::Cancel)->setShortcut(QKeySequence());
+
+    /* Just loop thru the visible panel list and set the esc key to the
+       panel which made visible latest */
+    for (int i = 0; i < m_visiblePanelsList.size() - 1; ++i)
+    {
+        m_visiblePanelsList[i]->setCloseButtonShortCut(QKeySequence());
+    }
+    m_visiblePanelsList.back()->setCloseButtonShortCut(QKeySequence(Qt::Key_Escape));
+}
Index: /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreator.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreator.h	(revision 76943)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreator.h	(revision 76944)
@@ -45,4 +45,7 @@
 class UIVisoHostBrowser;
 class UIVisoContentBrowser;
+class UIVisoCreatorOptionsPanel;
+class UIVisoCreatorPanel;
+class UIVisoConfigurationPanel;
 
 class UIVisoCreator : public QIWithRetranslateUI<QIMainDialog>
@@ -70,8 +73,11 @@
 
     void sltHandleAddObjectsToViso(QStringList pathList);
-    void sltHandleOptionsAction();
-    void sltHandleConfigurationAction();
+    void sltPanelActionToggled(bool fChecked);
+    void sltHandleVisoNameChanged(const QString& strVisoName);
+    void sltHandleCustomVisoOptionsChanged(const QStringList &customVisoOptions);
+    void sltHandleShowHiddenObjectsChange(bool fShow);
+    void sltHandleHidePanel(UIVisoCreatorPanel *pPanel);
 
- private:
+private:
 
     void prepareObjects();
@@ -81,6 +87,12 @@
     void setTableRootIndex(QModelIndex index = QModelIndex() );
     void setTreeCurrentIndex(QModelIndex index = QModelIndex() );
-    void checkBrowserOptions(const BrowserOptions &browserOptions);
-    void checkVisoOptions(const VisoOptions &visoOptions);
+    void hidePanel(UIVisoCreatorPanel *panel);
+    void showPanel(UIVisoCreatorPanel *panel);
+    /** Makes sure escape key is assigned to only a single widget. This is done by checking
+        several things in the following order:
+        - when there are no more panels visible assign it to the parent dialog
+        - grab it from the dialog as soon as a panel becomes visible again
+        - assign it to the most recently "unhidden" panel */
+    void manageEscapeShortCut();
 
     QVBoxLayout          *m_pMainLayout;
@@ -99,4 +111,8 @@
     QMenu                *m_pVisoContentBrowserMenu;
     QString               m_strMachineName;
+    UIVisoCreatorOptionsPanel *m_pCreatorOptionsPanel;
+    UIVisoConfigurationPanel  *m_pConfigurationPanel;
+    QMap<UIVisoCreatorPanel*, QAction*> m_panelActionMap;
+    QList<UIVisoCreatorPanel*>          m_visiblePanelsList;
 };
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreatorDefs.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreatorDefs.h	(revision 76943)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreatorDefs.h	(revision 76944)
@@ -40,10 +40,10 @@
 {
     BrowserOptions()
-        :m_bShowHiddenObjects(true){}
+        :m_fShowHiddenObjects(true){}
     bool operator==(const BrowserOptions &otherOptions) const
     {
-        return m_bShowHiddenObjects == otherOptions.m_bShowHiddenObjects;
+        return m_fShowHiddenObjects == otherOptions.m_fShowHiddenObjects;
     }
-    bool m_bShowHiddenObjects;
+    bool m_fShowHiddenObjects;
 };
 
Index: unk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreatorOptionsDialog.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreatorOptionsDialog.cpp	(revision 76943)
+++ 	(revision )
@@ -1,93 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIVisoCreatorOptionsDialog class implementation.
- */
-
-/*
- * Copyright (C) 2006-2019 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 <QCheckBox>
-#include <QGridLayout>
-#include <QVBoxLayout>
-#include <QPushButton>
-#include <QSplitter>
-#include <QStyle>
-
-/* GUI includes: */
-#include "QIDialogButtonBox.h"
-#include "QILabel.h"
-#include "QILineEdit.h"
-#include "QITabWidget.h"
-#include "UIVisoCreator.h"
-#include "UIVisoCreatorOptionsDialog.h"
-
-UIVisoCreatorOptionsDialog::UIVisoCreatorOptionsDialog(const BrowserOptions &browserOptions, QWidget *pParent /* =0 */)
-    : QIDialog(pParent)
-    , m_pMainLayout(0)
-    , m_pButtonBox(0)
-    , m_browserOptions(browserOptions)
-{
-    prepareObjects();
-    prepareConnections();
-}
-
-UIVisoCreatorOptionsDialog::~UIVisoCreatorOptionsDialog()
-{
-}
-
-const BrowserOptions &UIVisoCreatorOptionsDialog::browserOptions() const
-{
-    return m_browserOptions;
-}
-
-void UIVisoCreatorOptionsDialog::sltHandlShowHiddenObjectsChange(int iState)
-{
-    if (iState == static_cast<int>(Qt::Checked))
-        m_browserOptions.m_bShowHiddenObjects = true;
-    else
-        m_browserOptions.m_bShowHiddenObjects = false;
-}
-
-void UIVisoCreatorOptionsDialog::prepareObjects()
-{
-    m_pMainLayout = new QGridLayout;
-    if (!m_pMainLayout)
-        return;
-
-    QCheckBox *pShowHiddenObjectsCheckBox = new QCheckBox;
-    pShowHiddenObjectsCheckBox->setChecked(m_browserOptions.m_bShowHiddenObjects);
-    QILabel *pShowHiddenObjectsLabel = new QILabel(UIVisoCreator::tr("Show Hidden Objects"));
-    pShowHiddenObjectsLabel->setBuddy(pShowHiddenObjectsCheckBox);
-    m_pMainLayout->addWidget(pShowHiddenObjectsLabel, 0, 0);
-    m_pMainLayout->addWidget(pShowHiddenObjectsCheckBox, 0, 1);
-    connect(pShowHiddenObjectsCheckBox, &QCheckBox::stateChanged,
-            this, &UIVisoCreatorOptionsDialog::sltHandlShowHiddenObjectsChange);
-
-    m_pButtonBox = new QIDialogButtonBox;
-    if (m_pButtonBox)
-    {
-        m_pButtonBox->setStandardButtons(QDialogButtonBox::Cancel | QDialogButtonBox::Ok);
-        m_pButtonBox->button(QDialogButtonBox::Cancel)->setShortcut(Qt::Key_Escape);
-        m_pMainLayout->addWidget(m_pButtonBox, 1, 0, 1, 2);
-    }
-    setLayout(m_pMainLayout);
-}
-
-void UIVisoCreatorOptionsDialog::prepareConnections()
-{
-    if (m_pButtonBox)
-    {
-        connect(m_pButtonBox, &QIDialogButtonBox::rejected, this, &UIVisoCreatorOptionsDialog::close);
-        connect(m_pButtonBox, &QIDialogButtonBox::accepted, this, &UIVisoCreatorOptionsDialog::accept);
-    }
-}
Index: unk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreatorOptionsDialog.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreatorOptionsDialog.h	(revision 76943)
+++ 	(revision )
@@ -1,58 +1,0 @@
-/* $Id$ */
-/** @file
- * VBox Qt GUI - UIVisoCreatorOptionsDialog class declaration.
- */
-
-/*
- * Copyright (C) 2006-2019 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 FEQT_INCLUDED_SRC_medium_viso_UIVisoCreatorOptionsDialog_h
-#define FEQT_INCLUDED_SRC_medium_viso_UIVisoCreatorOptionsDialog_h
-#ifndef RT_WITHOUT_PRAGMA_ONCE
-# pragma once
-#endif
-
-/* GUI includes: */
-#include "QIDialog.h"
-#include "QIWithRetranslateUI.h"
-#include "UIVisoCreatorDefs.h"
-
-/* Forward declarations: */
-class QGridLayout;
-class QIDialogButtonBox;
-
-class UIVisoCreatorOptionsDialog : public QIDialog
-{
-    Q_OBJECT;
-
-public:
-
-    UIVisoCreatorOptionsDialog(const BrowserOptions &browserOptions,
-                               QWidget *pParent = 0);
-    ~UIVisoCreatorOptionsDialog();
-    const BrowserOptions &browserOptions() const;
-
-private slots:
-
-    void sltHandlShowHiddenObjectsChange(int iState);
-
-private:
-
-    void prepareObjects();
-    void prepareConnections();
-    QGridLayout          *m_pMainLayout;
-    QIDialogButtonBox    *m_pButtonBox;
-    BrowserOptions       m_browserOptions;
-    friend class UIVisoCreator;
-};
-
-#endif /* !FEQT_INCLUDED_SRC_medium_viso_UIVisoCreatorOptionsDialog_h */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreatorOptionsPanel.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreatorOptionsPanel.cpp	(revision 76944)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreatorOptionsPanel.cpp	(revision 76944)
@@ -0,0 +1,88 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIVisoCreatorOptionsPanel class implementation.
+ */
+
+/*
+ * Copyright (C) 2006-2019 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 <QCheckBox>
+#include <QGridLayout>
+#include <QVBoxLayout>
+#include <QPushButton>
+#include <QSplitter>
+#include <QStyle>
+
+/* GUI includes: */
+#include "QILabel.h"
+#include "QILineEdit.h"
+#include "QITabWidget.h"
+#include "UIVisoCreator.h"
+#include "UIVisoCreatorOptionsPanel.h"
+
+UIVisoCreatorOptionsPanel::UIVisoCreatorOptionsPanel(QWidget *pParent /* =0 */)
+    : UIVisoCreatorPanel(pParent)
+    , m_pShowHiddenObjectsCheckBox(0)
+    , m_pShowHiddenObjectsLabel(0)
+{
+    prepareObjects();
+    prepareConnections();
+}
+
+UIVisoCreatorOptionsPanel::~UIVisoCreatorOptionsPanel()
+{
+}
+
+QString UIVisoCreatorOptionsPanel::panelName() const
+{
+    return "OptionsPanel";
+}
+
+void UIVisoCreatorOptionsPanel::setShowHiddenbjects(bool fShow)
+{
+    if (m_pShowHiddenObjectsCheckBox)
+        m_pShowHiddenObjectsCheckBox->setChecked(fShow);
+}
+
+void UIVisoCreatorOptionsPanel::retranslateUi()
+{
+    if (m_pShowHiddenObjectsLabel)
+        m_pShowHiddenObjectsLabel->setText(UIVisoCreator::tr("Show Hidden Objects"));
+}
+
+void UIVisoCreatorOptionsPanel::sltHandlShowHiddenObjectsChange(int iState)
+{
+    if (iState == static_cast<int>(Qt::Checked))
+        sigShowHiddenObjects(true);
+    else
+        sigShowHiddenObjects(false);
+}
+
+void UIVisoCreatorOptionsPanel::prepareObjects()
+{
+    if (!mainLayout())
+        return;
+
+    m_pShowHiddenObjectsCheckBox = new QCheckBox;
+    m_pShowHiddenObjectsLabel = new QILabel(UIVisoCreator::tr("Show Hidden Objects"));
+    m_pShowHiddenObjectsLabel->setBuddy(m_pShowHiddenObjectsCheckBox);
+    mainLayout()->addWidget(m_pShowHiddenObjectsCheckBox, 0, Qt::AlignLeft);
+    mainLayout()->addWidget(m_pShowHiddenObjectsLabel, 0, Qt::AlignLeft);
+    mainLayout()->addStretch(6);
+    connect(m_pShowHiddenObjectsCheckBox, &QCheckBox::stateChanged,
+            this, &UIVisoCreatorOptionsPanel::sltHandlShowHiddenObjectsChange);
+}
+
+void UIVisoCreatorOptionsPanel::prepareConnections()
+{
+}
Index: /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreatorOptionsPanel.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreatorOptionsPanel.h	(revision 76944)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreatorOptionsPanel.h	(revision 76944)
@@ -0,0 +1,69 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIVisoCreatorOptionsPanel class declaration.
+ */
+
+/*
+ * Copyright (C) 2006-2019 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 FEQT_INCLUDED_SRC_medium_viso_UIVisoCreatorOptionsPanel_h
+#define FEQT_INCLUDED_SRC_medium_viso_UIVisoCreatorOptionsPanel_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+/* Forward declarations: */
+class QCheckBox;
+class QILabel;
+
+/* GUI includes: */
+#include "UIVisoCreatorPanel.h"
+#include "QIWithRetranslateUI.h"
+#include "UIVisoCreatorDefs.h"
+
+
+class UIVisoCreatorOptionsPanel : public UIVisoCreatorPanel
+{
+    Q_OBJECT;
+
+public:
+
+    UIVisoCreatorOptionsPanel(QWidget *pParent = 0);
+    ~UIVisoCreatorOptionsPanel();
+    virtual QString panelName() const /* override */;
+    void setShowHiddenbjects(bool fShow);
+
+signals:
+
+    void sigShowHiddenObjects(bool fShow);
+
+protected:
+
+    void retranslateUi() /* override */;
+
+
+private slots:
+
+    void sltHandlShowHiddenObjectsChange(int iState);
+
+private:
+
+    void prepareObjects();
+    void prepareConnections();
+
+    QCheckBox *m_pShowHiddenObjectsCheckBox;
+    QILabel *m_pShowHiddenObjectsLabel;
+
+    friend class UIVisoCreator;
+};
+
+#endif /* !FEQT_INCLUDED_SRC_medium_viso_UIVisoCreatorOptionsPanel_h */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreatorPanel.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreatorPanel.cpp	(revision 76944)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreatorPanel.cpp	(revision 76944)
@@ -0,0 +1,129 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIVMLogViewer class implementation.
+ */
+
+/*
+ * Copyright (C) 2010-2019 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 <QComboBox>
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QPlainTextEdit>
+#include <QTextCursor>
+#include <QToolButton>
+
+/* GUI includes: */
+#include "QIToolButton.h"
+#include "UIIconPool.h"
+#include "UIVisoCreatorPanel.h"
+#ifdef VBOX_WS_MAC
+# include "VBoxUtils-darwin.h"
+#endif
+
+
+UIVisoCreatorPanel::UIVisoCreatorPanel(QWidget *pParent)
+    : QIWithRetranslateUI<QWidget>(pParent)
+    , m_pMainLayout(0)
+    , m_pCloseButton(0)
+{
+    prepare();
+}
+
+void UIVisoCreatorPanel::setCloseButtonShortCut(QKeySequence shortCut)
+{
+    if (!m_pCloseButton)
+        return;
+    m_pCloseButton->setShortcut(shortCut);
+}
+
+QHBoxLayout* UIVisoCreatorPanel::mainLayout()
+{
+    return m_pMainLayout;
+}
+
+void UIVisoCreatorPanel::prepare()
+{
+    prepareWidgets();
+    prepareConnections();
+    retranslateUi();
+}
+
+void UIVisoCreatorPanel::prepareWidgets()
+{
+    m_pMainLayout = new QHBoxLayout(this);
+    if (m_pMainLayout)
+    {
+#ifdef VBOX_WS_MAC
+        m_pMainLayout->setContentsMargins(5 /* since there is always a button */, 0, 10 /* standard */, 0);
+        m_pMainLayout->setSpacing(10);
+#else
+        m_pMainLayout->setContentsMargins(qApp->style()->pixelMetric(QStyle::PM_LayoutLeftMargin) / 2, 0,
+                                          qApp->style()->pixelMetric(QStyle::PM_LayoutRightMargin) / 2,
+                                          qApp->style()->pixelMetric(QStyle::PM_LayoutBottomMargin) / 2);
+        m_pMainLayout->setSpacing(qApp->style()->pixelMetric(QStyle::PM_LayoutHorizontalSpacing));
+#endif
+    }
+    m_pCloseButton = new QIToolButton;
+    if (m_pCloseButton)
+    {
+        m_pCloseButton->setIcon(UIIconPool::iconSet(":/close_16px.png"));
+        m_pMainLayout->addWidget(m_pCloseButton, 0, Qt::AlignLeft);
+    }
+}
+
+void UIVisoCreatorPanel::prepareConnections()
+{
+    if (m_pCloseButton)
+        connect(m_pCloseButton, &QIToolButton::clicked, this, &UIVisoCreatorPanel::hide);
+}
+
+void UIVisoCreatorPanel::retranslateUi()
+{
+    if (m_pCloseButton)
+        m_pCloseButton->setToolTip(QApplication::translate("UIVisoCreator", "Close the pane"));
+}
+
+bool UIVisoCreatorPanel::eventFilter(QObject *pObject, QEvent *pEvent)
+{
+    Q_UNUSED(pObject);
+    Q_UNUSED(pEvent);
+    /* Dont consume this event. Pass it back to Qt's event system: */
+    return false;
+}
+
+void UIVisoCreatorPanel::showEvent(QShowEvent *pEvent)
+{
+    QWidget::showEvent(pEvent);
+}
+
+void UIVisoCreatorPanel::hideEvent(QHideEvent *pEvent)
+{
+    /* Get focused widget: */
+    QWidget *pFocus = QApplication::focusWidget();
+    /* If focus-widget is valid and child-widget of search-panel,
+     * focus next child-widget in line: */
+    if (pFocus && pFocus->parent() == this)
+        focusNextPrevChild(true);
+    emit sigHidePanel(this);
+
+    QWidget::hideEvent(pEvent);
+}
+
+void UIVisoCreatorPanel::addVerticalSeparator()
+{
+    QFrame *pSeparator = new QFrame();
+    pSeparator->setFrameShape(QFrame::VLine);
+    pSeparator->setFrameShadow(QFrame::Sunken);
+    mainLayout()->addWidget(pSeparator);
+}
Index: /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreatorPanel.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreatorPanel.h	(revision 76944)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreatorPanel.h	(revision 76944)
@@ -0,0 +1,79 @@
+/* $Id$ */
+/** @file
+ * VBox Qt GUI - UIVMLogViewer class declaration.
+ */
+
+/*
+ * Copyright (C) 2010-2019 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 FEQT_INCLUDED_SRC_medium_viso_UIVisoCreatorPanel_h
+#define FEQT_INCLUDED_SRC_medium_viso_UIVisoCreatorPanel_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+/* Qt includes: */
+#include <QWidget>
+#include <QKeySequence>
+/* GUI includes: */
+#include "QIWithRetranslateUI.h"
+
+/* Forward declarations: */
+class QHBoxLayout;
+class QPlainTextEdit;
+class QTextDocument;
+class QIToolButton;
+
+
+/** QWidget extension acting as the base class for UIVMLogViewerXXXPanel widgets. */
+class UIVisoCreatorPanel : public QIWithRetranslateUI<QWidget>
+{
+    Q_OBJECT;
+
+public:
+
+    UIVisoCreatorPanel(QWidget *pParent);
+    void setCloseButtonShortCut(QKeySequence shortCut);
+    virtual QString panelName() const = 0;
+
+signals:
+
+    void sigHidePanel(UIVisoCreatorPanel *pPanel);
+
+protected:
+
+    virtual void prepare();
+    virtual void prepareWidgets();
+    virtual void prepareConnections();
+
+    /* Access functions for children classes. */
+    QHBoxLayout*               mainLayout();
+
+    /** Handles the translation event. */
+    void retranslateUi() /* override */;
+
+    /** Handles Qt @a pEvent, used for keyboard processing. */
+    bool eventFilter(QObject *pObject, QEvent *pEvent);
+    /** Handles the Qt show @a pEvent. */
+    void showEvent(QShowEvent *pEvent);
+    /** Handles the Qt hide @a pEvent. */
+    void hideEvent(QHideEvent *pEvent);
+    void addVerticalSeparator();
+
+private:
+
+    /** Holds the reference to VM Log-Viewer this panel belongs to. */
+    QHBoxLayout   *m_pMainLayout;
+    QIToolButton  *m_pCloseButton;
+};
+
+#endif /* !FEQT_INCLUDED_SRC_medium_viso_UIVisoCreatorPanel_h */
