VirtualBox

Changeset 50964 in vbox for trunk/src/VBox/Frontends


Ignore:
Timestamp:
Apr 3, 2014 2:18:01 PM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
93122
Message:

FE/Qt: Medium Manager rework/cleanup: Tribute to paranoia: Protecting everything from non-created widgets.

File:
1 edited

Legend:

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

    r50960 r50964  
    706706    /* Create medium-item for corresponding medium: */
    707707    UIMediumItem *pMediumItem = createMediumItem(medium);
    708     AssertPtrReturnVoid(pMediumItem);
     708
     709    /* Make sure medium-item was created: */
     710    if (!pMediumItem)
     711        return;
    709712
    710713    /* If medium-item change allowed and
     
    727730{
    728731    /* Disable 'refresh' action: */
    729     m_pActionRefresh->setEnabled(false);
     732    if (m_pActionRefresh)
     733        m_pActionRefresh->setEnabled(false);
    730734
    731735    /* Reset and show progress-bar: */
    732     m_pProgressBar->setMaximum(vboxGlobal().mediumIDs().size());
    733     m_pProgressBar->setValue(0);
    734     m_pProgressBar->show();
     736    if (m_pProgressBar)
     737    {
     738        m_pProgressBar->setMaximum(vboxGlobal().mediumIDs().size());
     739        m_pProgressBar->setValue(0);
     740        m_pProgressBar->show();
     741    }
    735742
    736743    /* Reset inaccessibility flags: */
     
    740747
    741748    /* Reset tab-widget icons: */
    742     mTabWidget->setTabIcon(TabIndex_HD, m_iconHD);
    743     mTabWidget->setTabIcon(TabIndex_CD, m_iconCD);
    744     mTabWidget->setTabIcon(TabIndex_FD, m_iconFD);
     749    if (mTabWidget)
     750    {
     751        mTabWidget->setTabIcon(TabIndex_HD, m_iconHD);
     752        mTabWidget->setTabIcon(TabIndex_CD, m_iconCD);
     753        mTabWidget->setTabIcon(TabIndex_FD, m_iconFD);
     754    }
    745755
    746756    /* Repopulate tree-widgets content: */
     
    769779
    770780    /* Advance progress-bar: */
    771     m_pProgressBar->setValue(m_pProgressBar->value() + 1);
     781    if (m_pProgressBar)
     782        m_pProgressBar->setValue(m_pProgressBar->value() + 1);
    772783}
    773784
     
    775786{
    776787    /* Hide progress-bar: */
    777     m_pProgressBar->hide();
     788    if (m_pProgressBar)
     789        m_pProgressBar->hide();
    778790
    779791    /* Enable 'refresh' action: */
    780     m_pActionRefresh->setEnabled(true);
     792    if (m_pActionRefresh)
     793        m_pActionRefresh->setEnabled(true);
    781794
    782795    /* Re-fetch all current medium-items: */
     
    846859    /* Get current tree-widget: */
    847860    QTreeWidget *pTreeWidget = currentTreeWidget();
    848 
    849     /* If another tree-widget was focused before,
    850      * move focus to current tree-widget: */
    851     if (qobject_cast<QTreeWidget*>(focusWidget()))
    852         pTreeWidget->setFocus();
     861    if (pTreeWidget)
     862    {
     863        /* If another tree-widget was focused before,
     864         * move focus to current tree-widget: */
     865        if (qobject_cast<QTreeWidget*>(focusWidget()))
     866            pTreeWidget->setFocus();
     867    }
    853868
    854869    /* Update action icons: */
     
    881896void UIMediumManager::sltHandleContextMenuCall(const QPoint &position)
    882897{
    883     /* Get current tree-widget / item: */
     898    /* Get current tree-widget: */
    884899    QTreeWidget *pTreeWidget = currentTreeWidget();
     900    AssertPtrReturnVoid(pTreeWidget);
     901
     902    /* Make sure underlaying item was found: */
    885903    QTreeWidgetItem *pItem = pTreeWidget->itemAt(position);
    886 
    887     /* Skip further actions if item was not found: */
    888904    if (!pItem)
    889905        return;
     
    891907    /* Make sure that item is current one: */
    892908    setCurrentItem(pTreeWidget, pItem);
     909
    893910    /* Show item context menu: */
    894     m_pContextMenu->exec(pTreeWidget->viewport()->mapToGlobal(position));
     911    if (m_pContextMenu)
     912        m_pContextMenu->exec(pTreeWidget->viewport()->mapToGlobal(position));
    895913}
    896914
     
    10031021    /* Create copy-action: */
    10041022    m_pActionCopy = new QAction(this);
     1023    AssertPtrReturnVoid(m_pActionCopy);
    10051024    {
    10061025        /* Configure copy-action: */
     
    10111030    /* Create modify-action: */
    10121031    m_pActionModify = new QAction(this);
     1032    AssertPtrReturnVoid(m_pActionModify);
    10131033    {
    10141034        /* Configure modify-action: */
     
    10191039    /* Create remove-action: */
    10201040    m_pActionRemove  = new QAction(this);
     1041    AssertPtrReturnVoid(m_pActionRemove);
    10211042    {
    10221043        /* Configure remove-action: */
     
    10271048    /* Create release-action: */
    10281049    m_pActionRelease = new QAction(this);
     1050    AssertPtrReturnVoid(m_pActionRelease);
    10291051    {
    10301052        /* Configure release-action: */
     
    10351057    /* Create refresh-action: */
    10361058    m_pActionRefresh = new QAction(this);
     1059    AssertPtrReturnVoid(m_pActionRefresh);
    10371060    {
    10381061        /* Configure refresh-action: */
     
    10541077    /* Create menu-bar-menu: */
    10551078    m_pMenu = menuBar()->addMenu(QString());
     1079    AssertPtrReturnVoid(m_pMenu);
    10561080    {
    10571081        /* Configure menu-bar-menu: */
     
    10681092    /* Create context-menu: */
    10691093    m_pContextMenu = new QMenu(this);
     1094    AssertPtrReturnVoid(m_pContextMenu);
    10701095    {
    10711096        /* Configure contex-menu: */
     
    10911116    /* Create tool-bar: */
    10921117    m_pToolBar = new UIToolBar(this);
     1118    AssertPtrReturnVoid(m_pToolBar);
    10931119    {
    10941120        /* Configure tool-bar: */
     
    10971123        m_pToolBar->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
    10981124        /* Add tool-bar actions: */
    1099         m_pToolBar->addAction(m_pActionCopy);
    1100         m_pToolBar->addAction(m_pActionModify);
    1101         m_pToolBar->addAction(m_pActionRemove);
    1102         m_pToolBar->addAction(m_pActionRelease);
    1103         m_pToolBar->addAction(m_pActionRefresh);
     1125        if (m_pActionCopy)
     1126            m_pToolBar->addAction(m_pActionCopy);
     1127        if (m_pActionModify)
     1128            m_pToolBar->addAction(m_pActionModify);
     1129        if (m_pActionRemove)
     1130            m_pToolBar->addAction(m_pActionRemove);
     1131        if (m_pActionRelease)
     1132            m_pToolBar->addAction(m_pActionRelease);
     1133        if (m_pActionRefresh)
     1134            m_pToolBar->addAction(m_pActionRefresh);
    11041135        /* Integrate tool-bar into dialog: */
    11051136        QVBoxLayout *pMainLayout = qobject_cast<QVBoxLayout*>(centralWidget()->layout());
     
    12131244    /* Create progress-bar: */
    12141245    m_pProgressBar = new UIEnumerationProgressBar;
     1246    AssertPtrReturnVoid(m_pProgressBar);
    12151247    {
    12161248        /* Configure progress-bar: */
     
    12421274    /* Clear tree-widgets: */
    12431275    QTreeWidget *pTreeWidgetHD = treeWidget(UIMediumType_HardDisk);
     1276    if (pTreeWidgetHD)
     1277    {
     1278        setCurrentItem(pTreeWidgetHD, 0);
     1279        pTreeWidgetHD->clear();
     1280    }
    12441281    QTreeWidget *pTreeWidgetCD = treeWidget(UIMediumType_DVD);
     1282    if (pTreeWidgetCD)
     1283    {
     1284        setCurrentItem(pTreeWidgetCD, 0);
     1285        pTreeWidgetCD->clear();
     1286    }
    12451287    QTreeWidget *pTreeWidgetFD = treeWidget(UIMediumType_Floppy);
    1246     setCurrentItem(pTreeWidgetHD, 0);
    1247     setCurrentItem(pTreeWidgetCD, 0);
    1248     setCurrentItem(pTreeWidgetFD, 0);
    1249     pTreeWidgetHD->clear();
    1250     pTreeWidgetCD->clear();
    1251     pTreeWidgetFD->clear();
     1288    if (pTreeWidgetFD)
     1289    {
     1290        setCurrentItem(pTreeWidgetFD, 0);
     1291        pTreeWidgetFD->clear();
     1292    }
    12521293
    12531294    /* Create medium-items (do not change current one): */
     
    12581299
    12591300    /* Select first item as current one if nothing selected: */
    1260     if (!mediumItem(UIMediumType_HardDisk))
     1301    if (pTreeWidgetHD && !mediumItem(UIMediumType_HardDisk))
    12611302        if (QTreeWidgetItem *pItem = pTreeWidgetHD->topLevelItem(0))
    12621303            setCurrentItem(pTreeWidgetHD, pItem);
    1263     if (!mediumItem(UIMediumType_DVD))
     1304    if (pTreeWidgetCD && !mediumItem(UIMediumType_DVD))
    12641305        if (QTreeWidgetItem *pItem = pTreeWidgetCD->topLevelItem(0))
    12651306            setCurrentItem(pTreeWidgetCD, pItem);
    1266     if (!mediumItem(UIMediumType_Floppy))
     1307    if (pTreeWidgetFD && !mediumItem(UIMediumType_Floppy))
    12671308        if (QTreeWidgetItem *pItem = pTreeWidgetFD->topLevelItem(0))
    12681309            setCurrentItem(pTreeWidgetFD, pItem);
     
    13091350    /* Calculate actions accessibility: */
    13101351    bool fNotInEnumeration = !vboxGlobal().isMediumEnumerationInProgress();
    1311     bool fActionEnabledCopy = currentMediumType() == UIMediumType_HardDisk &&
    1312                               fNotInEnumeration && pMediumItem && checkMediumFor(pMediumItem, Action_Copy);
    1313     bool fActionEnabledModify = currentMediumType() == UIMediumType_HardDisk &&
    1314                                 fNotInEnumeration && pMediumItem && checkMediumFor(pMediumItem, Action_Modify);
    1315     bool fActionEnabledRemove = fNotInEnumeration && pMediumItem && checkMediumFor(pMediumItem, Action_Remove);
    1316     bool fActionEnabledRelease = fNotInEnumeration && pMediumItem && checkMediumFor(pMediumItem, Action_Release);
    13171352
    13181353    /* Apply actions accessibility: */
    1319     m_pActionCopy->setEnabled(fActionEnabledCopy);
    1320     m_pActionModify->setEnabled(fActionEnabledModify);
    1321     m_pActionRemove->setEnabled(fActionEnabledRemove);
    1322     m_pActionRelease->setEnabled(fActionEnabledRelease);
     1354    if (m_pActionCopy)
     1355    {
     1356        bool fActionEnabledCopy = currentMediumType() == UIMediumType_HardDisk &&
     1357                                  fNotInEnumeration && pMediumItem && checkMediumFor(pMediumItem, Action_Copy);
     1358        m_pActionCopy->setEnabled(fActionEnabledCopy);
     1359    }
     1360    if (m_pActionModify)
     1361    {
     1362        bool fActionEnabledModify = currentMediumType() == UIMediumType_HardDisk &&
     1363                                    fNotInEnumeration && pMediumItem && checkMediumFor(pMediumItem, Action_Modify);
     1364        m_pActionModify->setEnabled(fActionEnabledModify);
     1365    }
     1366    if (m_pActionRemove)
     1367    {
     1368        bool fActionEnabledRemove = fNotInEnumeration && pMediumItem && checkMediumFor(pMediumItem, Action_Remove);
     1369        m_pActionRemove->setEnabled(fActionEnabledRemove);
     1370    }
     1371    if (m_pActionRelease)
     1372    {
     1373        bool fActionEnabledRelease = fNotInEnumeration && pMediumItem && checkMediumFor(pMediumItem, Action_Release);
     1374        m_pActionRelease->setEnabled(fActionEnabledRelease);
     1375    }
    13231376}
    13241377
    13251378void UIMediumManager::updateActionIcons()
    13261379{
    1327     QString strPrefix;
    1328     switch (currentMediumType())
    1329     {
    1330         case UIMediumType_HardDisk: strPrefix = "hd"; break;
    1331         case UIMediumType_DVD:      strPrefix = "cd"; break;
    1332         case UIMediumType_Floppy:   strPrefix = "fd"; break;
    1333         default: break;
    1334     }
    1335     AssertReturnVoid(!strPrefix.isNull());
    1336     m_pActionCopy->setIcon(UIIconPool::iconSetFull(QSize(22, 22), QSize(16, 16),
    1337                                                    QString(":/%1_copy_22px.png").arg(strPrefix),
    1338                                                    QString(":/%1_copy_16px.png").arg(strPrefix),
    1339                                                    QString(":/%1_copy_disabled_22px.png").arg(strPrefix),
    1340                                                    QString(":/%1_copy_disabled_16px.png").arg(strPrefix)));
    1341     m_pActionModify->setIcon(UIIconPool::iconSetFull(QSize(22, 22), QSize(16, 16),
    1342                                                      QString(":/%1_modify_22px.png").arg(strPrefix),
    1343                                                      QString(":/%1_modify_16px.png").arg(strPrefix),
    1344                                                      QString(":/%1_modify_disabled_22px.png").arg(strPrefix),
    1345                                                      QString(":/%1_modify_disabled_16px.png").arg(strPrefix)));
    1346     m_pActionRemove->setIcon(UIIconPool::iconSetFull(QSize(22, 22), QSize(16, 16),
    1347                                                      QString(":/%1_remove_22px.png").arg(strPrefix),
    1348                                                      QString(":/%1_remove_16px.png").arg(strPrefix),
    1349                                                      QString(":/%1_remove_disabled_22px.png").arg(strPrefix),
    1350                                                      QString(":/%1_remove_disabled_16px.png").arg(strPrefix)));
    1351     m_pActionRelease->setIcon(UIIconPool::iconSetFull(QSize(22, 22), QSize(16, 16),
    1352                                                       QString(":/%1_release_22px.png").arg(strPrefix),
    1353                                                       QString(":/%1_release_16px.png").arg(strPrefix),
    1354                                                       QString(":/%1_release_disabled_22px.png").arg(strPrefix),
    1355                                                       QString(":/%1_release_disabled_16px.png").arg(strPrefix)));
    1356     if (m_pActionRefresh->icon().isNull())
     1380    QString strPrefix = "hd";
     1381    if (mTabWidget)
     1382    {
     1383        switch (currentMediumType())
     1384        {
     1385            case UIMediumType_HardDisk: strPrefix = "hd"; break;
     1386            case UIMediumType_DVD:      strPrefix = "cd"; break;
     1387            case UIMediumType_Floppy:   strPrefix = "fd"; break;
     1388            default: break;
     1389        }
     1390    }
     1391    if (m_pActionCopy)
     1392        m_pActionCopy->setIcon(UIIconPool::iconSetFull(QSize(22, 22), QSize(16, 16),
     1393                                                       QString(":/%1_copy_22px.png").arg(strPrefix),
     1394                                                       QString(":/%1_copy_16px.png").arg(strPrefix),
     1395                                                       QString(":/%1_copy_disabled_22px.png").arg(strPrefix),
     1396                                                       QString(":/%1_copy_disabled_16px.png").arg(strPrefix)));
     1397    if (m_pActionModify)
     1398        m_pActionModify->setIcon(UIIconPool::iconSetFull(QSize(22, 22), QSize(16, 16),
     1399                                                         QString(":/%1_modify_22px.png").arg(strPrefix),
     1400                                                         QString(":/%1_modify_16px.png").arg(strPrefix),
     1401                                                         QString(":/%1_modify_disabled_22px.png").arg(strPrefix),
     1402                                                         QString(":/%1_modify_disabled_16px.png").arg(strPrefix)));
     1403    if (m_pActionRemove)
     1404        m_pActionRemove->setIcon(UIIconPool::iconSetFull(QSize(22, 22), QSize(16, 16),
     1405                                                         QString(":/%1_remove_22px.png").arg(strPrefix),
     1406                                                         QString(":/%1_remove_16px.png").arg(strPrefix),
     1407                                                         QString(":/%1_remove_disabled_22px.png").arg(strPrefix),
     1408                                                         QString(":/%1_remove_disabled_16px.png").arg(strPrefix)));
     1409    if (m_pActionRelease)
     1410        m_pActionRelease->setIcon(UIIconPool::iconSetFull(QSize(22, 22), QSize(16, 16),
     1411                                                          QString(":/%1_release_22px.png").arg(strPrefix),
     1412                                                          QString(":/%1_release_16px.png").arg(strPrefix),
     1413                                                          QString(":/%1_release_disabled_22px.png").arg(strPrefix),
     1414                                                          QString(":/%1_release_disabled_16px.png").arg(strPrefix)));
     1415    if (m_pActionRefresh && m_pActionRefresh->icon().isNull())
    13571416        m_pActionRefresh->setIcon(UIIconPool::iconSetFull(QSize(22, 22), QSize(16, 16),
    13581417                                                          ":/refresh_22px.png", ":/refresh_16px.png",
     
    14011460            *pfInaccessible = true;
    14021461
    1403             mTabWidget->setTabIcon(iTab, vboxGlobal().warningIcon());
     1462            if (mTabWidget)
     1463                mTabWidget->setTabIcon(iTab, vboxGlobal().warningIcon());
    14041464
    14051465            break;
     
    14351495            }
    14361496
    1437             if (*pfInaccessible)
    1438                 mTabWidget->setTabIcon(iTab, vboxGlobal().warningIcon());
    1439             else
    1440                 mTabWidget->setTabIcon(iTab, *pIcon);
     1497            if (mTabWidget)
     1498            {
     1499                if (*pfInaccessible)
     1500                    mTabWidget->setTabIcon(iTab, vboxGlobal().warningIcon());
     1501                else
     1502                    mTabWidget->setTabIcon(iTab, *pIcon);
     1503            }
    14411504
    14421505            break;
     
    14751538    {
    14761539        /* Just clear information panes: */
    1477         m_pTypePane->clear();
    1478         m_pLocationPane->clear();
    1479         m_pFormatPane->clear();
    1480         m_pDetailsPane->clear();
    1481         m_pUsagePane->clear();
     1540        if (m_pTypePane)
     1541            m_pTypePane->clear();
     1542        if (m_pLocationPane)
     1543            m_pLocationPane->clear();
     1544        if (m_pFormatPane)
     1545            m_pFormatPane->clear();
     1546        if (m_pDetailsPane)
     1547            m_pDetailsPane->clear();
     1548        if (m_pUsagePane)
     1549            m_pUsagePane->clear();
    14821550    }
    14831551    /* If current item is set: */
     
    14891557                           formatPaneText(QApplication::translate("VBoxMediaManagerDlg", "<i>Not&nbsp;Attached</i>"), false) :
    14901558                           formatPaneText(pCurrentItem->usage());
    1491         m_pTypePane->setText(pCurrentItem->hardDiskType());
    1492         m_pLocationPane->setText(formatPaneText(pCurrentItem->location(), true, "end"));
    1493         m_pFormatPane->setText(pCurrentItem->hardDiskFormat());
    1494         m_pDetailsPane->setText(strDetails);
    1495         m_pUsagePane->setText(strUsage);
     1559        if (m_pTypePane)
     1560            m_pTypePane->setText(pCurrentItem->hardDiskType());
     1561        if (m_pLocationPane)
     1562            m_pLocationPane->setText(formatPaneText(pCurrentItem->location(), true, "end"));
     1563        if (m_pFormatPane)
     1564            m_pFormatPane->setText(pCurrentItem->hardDiskFormat());
     1565        if (m_pDetailsPane)
     1566            m_pDetailsPane->setText(strDetails);
     1567        if (m_pUsagePane)
     1568            m_pUsagePane->setText(strUsage);
    14961569    }
    14971570
    14981571    /* Enable/disable information-panes container: */
    1499     mHDContainer->setEnabled(pCurrentItem);
     1572    if (mHDContainer)
     1573        mHDContainer->setEnabled(pCurrentItem);
    15001574}
    15011575
     
    15091583    {
    15101584        /* Just clear information panes: */
    1511         mIpCD1->clear();
    1512         mIpCD2->clear();
     1585        if (mIpCD1)
     1586            mIpCD1->clear();
     1587        if (mIpCD2)
     1588            mIpCD2->clear();
    15131589    }
    15141590    /* If current item is set: */
     
    15191595                           formatPaneText(QApplication::translate("VBoxMediaManagerDlg", "<i>Not&nbsp;Attached</i>"), false) :
    15201596                           formatPaneText(pCurrentItem->usage());
    1521         mIpCD1->setText(formatPaneText(pCurrentItem->location(), true, "end"));
    1522         mIpCD2->setText(strUsage);
     1597        if (mIpCD1)
     1598            mIpCD1->setText(formatPaneText(pCurrentItem->location(), true, "end"));
     1599        if (mIpCD2)
     1600            mIpCD2->setText(strUsage);
    15231601    }
    15241602
    15251603    /* Enable/disable information-panes container: */
    1526     mCDContainer->setEnabled(pCurrentItem);
     1604    if (mCDContainer)
     1605        mCDContainer->setEnabled(pCurrentItem);
    15271606}
    15281607
     
    15361615    {
    15371616        /* Just clear information panes: */
    1538         mIpFD1->clear();
    1539         mIpFD2->clear();
     1617        if (mIpFD1)
     1618            mIpFD1->clear();
     1619        if (mIpFD2)
     1620            mIpFD2->clear();
    15401621    }
    15411622    /* If current item is set: */
     
    15461627                           formatPaneText(QApplication::translate("VBoxMediaManagerDlg", "<i>Not&nbsp;Attached</i>"), false) :
    15471628                           formatPaneText(pCurrentItem->usage());
    1548         mIpFD1->setText(formatPaneText(pCurrentItem->location(), true, "end"));
    1549         mIpFD2->setText(strUsage);
     1629        if (mIpFD1)
     1630            mIpFD1->setText(formatPaneText(pCurrentItem->location(), true, "end"));
     1631        if (mIpFD2)
     1632            mIpFD2->setText(strUsage);
    15501633    }
    15511634
    15521635    /* Enable/disable information-panes container: */
    1553     mFDContainer->setEnabled(pCurrentItem);
     1636    if (mFDContainer)
     1637        mFDContainer->setEnabled(pCurrentItem);
    15541638}
    15551639
     
    15731657void UIMediumManager::retranslateUi()
    15741658{
    1575     /* Translate uic generated strings: */
    1576     Ui::UIMediumManager::retranslateUi(this);
    1577 
    1578     /* Menu: */
    1579     m_pMenu->setTitle(QApplication::translate("VBoxMediaManagerDlg", "&Actions"));
    1580     /* Action names: */
    1581     m_pActionCopy->setText(QApplication::translate("VBoxMediaManagerDlg", "&Copy..."));
    1582     m_pActionModify->setText(QApplication::translate("VBoxMediaManagerDlg", "&Modify..."));
    1583     m_pActionRemove->setText(QApplication::translate("VBoxMediaManagerDlg", "R&emove"));
    1584     m_pActionRelease->setText(QApplication::translate("VBoxMediaManagerDlg", "Re&lease"));
    1585     m_pActionRefresh->setText(QApplication::translate("VBoxMediaManagerDlg", "Re&fresh"));
    1586     /* Action tool-tips: */
    1587     m_pActionCopy->setToolTip(m_pActionCopy->text().remove('&') + QString(" (%1)").arg(m_pActionCopy->shortcut().toString()));
    1588     m_pActionModify->setToolTip(m_pActionModify->text().remove('&') + QString(" (%1)").arg(m_pActionModify->shortcut().toString()));
    1589     m_pActionRemove->setToolTip(m_pActionRemove->text().remove('&') + QString(" (%1)").arg(m_pActionRemove->shortcut().toString()));
    1590     m_pActionRelease->setToolTip(m_pActionRelease->text().remove('&') + QString(" (%1)").arg(m_pActionRelease->shortcut().toString()));
    1591     m_pActionRefresh->setToolTip(m_pActionRefresh->text().remove('&') + QString(" (%1)").arg(m_pActionRefresh->shortcut().toString()));
    1592     /* Action status-tips: */
    1593     m_pActionCopy->setStatusTip(QApplication::translate("VBoxMediaManagerDlg", "Copy an existing disk image file"));
    1594     m_pActionModify->setStatusTip(QApplication::translate("VBoxMediaManagerDlg", "Modify the attributes of the selected disk image file"));
    1595     m_pActionRemove->setStatusTip(QApplication::translate("VBoxMediaManagerDlg", "Remove the selected disk image file"));
    1596     m_pActionRelease->setStatusTip(QApplication::translate("VBoxMediaManagerDlg", "Release the selected disk image file by detaching it from the machines"));
    1597     m_pActionRefresh->setStatusTip(QApplication::translate("VBoxMediaManagerDlg", "Refresh the list of disk image files"));
    1598 
    1599     /* Tool-bar: */
     1659    // TODO: Rename translation context in .nls files!
     1660    /* Most of these translations were moved from VBoxMediaManagerDlg.ui file
     1661     * to keep old translation context.. */
     1662
     1663    /* Translate window title: */
     1664    setWindowTitle(QApplication::translate("VBoxMediaManagerDlg", "Virtual Media Manager"));
     1665
     1666    /* Translate menu: */
     1667    if (m_pMenu)
     1668        m_pMenu->setTitle(QApplication::translate("VBoxMediaManagerDlg", "&Actions"));
     1669
     1670    /* Translate actions: */
     1671    if (m_pActionCopy)
     1672    {
     1673        m_pActionCopy->setText(QApplication::translate("VBoxMediaManagerDlg", "&Copy..."));
     1674        m_pActionCopy->setToolTip(m_pActionCopy->text().remove('&') + QString(" (%1)").arg(m_pActionCopy->shortcut().toString()));
     1675        m_pActionCopy->setStatusTip(QApplication::translate("VBoxMediaManagerDlg", "Copy an existing disk image file"));
     1676    }
     1677    if (m_pActionModify)
     1678    {
     1679        m_pActionModify->setText(QApplication::translate("VBoxMediaManagerDlg", "&Modify..."));
     1680        m_pActionModify->setToolTip(m_pActionModify->text().remove('&') + QString(" (%1)").arg(m_pActionModify->shortcut().toString()));
     1681        m_pActionModify->setStatusTip(QApplication::translate("VBoxMediaManagerDlg", "Modify the attributes of the selected disk image file"));
     1682    }
     1683    if (m_pActionRemove)
     1684    {
     1685        m_pActionRemove->setText(QApplication::translate("VBoxMediaManagerDlg", "R&emove"));
     1686        m_pActionRemove->setToolTip(m_pActionRemove->text().remove('&') + QString(" (%1)").arg(m_pActionRemove->shortcut().toString()));
     1687        m_pActionRemove->setStatusTip(QApplication::translate("VBoxMediaManagerDlg", "Remove the selected disk image file"));
     1688    }
     1689    if (m_pActionRelease)
     1690    {
     1691        m_pActionRelease->setText(QApplication::translate("VBoxMediaManagerDlg", "Re&lease"));
     1692        m_pActionRelease->setToolTip(m_pActionRelease->text().remove('&') + QString(" (%1)").arg(m_pActionRelease->shortcut().toString()));
     1693        m_pActionRelease->setStatusTip(QApplication::translate("VBoxMediaManagerDlg", "Release the selected disk image file by detaching it from the machines"));
     1694    }
     1695    if (m_pActionRefresh)
     1696    {
     1697        m_pActionRefresh->setText(QApplication::translate("VBoxMediaManagerDlg", "Re&fresh"));
     1698        m_pActionRefresh->setToolTip(m_pActionRefresh->text().remove('&') + QString(" (%1)").arg(m_pActionRefresh->shortcut().toString()));
     1699        m_pActionRefresh->setStatusTip(QApplication::translate("VBoxMediaManagerDlg", "Refresh the list of disk image files"));
     1700    }
     1701
     1702    /* Translate tool-bar: */
    16001703#ifdef Q_WS_MAC
    16011704# ifdef QT_MAC_USE_COCOA
     
    16041707       the with doesn't match if the text increase. So manually adjust the size
    16051708       after changing the text. */
    1606     m_pToolBar->updateLayout();
     1709    if (m_pToolBar)
     1710        m_pToolBar->updateLayout();
    16071711# endif /* QT_MAC_USE_COCOA */
    16081712#endif /* Q_WS_MAC */
    16091713
    1610     // TODO: Just rename translation context in .nls files!
    1611     /* Translations moved from VBoxMediaManagerDlg.ui file to keep old translation context: */
    1612     setWindowTitle(QApplication::translate("VBoxMediaManagerDlg", "Virtual Media Manager"));
    1613     mTabWidget->setTabText(0, tr("&Hard drives"));
     1714    /* Translate tab-widget: */
     1715    if (mTabWidget)
     1716    {
     1717        mTabWidget->setTabText(TabIndex_HD, tr("&Hard drives"));
     1718        mTabWidget->setTabText(TabIndex_CD, tr("&Optical disks"));
     1719        mTabWidget->setTabText(TabIndex_FD, tr("&Floppy disks"));
     1720    }
     1721
     1722    /* Translate HD tree-widget: */
    16141723    QTreeWidget *pTreeWidgetHD = treeWidget(UIMediumType_HardDisk);
    1615     pTreeWidgetHD->headerItem()->setText(0, QApplication::translate("VBoxMediaManagerDlg", "Name"));
    1616     pTreeWidgetHD->headerItem()->setText(1, QApplication::translate("VBoxMediaManagerDlg", "Virtual Size"));
    1617     pTreeWidgetHD->headerItem()->setText(2, QApplication::translate("VBoxMediaManagerDlg", "Actual Size"));
    1618     m_pTypeLabel->setText(QApplication::translate("VBoxMediaManagerDlg", "Type:"));
    1619     m_pLocationLabel->setText(QApplication::translate("VBoxMediaManagerDlg", "Location:"));
    1620     m_pFormatLabel->setText(QApplication::translate("VBoxMediaManagerDlg", "Format:"));
    1621     m_pDetailsLabel->setText(QApplication::translate("VBoxMediaManagerDlg", "Storage details:"));
    1622     m_pUsageLabel->setText(QApplication::translate("VBoxMediaManagerDlg", "Attached to:"));
    1623     mTabWidget->setTabText(1, tr("&Optical disks"));
     1724    if (pTreeWidgetHD)
     1725    {
     1726        pTreeWidgetHD->headerItem()->setText(0, QApplication::translate("VBoxMediaManagerDlg", "Name"));
     1727        pTreeWidgetHD->headerItem()->setText(1, QApplication::translate("VBoxMediaManagerDlg", "Virtual Size"));
     1728        pTreeWidgetHD->headerItem()->setText(2, QApplication::translate("VBoxMediaManagerDlg", "Actual Size"));
     1729    }
     1730
     1731    /* Translate HD information-labels: */
     1732    if (m_pTypeLabel)
     1733        m_pTypeLabel->setText(QApplication::translate("VBoxMediaManagerDlg", "Type:"));
     1734    if (m_pLocationLabel)
     1735        m_pLocationLabel->setText(QApplication::translate("VBoxMediaManagerDlg", "Location:"));
     1736    if (m_pFormatLabel)
     1737        m_pFormatLabel->setText(QApplication::translate("VBoxMediaManagerDlg", "Format:"));
     1738    if (m_pDetailsLabel)
     1739        m_pDetailsLabel->setText(QApplication::translate("VBoxMediaManagerDlg", "Storage details:"));
     1740    if (m_pUsageLabel)
     1741        m_pUsageLabel->setText(QApplication::translate("VBoxMediaManagerDlg", "Attached to:"));
     1742
     1743    /* Translate CD tree-widget: */
    16241744    QTreeWidget *pTreeWidgetCD = treeWidget(UIMediumType_DVD);
    1625     pTreeWidgetCD->headerItem()->setText(0, QApplication::translate("VBoxMediaManagerDlg", "Name"));
    1626     pTreeWidgetCD->headerItem()->setText(1, QApplication::translate("VBoxMediaManagerDlg", "Size"));
    1627     mLbCD1->setText(QApplication::translate("VBoxMediaManagerDlg", "Location:"));
    1628     mLbCD2->setText(QApplication::translate("VBoxMediaManagerDlg", "Attached to:"));
    1629     mTabWidget->setTabText(2, tr("&Floppy disks"));
     1745    if (pTreeWidgetCD)
     1746    {
     1747        pTreeWidgetCD->headerItem()->setText(0, QApplication::translate("VBoxMediaManagerDlg", "Name"));
     1748        pTreeWidgetCD->headerItem()->setText(1, QApplication::translate("VBoxMediaManagerDlg", "Size"));
     1749    }
     1750
     1751    /* Translate CD information-labels: */
     1752    if (mLbCD1)
     1753        mLbCD1->setText(QApplication::translate("VBoxMediaManagerDlg", "Location:"));
     1754    if (mLbCD2)
     1755        mLbCD2->setText(QApplication::translate("VBoxMediaManagerDlg", "Attached to:"));
     1756
     1757    /* Translate FD tree-widget: */
    16301758    QTreeWidget *pTreeWidgetFD = treeWidget(UIMediumType_Floppy);
    1631     pTreeWidgetFD->headerItem()->setText(0, QApplication::translate("VBoxMediaManagerDlg", "Name"));
    1632     pTreeWidgetFD->headerItem()->setText(1, QApplication::translate("VBoxMediaManagerDlg", "Size"));
    1633     mLbFD1->setText(QApplication::translate("VBoxMediaManagerDlg", "Location:"));
    1634     mLbFD2->setText(QApplication::translate("VBoxMediaManagerDlg", "Attached to:"));
    1635 
    1636     /* Progress-bar: */
    1637     m_pProgressBar->setText(QApplication::translate("VBoxMediaManagerDlg", "Checking accessibility"));
     1759    if (pTreeWidgetFD)
     1760    {
     1761        pTreeWidgetFD->headerItem()->setText(0, QApplication::translate("VBoxMediaManagerDlg", "Name"));
     1762        pTreeWidgetFD->headerItem()->setText(1, QApplication::translate("VBoxMediaManagerDlg", "Size"));
     1763    }
     1764
     1765    /* Translate FD information-labels: */
     1766    if (mLbFD1)
     1767        mLbFD1->setText(QApplication::translate("VBoxMediaManagerDlg", "Location:"));
     1768    if (mLbFD2)
     1769        mLbFD2->setText(QApplication::translate("VBoxMediaManagerDlg", "Attached to:"));
     1770
     1771    /* Translate progress-bar: */
     1772    if (m_pProgressBar)
     1773    {
     1774        m_pProgressBar->setText(QApplication::translate("VBoxMediaManagerDlg", "Checking accessibility"));
    16381775#ifdef Q_WS_MAC
    1639     /* Make sure that the widgets aren't jumping around
    1640      * while the progress-bar get visible. */
    1641     m_pProgressBar->adjustSize();
    1642     int h = m_pProgressBar->height();
    1643     mButtonBox->setMinimumHeight(h + 12);
     1776        /* Make sure that the widgets aren't jumping around
     1777         * while the progress-bar get visible. */
     1778        m_pProgressBar->adjustSize();
     1779        int h = m_pProgressBar->height();
     1780        if (mButtonBox)
     1781            mButtonBox->setMinimumHeight(h + 12);
    16441782#endif /* Q_WS_MAC */
    1645 
    1646     /* Button-box: */
    1647     mButtonBox->button(QDialogButtonBox::Ok)->setText(tr("C&lose"));
     1783    }
    16481784
    16491785    /* Full refresh if there is at least one item present: */
    1650     if (pTreeWidgetHD->topLevelItemCount() || pTreeWidgetCD->topLevelItemCount() || pTreeWidgetFD->topLevelItemCount())
     1786    if (   (pTreeWidgetHD && pTreeWidgetHD->topLevelItemCount())
     1787        || (pTreeWidgetCD && pTreeWidgetCD->topLevelItemCount())
     1788        || (pTreeWidgetFD && pTreeWidgetFD->topLevelItemCount()))
    16511789        sltRefreshAll();
    16521790}
     
    16641802        case UIMediumType_HardDisk:
    16651803        {
    1666             pMediumItem = createHardDiskItem(medium);
    1667             AssertPtrReturn(pMediumItem, 0);
    1668             if (pMediumItem->id() == m_strCurrentIdHD)
     1804            /* Make sure corresponding tree-widget exists: */
     1805            QTreeWidget *pTreeWidget = treeWidget(UIMediumType_HardDisk);
     1806            if (pTreeWidget)
    16691807            {
    1670                 setCurrentItem(treeWidget(UIMediumType_HardDisk), pMediumItem);
    1671                 m_strCurrentIdHD = QString();
     1808                /* Recursively create hard-drive item: */
     1809                pMediumItem = createHardDiskItem(medium);
     1810                /* Make sure item was created: */
     1811                if (!pMediumItem)
     1812                    break;
     1813                if (pMediumItem->id() == m_strCurrentIdHD)
     1814                {
     1815                    setCurrentItem(pTreeWidget, pMediumItem);
     1816                    m_strCurrentIdHD = QString();
     1817                }
    16721818            }
    16731819            break;
     
    16761822        case UIMediumType_DVD:
    16771823        {
    1678             pMediumItem = new UIMediumItemCD(medium, treeWidget(UIMediumType_DVD));
    1679             LogRel2(("UIMediumManager: Optical medium-item with ID={%s} created.\n", medium.id().toAscii().constData()));
    1680             AssertPtrReturn(pMediumItem, 0);
    1681             if (pMediumItem->id() == m_strCurrentIdCD)
     1824            /* Make sure corresponding tree-widget exists: */
     1825            QTreeWidget *pTreeWidget = treeWidget(UIMediumType_DVD);
     1826            if (pTreeWidget)
    16821827            {
    1683                 setCurrentItem(treeWidget(UIMediumType_DVD), pMediumItem);
    1684                 m_strCurrentIdCD = QString();
     1828                /* Create optical-disk item: */
     1829                pMediumItem = new UIMediumItemCD(medium, pTreeWidget);
     1830                /* Make sure item was created: */
     1831                if (!pMediumItem)
     1832                    break;
     1833                LogRel2(("UIMediumManager: Optical medium-item with ID={%s} created.\n", medium.id().toAscii().constData()));
     1834                if (pMediumItem->id() == m_strCurrentIdCD)
     1835                {
     1836                    setCurrentItem(pTreeWidget, pMediumItem);
     1837                    m_strCurrentIdCD = QString();
     1838                }
    16851839            }
    16861840            break;
     
    16891843        case UIMediumType_Floppy:
    16901844        {
    1691             pMediumItem = new UIMediumItemFD(medium, treeWidget(UIMediumType_Floppy));
    1692             LogRel2(("UIMediumManager: Floppy medium-item with ID={%s} created.\n", medium.id().toAscii().constData()));
    1693             AssertPtrReturn(pMediumItem, 0);
    1694             if (pMediumItem->id() == m_strCurrentIdFD)
     1845            /* Make sure corresponding tree-widget exists: */
     1846            QTreeWidget *pTreeWidget = treeWidget(UIMediumType_Floppy);
     1847            if (pTreeWidget)
    16951848            {
    1696                 setCurrentItem(treeWidget(UIMediumType_Floppy), pMediumItem);
    1697                 m_strCurrentIdFD = QString();
     1849                /* Create floppy-disk item: */
     1850                pMediumItem = new UIMediumItemFD(medium, pTreeWidget);
     1851                /* Make sure item was created: */
     1852                if (!pMediumItem)
     1853                    break;
     1854                LogRel2(("UIMediumManager: Floppy medium-item with ID={%s} created.\n", medium.id().toAscii().constData()));
     1855                if (pMediumItem->id() == m_strCurrentIdFD)
     1856                {
     1857                    setCurrentItem(pTreeWidget, pMediumItem);
     1858                    m_strCurrentIdFD = QString();
     1859                }
    16981860            }
    16991861            break;
     
    17011863        default: AssertMsgFailed(("Medium-type unknown: %d\n", type)); break;
    17021864    }
    1703     AssertPtrReturn(pMediumItem, 0);
     1865
     1866    /* Make sure item was created: */
     1867    if (!pMediumItem)
     1868        return 0;
    17041869
    17051870    /* Update tab-icons: */
     
    17191884    AssertReturn(!medium.medium().isNull(), 0);
    17201885
    1721     /* Get corresponding tree-widget: */
     1886    /* Make sure corresponding tree-widget exists: */
    17221887    QTreeWidget *pTreeWidget = treeWidget(UIMediumType_HardDisk);
    1723 
    1724     /* Search for existing medium-item: */
    1725     UIMediumItem *pMediumItem = searchItem(pTreeWidget, CheckIfSuitableByID(medium.id()));
    1726 
    1727     /* If medium-item do not exists: */
    1728     if (!pMediumItem)
    1729     {
    1730         /* If medium have a parent: */
    1731         if (medium.parentID() != UIMedium::nullID())
    1732         {
    1733             /* Try to find parent medium-item: */
    1734             UIMediumItem *pParentMediumItem = searchItem(pTreeWidget, CheckIfSuitableByID(medium.parentID()));
    1735             /* If parent medium-item was not found: */
    1736             if (!pParentMediumItem)
     1888    if (pTreeWidget)
     1889    {
     1890        /* Search for existing medium-item: */
     1891        UIMediumItem *pMediumItem = searchItem(pTreeWidget, CheckIfSuitableByID(medium.id()));
     1892
     1893        /* If medium-item do not exists: */
     1894        if (!pMediumItem)
     1895        {
     1896            /* If medium have a parent: */
     1897            if (medium.parentID() != UIMedium::nullID())
    17371898            {
    1738                 /* Make sure corresponding parent medium is already cached! */
    1739                 UIMedium parentMedium = vboxGlobal().medium(medium.parentID());
    1740                 if (parentMedium.isNull())
    1741                     AssertMsgFailed(("Parent medium with ID={%s} was not found!\n", medium.parentID().toAscii().constData()));
    1742                 /* Try to create parent medium-item: */
    1743                 else
    1744                     pParentMediumItem = createHardDiskItem(parentMedium);
     1899                /* Try to find parent medium-item: */
     1900                UIMediumItem *pParentMediumItem = searchItem(pTreeWidget, CheckIfSuitableByID(medium.parentID()));
     1901                /* If parent medium-item was not found: */
     1902                if (!pParentMediumItem)
     1903                {
     1904                    /* Make sure corresponding parent medium is already cached! */
     1905                    UIMedium parentMedium = vboxGlobal().medium(medium.parentID());
     1906                    if (parentMedium.isNull())
     1907                        AssertMsgFailed(("Parent medium with ID={%s} was not found!\n", medium.parentID().toAscii().constData()));
     1908                    /* Try to create parent medium-item: */
     1909                    else
     1910                        pParentMediumItem = createHardDiskItem(parentMedium);
     1911                }
     1912                /* If parent medium-item was found: */
     1913                if (pParentMediumItem)
     1914                {
     1915                    pMediumItem = new UIMediumItemHD(medium, pParentMediumItem);
     1916                    LogRel2(("UIMediumManager: Child hard-drive medium-item with ID={%s} created.\n", medium.id().toAscii().constData()));
     1917                }
    17451918            }
    1746             /* If parent medium-item was found: */
    1747             if (pParentMediumItem)
     1919            /* Else just create item as top-level one: */
     1920            if (!pMediumItem)
    17481921            {
    1749                 pMediumItem = new UIMediumItemHD(medium, pParentMediumItem);
    1750                 LogRel2(("UIMediumManager: Child hard-drive medium-item with ID={%s} created.\n", medium.id().toAscii().constData()));
     1922                pMediumItem = new UIMediumItemHD(medium, pTreeWidget);
     1923                LogRel2(("UIMediumManager: Root hard-drive medium-item with ID={%s} created.\n", medium.id().toAscii().constData()));
    17511924            }
    17521925        }
    1753         /* Else just create item as top-level one: */
    1754         if (!pMediumItem)
    1755         {
    1756             pMediumItem = new UIMediumItemHD(medium, pTreeWidget);
    1757             LogRel2(("UIMediumManager: Root hard-drive medium-item with ID={%s} created.\n", medium.id().toAscii().constData()));
    1758         }
    1759     }
    1760 
    1761     /* Return created medium-item: */
    1762     return pMediumItem;
     1926
     1927        /* Return created medium-item: */
     1928        return pMediumItem;
     1929    }
     1930
     1931    /* Return null by default: */
     1932    return 0;
    17631933}
    17641934
     
    17681938    UIMediumType type = medium.type();
    17691939
    1770     /* Search for existing medium-item, create if was not found: */
     1940    /* Search for existing medium-item: */
    17711941    UIMediumItem *pMediumItem = searchItem(treeWidget(type), CheckIfSuitableByID(medium.id()));
    1772     if (!pMediumItem) pMediumItem = createMediumItem(medium);
    1773     AssertPtrReturnVoid(pMediumItem);
     1942
     1943    /* Create item if doesn't exists: */
     1944    if (!pMediumItem)
     1945        pMediumItem = createMediumItem(medium);
     1946
     1947    /* Make sure item was created: */
     1948    if (!pMediumItem)
     1949        return;
    17741950
    17751951    /* Update medium-item: */
     
    18021978    }
    18031979
    1804     /* Ignore medium-item (if it was not found): */
     1980    /* Make sure item was found: */
    18051981    if (!pMediumItem)
    18061982        return;
     
    18552031UIMediumType UIMediumManager::currentMediumType() const
    18562032{
     2033    /* Invalid if tab-widget doesn't exists: */
     2034    if (!mTabWidget)
     2035        return UIMediumType_Invalid;
     2036
    18572037    /* Return current medium type: */
    18582038    switch (mTabWidget->currentIndex())
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