diff options
author | vboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f> | 2019-02-15 11:04:00 +0000 |
---|---|---|
committer | vboxsync <vboxsync@cfe28804-0f27-0410-a406-dd0f0b0b656f> | 2019-02-15 11:04:00 +0000 |
commit | d32e643b1d0fda7cacc7c717473efce913f961fd (patch) | |
tree | 3822c72d175109c64adac3ab71dae682f6d598ec | |
parent | cd44765b1b85358e5a8c5fcdca84825c7f6a23f4 (diff) | |
download | VirtualBox-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
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; }; |