VirtualBox

Ignore:
Timestamp:
Feb 15, 2019 11:04:00 AM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
128861
Message:

FE/Qt: bugref:9080. Move browser actions to a single vertical toolbar.

Location:
trunk/src/VBox/Frontends/VirtualBox/src/medium/viso
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoBrowserBase.cpp

    r77322 r77330  
    2929#include "QIToolButton.h"
    3030#include "UIIconPool.h"
    31 #include "UIToolBar.h"
    3231#include "UIVisoBrowserBase.h"
    3332
     
    151150*********************************************************************************************************************************/
    152151
    153 UIVisoBrowserBase::UIVisoBrowserBase(QWidget *pParent /* = 0 */, QMenu *pMenu /*= 0*/)
     152UIVisoBrowserBase::UIVisoBrowserBase(QWidget *pParent /* = 0 */)
    154153    : QIWithRetranslateUI<QWidget>(pParent)
    155154    , m_pTreeView(0)
    156     , m_pVerticalToolBar(0)
    157     , m_pMenu(pMenu)
    158155    , m_pMainLayout(0)
    159156    , m_pLocationSelector(0)
     
    204201        m_pTreeView->installEventFilter(this);
    205202    }
    206 
    207     m_pVerticalToolBar = new UIToolBar;
    208     if (m_pVerticalToolBar)
    209     {
    210         m_pVerticalToolBar->setOrientation(Qt::Vertical);
    211         m_pMainLayout->addWidget(m_pVerticalToolBar, 0, 5, 6, 1);
    212     }
    213203}
    214204
     
    253243                 pKeyEvent->key() == Qt::Key_Enter))
    254244            {
    255                 sltExpandCollapseTreeView();
     245                updateTreeViewGeometry(false);
    256246            }
    257247        }
    258248        else if (pEvent->type() == QEvent::FocusOut)
    259249        {
    260                 sltExpandCollapseTreeView();
     250            updateTreeViewGeometry(false);
    261251        }
    262252    }
     
    296286        return;
    297287    m_pTreeView->setExpanded(modelIndex, true);
    298     m_pTreeView->hide();
     288    updateTreeViewGeometry(false);
    299289    emit sigTreeViewVisibilityChanged(m_pTreeView->isVisible());
    300290}
     
    314304    if (!fShow)
    315305    {
    316         m_pTreeView->hide();
    317         emit sigTreeViewVisibilityChanged(m_pTreeView->isVisible());
    318         m_pTreeView->clearFocus();
     306        if (!m_pTreeView->isVisible())
    319307            return;
     308        else
     309        {
     310            m_pTreeView->hide();
     311            emit sigTreeViewVisibilityChanged(m_pTreeView->isVisible());
     312            m_pTreeView->clearFocus();
     313            return;
     314        }
    320315    }
    321316    if (!m_pLocationSelector)
  • trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoBrowserBase.h

    r77321 r77330  
    3333class QGridLayout;
    3434class QLabel;
    35 class QMenu;
    3635class QSplitter;
    3736class QVBoxLayout;
     
    3938class QTreeView;
    4039class UILocationSelector;
    41 class UIToolBar;
    4240
    4341class UIVisoBrowserBase : public QIWithRetranslateUI<QWidget>
     
    5048
    5149public:
    52     /** @p pMenu is the pointer to the menu related to this browser widget.
    53      *  any member actions will be added to this menu. */
    54     UIVisoBrowserBase(QWidget *pParent = 0, QMenu *pMenu = 0);
     50
     51    UIVisoBrowserBase(QWidget *pParent = 0);
    5552    ~UIVisoBrowserBase();
    5653    virtual void showHideHiddenObjects(bool bShow) = 0;
     
    7976
    8077    QTreeView          *m_pTreeView;
    81     UIToolBar          *m_pVerticalToolBar;
    82     QMenu              *m_pMenu;
    83     QGridLayout       *m_pMainLayout;
     78    QGridLayout        *m_pMainLayout;
    8479
    8580private slots:
  • trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoContentBrowser.cpp

    r77321 r77330  
    3737#include "UIIconPool.h"
    3838#include "UIPathOperations.h"
    39 #include "UIToolBar.h"
    4039#include "UIVisoContentBrowser.h"
    41 
    42 
    4340
    4441/*********************************************************************************************************************************
    4542*   UIVisoContentTableView definition.                                                                                      *
    4643*********************************************************************************************************************************/
     44
    4745/** An QTableView extension mainly used to handle dropeed file objects from the host browser. */
    4846class UIVisoContentTableView : public QTableView
     
    155153*********************************************************************************************************************************/
    156154
    157 UIVisoContentBrowser::UIVisoContentBrowser(QWidget *pParent, QMenu *pMenu /* = 0 */)
    158     : UIVisoBrowserBase(pParent, pMenu)
     155UIVisoContentBrowser::UIVisoContentBrowser(QWidget *pParent)
     156    : UIVisoBrowserBase(pParent)
    159157    , m_pTableView(0)
    160158    , m_pModel(0)
    161159    , m_pTableProxyModel(0)
    162160    , m_pTreeProxyModel(0)
    163     , m_pRemoveAction(0)
    164     , m_pNewDirectoryAction(0)
    165     , m_pRenameAction(0)
    166     , m_pResetAction(0)
    167161{
    168162    prepareObjects();
     
    246240void UIVisoContentBrowser::retranslateUi()
    247241{
    248     if (m_pRemoveAction)
    249     {
    250         m_pRemoveAction->setToolTip(QApplication::translate("UIVisoCreator", "Remove selected file objects from VISO"));
    251         m_pRemoveAction->setText(QApplication::translate("UIVisoCreator", "Remove"));
    252     }
    253     if (m_pNewDirectoryAction)
    254     {
    255         m_pNewDirectoryAction->setToolTip(QApplication::translate("UIVisoCreator", "Create a new directory under the current location"));
    256         m_pNewDirectoryAction->setText(QApplication::translate("UIVisoCreator", "New Directory"));
    257     }
    258     if (m_pResetAction)
    259     {
    260         m_pResetAction->setToolTip(QApplication::translate("UIVisoCreator", "Reset ISO content."));
    261         m_pResetAction->setText(QApplication::translate("UIVisoCreator", "Reset"));
    262     }
    263     if (m_pRenameAction)
    264         m_pRenameAction->setToolTip(QApplication::translate("UIVisoCreator", "Rename the selected object"));
    265 
    266242    UICustomFileSystemItem *pRootItem = rootItem();
    267243    if (pRootItem)
     
    451427        m_pTableView->setDragDropMode(QAbstractItemView::DropOnly);
    452428    }
    453 
    454     m_pRemoveAction = new QAction(this);
    455     if (m_pRemoveAction)
    456     {
    457         m_pVerticalToolBar->addAction(m_pRemoveAction);
    458         m_pRemoveAction->setIcon(UIIconPool::iconSetFull(":/file_manager_delete_24px.png", ":/file_manager_delete_16px.png",
    459                                                      ":/file_manager_delete_disabled_24px.png", ":/file_manager_delete_disabled_16px.png"));
    460         m_pRemoveAction->setEnabled(false);
    461         if (m_pMenu)
    462             m_pMenu->addAction(m_pRemoveAction);
    463     }
    464 
    465     m_pNewDirectoryAction = new QAction(this);
    466     if (m_pNewDirectoryAction)
    467     {
    468         m_pVerticalToolBar->addAction(m_pNewDirectoryAction);
    469         m_pNewDirectoryAction->setIcon(UIIconPool::iconSetFull(":/file_manager_new_directory_24px.png", ":/file_manager_new_directory_16px.png",
    470                                                            ":/file_manager_new_directory_disabled_24px.png", ":/file_manager_new_directory_disabled_16px.png"));
    471         m_pNewDirectoryAction->setEnabled(true);
    472         if (m_pMenu)
    473             m_pMenu->addAction(m_pNewDirectoryAction);
    474     }
    475 
    476     m_pRenameAction = new QAction(this);
    477     if (m_pRenameAction)
    478     {
    479         /** @todo Handle rename correctly in the m_entryMap as well and then enable this rename action. */
    480         /* m_pVerticalToolBar->addAction(m_pRenameAction); */
    481         m_pRenameAction->setIcon(UIIconPool::iconSet(":/file_manager_rename_16px.png", ":/file_manager_rename_disabled_16px.png"));
    482         m_pRenameAction->setEnabled(false);
    483     }
    484 
    485     m_pVerticalToolBar->addSeparator();
    486 
    487     m_pResetAction = new QAction(this);
    488     if (m_pResetAction)
    489     {
    490         m_pVerticalToolBar->addAction(m_pResetAction);
    491         m_pResetAction->setIcon(UIIconPool::iconSet(":/cd_remove_16px.png", ":/cd_remove_disabled_16px.png"));
    492         m_pResetAction->setEnabled(true);
    493         if (m_pMenu)
    494             m_pMenu->addAction(m_pResetAction);
    495     }
    496 
    497429    retranslateUi();
    498430}
     
    510442    }
    511443
    512     if (m_pNewDirectoryAction)
    513         connect(m_pNewDirectoryAction, &QAction::triggered,
    514                 this, &UIVisoContentBrowser::sltHandleCreateNewDirectory);
     444    if (m_pTableView->selectionModel())
     445        connect(m_pTableView->selectionModel(), &QItemSelectionModel::selectionChanged,
     446                this, &UIVisoContentBrowser::sltHandleTableSelectionChanged);
    515447    if (m_pModel)
    516448        connect(m_pModel, &UICustomFileSystemModel::sigItemRenamed,
    517449                this, &UIVisoContentBrowser::sltHandleItemRenameAttempt);
    518     if (m_pRemoveAction)
    519         connect(m_pRemoveAction, &QAction::triggered,
    520                 this, &UIVisoContentBrowser::sltHandleRemoveItems);
    521     if (m_pResetAction)
    522         connect(m_pResetAction, &QAction::triggered,
    523                 this, &UIVisoContentBrowser::sltHandleResetAction);
    524     if (m_pRenameAction)
    525         connect(m_pRenameAction, &QAction::triggered,
    526                 this,&UIVisoContentBrowser::sltHandleItemRenameAction);
    527     if (m_pTableView->selectionModel())
    528         connect(m_pTableView->selectionModel(), &QItemSelectionModel::selectionChanged,
    529                 this, &UIVisoContentBrowser::sltHandleTableSelectionChanged);
    530450
    531451}
     
    789709{
    790710    Q_UNUSED(deselected);
    791     if (m_pRemoveAction)
    792         m_pRemoveAction->setEnabled(!selected.isEmpty());
    793     if (m_pRenameAction)
    794         m_pRenameAction->setEnabled(!selected.isEmpty());
     711    emit sigTableSelectionChanged(selected.isEmpty());
    795712}
    796713
  • trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoContentBrowser.h

    r76913 r77330  
    4848    Q_OBJECT;
    4949
     50signals:
     51
     52    void sigTableSelectionChanged(bool fIsSelectionEmpty);
     53
    5054public:
    5155
    52     UIVisoContentBrowser(QWidget *pParent = 0, QMenu *pMenu = 0);
     56    UIVisoContentBrowser(QWidget *pParent = 0);
    5357    ~UIVisoContentBrowser();
    5458    /** Adds file objests from the host file system. @p pathList consists of list of paths to there objects. */
     
    5862
    5963    void setVisoName(const QString &strName);
     64
     65public slots:
     66
     67    void sltHandleCreateNewDirectory();
     68    /** Handles the signal we get from the model during setData call. Restores the old name of the file object
     69     *  to @p strOldName if need be. */
     70    void sltHandleItemRenameAttempt(UICustomFileSystemItem *pItem, QString strOldName, QString strNewName);
     71    void sltHandleRemoveItems();
     72    void sltHandleResetAction();
     73    void sltHandleItemRenameAction();
    6074
    6175protected:
     
    7488private slots:
    7589
    76     void sltHandleCreateNewDirectory();
    77     /** Handles the signal we get from the model during setData call. Restores the old name of the file object
    78      *  to @p strOldName if need be. */
    79     void sltHandleItemRenameAttempt(UICustomFileSystemItem *pItem, QString strOldName, QString strNewName);
    80     void sltHandleItemRenameAction();
    81     void sltHandleRemoveItems();
    8290    void sltHandleTableSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
    83     void sltHandleResetAction();
    8491    void sltHandleDroppedItems(QStringList pathList);
    8592
     
    109116    UICustomFileSystemProxyModel *m_pTableProxyModel;
    110117    UIVisoContentTreeProxyModel  *m_pTreeProxyModel;
    111     QAction                 *m_pRemoveAction;
    112     QAction                 *m_pNewDirectoryAction;
    113     QAction                 *m_pRenameAction;
    114     QAction                 *m_pResetAction;
    115118
    116119    QString                       m_strVisoName;
  • trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreator.cpp

    r77322 r77330  
    1919#include <QMenuBar>
    2020#include <QPushButton>
    21 #include <QSplitter>
    2221#include <QStyle>
    23 #include <QVBoxLayout>
     22#include <QGridLayout>
    2423
    2524/* GUI includes: */
     
    3635UIVisoCreator::UIVisoCreator(QWidget *pParent /* =0 */, const QString& strMachineName /* = QString() */)
    3736    : QIWithRetranslateUI<QIMainDialog>(pParent)
     37    , m_pActionConfiguration(0)
     38    , m_pActionOptions(0)
     39    , m_pAddAction(0)
     40    , m_pRemoveAction(0)
     41    , m_pNewDirectoryAction(0)
     42    , m_pRenameAction(0)
     43    , m_pResetAction(0)
    3844    , m_pMainLayout(0)
    39     , m_pHorizontalSplitter(0)
    4045    , m_pHostBrowser(0)
    4146    , m_pVisoBrowser(0)
    4247    , m_pButtonBox(0)
    4348    , m_pToolBar(0)
    44     , m_pActionConfiguration(0)
    45     , m_pActionOptions(0)
     49    , m_pVerticalToolBar(0)
    4650    , m_pCentralWidget(0)
    4751    , m_pMainMenu(0)
    48     , m_pHostBrowserMenu(0)
    49     , m_pVisoContentBrowserMenu(0)
    5052    , m_strMachineName(strMachineName)
    5153    , m_pCreatorOptionsPanel(0)
     
    5456    m_visoOptions.m_strVisoName = !strMachineName.isEmpty() ? strMachineName : "ad-hoc";
    5557    prepareActions();
    56     prepareObjects();
     58    prepareWidgets();
     59    populateMenuMainToolbar();
    5760    prepareConnections();
    5861    manageEscapeShortCut();
     62    retranslateUi();
    5963}
    6064
     
    114118    if (m_pMainMenu)
    115119        m_pMainMenu->setTitle(tr("VISO"));
    116     if (m_pHostBrowserMenu)
    117         m_pHostBrowserMenu->setTitle(tr("Host Browser"));
    118     if (m_pVisoContentBrowserMenu)
    119         m_pVisoContentBrowserMenu->setTitle(tr("VISO Browser"));
     120
     121    if (m_pAddAction)
     122    {
     123        m_pAddAction->setToolTip(QApplication::translate("UIVisoCreator", "Add selected file objects to VISO"));
     124        m_pAddAction->setText(QApplication::translate("UIVisoCreator", "Add"));
     125    }
     126
     127    if (m_pRemoveAction)
     128    {
     129        m_pRemoveAction->setToolTip(QApplication::translate("UIVisoCreator", "Remove selected file objects from VISO"));
     130        m_pRemoveAction->setText(QApplication::translate("UIVisoCreator", "Remove"));
     131    }
     132    if (m_pNewDirectoryAction)
     133    {
     134        m_pNewDirectoryAction->setToolTip(QApplication::translate("UIVisoCreator", "Create a new directory under the current location"));
     135        m_pNewDirectoryAction->setText(QApplication::translate("UIVisoCreator", "New Directory"));
     136    }
     137    if (m_pResetAction)
     138    {
     139        m_pResetAction->setToolTip(QApplication::translate("UIVisoCreator", "Reset ISO content."));
     140        m_pResetAction->setText(QApplication::translate("UIVisoCreator", "Reset"));
     141    }
     142    if (m_pRenameAction)
     143        m_pRenameAction->setToolTip(QApplication::translate("UIVisoCreator", "Rename the selected object"));
    120144}
    121145
     
    182206}
    183207
    184 void UIVisoCreator::prepareObjects()
     208void UIVisoCreator::sltHandleHostBrowserTableSelectionChanged(bool fIsSelectionEmpty)
     209{
     210    if (m_pAddAction)
     211        m_pAddAction->setEnabled(!fIsSelectionEmpty);
     212}
     213
     214void UIVisoCreator::sltHandleContentBrowserTableSelectionChanged(bool fIsSelectionEmpty)
     215{
     216    if (m_pRemoveAction)
     217        m_pRemoveAction->setEnabled(!fIsSelectionEmpty);
     218}
     219
     220void UIVisoCreator::prepareWidgets()
    185221{
    186222    m_pCentralWidget = new QWidget;
     
    189225    setCentralWidget(m_pCentralWidget);
    190226
    191     m_pMainLayout = new QVBoxLayout;
     227    m_pMainLayout = new QGridLayout;
    192228    m_pCentralWidget->setLayout(m_pMainLayout);
    193229    if (!m_pMainLayout || !menuBar())
     
    211247    if (m_pActionOptions)
    212248        m_pMainMenu->addAction(m_pActionOptions);
    213     m_pHostBrowserMenu = m_pMainMenu->addMenu(tr("Host Browser"));
    214     m_pVisoContentBrowserMenu = m_pMainMenu->addMenu(tr("VISO Browser"));
    215249
    216250    m_pToolBar = new UIToolBar(parentWidget());
     
    221255        m_pToolBar->setIconSize(QSize(iIconMetric, iIconMetric));
    222256        m_pToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
    223         /* Add toolbar actions: */
    224         if (m_pActionConfiguration)
    225             m_pToolBar->addAction(m_pActionConfiguration);
    226         if (m_pActionOptions)
    227             m_pToolBar->addAction(m_pActionOptions);
    228         m_pMainLayout->addWidget(m_pToolBar);
    229     }
    230 
    231     m_pHorizontalSplitter = new QSplitter;
    232     if (!m_pHorizontalSplitter)
    233         return;
    234 
    235     m_pMainLayout->addWidget(m_pHorizontalSplitter);
    236     /* Make sure m_pHorizontalSplitter takes all the extra space: */
    237     m_pMainLayout->setStretch(m_pMainLayout->indexOf(m_pHorizontalSplitter), 2);
    238     m_pHorizontalSplitter->setOrientation(Qt::Horizontal);
    239     m_pHorizontalSplitter->setHandleWidth(1);
    240 
    241     m_pHostBrowser = new UIVisoHostBrowser(0 /* parent */, m_pHostBrowserMenu);
     257        m_pMainLayout->addWidget(m_pToolBar, 0, 0, 1, 5);
     258    }
     259
     260    m_pHostBrowser = new UIVisoHostBrowser(0 /* parent */);
    242261    if (m_pHostBrowser)
    243262    {
    244         m_pHorizontalSplitter->addWidget(m_pHostBrowser);
     263        m_pMainLayout->addWidget(m_pHostBrowser, 1, 0, 1, 2);
     264        m_pMainLayout->setColumnStretch(m_pMainLayout->indexOf(m_pHostBrowser), 2);
     265    }
     266
     267    prepareVerticalToolBar();
     268    if (m_pVerticalToolBar)
     269    {
     270        m_pMainLayout->addWidget(m_pVerticalToolBar, 1, 2, 1, 1);
     271        m_pMainLayout->setColumnStretch(m_pMainLayout->indexOf(m_pVerticalToolBar), 1);
     272    }
     273
     274    m_pVisoBrowser = new UIVisoContentBrowser(0 /* parent */);
     275    if (m_pVisoBrowser)
     276    {
     277        m_pMainLayout->addWidget(m_pVisoBrowser, 1, 3, 1, 2);
     278        m_pVisoBrowser->setVisoName(m_visoOptions.m_strVisoName);
     279        m_pMainLayout->setColumnStretch(m_pMainLayout->indexOf(m_pVisoBrowser), 2);
     280    }
     281
     282    m_pConfigurationPanel = new UIVisoConfigurationPanel(this);
     283    if (m_pConfigurationPanel)
     284    {
     285        m_pMainLayout->addWidget(m_pConfigurationPanel, 2, 0, 1, 5);
     286        m_pConfigurationPanel->hide();
     287        m_pConfigurationPanel->setVisoName(m_visoOptions.m_strVisoName);
     288        m_pConfigurationPanel->setVisoCustomOptions(m_visoOptions.m_customOptions);
     289        installEventFilter(m_pConfigurationPanel);
     290    }
     291
     292    m_pCreatorOptionsPanel = new UIVisoCreatorOptionsPanel(this);
     293    if (m_pCreatorOptionsPanel)
     294    {
     295        m_pCreatorOptionsPanel->setShowHiddenbjects(m_browserOptions.m_fShowHiddenObjects);
     296        m_pMainLayout->addWidget(m_pCreatorOptionsPanel, 3, 0, 1, 5);
     297        m_pCreatorOptionsPanel->hide();
     298    }
     299
     300    m_pButtonBox = new QIDialogButtonBox;
     301    if (m_pButtonBox)
     302    {
     303        m_pButtonBox->setStandardButtons(QDialogButtonBox::Cancel | QDialogButtonBox::Ok);
     304        m_pButtonBox->button(QDialogButtonBox::Cancel)->setShortcut(Qt::Key_Escape);
     305        m_pMainLayout->addWidget(m_pButtonBox, 4, 3, 1, 5, Qt::AlignRight);
     306    }
     307}
     308
     309void UIVisoCreator::prepareConnections()
     310{
     311    if (m_pHostBrowser)
     312    {
    245313        connect(m_pHostBrowser, &UIVisoHostBrowser::sigAddObjectsToViso,
    246314                this, &UIVisoCreator::sltHandleAddObjectsToViso);
    247315        connect(m_pHostBrowser, &UIVisoHostBrowser::sigTreeViewVisibilityChanged,
    248316                this, &UIVisoCreator::sltHandleBrowserTreeViewVisibilityChanged);
    249     }
    250 
    251     m_pVisoBrowser = new UIVisoContentBrowser(0 /* parent */, m_pVisoContentBrowserMenu);
     317        connect(m_pHostBrowser, &UIVisoHostBrowser::sigTableSelectionChanged,
     318                this, &UIVisoCreator::sltHandleHostBrowserTableSelectionChanged);
     319    }
     320
    252321    if (m_pVisoBrowser)
    253     {
    254         m_pHorizontalSplitter->addWidget(m_pVisoBrowser);
    255         m_pVisoBrowser->setVisoName(m_visoOptions.m_strVisoName);
    256     }
    257 
    258     m_pConfigurationPanel = new UIVisoConfigurationPanel(this);
    259     if (m_pConfigurationPanel)
    260     {
    261         m_pMainLayout->addWidget(m_pConfigurationPanel);
    262         m_panelActionMap.insert(m_pConfigurationPanel, m_pActionConfiguration);
    263         m_pConfigurationPanel->hide();
    264         m_pConfigurationPanel->setVisoName(m_visoOptions.m_strVisoName);
    265         m_pConfigurationPanel->setVisoCustomOptions(m_visoOptions.m_customOptions);
    266         installEventFilter(m_pConfigurationPanel);
    267     }
    268 
    269     m_pCreatorOptionsPanel = new UIVisoCreatorOptionsPanel(this);
    270     if (m_pCreatorOptionsPanel)
    271     {
    272         m_pCreatorOptionsPanel->setShowHiddenbjects(m_browserOptions.m_fShowHiddenObjects);
    273         m_pMainLayout->addWidget(m_pCreatorOptionsPanel);
    274         m_panelActionMap.insert(m_pCreatorOptionsPanel, m_pActionOptions);
    275         m_pCreatorOptionsPanel->hide();
    276     }
    277 
    278     m_pButtonBox = new QIDialogButtonBox;
    279     if (m_pButtonBox)
    280     {
    281         m_pButtonBox->setStandardButtons(QDialogButtonBox::Cancel | QDialogButtonBox::Ok);
    282         m_pButtonBox->button(QDialogButtonBox::Cancel)->setShortcut(Qt::Key_Escape);
    283         m_pMainLayout->addWidget(m_pButtonBox);
    284     }
    285     retranslateUi();
    286 }
    287 
    288 void UIVisoCreator::prepareConnections()
    289 {
     322        connect(m_pVisoBrowser, &UIVisoContentBrowser::sigTableSelectionChanged,
     323                this, &UIVisoCreator::sltHandleContentBrowserTableSelectionChanged);
     324
    290325    if (m_pButtonBox)
    291326    {
     
    315350                this, &UIVisoCreator::sltHandleHidePanel);
    316351    }
     352
     353    if (m_pAddAction)
     354        connect(m_pAddAction, &QAction::triggered,
     355                m_pHostBrowser, &UIVisoHostBrowser::sltHandleAddAction);
     356
     357    if (m_pNewDirectoryAction)
     358        connect(m_pNewDirectoryAction, &QAction::triggered,
     359                m_pVisoBrowser, &UIVisoContentBrowser::sltHandleCreateNewDirectory);
     360    if (m_pRemoveAction)
     361        connect(m_pRemoveAction, &QAction::triggered,
     362                m_pVisoBrowser, &UIVisoContentBrowser::sltHandleRemoveItems);
     363    if (m_pResetAction)
     364        connect(m_pResetAction, &QAction::triggered,
     365                m_pVisoBrowser, &UIVisoContentBrowser::sltHandleResetAction);
     366    if (m_pRenameAction)
     367        connect(m_pRenameAction, &QAction::triggered,
     368                m_pVisoBrowser,&UIVisoContentBrowser::sltHandleItemRenameAction);
    317369}
    318370
     
    327379                                                          ":/file_manager_options_disabled_32px.png",
    328380                                                          ":/file_manager_options_disabled_16px.png"));
     381        m_panelActionMap.insert(m_pConfigurationPanel, m_pActionConfiguration);
    329382    }
    330383
     
    338391                                                          ":/file_manager_options_disabled_32px.png",
    339392                                                          ":/file_manager_options_disabled_16px.png"));
    340     }
    341 }
    342 
     393        m_panelActionMap.insert(m_pCreatorOptionsPanel, m_pActionOptions);
     394    }
     395
     396    m_pAddAction = new QAction(this);
     397    if (m_pAddAction)
     398    {
     399        m_pAddAction->setIcon(UIIconPool::iconSetFull(":/file_manager_copy_to_guest_24px.png",
     400                                                      ":/file_manager_copy_to_guest_16px.png",
     401                                                      ":/file_manager_copy_to_guest_disabled_24px.png",
     402                                                      ":/file_manager_copy_to_guest_disabled_16px.png"));
     403        m_pAddAction->setText(QApplication::translate("UIVisoCreator", "Add"));
     404        m_pAddAction->setEnabled(false);
     405    }
     406    m_pRemoveAction = new QAction(this);
     407    if (m_pRemoveAction)
     408    {
     409        m_pRemoveAction->setIcon(UIIconPool::iconSetFull(":/file_manager_delete_24px.png", ":/file_manager_delete_16px.png",
     410                                                     ":/file_manager_delete_disabled_24px.png", ":/file_manager_delete_disabled_16px.png"));
     411        m_pRemoveAction->setEnabled(false);
     412    }
     413
     414    m_pNewDirectoryAction = new QAction(this);
     415    if (m_pNewDirectoryAction)
     416    {
     417        m_pNewDirectoryAction->setIcon(UIIconPool::iconSetFull(":/file_manager_new_directory_24px.png", ":/file_manager_new_directory_16px.png",
     418                                                           ":/file_manager_new_directory_disabled_24px.png", ":/file_manager_new_directory_disabled_16px.png"));
     419        m_pNewDirectoryAction->setEnabled(true);
     420    }
     421
     422    //m_pRenameAction = new QAction(this);
     423    if (m_pRenameAction)
     424    {
     425        /** @todo Handle rename correctly in the m_entryMap as well and then enable this rename action. */
     426        /* m_pVerticalToolBar->addAction(m_pRenameAction); */
     427        m_pRenameAction->setIcon(UIIconPool::iconSet(":/file_manager_rename_16px.png", ":/file_manager_rename_disabled_16px.png"));
     428        m_pRenameAction->setEnabled(false);
     429    }
     430
     431    m_pResetAction = new QAction(this);
     432    if (m_pResetAction)
     433    {
     434        m_pResetAction->setIcon(UIIconPool::iconSet(":/cd_remove_16px.png", ":/cd_remove_disabled_16px.png"));
     435        m_pResetAction->setEnabled(true);
     436    }
     437}
     438
     439void UIVisoCreator::populateMenuMainToolbar()
     440{
     441    if (!m_pMainMenu || !m_pToolBar)
     442        return;
     443
     444    m_pToolBar->addAction(m_pActionConfiguration);
     445    m_pMainMenu->addAction(m_pActionConfiguration);
     446
     447    m_pToolBar->addAction(m_pActionOptions);
     448    m_pMainMenu->addAction(m_pActionOptions);
     449    m_pMainMenu->addSeparator();
     450    m_pMainMenu->addAction(m_pAddAction);
     451    m_pMainMenu->addAction(m_pRemoveAction);
     452    m_pMainMenu->addAction(m_pNewDirectoryAction);
     453    m_pMainMenu->addAction(m_pResetAction);
     454}
    343455
    344456void UIVisoCreator::hidePanel(UIDialogPanel* panel)
     
    401513    m_visiblePanelsList.back()->setCloseButtonShortCut(QKeySequence(Qt::Key_Escape));
    402514}
     515
     516void UIVisoCreator::prepareVerticalToolBar()
     517{
     518    m_pVerticalToolBar = new UIToolBar;
     519    if (!m_pVerticalToolBar)
     520        return;
     521
     522    m_pVerticalToolBar->setOrientation(Qt::Vertical);
     523
     524    /* Add to dummy QWidget to toolbar to center the action icons vertically: */
     525    QWidget *topSpacerWidget = new QWidget(this);
     526    topSpacerWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
     527    topSpacerWidget->setVisible(true);
     528    QWidget *bottomSpacerWidget = new QWidget(this);
     529    bottomSpacerWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
     530    bottomSpacerWidget->setVisible(true);
     531
     532    m_pVerticalToolBar->addWidget(topSpacerWidget);
     533    m_pVerticalToolBar->addAction(m_pAddAction);
     534    m_pVerticalToolBar->addAction(m_pRemoveAction);
     535    m_pVerticalToolBar->addAction(m_pNewDirectoryAction);
     536    m_pVerticalToolBar->addAction(m_pResetAction);
     537
     538    m_pVerticalToolBar->addWidget(bottomSpacerWidget);
     539}
  • trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoCreator.h

    r77322 r77330  
    3838class QMenu;
    3939class QSplitter;
    40 class QVBoxLayout;
     40class QGridLayout;
    4141class QIDialogButtonBox;
    4242class UIActionPool;
     
    8181    void sltHandleHidePanel(UIDialogPanel *pPanel);
    8282    void sltHandleBrowserTreeViewVisibilityChanged(bool fVisible);
     83    void sltHandleHostBrowserTableSelectionChanged(bool fIsSelectionEmpty);
     84    void sltHandleContentBrowserTableSelectionChanged(bool fIsSelectionEmpty);
    8385
    8486private:
     
    99101    };
    100102
    101     void prepareObjects();
     103    void prepareWidgets();
    102104    void prepareConnections();
    103105    void prepareActions();
     106    /** Creates and configures the vertical toolbar. Should be called after prepareActions() */
     107    void prepareVerticalToolBar();
     108    /* Populates the main menu and toolbard with already created actions.
     109     * Leave out the vertical toolbar which is handled in prepareVerticalToolBar. */
     110    void populateMenuMainToolbar();
    104111    /** Set the root index of the m_pTableModel to the current index of m_pTreeModel. */
    105112    void setTableRootIndex(QModelIndex index = QModelIndex() );
     
    108115    void showPanel(UIDialogPanel *panel);
    109116    /** Makes sure escape key is assigned to only a single widget. This is done by checking
    110         several things in the following order:
    111         - when tree views of browser panes are visible esc. key used to close those. thus it is taken from the dialog and panels
    112         - when there are no more panels visible assign it to the parent dialog
    113         - grab it from the dialog as soon as a panel becomes visible again
    114         - assign it to the most recently "unhidden" panel */
     117      *  several things in the following order:
     118      *  - when tree views of browser panes are visible esc. key used to close those. thus it is taken from the dialog and panels
     119      *  - when there are no more panels visible assign it to the parent dialog
     120      *  - grab it from the dialog as soon as a panel becomes visible again
     121      *  - assign it to the most recently "unhidden" panel */
    115122    void manageEscapeShortCut();
    116123
    117     QVBoxLayout          *m_pMainLayout;
    118     QSplitter            *m_pHorizontalSplitter;
     124    QAction              *m_pActionConfiguration;
     125    QAction              *m_pActionOptions;
     126    QAction              *m_pAddAction;
     127    QAction              *m_pRemoveAction;
     128    QAction              *m_pNewDirectoryAction;
     129    QAction              *m_pRenameAction;
     130    QAction              *m_pResetAction;
     131
     132    QGridLayout          *m_pMainLayout;
    119133    UIVisoHostBrowser    *m_pHostBrowser;
    120134    UIVisoContentBrowser *m_pVisoBrowser;
    121135    QIDialogButtonBox    *m_pButtonBox;
    122136    UIToolBar            *m_pToolBar;
    123     QAction              *m_pActionConfiguration;
    124     QAction              *m_pActionOptions;
     137    UIToolBar            *m_pVerticalToolBar;
    125138    VisoOptions           m_visoOptions;
    126139    BrowserOptions        m_browserOptions;
    127140    QWidget              *m_pCentralWidget;
    128141    QMenu                *m_pMainMenu;
    129     QMenu                *m_pHostBrowserMenu;
    130     QMenu                *m_pVisoContentBrowserMenu;
    131142    QString               m_strMachineName;
    132143    UIVisoCreatorOptionsPanel *m_pCreatorOptionsPanel;
  • trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoHostBrowser.cpp

    r77308 r77330  
    1616 */
    1717/* Qt includes: */
    18 #include <QAction>
    1918#include <QAbstractItemModel>
    20 #include <QDialog>
    21 #include <QDir>
    2219#include <QFileSystemModel>
    2320#include <QGridLayout>
    2421#include <QHeaderView>
    25 #include <QLabel>
    26 #include <QLineEdit>
    27 #include <QListView>
    28 #include <QMenu>
    2922#include <QMimeData>
    3023#include <QTableView>
     
    3326
    3427/* GUI includes: */
    35 #include "QIToolButton.h"
    36 #include "UIIconPool.h"
    37 #include "UIToolBar.h"
    3828#include "UIVisoHostBrowser.h"
    39 
    40 
    4129
    4230/*********************************************************************************************************************************
     
    120108*********************************************************************************************************************************/
    121109
    122 UIVisoHostBrowser::UIVisoHostBrowser(QWidget *pParent /* = 0 */, QMenu *pMenu /* = 0 */)
    123     : UIVisoBrowserBase(pParent, pMenu)
     110UIVisoHostBrowser::UIVisoHostBrowser(QWidget *pParent /* = 0 */)
     111    : UIVisoBrowserBase(pParent)
    124112    , m_pTreeModel(0)
    125113    , m_pTableModel(0)
    126     , m_pAddAction(0)
    127114    , m_pTableView(0)
    128115{
     
    137124void UIVisoHostBrowser::retranslateUi()
    138125{
    139     if (m_pAddAction)
    140     {
    141         m_pAddAction->setToolTip(QApplication::translate("UIVisoCreator", "Add selected file objects to ISO"));
    142         m_pAddAction->setText(QApplication::translate("UIVisoCreator", "Add"));
    143     }
    144126}
    145127
     
    200182    }
    201183
    202     m_pAddAction = new QAction(this);
    203     if (m_pAddAction)
    204     {
    205         m_pVerticalToolBar->addAction(m_pAddAction);
    206         m_pAddAction->setIcon(UIIconPool::iconSetFull(":/file_manager_copy_to_guest_24px.png",
    207                                                       ":/file_manager_copy_to_guest_16px.png",
    208                                                       ":/file_manager_copy_to_guest_disabled_24px.png",
    209                                                       ":/file_manager_copy_to_guest_disabled_16px.png"));
    210         m_pAddAction->setText(QApplication::translate("UIVisoCreator", "Add"));
    211         m_pAddAction->setEnabled(false);
    212         if (m_pMenu)
    213             m_pMenu->addAction(m_pAddAction);
    214     }
    215 
    216184    retranslateUi();
    217185}
     
    227195        connect(m_pTableView->selectionModel(), &QItemSelectionModel::selectionChanged,
    228196                this, &UIVisoHostBrowser::sltHandleTableSelectionChanged);
    229     if (m_pAddAction)
    230         connect(m_pAddAction, &QAction::triggered,
    231                 this, &UIVisoHostBrowser::sltHandleAddAction);
    232197}
    233198
     
    235200{
    236201    Q_UNUSED(deselected);
    237     if (m_pAddAction)
    238         m_pAddAction->setEnabled(!selected.isEmpty());
     202    emit sigTableSelectionChanged(selected.isEmpty());
    239203}
    240204
  • trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoHostBrowser.h

    r77308 r77330  
    4141
    4242    void sigAddObjectsToViso(QStringList pathList);
     43    void sigTableSelectionChanged(bool fIsSelectionEmpty);
    4344
    4445public:
    4546
    46     UIVisoHostBrowser(QWidget *pParent = 0, QMenu *pMenu = 0);
     47    UIVisoHostBrowser(QWidget *pParent = 0);
    4748    ~UIVisoHostBrowser();
    4849    virtual void showHideHiddenObjects(bool bShow) /* override */;
    4950    QString currentPath() const;
    5051    void setCurrentPath(const QString &strPath);
     52
     53public slots:
     54
     55    void sltHandleAddAction();
    5156
    5257protected:
     
    6166
    6267    void sltHandleTableSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
    63     void sltHandleAddAction();
    6468
    6569private:
     
    7175    UIVisoHostBrowserModel *m_pTreeModel;
    7276    UIVisoHostBrowserModel *m_pTableModel;
    73     QAction                *m_pAddAction;
    7477    QTableView             *m_pTableView;
    7578};
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette