summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f>2019-02-15 11:04:00 +0000
committervboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f>2019-02-15 11:04:00 +0000
commitd32e643b1d0fda7cacc7c717473efce913f961fd (patch)
tree3822c72d175109c64adac3ab71dae682f6d598ec
parentcd44765b1b85358e5a8c5fcdca84825c7f6a23f4 (diff)
downloadVirtualBox-svn-d32e643b1d0fda7cacc7c717473efce913f961fd.tar.gz
FE/Qt: bugref:9080. Move browser actions to a single vertical toolbar.
git-svn-id: https://www.virtualbox.org/svn/vbox/trunk@77330 cfe28804-0f27-0410-a406-dd0f0b0b656f
-rw-r--r--src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoBrowserBase.cpp29
-rw-r--r--src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoBrowserBase.h11
-rw-r--r--src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoContentBrowser.cpp97
-rw-r--r--src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoContentBrowser.h27
-rw-r--r--src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreator.cpp229
-rw-r--r--src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreator.h37
-rw-r--r--src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoHostBrowser.cpp42
-rw-r--r--src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoHostBrowser.h9
8 files changed, 253 insertions, 228 deletions
diff --git a/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoBrowserBase.cpp b/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoBrowserBase.cpp
index f025443553b..fae3f68757b 100644
--- a/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoBrowserBase.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoBrowserBase.cpp
@@ -28,7 +28,6 @@
/* GUI includes: */
#include "QIToolButton.h"
#include "UIIconPool.h"
-#include "UIToolBar.h"
#include "UIVisoBrowserBase.h"
@@ -150,11 +149,9 @@ void UILocationSelector::prepareWidgets()
* UIVisoBrowserBase implementation. *
*********************************************************************************************************************************/
-UIVisoBrowserBase::UIVisoBrowserBase(QWidget *pParent /* = 0 */, QMenu *pMenu /*= 0*/)
+UIVisoBrowserBase::UIVisoBrowserBase(QWidget *pParent /* = 0 */)
: QIWithRetranslateUI<QWidget>(pParent)
, m_pTreeView(0)
- , m_pVerticalToolBar(0)
- , m_pMenu(pMenu)
, m_pMainLayout(0)
, m_pLocationSelector(0)
{
@@ -203,13 +200,6 @@ void UIVisoBrowserBase::prepareObjects()
m_pTreeView->setFrameStyle(QFrame::Panel | QFrame::Plain);
m_pTreeView->installEventFilter(this);
}
-
- m_pVerticalToolBar = new UIToolBar;
- if (m_pVerticalToolBar)
- {
- m_pVerticalToolBar->setOrientation(Qt::Vertical);
- m_pMainLayout->addWidget(m_pVerticalToolBar, 0, 5, 6, 1);
- }
}
void UIVisoBrowserBase::prepareConnections()
@@ -252,12 +242,12 @@ bool UIVisoBrowserBase::eventFilter(QObject *pObj, QEvent *pEvent)
(pKeyEvent->key() == Qt::Key_Return ||
pKeyEvent->key() == Qt::Key_Enter))
{
- sltExpandCollapseTreeView();
+ updateTreeViewGeometry(false);
}
}
else if (pEvent->type() == QEvent::FocusOut)
{
- sltExpandCollapseTreeView();
+ updateTreeViewGeometry(false);
}
}
return false;
@@ -295,7 +285,7 @@ void UIVisoBrowserBase::sltHandleTreeItemClicked(const QModelIndex &modelIndex)
if (!m_pTreeView)
return;
m_pTreeView->setExpanded(modelIndex, true);
- m_pTreeView->hide();
+ updateTreeViewGeometry(false);
emit sigTreeViewVisibilityChanged(m_pTreeView->isVisible());
}
@@ -313,10 +303,15 @@ void UIVisoBrowserBase::updateTreeViewGeometry(bool fShow)
if (!fShow)
{
- m_pTreeView->hide();
- emit sigTreeViewVisibilityChanged(m_pTreeView->isVisible());
- m_pTreeView->clearFocus();
+ if (!m_pTreeView->isVisible())
+ return;
+ else
+ {
+ m_pTreeView->hide();
+ emit sigTreeViewVisibilityChanged(m_pTreeView->isVisible());
+ m_pTreeView->clearFocus();
return;
+ }
}
if (!m_pLocationSelector)
return;
diff --git a/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoBrowserBase.h b/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoBrowserBase.h
index a3997bd6a06..fc1731ef451 100644
--- a/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoBrowserBase.h
+++ b/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoBrowserBase.h
@@ -32,13 +32,11 @@
class QItemSelection;
class QGridLayout;
class QLabel;
-class QMenu;
class QSplitter;
class QVBoxLayout;
class QTableView;
class QTreeView;
class UILocationSelector;
-class UIToolBar;
class UIVisoBrowserBase : public QIWithRetranslateUI<QWidget>
{
@@ -49,9 +47,8 @@ signals:
void sigTreeViewVisibilityChanged(bool fVisible);
public:
- /** @p pMenu is the pointer to the menu related to this browser widget.
- * any member actions will be added to this menu. */
- UIVisoBrowserBase(QWidget *pParent = 0, QMenu *pMenu = 0);
+
+ UIVisoBrowserBase(QWidget *pParent = 0);
~UIVisoBrowserBase();
virtual void showHideHiddenObjects(bool bShow) = 0;
/* Returns true if tree view is currently visible: */
@@ -78,9 +75,7 @@ protected:
virtual void keyPressEvent(QKeyEvent *pEvent) /* override */;
QTreeView *m_pTreeView;
- UIToolBar *m_pVerticalToolBar;
- QMenu *m_pMenu;
- QGridLayout *m_pMainLayout;
+ QGridLayout *m_pMainLayout;
private slots:
diff --git a/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoContentBrowser.cpp b/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoContentBrowser.cpp
index 15e86ca12ad..c4f326acf02 100644
--- a/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoContentBrowser.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoContentBrowser.cpp
@@ -36,14 +36,12 @@
#include "UICustomFileSystemModel.h"
#include "UIIconPool.h"
#include "UIPathOperations.h"
-#include "UIToolBar.h"
#include "UIVisoContentBrowser.h"
-
-
/*********************************************************************************************************************************
* UIVisoContentTableView definition. *
*********************************************************************************************************************************/
+
/** An QTableView extension mainly used to handle dropeed file objects from the host browser. */
class UIVisoContentTableView : public QTableView
{
@@ -154,16 +152,12 @@ bool UIVisoContentTreeProxyModel::filterAcceptsRow(int iSourceRow, const QModelI
* UIVisoContentBrowser implementation. *
*********************************************************************************************************************************/
-UIVisoContentBrowser::UIVisoContentBrowser(QWidget *pParent, QMenu *pMenu /* = 0 */)
- : UIVisoBrowserBase(pParent, pMenu)
+UIVisoContentBrowser::UIVisoContentBrowser(QWidget *pParent)
+ : UIVisoBrowserBase(pParent)
, m_pTableView(0)
, m_pModel(0)
, m_pTableProxyModel(0)
, m_pTreeProxyModel(0)
- , m_pRemoveAction(0)
- , m_pNewDirectoryAction(0)
- , m_pRenameAction(0)
- , m_pResetAction(0)
{
prepareObjects();
prepareConnections();
@@ -245,24 +239,6 @@ QStringList UIVisoContentBrowser::entryList()
void UIVisoContentBrowser::retranslateUi()
{
- if (m_pRemoveAction)
- {
- m_pRemoveAction->setToolTip(QApplication::translate("UIVisoCreator", "Remove selected file objects from VISO"));
- m_pRemoveAction->setText(QApplication::translate("UIVisoCreator", "Remove"));
- }
- if (m_pNewDirectoryAction)
- {
- m_pNewDirectoryAction->setToolTip(QApplication::translate("UIVisoCreator", "Create a new directory under the current location"));
- m_pNewDirectoryAction->setText(QApplication::translate("UIVisoCreator", "New Directory"));
- }
- if (m_pResetAction)
- {
- m_pResetAction->setToolTip(QApplication::translate("UIVisoCreator", "Reset ISO content."));
- m_pResetAction->setText(QApplication::translate("UIVisoCreator", "Reset"));
- }
- if (m_pRenameAction)
- m_pRenameAction->setToolTip(QApplication::translate("UIVisoCreator", "Rename the selected object"));
-
UICustomFileSystemItem *pRootItem = rootItem();
if (pRootItem)
{
@@ -450,50 +426,6 @@ void UIVisoContentBrowser::prepareObjects()
m_pTableView->setDropIndicatorShown(true);
m_pTableView->setDragDropMode(QAbstractItemView::DropOnly);
}
-
- m_pRemoveAction = new QAction(this);
- if (m_pRemoveAction)
- {
- m_pVerticalToolBar->addAction(m_pRemoveAction);
- m_pRemoveAction->setIcon(UIIconPool::iconSetFull(":/file_manager_delete_24px.png", ":/file_manager_delete_16px.png",
- ":/file_manager_delete_disabled_24px.png", ":/file_manager_delete_disabled_16px.png"));
- m_pRemoveAction->setEnabled(false);
- if (m_pMenu)
- m_pMenu->addAction(m_pRemoveAction);
- }
-
- m_pNewDirectoryAction = new QAction(this);
- if (m_pNewDirectoryAction)
- {
- m_pVerticalToolBar->addAction(m_pNewDirectoryAction);
- m_pNewDirectoryAction->setIcon(UIIconPool::iconSetFull(":/file_manager_new_directory_24px.png", ":/file_manager_new_directory_16px.png",
- ":/file_manager_new_directory_disabled_24px.png", ":/file_manager_new_directory_disabled_16px.png"));
- m_pNewDirectoryAction->setEnabled(true);
- if (m_pMenu)
- m_pMenu->addAction(m_pNewDirectoryAction);
- }
-
- m_pRenameAction = new QAction(this);
- if (m_pRenameAction)
- {
- /** @todo Handle rename correctly in the m_entryMap as well and then enable this rename action. */
- /* m_pVerticalToolBar->addAction(m_pRenameAction); */
- m_pRenameAction->setIcon(UIIconPool::iconSet(":/file_manager_rename_16px.png", ":/file_manager_rename_disabled_16px.png"));
- m_pRenameAction->setEnabled(false);
- }
-
- m_pVerticalToolBar->addSeparator();
-
- m_pResetAction = new QAction(this);
- if (m_pResetAction)
- {
- m_pVerticalToolBar->addAction(m_pResetAction);
- m_pResetAction->setIcon(UIIconPool::iconSet(":/cd_remove_16px.png", ":/cd_remove_disabled_16px.png"));
- m_pResetAction->setEnabled(true);
- if (m_pMenu)
- m_pMenu->addAction(m_pResetAction);
- }
-
retranslateUi();
}
@@ -509,24 +441,12 @@ void UIVisoContentBrowser::prepareConnections()
this, &UIVisoContentBrowser::sltHandleDroppedItems);
}
- if (m_pNewDirectoryAction)
- connect(m_pNewDirectoryAction, &QAction::triggered,
- this, &UIVisoContentBrowser::sltHandleCreateNewDirectory);
- if (m_pModel)
- connect(m_pModel, &UICustomFileSystemModel::sigItemRenamed,
- this, &UIVisoContentBrowser::sltHandleItemRenameAttempt);
- if (m_pRemoveAction)
- connect(m_pRemoveAction, &QAction::triggered,
- this, &UIVisoContentBrowser::sltHandleRemoveItems);
- if (m_pResetAction)
- connect(m_pResetAction, &QAction::triggered,
- this, &UIVisoContentBrowser::sltHandleResetAction);
- if (m_pRenameAction)
- connect(m_pRenameAction, &QAction::triggered,
- this,&UIVisoContentBrowser::sltHandleItemRenameAction);
if (m_pTableView->selectionModel())
connect(m_pTableView->selectionModel(), &QItemSelectionModel::selectionChanged,
this, &UIVisoContentBrowser::sltHandleTableSelectionChanged);
+ if (m_pModel)
+ connect(m_pModel, &UICustomFileSystemModel::sigItemRenamed,
+ this, &UIVisoContentBrowser::sltHandleItemRenameAttempt);
}
@@ -788,10 +708,7 @@ void UIVisoContentBrowser::sltHandleItemRenameAttempt(UICustomFileSystemItem *pI
void UIVisoContentBrowser::sltHandleTableSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
{
Q_UNUSED(deselected);
- if (m_pRemoveAction)
- m_pRemoveAction->setEnabled(!selected.isEmpty());
- if (m_pRenameAction)
- m_pRenameAction->setEnabled(!selected.isEmpty());
+ emit sigTableSelectionChanged(selected.isEmpty());
}
void UIVisoContentBrowser::sltHandleResetAction()
diff --git a/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoContentBrowser.h b/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoContentBrowser.h
index 856fe8938b9..b447955a3e2 100644
--- a/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoContentBrowser.h
+++ b/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoContentBrowser.h
@@ -47,9 +47,13 @@ class UIVisoContentBrowser : public UIVisoBrowserBase
{
Q_OBJECT;
+signals:
+
+ void sigTableSelectionChanged(bool fIsSelectionEmpty);
+
public:
- UIVisoContentBrowser(QWidget *pParent = 0, QMenu *pMenu = 0);
+ UIVisoContentBrowser(QWidget *pParent = 0);
~UIVisoContentBrowser();
/** Adds file objests from the host file system. @p pathList consists of list of paths to there objects. */
void addObjectsToViso(QStringList pathList);
@@ -58,6 +62,16 @@ public:
void setVisoName(const QString &strName);
+public slots:
+
+ void sltHandleCreateNewDirectory();
+ /** Handles the signal we get from the model during setData call. Restores the old name of the file object
+ * to @p strOldName if need be. */
+ void sltHandleItemRenameAttempt(UICustomFileSystemItem *pItem, QString strOldName, QString strNewName);
+ void sltHandleRemoveItems();
+ void sltHandleResetAction();
+ void sltHandleItemRenameAction();
+
protected:
void retranslateUi();
@@ -73,14 +87,7 @@ protected:
private slots:
- void sltHandleCreateNewDirectory();
- /** Handles the signal we get from the model during setData call. Restores the old name of the file object
- * to @p strOldName if need be. */
- void sltHandleItemRenameAttempt(UICustomFileSystemItem *pItem, QString strOldName, QString strNewName);
- void sltHandleItemRenameAction();
- void sltHandleRemoveItems();
void sltHandleTableSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
- void sltHandleResetAction();
void sltHandleDroppedItems(QStringList pathList);
private:
@@ -108,10 +115,6 @@ private:
UICustomFileSystemModel *m_pModel;
UICustomFileSystemProxyModel *m_pTableProxyModel;
UIVisoContentTreeProxyModel *m_pTreeProxyModel;
- QAction *m_pRemoveAction;
- QAction *m_pNewDirectoryAction;
- QAction *m_pRenameAction;
- QAction *m_pResetAction;
QString m_strVisoName;
/** keys of m_entryMap are iso locations and values are
diff --git a/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreator.cpp b/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreator.cpp
index c0e16ecc4e0..1d429106a2d 100644
--- a/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreator.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreator.cpp
@@ -18,9 +18,8 @@
/* Qt includes: */
#include <QMenuBar>
#include <QPushButton>
-#include <QSplitter>
#include <QStyle>
-#include <QVBoxLayout>
+#include <QGridLayout>
/* GUI includes: */
#include "QIDialogButtonBox.h"
@@ -35,27 +34,32 @@
UIVisoCreator::UIVisoCreator(QWidget *pParent /* =0 */, const QString& strMachineName /* = QString() */)
: QIWithRetranslateUI<QIMainDialog>(pParent)
+ , m_pActionConfiguration(0)
+ , m_pActionOptions(0)
+ , m_pAddAction(0)
+ , m_pRemoveAction(0)
+ , m_pNewDirectoryAction(0)
+ , m_pRenameAction(0)
+ , m_pResetAction(0)
, m_pMainLayout(0)
- , m_pHorizontalSplitter(0)
, m_pHostBrowser(0)
, m_pVisoBrowser(0)
, m_pButtonBox(0)
, m_pToolBar(0)
- , m_pActionConfiguration(0)
- , m_pActionOptions(0)
+ , m_pVerticalToolBar(0)
, m_pCentralWidget(0)
, m_pMainMenu(0)
- , m_pHostBrowserMenu(0)
- , m_pVisoContentBrowserMenu(0)
, m_strMachineName(strMachineName)
, m_pCreatorOptionsPanel(0)
, m_pConfigurationPanel(0)
{
m_visoOptions.m_strVisoName = !strMachineName.isEmpty() ? strMachineName : "ad-hoc";
prepareActions();
- prepareObjects();
+ prepareWidgets();
+ populateMenuMainToolbar();
prepareConnections();
manageEscapeShortCut();
+ retranslateUi();
}
UIVisoCreator::~UIVisoCreator()
@@ -113,10 +117,30 @@ void UIVisoCreator::retranslateUi()
}
if (m_pMainMenu)
m_pMainMenu->setTitle(tr("VISO"));
- if (m_pHostBrowserMenu)
- m_pHostBrowserMenu->setTitle(tr("Host Browser"));
- if (m_pVisoContentBrowserMenu)
- m_pVisoContentBrowserMenu->setTitle(tr("VISO Browser"));
+
+ if (m_pAddAction)
+ {
+ m_pAddAction->setToolTip(QApplication::translate("UIVisoCreator", "Add selected file objects to VISO"));
+ m_pAddAction->setText(QApplication::translate("UIVisoCreator", "Add"));
+ }
+
+ if (m_pRemoveAction)
+ {
+ m_pRemoveAction->setToolTip(QApplication::translate("UIVisoCreator", "Remove selected file objects from VISO"));
+ m_pRemoveAction->setText(QApplication::translate("UIVisoCreator", "Remove"));
+ }
+ if (m_pNewDirectoryAction)
+ {
+ m_pNewDirectoryAction->setToolTip(QApplication::translate("UIVisoCreator", "Create a new directory under the current location"));
+ m_pNewDirectoryAction->setText(QApplication::translate("UIVisoCreator", "New Directory"));
+ }
+ if (m_pResetAction)
+ {
+ m_pResetAction->setToolTip(QApplication::translate("UIVisoCreator", "Reset ISO content."));
+ m_pResetAction->setText(QApplication::translate("UIVisoCreator", "Reset"));
+ }
+ if (m_pRenameAction)
+ m_pRenameAction->setToolTip(QApplication::translate("UIVisoCreator", "Rename the selected object"));
}
void UIVisoCreator::sltHandleAddObjectsToViso(QStringList pathList)
@@ -181,14 +205,26 @@ void UIVisoCreator::sltHandleBrowserTreeViewVisibilityChanged(bool fVisible)
manageEscapeShortCut();
}
-void UIVisoCreator::prepareObjects()
+void UIVisoCreator::sltHandleHostBrowserTableSelectionChanged(bool fIsSelectionEmpty)
+{
+ if (m_pAddAction)
+ m_pAddAction->setEnabled(!fIsSelectionEmpty);
+}
+
+void UIVisoCreator::sltHandleContentBrowserTableSelectionChanged(bool fIsSelectionEmpty)
+{
+ if (m_pRemoveAction)
+ m_pRemoveAction->setEnabled(!fIsSelectionEmpty);
+}
+
+void UIVisoCreator::prepareWidgets()
{
m_pCentralWidget = new QWidget;
if (!m_pCentralWidget)
return;
setCentralWidget(m_pCentralWidget);
- m_pMainLayout = new QVBoxLayout;
+ m_pMainLayout = new QGridLayout;
m_pCentralWidget->setLayout(m_pMainLayout);
if (!m_pMainLayout || !menuBar())
return;
@@ -210,8 +246,6 @@ void UIVisoCreator::prepareObjects()
m_pMainMenu->addAction(m_pActionConfiguration);
if (m_pActionOptions)
m_pMainMenu->addAction(m_pActionOptions);
- m_pHostBrowserMenu = m_pMainMenu->addMenu(tr("Host Browser"));
- m_pVisoContentBrowserMenu = m_pMainMenu->addMenu(tr("VISO Browser"));
m_pToolBar = new UIToolBar(parentWidget());
if (m_pToolBar)
@@ -220,46 +254,35 @@ void UIVisoCreator::prepareObjects()
const int iIconMetric = (int)(QApplication::style()->pixelMetric(QStyle::PM_LargeIconSize));
m_pToolBar->setIconSize(QSize(iIconMetric, iIconMetric));
m_pToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
- /* Add toolbar actions: */
- if (m_pActionConfiguration)
- m_pToolBar->addAction(m_pActionConfiguration);
- if (m_pActionOptions)
- m_pToolBar->addAction(m_pActionOptions);
- m_pMainLayout->addWidget(m_pToolBar);
+ m_pMainLayout->addWidget(m_pToolBar, 0, 0, 1, 5);
}
- m_pHorizontalSplitter = new QSplitter;
- if (!m_pHorizontalSplitter)
- return;
-
- m_pMainLayout->addWidget(m_pHorizontalSplitter);
- /* Make sure m_pHorizontalSplitter takes all the extra space: */
- m_pMainLayout->setStretch(m_pMainLayout->indexOf(m_pHorizontalSplitter), 2);
- m_pHorizontalSplitter->setOrientation(Qt::Horizontal);
- m_pHorizontalSplitter->setHandleWidth(1);
-
- m_pHostBrowser = new UIVisoHostBrowser(0 /* parent */, m_pHostBrowserMenu);
+ m_pHostBrowser = new UIVisoHostBrowser(0 /* parent */);
if (m_pHostBrowser)
{
- m_pHorizontalSplitter->addWidget(m_pHostBrowser);
- connect(m_pHostBrowser, &UIVisoHostBrowser::sigAddObjectsToViso,
- this, &UIVisoCreator::sltHandleAddObjectsToViso);
- connect(m_pHostBrowser, &UIVisoHostBrowser::sigTreeViewVisibilityChanged,
- this, &UIVisoCreator::sltHandleBrowserTreeViewVisibilityChanged);
+ m_pMainLayout->addWidget(m_pHostBrowser, 1, 0, 1, 2);
+ m_pMainLayout->setColumnStretch(m_pMainLayout->indexOf(m_pHostBrowser), 2);
}
- m_pVisoBrowser = new UIVisoContentBrowser(0 /* parent */, m_pVisoContentBrowserMenu);
+ prepareVerticalToolBar();
+ if (m_pVerticalToolBar)
+ {
+ m_pMainLayout->addWidget(m_pVerticalToolBar, 1, 2, 1, 1);
+ m_pMainLayout->setColumnStretch(m_pMainLayout->indexOf(m_pVerticalToolBar), 1);
+ }
+
+ m_pVisoBrowser = new UIVisoContentBrowser(0 /* parent */);
if (m_pVisoBrowser)
{
- m_pHorizontalSplitter->addWidget(m_pVisoBrowser);
+ m_pMainLayout->addWidget(m_pVisoBrowser, 1, 3, 1, 2);
m_pVisoBrowser->setVisoName(m_visoOptions.m_strVisoName);
+ m_pMainLayout->setColumnStretch(m_pMainLayout->indexOf(m_pVisoBrowser), 2);
}
m_pConfigurationPanel = new UIVisoConfigurationPanel(this);
if (m_pConfigurationPanel)
{
- m_pMainLayout->addWidget(m_pConfigurationPanel);
- m_panelActionMap.insert(m_pConfigurationPanel, m_pActionConfiguration);
+ m_pMainLayout->addWidget(m_pConfigurationPanel, 2, 0, 1, 5);
m_pConfigurationPanel->hide();
m_pConfigurationPanel->setVisoName(m_visoOptions.m_strVisoName);
m_pConfigurationPanel->setVisoCustomOptions(m_visoOptions.m_customOptions);
@@ -270,8 +293,7 @@ void UIVisoCreator::prepareObjects()
if (m_pCreatorOptionsPanel)
{
m_pCreatorOptionsPanel->setShowHiddenbjects(m_browserOptions.m_fShowHiddenObjects);
- m_pMainLayout->addWidget(m_pCreatorOptionsPanel);
- m_panelActionMap.insert(m_pCreatorOptionsPanel, m_pActionOptions);
+ m_pMainLayout->addWidget(m_pCreatorOptionsPanel, 3, 0, 1, 5);
m_pCreatorOptionsPanel->hide();
}
@@ -280,13 +302,26 @@ void UIVisoCreator::prepareObjects()
{
m_pButtonBox->setStandardButtons(QDialogButtonBox::Cancel | QDialogButtonBox::Ok);
m_pButtonBox->button(QDialogButtonBox::Cancel)->setShortcut(Qt::Key_Escape);
- m_pMainLayout->addWidget(m_pButtonBox);
+ m_pMainLayout->addWidget(m_pButtonBox, 4, 3, 1, 5, Qt::AlignRight);
}
- retranslateUi();
}
void UIVisoCreator::prepareConnections()
{
+ if (m_pHostBrowser)
+ {
+ connect(m_pHostBrowser, &UIVisoHostBrowser::sigAddObjectsToViso,
+ this, &UIVisoCreator::sltHandleAddObjectsToViso);
+ connect(m_pHostBrowser, &UIVisoHostBrowser::sigTreeViewVisibilityChanged,
+ this, &UIVisoCreator::sltHandleBrowserTreeViewVisibilityChanged);
+ connect(m_pHostBrowser, &UIVisoHostBrowser::sigTableSelectionChanged,
+ this, &UIVisoCreator::sltHandleHostBrowserTableSelectionChanged);
+ }
+
+ if (m_pVisoBrowser)
+ connect(m_pVisoBrowser, &UIVisoContentBrowser::sigTableSelectionChanged,
+ this, &UIVisoCreator::sltHandleContentBrowserTableSelectionChanged);
+
if (m_pButtonBox)
{
connect(m_pButtonBox, &QIDialogButtonBox::rejected, this, &UIVisoCreator::close);
@@ -314,6 +349,23 @@ void UIVisoCreator::prepareConnections()
connect(m_pCreatorOptionsPanel, &UIVisoCreatorOptionsPanel::sigHidePanel,
this, &UIVisoCreator::sltHandleHidePanel);
}
+
+ if (m_pAddAction)
+ connect(m_pAddAction, &QAction::triggered,
+ m_pHostBrowser, &UIVisoHostBrowser::sltHandleAddAction);
+
+ if (m_pNewDirectoryAction)
+ connect(m_pNewDirectoryAction, &QAction::triggered,
+ m_pVisoBrowser, &UIVisoContentBrowser::sltHandleCreateNewDirectory);
+ if (m_pRemoveAction)
+ connect(m_pRemoveAction, &QAction::triggered,
+ m_pVisoBrowser, &UIVisoContentBrowser::sltHandleRemoveItems);
+ if (m_pResetAction)
+ connect(m_pResetAction, &QAction::triggered,
+ m_pVisoBrowser, &UIVisoContentBrowser::sltHandleResetAction);
+ if (m_pRenameAction)
+ connect(m_pRenameAction, &QAction::triggered,
+ m_pVisoBrowser,&UIVisoContentBrowser::sltHandleItemRenameAction);
}
void UIVisoCreator::prepareActions()
@@ -326,6 +378,7 @@ void UIVisoCreator::prepareActions()
":/%file_manager_options_16px.png",
":/file_manager_options_disabled_32px.png",
":/file_manager_options_disabled_16px.png"));
+ m_panelActionMap.insert(m_pConfigurationPanel, m_pActionConfiguration);
}
m_pActionOptions = new QAction(this);
@@ -337,9 +390,68 @@ void UIVisoCreator::prepareActions()
":/%file_manager_options_16px.png",
":/file_manager_options_disabled_32px.png",
":/file_manager_options_disabled_16px.png"));
+ m_panelActionMap.insert(m_pCreatorOptionsPanel, m_pActionOptions);
+ }
+
+ m_pAddAction = new QAction(this);
+ if (m_pAddAction)
+ {
+ m_pAddAction->setIcon(UIIconPool::iconSetFull(":/file_manager_copy_to_guest_24px.png",
+ ":/file_manager_copy_to_guest_16px.png",
+ ":/file_manager_copy_to_guest_disabled_24px.png",
+ ":/file_manager_copy_to_guest_disabled_16px.png"));
+ m_pAddAction->setText(QApplication::translate("UIVisoCreator", "Add"));
+ m_pAddAction->setEnabled(false);
+ }
+ m_pRemoveAction = new QAction(this);
+ if (m_pRemoveAction)
+ {
+ m_pRemoveAction->setIcon(UIIconPool::iconSetFull(":/file_manager_delete_24px.png", ":/file_manager_delete_16px.png",
+ ":/file_manager_delete_disabled_24px.png", ":/file_manager_delete_disabled_16px.png"));
+ m_pRemoveAction->setEnabled(false);
+ }
+
+ m_pNewDirectoryAction = new QAction(this);
+ if (m_pNewDirectoryAction)
+ {
+ m_pNewDirectoryAction->setIcon(UIIconPool::iconSetFull(":/file_manager_new_directory_24px.png", ":/file_manager_new_directory_16px.png",
+ ":/file_manager_new_directory_disabled_24px.png", ":/file_manager_new_directory_disabled_16px.png"));
+ m_pNewDirectoryAction->setEnabled(true);
+ }
+
+ //m_pRenameAction = new QAction(this);
+ if (m_pRenameAction)
+ {
+ /** @todo Handle rename correctly in the m_entryMap as well and then enable this rename action. */
+ /* m_pVerticalToolBar->addAction(m_pRenameAction); */
+ m_pRenameAction->setIcon(UIIconPool::iconSet(":/file_manager_rename_16px.png", ":/file_manager_rename_disabled_16px.png"));
+ m_pRenameAction->setEnabled(false);
+ }
+
+ m_pResetAction = new QAction(this);
+ if (m_pResetAction)
+ {
+ m_pResetAction->setIcon(UIIconPool::iconSet(":/cd_remove_16px.png", ":/cd_remove_disabled_16px.png"));
+ m_pResetAction->setEnabled(true);
}
}
+void UIVisoCreator::populateMenuMainToolbar()
+{
+ if (!m_pMainMenu || !m_pToolBar)
+ return;
+
+ m_pToolBar->addAction(m_pActionConfiguration);
+ m_pMainMenu->addAction(m_pActionConfiguration);
+
+ m_pToolBar->addAction(m_pActionOptions);
+ m_pMainMenu->addAction(m_pActionOptions);
+ m_pMainMenu->addSeparator();
+ m_pMainMenu->addAction(m_pAddAction);
+ m_pMainMenu->addAction(m_pRemoveAction);
+ m_pMainMenu->addAction(m_pNewDirectoryAction);
+ m_pMainMenu->addAction(m_pResetAction);
+}
void UIVisoCreator::hidePanel(UIDialogPanel* panel)
{
@@ -400,3 +512,28 @@ void UIVisoCreator::manageEscapeShortCut()
m_visiblePanelsList[i]->setCloseButtonShortCut(QKeySequence());
m_visiblePanelsList.back()->setCloseButtonShortCut(QKeySequence(Qt::Key_Escape));
}
+
+void UIVisoCreator::prepareVerticalToolBar()
+{
+ m_pVerticalToolBar = new UIToolBar;
+ if (!m_pVerticalToolBar)
+ return;
+
+ m_pVerticalToolBar->setOrientation(Qt::Vertical);
+
+ /* Add to dummy QWidget to toolbar to center the action icons vertically: */
+ QWidget *topSpacerWidget = new QWidget(this);
+ topSpacerWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
+ topSpacerWidget->setVisible(true);
+ QWidget *bottomSpacerWidget = new QWidget(this);
+ bottomSpacerWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
+ bottomSpacerWidget->setVisible(true);
+
+ m_pVerticalToolBar->addWidget(topSpacerWidget);
+ m_pVerticalToolBar->addAction(m_pAddAction);
+ m_pVerticalToolBar->addAction(m_pRemoveAction);
+ m_pVerticalToolBar->addAction(m_pNewDirectoryAction);
+ m_pVerticalToolBar->addAction(m_pResetAction);
+
+ m_pVerticalToolBar->addWidget(bottomSpacerWidget);
+}
diff --git a/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreator.h b/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreator.h
index 0bc9a05a587..039f2b82ad0 100644
--- a/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreator.h
+++ b/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreator.h
@@ -37,7 +37,7 @@
class QItemSelection;
class QMenu;
class QSplitter;
-class QVBoxLayout;
+class QGridLayout;
class QIDialogButtonBox;
class UIActionPool;
class UIDialogPanel;
@@ -80,6 +80,8 @@ private slots:
void sltHandleShowHiddenObjectsChange(bool fShow);
void sltHandleHidePanel(UIDialogPanel *pPanel);
void sltHandleBrowserTreeViewVisibilityChanged(bool fVisible);
+ void sltHandleHostBrowserTableSelectionChanged(bool fIsSelectionEmpty);
+ void sltHandleContentBrowserTableSelectionChanged(bool fIsSelectionEmpty);
private:
struct VisoOptions
@@ -98,36 +100,45 @@ private:
bool m_fShowHiddenObjects;
};
- void prepareObjects();
+ void prepareWidgets();
void prepareConnections();
void prepareActions();
+ /** Creates and configures the vertical toolbar. Should be called after prepareActions() */
+ void prepareVerticalToolBar();
+ /* Populates the main menu and toolbard with already created actions.
+ * Leave out the vertical toolbar which is handled in prepareVerticalToolBar. */
+ void populateMenuMainToolbar();
/** Set the root index of the m_pTableModel to the current index of m_pTreeModel. */
void setTableRootIndex(QModelIndex index = QModelIndex() );
void setTreeCurrentIndex(QModelIndex index = QModelIndex() );
void hidePanel(UIDialogPanel *panel);
void showPanel(UIDialogPanel *panel);
/** Makes sure escape key is assigned to only a single widget. This is done by checking
- several things in the following order:
- - when tree views of browser panes are visible esc. key used to close those. thus it is taken from the dialog and panels
- - 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 */
+ * several things in the following order:
+ * - when tree views of browser panes are visible esc. key used to close those. thus it is taken from the dialog and panels
+ * - 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;
- QSplitter *m_pHorizontalSplitter;
+ QAction *m_pActionConfiguration;
+ QAction *m_pActionOptions;
+ QAction *m_pAddAction;
+ QAction *m_pRemoveAction;
+ QAction *m_pNewDirectoryAction;
+ QAction *m_pRenameAction;
+ QAction *m_pResetAction;
+
+ QGridLayout *m_pMainLayout;
UIVisoHostBrowser *m_pHostBrowser;
UIVisoContentBrowser *m_pVisoBrowser;
QIDialogButtonBox *m_pButtonBox;
UIToolBar *m_pToolBar;
- QAction *m_pActionConfiguration;
- QAction *m_pActionOptions;
+ UIToolBar *m_pVerticalToolBar;
VisoOptions m_visoOptions;
BrowserOptions m_browserOptions;
QWidget *m_pCentralWidget;
QMenu *m_pMainMenu;
- QMenu *m_pHostBrowserMenu;
- QMenu *m_pVisoContentBrowserMenu;
QString m_strMachineName;
UIVisoCreatorOptionsPanel *m_pCreatorOptionsPanel;
UIVisoConfigurationPanel *m_pConfigurationPanel;
diff --git a/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoHostBrowser.cpp b/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoHostBrowser.cpp
index b5234882526..f847b284cd5 100644
--- a/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoHostBrowser.cpp
+++ b/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoHostBrowser.cpp
@@ -15,30 +15,18 @@
* hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
*/
/* Qt includes: */
-#include <QAction>
#include <QAbstractItemModel>
-#include <QDialog>
-#include <QDir>
#include <QFileSystemModel>
#include <QGridLayout>
#include <QHeaderView>
-#include <QLabel>
-#include <QLineEdit>
-#include <QListView>
-#include <QMenu>
#include <QMimeData>
#include <QTableView>
#include <QTextEdit>
#include <QTreeView>
/* GUI includes: */
-#include "QIToolButton.h"
-#include "UIIconPool.h"
-#include "UIToolBar.h"
#include "UIVisoHostBrowser.h"
-
-
/*********************************************************************************************************************************
* UIVisoHostBrowserModel definition. *
*********************************************************************************************************************************/
@@ -119,11 +107,10 @@ QMimeData *UIVisoHostBrowserModel::mimeData(const QModelIndexList &indexes) cons
* UIVisoHostBrowser implementation. *
*********************************************************************************************************************************/
-UIVisoHostBrowser::UIVisoHostBrowser(QWidget *pParent /* = 0 */, QMenu *pMenu /* = 0 */)
- : UIVisoBrowserBase(pParent, pMenu)
+UIVisoHostBrowser::UIVisoHostBrowser(QWidget *pParent /* = 0 */)
+ : UIVisoBrowserBase(pParent)
, m_pTreeModel(0)
, m_pTableModel(0)
- , m_pAddAction(0)
, m_pTableView(0)
{
prepareObjects();
@@ -136,11 +123,6 @@ UIVisoHostBrowser::~UIVisoHostBrowser()
void UIVisoHostBrowser::retranslateUi()
{
- if (m_pAddAction)
- {
- m_pAddAction->setToolTip(QApplication::translate("UIVisoCreator", "Add selected file objects to ISO"));
- m_pAddAction->setText(QApplication::translate("UIVisoCreator", "Add"));
- }
}
void UIVisoHostBrowser::prepareObjects()
@@ -199,20 +181,6 @@ void UIVisoHostBrowser::prepareObjects()
m_pTableView->setDragDropMode(QAbstractItemView::DragOnly);
}
- m_pAddAction = new QAction(this);
- if (m_pAddAction)
- {
- m_pVerticalToolBar->addAction(m_pAddAction);
- m_pAddAction->setIcon(UIIconPool::iconSetFull(":/file_manager_copy_to_guest_24px.png",
- ":/file_manager_copy_to_guest_16px.png",
- ":/file_manager_copy_to_guest_disabled_24px.png",
- ":/file_manager_copy_to_guest_disabled_16px.png"));
- m_pAddAction->setText(QApplication::translate("UIVisoCreator", "Add"));
- m_pAddAction->setEnabled(false);
- if (m_pMenu)
- m_pMenu->addAction(m_pAddAction);
- }
-
retranslateUi();
}
@@ -226,16 +194,12 @@ void UIVisoHostBrowser::prepareConnections()
if (m_pTableView->selectionModel())
connect(m_pTableView->selectionModel(), &QItemSelectionModel::selectionChanged,
this, &UIVisoHostBrowser::sltHandleTableSelectionChanged);
- if (m_pAddAction)
- connect(m_pAddAction, &QAction::triggered,
- this, &UIVisoHostBrowser::sltHandleAddAction);
}
void UIVisoHostBrowser::sltHandleTableSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
{
Q_UNUSED(deselected);
- if (m_pAddAction)
- m_pAddAction->setEnabled(!selected.isEmpty());
+ emit sigTableSelectionChanged(selected.isEmpty());
}
void UIVisoHostBrowser::tableViewItemDoubleClick(const QModelIndex &index)
diff --git a/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoHostBrowser.h b/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoHostBrowser.h
index 819ef311b80..6344b68daea 100644
--- a/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoHostBrowser.h
+++ b/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoHostBrowser.h
@@ -40,15 +40,20 @@ class UIVisoHostBrowser : public UIVisoBrowserBase
signals:
void sigAddObjectsToViso(QStringList pathList);
+ void sigTableSelectionChanged(bool fIsSelectionEmpty);
public:
- UIVisoHostBrowser(QWidget *pParent = 0, QMenu *pMenu = 0);
+ UIVisoHostBrowser(QWidget *pParent = 0);
~UIVisoHostBrowser();
virtual void showHideHiddenObjects(bool bShow) /* override */;
QString currentPath() const;
void setCurrentPath(const QString &strPath);
+public slots:
+
+ void sltHandleAddAction();
+
protected:
void retranslateUi();
@@ -60,7 +65,6 @@ protected:
private slots:
void sltHandleTableSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
- void sltHandleAddAction();
private:
@@ -70,7 +74,6 @@ private:
/** We have two file system models (one for each item view) since we set different filter on each of these models. */
UIVisoHostBrowserModel *m_pTreeModel;
UIVisoHostBrowserModel *m_pTableModel;
- QAction *m_pAddAction;
QTableView *m_pTableView;
};