VirtualBox

Changeset 76979 in vbox for trunk


Ignore:
Timestamp:
Jan 24, 2019 3:59:56 PM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
128371
Message:

FE/Qt: Factor out medium search widget to make it avaible in other dialog.

Location:
trunk/src/VBox/Frontends/VirtualBox
Files:
3 edited
2 copied

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk

    r76950 r76979  
    828828        src/medium/UIMediumEnumerator.h \
    829829        src/medium/UIMediumItem.h \
     830        src/medium/UIMediumSearchWidget.h \
    830831        src/medium/UIMediumSelector.h \
    831832        src/medium/viso/UIVisoBrowserBase.h \
     
    972973        src/logviewer/UIVMLogViewerTextEdit.cpp \
    973974        src/medium/UIMediumEnumerator.cpp \
    974         src/medium/UIMediumSelector.cpp \
    975975        src/medium/viso/UIVisoContentBrowser.cpp \
    976976        src/medium/viso/UIVisoHostBrowser.cpp \
     
    12931293        src/medium/UIMediumEnumerator.cpp \
    12941294        src/medium/UIMediumItem.cpp \
     1295        src/medium/UIMediumSearchWidget.cpp \
    12951296        src/medium/UIMediumSelector.cpp \
    12961297        src/medium/viso/UIVisoBrowserBase.cpp \
  • trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumSearchWidget.cpp

    r76969 r76979  
    11/* $Id$ */
    22/** @file
    3  * VBox Qt GUI - UIMediumSelector class implementation.
     3 * VBox Qt GUI - UIMediumSearchWidget class implementation.
    44 */
    55
     
    1717
    1818/* Qt includes: */
    19 #include <QAction>
    20 #include <QHeaderView>
    21 #include <QMenuBar>
     19#include <QLineEdit>
     20#include <QPushButton>
    2221#include <QVBoxLayout>
    23 #include <QPushButton>
    2422
    2523/* GUI includes: */
    2624#include "QIComboBox.h"
    2725#include "QIDialogButtonBox.h"
    28 #include "QIFileDialog.h"
    29 #include "QILineEdit.h"
    30 #include "QIMessageBox.h"
    31 #include "QITabWidget.h"
    3226#include "QIToolButton.h"
    33 #include "VBoxGlobal.h"
    34 #include "UIDesktopWidgetWatchdog.h"
    35 #include "UIExtraDataManager.h"
    3627#include "UIFDCreationDialog.h"
    37 #include "UIMediumSelector.h"
    38 #include "UIMessageCenter.h"
    3928#include "UIIconPool.h"
    40 #include "UIMedium.h"
    41 #include "UIMediumItem.h"
     29#include "UIMediumSearchWidget.h"
    4230#include "UIToolBar.h"
    43 
    44 /* COM includes: */
    45 #include "COMEnums.h"
    46 #include "CMachine.h"
    47 #include "CMediumAttachment.h"
    48 #include "CMediumFormat.h"
    49 #include "CStorageController.h"
    50 #include "CSystemProperties.h"
    5131
    5232#ifdef VBOX_WS_MAC
    5333# include "UIWindowMenuManager.h"
    5434#endif /* VBOX_WS_MAC */
    55 
    56 /*********************************************************************************************************************************
    57 *   UIMediumSearchWidget definition.                                                                                         *
    58 *********************************************************************************************************************************/
    59 /** QWidget extension providing a simple way to enter a earch term and search type for medium searching
    60  *  in virtual media manager, medium selection dialog, etc. */
    61 class UIMediumSearchWidget : public QIWithRetranslateUI<QWidget>
    62 {
    63     Q_OBJECT;
    64 
    65 public:
    66 
    67     enum SearchType
    68     {
    69         SearchByName,
    70         SearchByUUID,
    71         SearchByMax
    72     };
    73 
    74 signals:
    75 
    76     void sigPerformSearch();
    77     void sigShowNextMatchingItem();
    78     void sigShowPreviousMatchingItem();
    79 
    80 public:
    81 
    82     UIMediumSearchWidget(QWidget *pParent = 0);
    83     SearchType searchType() const;
    84     QString searchTerm() const;
    85 
    86 protected:
    87 
    88     void retranslateUi() /* override */;
    89 
    90 private:
    91 
    92     void              prepareWidgets();
    93     QIComboBox       *m_pSearchComboxBox;
    94     QLineEdit        *m_pSearchTermLineEdit;
    95     QIToolButton     *m_pShowNextMatchButton;
    96     QIToolButton     *m_pShowPreviousMatchButton;
    97 };
    98 
    99 
    100 /*********************************************************************************************************************************
    101 *   UIMediumSearchWidget implementation.                                                                                         *
    102 *********************************************************************************************************************************/
    10335
    10436UIMediumSearchWidget::UIMediumSearchWidget(QWidget *pParent)
     
    13769        m_pSearchTermLineEdit->setClearButtonEnabled(true);
    13870        pLayout->addWidget(m_pSearchTermLineEdit);
    139         connect(m_pSearchTermLineEdit, &QILineEdit::textChanged,
     71        connect(m_pSearchTermLineEdit, &QLineEdit::textChanged,
    14072                this, &UIMediumSearchWidget::sigPerformSearch);
    14173    }
     
    177109    if (m_pSearchComboxBox)
    178110    {
    179         m_pSearchComboxBox->setItemText(SearchByName, UIMediumSelector::tr("Search By Name"));
    180         m_pSearchComboxBox->setItemText(SearchByUUID, UIMediumSelector::tr("Search By UUID"));
    181         m_pSearchComboxBox->setToolTip(UIMediumSelector::tr("Select the search type"));
     111        m_pSearchComboxBox->setItemText(SearchByName, UIMediumSearchWidget::tr("Search By Name"));
     112        m_pSearchComboxBox->setItemText(SearchByUUID, UIMediumSearchWidget::tr("Search By UUID"));
     113        m_pSearchComboxBox->setToolTip(UIMediumSearchWidget::tr("Select the search type"));
    182114    }
    183115    if (m_pSearchTermLineEdit)
     
    188120        m_pShowNextMatchButton->setToolTip("Show the next item matching the search term");
    189121}
    190 
    191 /*********************************************************************************************************************************
    192 *   UIMediumSelector implementation.                                                                                         *
    193 *********************************************************************************************************************************/
    194 
    195 UIMediumSelector::UIMediumSelector(UIMediumDeviceType enmMediumType, const QString &machineName /* = QString() */,
    196                                    const QString &machineSettigFilePath /* = QString() */, QWidget *pParent /* = 0 */)
    197     :QIWithRetranslateUI<QIMainDialog>(pParent)
    198     , m_pCentralWidget(0)
    199     , m_pMainLayout(0)
    200     , m_pTreeWidget(0)
    201     , m_enmMediumType(enmMediumType)
    202     , m_pButtonBox(0)
    203     , m_pMainMenu(0)
    204     , m_pToolBar(0)
    205     , m_pActionAdd(0)
    206     , m_pActionCreate(0)
    207     , m_pActionRefresh(0)
    208     , m_pAttachedSubTreeRoot(0)
    209     , m_pNotAttachedSubTreeRoot(0)
    210     , m_pParent(pParent)
    211     , m_pSearchWidget(0)
    212     , m_iCurrentShownIndex(0)
    213     , m_strMachineSettingsFilePath(machineSettigFilePath)
    214     , m_strMachineName(machineName)
    215 {
    216     configure();
    217     finalize();
    218 }
    219 
    220 QList<QUuid> UIMediumSelector::selectedMediumIds() const
    221 {
    222     QList<QUuid> selectedIds;
    223     if (!m_pTreeWidget)
    224         return selectedIds;
    225     QList<QTreeWidgetItem*> selectedItems = m_pTreeWidget->selectedItems();
    226     for (int i = 0; i < selectedItems.size(); ++i)
    227     {
    228         UIMediumItem *item = dynamic_cast<UIMediumItem*>(selectedItems.at(i));
    229         if (item)
    230             selectedIds.push_back(item->medium().id());
    231     }
    232     return selectedIds;
    233 }
    234 
    235 
    236 void UIMediumSelector::retranslateUi()
    237 {
    238     if (m_pMainMenu)
    239         m_pMainMenu->setTitle(tr("Medium"));
    240 
    241     if (m_pActionAdd)
    242     {
    243         m_pActionAdd->setText(tr("&Add..."));
    244         m_pActionAdd->setToolTip(tr("Add Disk Image"));
    245         m_pActionAdd->setStatusTip(tr("Add existing disk image file"));
    246     }
    247 
    248     if (m_pActionCreate)
    249     {
    250         m_pActionCreate->setText(tr("&Create..."));
    251         m_pActionCreate->setToolTip(tr("Create Disk Image"));
    252         m_pActionCreate->setStatusTip(tr("Create new disk image file"));
    253     }
    254 
    255     if (m_pActionRefresh)
    256     {
    257         m_pActionRefresh->setText(tr("&Refresh"));
    258         m_pActionRefresh->setToolTip(tr("Refresh Disk Image Files (%1)").arg(m_pActionRefresh->shortcut().toString()));
    259         m_pActionRefresh->setStatusTip(tr("Refresh the list of disk image files"));
    260     }
    261 
    262     if (m_pButtonBox)
    263         m_pButtonBox->button(QDialogButtonBox::Ok)->setText(tr("Choose"));
    264 
    265     if (m_pTreeWidget)
    266     {
    267         m_pTreeWidget->headerItem()->setText(0, tr("Name"));
    268         m_pTreeWidget->headerItem()->setText(1, tr("Virtual Size"));
    269         m_pTreeWidget->headerItem()->setText(2, tr("Actual Size"));
    270     }
    271 }
    272 
    273 void UIMediumSelector::configure()
    274 {
    275     /* Apply window icons: */
    276     setWindowIcon(UIIconPool::iconSetFull(":/media_manager_32px.png", ":/media_manager_16px.png"));
    277     prepareWidgets();
    278     prepareActions();
    279     prepareConnections();
    280 }
    281 
    282 void UIMediumSelector::prepareActions()
    283 {
    284     QString strPrefix("hd");
    285     switch (m_enmMediumType)
    286     {
    287         case UIMediumDeviceType_DVD:
    288             strPrefix = "cd";
    289             break;
    290         case UIMediumDeviceType_Floppy:
    291             strPrefix = "fd";
    292             break;
    293         case UIMediumDeviceType_HardDisk:
    294         case UIMediumDeviceType_All:
    295         case UIMediumDeviceType_Invalid:
    296         default:
    297             strPrefix = "hd";
    298             break;
    299     }
    300 
    301     m_pActionAdd = new QAction(this);
    302     if (m_pActionAdd)
    303     {
    304         /* Configure add-action: */
    305         m_pActionAdd->setShortcut(QKeySequence("Ctrl+A"));
    306 
    307         m_pActionAdd->setIcon(UIIconPool::iconSetFull(QString(":/%1_add_32px.png").arg(strPrefix),
    308                                                       QString(":/%1_add_16px.png").arg(strPrefix),
    309                                                       QString(":/%1_add_disabled_32px.png").arg(strPrefix),
    310                                                       QString(":/%1_add_disabled_16px.png").arg(strPrefix)));
    311         if (m_pMainMenu)
    312             m_pMainMenu->addAction(m_pActionAdd);
    313         if (m_pToolBar)
    314             m_pToolBar->addAction(m_pActionAdd);
    315     }
    316 
    317     /* Currently create is supported only for Floppy: */
    318     if (m_enmMediumType == UIMediumDeviceType_Floppy)
    319     {
    320         m_pActionCreate = new QAction(this);
    321     }
    322     if (m_pActionCreate)
    323     {
    324 
    325         m_pActionCreate->setShortcut(QKeySequence("Ctrl+C"));
    326         m_pActionCreate->setIcon(UIIconPool::iconSetFull(QString(":/%1_add_32px.png").arg(strPrefix),
    327                                                          QString(":/%1_add_16px.png").arg(strPrefix),
    328                                                          QString(":/%1_add_disabled_32px.png").arg(strPrefix),
    329                                                          QString(":/%1_add_disabled_16px.png").arg(strPrefix)));
    330         if (m_pMainMenu)
    331             m_pMainMenu->addAction(m_pActionCreate);
    332         if (m_pToolBar)
    333             m_pToolBar->addAction(m_pActionCreate);
    334     }
    335 
    336 
    337     m_pActionRefresh = new QAction(this);
    338     if (m_pActionRefresh)
    339     {
    340         m_pActionRefresh->setShortcut(QKeySequence(QKeySequence::Refresh));
    341         if (m_pActionRefresh && m_pActionRefresh->icon().isNull())
    342             m_pActionRefresh->setIcon(UIIconPool::iconSetFull(":/refresh_32px.png", ":/refresh_16px.png",
    343                                                               ":/refresh_disabled_32px.png", ":/refresh_disabled_16px.png"));
    344         if (m_pMainMenu)
    345             m_pMainMenu->addAction(m_pActionRefresh);
    346         if (m_pToolBar)
    347             m_pToolBar->addAction(m_pActionRefresh);
    348     }
    349 }
    350 
    351 void UIMediumSelector::prepareConnections()
    352 {
    353     /* Configure medium-enumeration connections: */
    354     connect(&vboxGlobal(), &VBoxGlobal::sigMediumEnumerationStarted,
    355             this, &UIMediumSelector::sltHandleMediumEnumerationStart);
    356     connect(&vboxGlobal(), &VBoxGlobal::sigMediumEnumerated,
    357             this, &UIMediumSelector::sltHandleMediumEnumerated);
    358     connect(&vboxGlobal(), &VBoxGlobal::sigMediumEnumerationFinished,
    359             this, &UIMediumSelector::sltHandleMediumEnumerationFinish);
    360     if (m_pActionAdd)
    361         connect(m_pActionAdd, &QAction::triggered, this, &UIMediumSelector::sltAddMedium);
    362     if (m_pActionCreate)
    363         connect(m_pActionCreate, &QAction::triggered, this, &UIMediumSelector::sltCreateMedium);
    364     if (m_pActionRefresh)
    365         connect(m_pActionRefresh, &QAction::triggered, this, &UIMediumSelector::sltHandleRefresh);
    366 
    367     if (m_pTreeWidget)
    368     {
    369         connect(m_pTreeWidget, &QITreeWidget::itemSelectionChanged, this, &UIMediumSelector::sltHandleItemSelectionChanged);
    370         connect(m_pTreeWidget, &QITreeWidget::itemDoubleClicked, this, &UIMediumSelector::sltHandleTreeWidgetDoubleClick);
    371         connect(m_pTreeWidget, &QITreeWidget::customContextMenuRequested, this, &UIMediumSelector::sltHandleTreeContextMenuRequest);
    372     }
    373 
    374     if (m_pButtonBox)
    375     {
    376         connect(m_pButtonBox, &QIDialogButtonBox::rejected, this, &UIMediumSelector::close);
    377         connect(m_pButtonBox, &QIDialogButtonBox::accepted, this, &UIMediumSelector::accept);
    378     }
    379 
    380     if (m_pSearchWidget)
    381     {
    382         connect(m_pSearchWidget, &UIMediumSearchWidget::sigPerformSearch,
    383                 this, &UIMediumSelector::sltHandlePerformSearch);
    384         connect(m_pSearchWidget, &UIMediumSearchWidget::sigShowNextMatchingItem,
    385                 this, &UIMediumSelector::sltHandleShowNextMatchingItem);
    386         connect(m_pSearchWidget, &UIMediumSearchWidget::sigShowPreviousMatchingItem,
    387                 this, &UIMediumSelector::sltHandleShowPreviousMatchingItem);
    388     }
    389 }
    390 
    391 UIMediumItem* UIMediumSelector::addTreeItem(const UIMedium &medium, QITreeWidgetItem *pParent)
    392 {
    393     if (!pParent)
    394         return 0;
    395     switch (m_enmMediumType)
    396     {
    397         case UIMediumDeviceType_DVD:
    398             return new UIMediumItemCD(medium, pParent);
    399             break;
    400         case UIMediumDeviceType_Floppy:
    401             return new UIMediumItemFD(medium, pParent);
    402             break;
    403         case UIMediumDeviceType_HardDisk:
    404         case UIMediumDeviceType_All:
    405         case UIMediumDeviceType_Invalid:
    406         default:
    407             return createHardDiskItem(medium, pParent);
    408             break;
    409     }
    410 }
    411 
    412 UIMediumItem* UIMediumSelector::createHardDiskItem(const UIMedium &medium, QITreeWidgetItem *pParent)
    413 {
    414     if (medium.medium().isNull())
    415         return 0;
    416     if (!m_pTreeWidget)
    417         return 0;
    418     /* Search the tree to see if we already have the item: */
    419     UIMediumItem *pMediumItem = searchItem(0, medium.id());
    420     if (pMediumItem)
    421         return pMediumItem;
    422     /* Check if the corresponding medium has a parent */
    423     if (medium.parentID() != UIMedium::nullID())
    424     {
    425         UIMediumItem *pParentMediumItem = searchItem(0, medium.parentID());
    426         /* If parent medium-item was not found we create it: */
    427         if (!pParentMediumItem)
    428         {
    429             /* Make sure corresponding parent medium is already cached! */
    430             UIMedium parentMedium = vboxGlobal().medium(medium.parentID());
    431             if (parentMedium.isNull())
    432                 AssertMsgFailed(("Parent medium with ID={%s} was not found!\n", medium.parentID().toString().toUtf8().constData()));
    433             /* Try to create parent medium-item: */
    434             else
    435                 pParentMediumItem = createHardDiskItem(parentMedium, pParent);
    436         }
    437         if (pParentMediumItem)
    438         {
    439             pMediumItem = new UIMediumItemHD(medium, pParentMediumItem);
    440             LogRel2(("UIMediumManager: Child hard-disk medium-item with ID={%s} created.\n", medium.id().toString().toUtf8().constData()));
    441         }
    442         else
    443             AssertMsgFailed(("Parent medium with ID={%s} could not be created!\n", medium.parentID().toString().toUtf8().constData()));
    444     }
    445 
    446     /* No parents, thus just create item as top-level one: */
    447     else
    448     {
    449         pMediumItem = new UIMediumItemHD(medium, pParent);
    450         LogRel2(("UIMediumManager: Root hard-disk medium-item with ID={%s} created.\n", medium.id().toString().toUtf8().constData()));
    451     }
    452     return pMediumItem;
    453 }
    454 
    455 void UIMediumSelector::restoreSelection(const QList<QUuid> &selectedMediums, QVector<UIMediumItem*> &mediumList)
    456 {
    457     if (!m_pTreeWidget)
    458         return;
    459     if (selectedMediums.isEmpty())
    460     {
    461         m_pTreeWidget->setCurrentItem(0);
    462         return;
    463     }
    464     bool selected = false;
    465     for (int i = 0; i < mediumList.size(); ++i)
    466     {
    467         if (!mediumList[i])
    468             continue;
    469         if (selectedMediums.contains(mediumList[i]->medium().id()))
    470         {
    471             mediumList[i]->setSelected(true);
    472             selected = true;
    473         }
    474     }
    475 
    476     if (!selected)
    477         m_pTreeWidget->setCurrentItem(0);
    478     return;
    479 }
    480 
    481 void UIMediumSelector::prepareWidgets()
    482 {
    483     m_pCentralWidget = new QWidget;
    484     if (!m_pCentralWidget)
    485         return;
    486     setCentralWidget(m_pCentralWidget);
    487 
    488     m_pMainLayout = new QVBoxLayout;
    489     m_pCentralWidget->setLayout(m_pMainLayout);
    490 
    491     if (!m_pMainLayout || !menuBar())
    492         return;
    493 
    494     m_pMainMenu = menuBar()->addMenu(tr("Medium"));
    495 
    496     m_pToolBar = new UIToolBar(parentWidget());
    497     if (m_pToolBar)
    498     {
    499         /* Configure toolbar: */
    500         const int iIconMetric = (int)(QApplication::style()->pixelMetric(QStyle::PM_LargeIconSize));
    501         m_pToolBar->setIconSize(QSize(iIconMetric, iIconMetric));
    502         m_pToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
    503         m_pMainLayout->addWidget(m_pToolBar);
    504     }
    505 
    506     m_pTreeWidget = new QITreeWidget;
    507     if (m_pTreeWidget)
    508     {
    509         m_pTreeWidget->setSelectionMode(QAbstractItemView::SingleSelection);
    510         m_pMainLayout->addWidget(m_pTreeWidget);
    511         m_pTreeWidget->setAlternatingRowColors(true);
    512         int iColumnCount = (m_enmMediumType == UIMediumDeviceType_HardDisk) ? 3 : 2;
    513         m_pTreeWidget->setColumnCount(iColumnCount);
    514         m_pTreeWidget->setSortingEnabled(true);
    515         m_pTreeWidget->sortItems(0, Qt::AscendingOrder);
    516         m_pTreeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
    517     }
    518 
    519     m_pSearchWidget = new UIMediumSearchWidget;
    520     if (m_pSearchWidget)
    521     {
    522         m_pMainLayout->addWidget(m_pSearchWidget);
    523     }
    524 
    525     m_pButtonBox = new QIDialogButtonBox;
    526     if (m_pButtonBox)
    527     {
    528         /* Configure button-box: */
    529         m_pButtonBox->setStandardButtons(QDialogButtonBox::Cancel | QDialogButtonBox::Ok);
    530         m_pButtonBox->button(QDialogButtonBox::Cancel)->setShortcut(Qt::Key_Escape);
    531 
    532         /* Add button-box into main layout: */
    533         m_pMainLayout->addWidget(m_pButtonBox);
    534     }
    535 
    536     repopulateTreeWidget();
    537 }
    538 
    539 void UIMediumSelector::sltAddMedium()
    540 {
    541     QString strDefaultMachineFolder = vboxGlobal().virtualBox().GetSystemProperties().GetDefaultMachineFolder();
    542     QUuid uMediumID = vboxGlobal().openMediumWithFileOpenDialog(m_enmMediumType, this, strDefaultMachineFolder);
    543     if (uMediumID.isNull())
    544         return;
    545     repopulateTreeWidget();
    546     selectMedium(uMediumID);
    547 
    548 }
    549 
    550 void UIMediumSelector::sltCreateMedium()
    551 {
    552     QString strMachineFolder = QFileInfo(m_strMachineSettingsFilePath).absolutePath();
    553     UIFDCreationDialog *pDialog = new UIFDCreationDialog(this, m_strMachineName, strMachineFolder);
    554     if (pDialog->exec())
    555     {
    556         repopulateTreeWidget();
    557         selectMedium(pDialog->mediumID());
    558     }
    559     delete pDialog;
    560 }
    561 
    562 void UIMediumSelector::sltHandleItemSelectionChanged()
    563 {
    564     updateOkButton();
    565 }
    566 
    567 void UIMediumSelector::sltHandleTreeWidgetDoubleClick(QTreeWidgetItem * item, int column)
    568 {
    569     Q_UNUSED(column);
    570     if (!dynamic_cast<UIMediumItem*>(item))
    571         return;
    572     accept();
    573 }
    574 
    575 
    576 void UIMediumSelector::sltHandleMediumEnumerationStart()
    577 {
    578     /* Disable controls. Left Alone button box 'Ok' button. it is handle by tree population: */
    579     if (m_pActionRefresh)
    580         m_pActionRefresh->setEnabled(false);
    581 }
    582 
    583 void UIMediumSelector::sltHandleMediumEnumerated()
    584 {
    585 }
    586 
    587 void UIMediumSelector::sltHandleMediumEnumerationFinish()
    588 {
    589     repopulateTreeWidget();
    590     if (m_pActionRefresh)
    591         m_pActionRefresh->setEnabled(true);
    592 }
    593 
    594 void UIMediumSelector::sltHandleRefresh()
    595 {
    596     /* Initialize media enumation: */
    597     vboxGlobal().startMediumEnumeration();
    598 }
    599 
    600 void UIMediumSelector::sltHandlePerformSearch()
    601 {
    602     performMediumSearch();
    603 }
    604 
    605 void UIMediumSelector::sltHandleShowNextMatchingItem()
    606 {
    607     if (m_mathingItemList.isEmpty())
    608         return;
    609 
    610     if (++m_iCurrentShownIndex >= m_mathingItemList.size())
    611         m_iCurrentShownIndex = 0;
    612     scrollToItem(m_mathingItemList[m_iCurrentShownIndex]);
    613 }
    614 
    615 void UIMediumSelector::sltHandleShowPreviousMatchingItem()
    616 {
    617     if (m_mathingItemList.isEmpty())
    618         return;
    619     if (--m_iCurrentShownIndex < 0)
    620         m_iCurrentShownIndex = m_mathingItemList.size() -1;
    621     scrollToItem(m_mathingItemList[m_iCurrentShownIndex]);
    622 }
    623 
    624 void UIMediumSelector::sltHandleTreeContextMenuRequest(const QPoint &point)
    625 {
    626     QWidget *pSender = qobject_cast<QWidget*>(sender());
    627     if (!pSender)
    628         return;
    629 
    630     QMenu menu;
    631     QAction *pExpandAll = menu.addAction(tr("Expand All"));
    632     QAction *pCollapseAll = menu.addAction(tr("Collapse All"));
    633 
    634     connect(pExpandAll, &QAction::triggered, this, &UIMediumSelector::sltHandleTreeExpandAllSignal);
    635     connect(pCollapseAll, &QAction::triggered, this, &UIMediumSelector::sltHandleTreeCollapseAllSignal);
    636 
    637     menu.exec(pSender->mapToGlobal(point));
    638 }
    639 
    640 void UIMediumSelector::sltHandleTreeExpandAllSignal()
    641 {
    642     if (m_pTreeWidget)
    643         m_pTreeWidget->expandAll();
    644 }
    645 
    646 void UIMediumSelector::sltHandleTreeCollapseAllSignal()
    647 {
    648     if (m_pTreeWidget)
    649         m_pTreeWidget->collapseAll();
    650 
    651     if (m_pAttachedSubTreeRoot)
    652         m_pTreeWidget->setExpanded(m_pTreeWidget->itemIndex(m_pAttachedSubTreeRoot), true);
    653     if (m_pNotAttachedSubTreeRoot)
    654         m_pTreeWidget->setExpanded(m_pTreeWidget->itemIndex(m_pNotAttachedSubTreeRoot), true);
    655 }
    656 
    657 void UIMediumSelector::selectMedium(const QUuid &uMediumID)
    658 {
    659     if (!m_pTreeWidget)
    660         return;
    661     UIMediumItem *pMediumItem = searchItem(0, uMediumID);
    662     if (pMediumItem)
    663     {
    664         m_pTreeWidget->setCurrentItem(pMediumItem);
    665 
    666     }
    667 }
    668 
    669 void UIMediumSelector::updateOkButton()
    670 {
    671 
    672     if (!m_pTreeWidget || !m_pButtonBox || !m_pButtonBox->button(QDialogButtonBox::Ok))
    673         return;
    674     QList<QTreeWidgetItem*> selectedItems = m_pTreeWidget->selectedItems();
    675     if (selectedItems.isEmpty())
    676     {
    677         m_pButtonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
    678         return;
    679     }
    680 
    681     /* check if at least one of the selected items is a UIMediumItem */
    682     bool mediumItemSelected = false;
    683     for (int i = 0; i < selectedItems.size() && !mediumItemSelected; ++i)
    684     {
    685         if (dynamic_cast<UIMediumItem*>(selectedItems.at(i)))
    686             mediumItemSelected = true;
    687     }
    688     if (mediumItemSelected)
    689         m_pButtonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
    690     else
    691         m_pButtonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
    692 }
    693 
    694 void UIMediumSelector::finalize()
    695 {
    696     /* Apply language settings: */
    697     retranslateUi();
    698 }
    699 
    700 void UIMediumSelector::showEvent(QShowEvent *pEvent)
    701 {
    702     Q_UNUSED(pEvent);
    703 
    704     /* Try to determine the initial size: */
    705     QSize proposedSize;
    706     int iHostScreen = 0;
    707     if (m_pParent)
    708         iHostScreen = gpDesktop->screenNumber(m_pParent);
    709     else
    710         iHostScreen = gpDesktop->screenNumber(this);
    711     if (iHostScreen >= 0 && iHostScreen < gpDesktop->screenCount())
    712     {
    713         /* On the basis of current host-screen geometry if possible: */
    714         const QRect screenGeometry = gpDesktop->screenGeometry(iHostScreen);
    715         if (screenGeometry.isValid())
    716             proposedSize = screenGeometry.size() * 5 / 15;
    717     }
    718     /* Fallback to default size if we failed: */
    719     if (proposedSize.isNull())
    720         proposedSize = QSize(800, 600);
    721     /* Resize to initial size: */
    722     resize(proposedSize);
    723 
    724     if (m_pParent)
    725         VBoxGlobal::centerWidget(this, m_pParent, false);
    726 
    727 }
    728 
    729 void UIMediumSelector::repopulateTreeWidget()
    730 {
    731     if (!m_pTreeWidget)
    732         return;
    733     /* Cache the currently selected items: */
    734     QList<QTreeWidgetItem*> selectedItems = m_pTreeWidget->selectedItems();
    735     QList<QUuid> selectedMedia = selectedMediumIds();
    736     /* uuid list of selected items: */
    737     /* Reset the related data structure: */
    738     m_mediumItemList.clear();
    739     m_pTreeWidget->clear();
    740     m_pAttachedSubTreeRoot = 0;
    741     m_pNotAttachedSubTreeRoot = 0;
    742     QVector<UIMediumItem*> menuItemVector;
    743 
    744     foreach (const QUuid &uMediumID, vboxGlobal().mediumIDs())
    745     {
    746         UIMedium medium = vboxGlobal().medium(uMediumID);
    747         //printf("name %s\n", qPrintable(medium.name()));
    748         if (medium.type() == m_enmMediumType)
    749         {
    750             bool isMediumAttached = !(medium.medium().GetMachineIds().isEmpty());
    751             QITreeWidgetItem *pParent = 0;
    752             if (isMediumAttached)
    753             {
    754                 if (!m_pAttachedSubTreeRoot)
    755                 {
    756                     QStringList strList;
    757                     strList << "Attached";
    758                     m_pAttachedSubTreeRoot = new QITreeWidgetItem(m_pTreeWidget, strList);
    759                 }
    760                 pParent = m_pAttachedSubTreeRoot;
    761 
    762             }
    763             else
    764             {
    765                 if (!m_pNotAttachedSubTreeRoot)
    766                 {
    767                     QStringList strList;
    768                     strList << "Not Attached";
    769                     m_pNotAttachedSubTreeRoot = new QITreeWidgetItem(m_pTreeWidget, strList);
    770                 }
    771                 pParent = m_pNotAttachedSubTreeRoot;
    772             }
    773             UIMediumItem *treeItem = addTreeItem(medium, pParent);
    774             m_mediumItemList.append(treeItem);
    775             menuItemVector.push_back(treeItem);
    776         }
    777     }
    778     restoreSelection(selectedMedia, menuItemVector);
    779     saveDefaultForeground();
    780     updateOkButton();
    781     if (m_pAttachedSubTreeRoot)
    782         m_pTreeWidget->expandItem(m_pAttachedSubTreeRoot);
    783 
    784     if (m_pNotAttachedSubTreeRoot)
    785         m_pTreeWidget->expandItem(m_pNotAttachedSubTreeRoot);
    786 
    787     m_pTreeWidget->resizeColumnToContents(0);
    788     performMediumSearch();
    789 }
    790 
    791 void UIMediumSelector::saveDefaultForeground()
    792 {
    793     if (!m_pTreeWidget)
    794         return;
    795     if (m_defaultItemForeground == QBrush() && m_pTreeWidget->topLevelItemCount() >= 1)
    796     {
    797         QTreeWidgetItem *item = m_pTreeWidget->topLevelItem(0);
    798         if (item)
    799         {
    800             QVariant data = item->data(0, Qt::ForegroundRole);
    801             if (data.canConvert<QBrush>())
    802             {
    803                 m_defaultItemForeground = data.value<QBrush>();
    804             }
    805         }
    806     }
    807 }
    808 
    809 UIMediumItem* UIMediumSelector::searchItem(const QTreeWidgetItem *pParent, const QUuid &mediumId)
    810 {
    811     if (!m_pTreeWidget)
    812         return 0;
    813     if (!pParent)
    814     {
    815         pParent = m_pTreeWidget->invisibleRootItem();
    816     }
    817     if (!pParent)
    818         return 0;
    819 
    820     for (int i = 0; i < pParent->childCount(); ++i)
    821     {
    822         QTreeWidgetItem *pChild = pParent->child(i);
    823         if (!pChild)
    824             continue;
    825         UIMediumItem *mediumItem = dynamic_cast<UIMediumItem*>(pChild);
    826         if (mediumItem)
    827         {
    828             if (mediumItem->id() == mediumId)
    829             {
    830                 return mediumItem;
    831             }
    832         }
    833         UIMediumItem *pResult = searchItem(pChild, mediumId);
    834         if (pResult)
    835             return pResult;
    836     }
    837     return 0;
    838 }
    839 
    840 void UIMediumSelector::performMediumSearch()
    841 {
    842     if (!m_pSearchWidget || !m_pTreeWidget)
    843         return;
    844     /* Unmark all tree items to remove the highltights: */
    845     for (int i = 0; i < m_mediumItemList.size(); ++i)
    846     {
    847         for (int j = 0; j < m_pTreeWidget->columnCount(); ++j)
    848         {
    849             if (m_mediumItemList[i])
    850                 m_mediumItemList[i]->setData(j, Qt::ForegroundRole, m_defaultItemForeground);
    851         }
    852     }
    853 
    854     m_mathingItemList.clear();
    855     m_iCurrentShownIndex = 0;
    856 
    857     UIMediumSearchWidget::SearchType searchType =
    858         m_pSearchWidget->searchType();
    859     if (searchType >= UIMediumSearchWidget::SearchByMax)
    860         return;
    861     QString strTerm = m_pSearchWidget->searchTerm();
    862     if (strTerm.isEmpty())
    863         return;
    864 
    865     for (int i = 0; i < m_mediumItemList.size(); ++i)
    866     {
    867         if (!m_mediumItemList[i])
    868             continue;
    869         QString strMedium;
    870         if (searchType == UIMediumSearchWidget::SearchByName)
    871             strMedium = m_mediumItemList[i]->medium().name();
    872         else if(searchType == UIMediumSearchWidget::SearchByUUID)
    873             strMedium = m_mediumItemList[i]->medium().id().toString();
    874         if (strMedium.isEmpty())
    875             continue;
    876         if (strMedium.contains(strTerm, Qt::CaseInsensitive))
    877         {
    878             /* mark all the items by setting foregroung color to red: */
    879             for (int j = 0; j < m_pTreeWidget->columnCount(); ++j)
    880                 m_mediumItemList[i]->setData(j, Qt::ForegroundRole, QBrush(QColor(255, 0, 0)));
    881             m_mathingItemList.append(m_mediumItemList[i]);
    882         }
    883     }
    884     if (!m_mathingItemList.isEmpty())
    885         scrollToItem(m_mathingItemList[0]);
    886 }
    887 
    888 void UIMediumSelector::scrollToItem(UIMediumItem* pItem)
    889 {
    890     if (!pItem)
    891         return;
    892 
    893     QModelIndex itemIndex = m_pTreeWidget->itemIndex(pItem);
    894     for (int i = 0; i < m_mediumItemList.size(); ++i)
    895     {
    896         QFont font = m_mediumItemList[i]->font(0);
    897         font.setBold(false);
    898         m_mediumItemList[i]->setFont(0, font);
    899     }
    900     QFont font = pItem->font(0);
    901     font.setBold(true);
    902     pItem->setFont(0, font);
    903 
    904     m_pTreeWidget->scrollTo(itemIndex);
    905     //m_pTreeWidget->setCurrentIndex(itemIndex);
    906 }
    907 
    908 
    909 #include "UIMediumSelector.moc"
  • trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumSearchWidget.h

    r76969 r76979  
    11/* $Id$ */
    22/** @file
    3  * VBox Qt GUI - UIMediumSelector class declaration.
     3 * VBox Qt GUI - UIMediumSearchWidget class declaration.
    44 */
    55
     
    1616 */
    1717
    18 #ifndef FEQT_INCLUDED_SRC_medium_UIMediumSelector_h
    19 #define FEQT_INCLUDED_SRC_medium_UIMediumSelector_h
     18#ifndef FEQT_INCLUDED_SRC_medium_UIMediumSearchWidget_h
     19#define FEQT_INCLUDED_SRC_medium_UIMediumSearchWidget_h
    2020#ifndef RT_WITHOUT_PRAGMA_ONCE
    2121# pragma once
     
    2323
    2424/* GUI includes: */
    25 #include "QIMainDialog.h"
    2625#include "QIWithRetranslateUI.h"
    27 #include "UIMedium.h"
    28 #include "UIMediumDefs.h"
    29 #include "UIMediumDetailsWidget.h"
    3026
    3127/* Forward declarations: */
    3228class QAction;
    33 class QTreeWidgetItem;
    34 class QITreeWidget;
    35 class QITreeWidgetItem;
    36 class QVBoxLayout;
     29class QLineEdit;
     30class QIComboBox;
    3731class QIDialogButtonBox;
    38 class UIMediumItem;
    39 class UIMediumSearchWidget;
    40 class UIToolBar;
     32class QIToolButton;
    4133
    42 
    43 /** QIDialog extension providing GUI with a dialog to select an existing medium. */
    44 class SHARED_LIBRARY_STUFF UIMediumSelector : public QIWithRetranslateUI<QIMainDialog>
     34/** QWidget extension providing a simple way to enter a earch term and search type for medium searching
     35 *  in virtual media manager, medium selection dialog, etc. */
     36class  SHARED_LIBRARY_STUFF UIMediumSearchWidget : public QIWithRetranslateUI<QWidget>
    4537{
    46 
    4738    Q_OBJECT;
    4839
    4940signals:
    5041
     42    void sigPerformSearch();
     43    void sigShowNextMatchingItem();
     44    void sigShowPreviousMatchingItem();
     45
    5146public:
    5247
    53     UIMediumSelector(UIMediumDeviceType enmMediumType, const QString &machineName = QString(),
    54                      const QString &machineSettigFilePath = QString(), QWidget *pParent = 0);
    55     QList<QUuid> selectedMediumIds() const;
     48    enum SearchType
     49    {
     50        SearchByName,
     51        SearchByUUID,
     52        SearchByMax
     53    };
     54
     55public:
     56
     57    UIMediumSearchWidget(QWidget *pParent = 0);
     58    SearchType searchType() const;
     59    QString searchTerm() const;
    5660
    5761protected:
    5862
    59     void showEvent(QShowEvent *pEvent);
     63    void retranslateUi() /* override */;
    6064
    61 private slots:
     65private:
    6266
    63     void sltAddMedium();
    64     void sltCreateMedium();
    65     void sltHandleItemSelectionChanged();
    66     void sltHandleTreeWidgetDoubleClick(QTreeWidgetItem * item, int column);
    67     void sltHandleMediumEnumerationStart();
    68     void sltHandleMediumEnumerated();
    69     void sltHandleMediumEnumerationFinish();
    70     void sltHandleRefresh();
    71     void sltHandlePerformSearch();
    72     void sltHandleShowNextMatchingItem();
    73     void sltHandleShowPreviousMatchingItem();
    74     void sltHandleTreeContextMenuRequest(const QPoint &point);
    75     void sltHandleTreeExpandAllSignal();
    76     void sltHandleTreeCollapseAllSignal();
    77 
    78  private:
    79 
    80 
    81     /** @name Event-handling stuff.
    82       * @{ */
    83         /** Handles translation event. */
    84         virtual void retranslateUi() /* override */;
    85     /** @} */
    86 
    87     /** @name Prepare/cleanup cascade.
    88       * @{ */
    89         /** Configures all. */
    90             void configure();
    91             void prepareWidgets();
    92             void prepareActions();
    93             void prepareConnections();
    94         /** Perform final preparations. */
    95         void finalize();
    96     /** @} */
    97 
    98     void          repopulateTreeWidget();
    99     /** Disable/enable 'ok' button on the basis of having a selected item */
    100     void          updateOkButton();
    101     UIMediumItem* addTreeItem(const UIMedium &medium, QITreeWidgetItem *pParent);
    102     void          restoreSelection(const QList<QUuid> &selectedMediums, QVector<UIMediumItem*> &mediumList);
    103     /** Recursively create the hard disk hierarchy under the tree widget */
    104     UIMediumItem* createHardDiskItem(const UIMedium &medium, QITreeWidgetItem *pParent);
    105     UIMediumItem* searchItem(const QTreeWidgetItem *pParent, const QUuid &mediumId);
    106     void          performMediumSearch();
    107     /** Remember the default foreground brush of the tree so that we can reset tree items' foreground later */
    108     void          saveDefaultForeground();
    109     void          selectMedium(const QUuid &uMediumID);
    110     void          scrollToItem(UIMediumItem* pItem);
    111     QWidget              *m_pCentralWidget;
    112     QVBoxLayout          *m_pMainLayout;
    113     QITreeWidget         *m_pTreeWidget;
    114     UIMediumDeviceType    m_enmMediumType;
    115     QIDialogButtonBox    *m_pButtonBox;
    116     QMenu                *m_pMainMenu;
    117     UIToolBar            *m_pToolBar;
    118     QAction              *m_pActionAdd;
    119     QAction              *m_pActionCreate;
    120     QAction              *m_pActionRefresh;
    121     /** All the known media that are already attached to some vm are added under the following top level tree item */
    122     QITreeWidgetItem     *m_pAttachedSubTreeRoot;
    123     /** All the known media that are not attached to any vm are added under the following top level tree item */
    124     QITreeWidgetItem     *m_pNotAttachedSubTreeRoot;
    125     QWidget              *m_pParent;
    126     UIMediumSearchWidget *m_pSearchWidget;
    127     /** The list all items added to tree. kept in sync. with tree to make searching easier (faster). */
    128     QList<UIMediumItem*>  m_mediumItemList;
    129     /** List of items that are matching to the search. */
    130     QList<UIMediumItem*>  m_mathingItemList;
    131     /** Index of the currently shown (scrolled) item in the m_mathingItemList. */
    132     int                   m_iCurrentShownIndex;
    133     QBrush                m_defaultItemForeground;
    134     QString               m_strMachineSettingsFilePath;
    135     QString               m_strMachineName;
     67    void              prepareWidgets();
     68    QIComboBox       *m_pSearchComboxBox;
     69    QLineEdit        *m_pSearchTermLineEdit;
     70    QIToolButton     *m_pShowNextMatchButton;
     71    QIToolButton     *m_pShowPreviousMatchButton;
    13672};
    13773
    138 #endif /* !FEQT_INCLUDED_SRC_medium_UIMediumSelector_h */
     74#endif /* !FEQT_INCLUDED_SRC_medium_UIMediumSearchWidget_h */
  • trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumSelector.cpp

    r76909 r76979  
    2424
    2525/* GUI includes: */
    26 #include "QIComboBox.h"
    2726#include "QIDialogButtonBox.h"
    2827#include "QIFileDialog.h"
    29 #include "QILineEdit.h"
    3028#include "QIMessageBox.h"
    3129#include "QITabWidget.h"
     
    3533#include "UIExtraDataManager.h"
    3634#include "UIFDCreationDialog.h"
     35#include "UIMediumSearchWidget.h"
    3736#include "UIMediumSelector.h"
    3837#include "UIMessageCenter.h"
     
    5453#endif /* VBOX_WS_MAC */
    5554
    56 /*********************************************************************************************************************************
    57 *   UIMediumSearchWidget definition.                                                                                         *
    58 *********************************************************************************************************************************/
    59 /** QWidget extension providing a simple way to enter a earch term and search type for medium searching
    60  *  in virtual media manager, medium selection dialog, etc. */
    61 class UIMediumSearchWidget : public QIWithRetranslateUI<QWidget>
    62 {
    63     Q_OBJECT;
    64 
    65 public:
    66 
    67     enum SearchType
    68     {
    69         SearchByName,
    70         SearchByUUID,
    71         SearchByMax
    72     };
    73 
    74 signals:
    75 
    76     void sigPerformSearch();
    77     void sigShowNextMatchingItem();
    78     void sigShowPreviousMatchingItem();
    79 
    80 public:
    81 
    82     UIMediumSearchWidget(QWidget *pParent = 0);
    83     SearchType searchType() const;
    84     QString searchTerm() const;
    85 
    86 protected:
    87 
    88     void retranslateUi() /* override */;
    89 
    90 private:
    91 
    92     void              prepareWidgets();
    93     QIComboBox       *m_pSearchComboxBox;
    94     QLineEdit        *m_pSearchTermLineEdit;
    95     QIToolButton     *m_pShowNextMatchButton;
    96     QIToolButton     *m_pShowPreviousMatchButton;
    97 };
    98 
    99 
    100 /*********************************************************************************************************************************
    101 *   UIMediumSearchWidget implementation.                                                                                         *
    102 *********************************************************************************************************************************/
    103 
    104 UIMediumSearchWidget::UIMediumSearchWidget(QWidget *pParent)
    105     :QIWithRetranslateUI<QWidget>(pParent)
    106     , m_pSearchComboxBox(0)
    107     , m_pSearchTermLineEdit(0)
    108     , m_pShowNextMatchButton(0)
    109     , m_pShowPreviousMatchButton(0)
    110 {
    111     prepareWidgets();
    112 }
    113 
    114 void UIMediumSearchWidget::prepareWidgets()
    115 {
    116     QHBoxLayout *pLayout = new QHBoxLayout;
    117     setLayout(pLayout);
    118     pLayout->setContentsMargins(0, 0, 0, 0);
    119     pLayout->setSpacing(0);
    120 
    121     m_pSearchComboxBox = new QIComboBox;
    122     if (m_pSearchComboxBox)
    123     {
    124         m_pSearchComboxBox->setEditable(false);
    125         m_pSearchComboxBox->insertItem(SearchByName, "Search By Name");
    126         m_pSearchComboxBox->insertItem(SearchByUUID, "Search By UUID");
    127         pLayout->addWidget(m_pSearchComboxBox);
    128 
    129         connect(m_pSearchComboxBox, static_cast<void(QIComboBox::*)(int)>(&QIComboBox::currentIndexChanged),
    130                 this, &UIMediumSearchWidget::sigPerformSearch);
    131 
    132     }
    133 
    134     m_pSearchTermLineEdit = new QLineEdit;
    135     if (m_pSearchTermLineEdit)
    136     {
    137         m_pSearchTermLineEdit->setClearButtonEnabled(true);
    138         pLayout->addWidget(m_pSearchTermLineEdit);
    139         connect(m_pSearchTermLineEdit, &QILineEdit::textChanged,
    140                 this, &UIMediumSearchWidget::sigPerformSearch);
    141     }
    142 
    143     m_pShowPreviousMatchButton = new QIToolButton;
    144     if (m_pShowPreviousMatchButton)
    145     {
    146         m_pShowPreviousMatchButton->setIcon(UIIconPool::iconSet(":/log_viewer_search_backward_16px.png", ":/log_viewer_search_backward_disabled_16px.png"));
    147         connect(m_pShowPreviousMatchButton, &QIToolButton::clicked, this, &UIMediumSearchWidget::sigShowPreviousMatchingItem);
    148         pLayout->addWidget(m_pShowPreviousMatchButton);
    149     }
    150     m_pShowNextMatchButton = new QIToolButton;
    151     if (m_pShowNextMatchButton)
    152     {
    153         m_pShowNextMatchButton->setIcon(UIIconPool::iconSet(":/log_viewer_search_forward_16px.png", ":/log_viewer_search_forward_disabled_16px.png"));
    154         connect(m_pShowNextMatchButton, &QIToolButton::clicked, this, &UIMediumSearchWidget:: sigShowNextMatchingItem);
    155         pLayout->addWidget(m_pShowNextMatchButton);
    156     }
    157 
    158     retranslateUi();
    159 }
    160 
    161 UIMediumSearchWidget::SearchType UIMediumSearchWidget::searchType() const
    162 {
    163     if (!m_pSearchComboxBox || m_pSearchComboxBox->currentIndex() >= static_cast<int>(SearchByMax))
    164         return SearchByMax;
    165     return static_cast<SearchType>(m_pSearchComboxBox->currentIndex());
    166 }
    167 
    168 QString UIMediumSearchWidget::searchTerm() const
    169 {
    170     if (!m_pSearchTermLineEdit)
    171         return QString();
    172     return m_pSearchTermLineEdit->text();
    173 }
    174 
    175 void UIMediumSearchWidget::retranslateUi()
    176 {
    177     if (m_pSearchComboxBox)
    178     {
    179         m_pSearchComboxBox->setItemText(SearchByName, UIMediumSelector::tr("Search By Name"));
    180         m_pSearchComboxBox->setItemText(SearchByUUID, UIMediumSelector::tr("Search By UUID"));
    181         m_pSearchComboxBox->setToolTip(UIMediumSelector::tr("Select the search type"));
    182     }
    183     if (m_pSearchTermLineEdit)
    184         m_pSearchTermLineEdit->setToolTip("Enter the search term and press Return");
    185     if (m_pShowPreviousMatchButton)
    186         m_pShowPreviousMatchButton->setToolTip("Show the previous item matching the search term");
    187     if (m_pShowNextMatchButton)
    188         m_pShowNextMatchButton->setToolTip("Show the next item matching the search term");
    189 }
    190 
    191 /*********************************************************************************************************************************
    192 *   UIMediumSelector implementation.                                                                                         *
    193 *********************************************************************************************************************************/
    19455
    19556UIMediumSelector::UIMediumSelector(UIMediumDeviceType enmMediumType, const QString &machineName /* = QString() */,
     
    903764
    904765    m_pTreeWidget->scrollTo(itemIndex);
    905     //m_pTreeWidget->setCurrentIndex(itemIndex);
    906 }
    907 
    908 
    909 #include "UIMediumSelector.moc"
     766}
  • trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumSelector.h

    r76909 r76979  
    2727#include "UIMedium.h"
    2828#include "UIMediumDefs.h"
    29 #include "UIMediumDetailsWidget.h"
     29
    3030
    3131/* Forward declarations: */
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