Changeset 50353 in vbox for trunk/src/VBox/Frontends/VirtualBox
- Timestamp:
- Feb 6, 2014 5:05:32 PM (11 years ago)
- svn:sync-xref-src-repo-rev:
- 92095
- Location:
- trunk/src/VBox/Frontends/VirtualBox/src/medium
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.cpp
r50343 r50353 299 299 void UIMediumManager::sltHandleMediumDeleted(const QString &strMediumID) 300 300 { 301 /* Get tree /item: */301 /* Get tree-widget / medium-item: */ 302 302 QList<UIMediumType> types; 303 303 types << UIMediumType_HardDisk << UIMediumType_DVD << UIMediumType_Floppy; 304 QTreeWidget *pTree = 0;304 QTreeWidget *pTreeWidget = 0; 305 305 UIMediumItem *pMediumItem = 0; 306 306 foreach (UIMediumType type, types) 307 307 { 308 pTree = treeWidget(type);309 pMediumItem = searchItem(pTree , CheckIfSuitableByID(strMediumID));308 pTreeWidget = treeWidget(type); 309 pMediumItem = searchItem(pTreeWidget, CheckIfSuitableByID(strMediumID)); 310 310 if (pMediumItem) 311 311 break; 312 312 } 313 314 /* Skip further actions if medium-item was not found: */ 313 315 if (!pMediumItem) 314 316 return; … … 317 319 updateTabIcons(pMediumItem, ItemAction_Removed); 318 320 319 /* We need to silently delete medium-item without selecting 320 * the new one because of complex selection mechanism 321 * which could provoke a segfault choosing the new 322 * one item during last item deletion routine. So blocking 323 * the tree-view for the time of item removing. */ 324 pTree->blockSignals(true); 321 /* Delete medium-item: */ 325 322 delete pMediumItem; 326 pTree->blockSignals(false); 327 328 /* Make sure current medium-item is selected: */ 329 setCurrentItem(pTree, pTree->currentItem()); 323 324 /* Make sure 'current' or at least 'first available' medium-item is currently selected, if any: */ 325 setCurrentItem(pTreeWidget, pTreeWidget->currentItem() ? pTreeWidget->currentItem() : pTreeWidget->topLevelItem(0)); 330 326 } 331 327 … … 582 578 } 583 579 584 void UIMediumManager::sltHandleCurrentItemChanged(QTreeWidgetItem *pItem, 585 QTreeWidgetItem *pPrevItem /* = 0 */) 586 { 587 /* Get current medium-item: */ 580 void UIMediumManager::sltHandleCurrentItemChanged(QTreeWidgetItem *pItem) 581 { 582 /* If item set => make sure it's of valid type: */ 588 583 UIMediumItem *pMediumItem = toMediumItem(pItem); 589 590 /* We have to make sure some medium-item is always selected: */ 591 if (!pMediumItem && pPrevItem) 592 { 593 /* If new medium-item is 0, choose the old one again. */ 594 UIMediumItem *pPrevMediumItem = toMediumItem(pPrevItem); 595 setCurrentItem(currentTreeWidget(), pPrevMediumItem); 596 } 597 598 /* If item is set: */ 584 AssertReturnVoid(!pItem || pMediumItem); 585 586 /* If medium-item set: */ 599 587 if (pMediumItem) 600 588 { … … 621 609 void UIMediumManager::sltHandleContextMenuCall(const QPoint &position) 622 610 { 623 /* Get corresponding widget/item: */ 624 QTreeWidget *pTree = currentTreeWidget(); 625 QTreeWidgetItem *pItem = pTree->itemAt(position); 626 if (pItem) 627 { 628 /* Make sure the item is selected and current: */ 629 setCurrentItem(pTree, pItem); 630 /* Show item context menu: */ 631 m_pContextMenu->exec(pTree->viewport()->mapToGlobal(position)); 632 } 611 /* Get corresponding tree-widget / item: */ 612 QTreeWidget *pTreeWidget = currentTreeWidget(); 613 QTreeWidgetItem *pItem = pTreeWidget->itemAt(position); 614 615 /* Skip further actions if item was not found: */ 616 if (!pItem) 617 return; 618 619 /* Make sure that item is current one: */ 620 setCurrentItem(pTreeWidget, pItem); 621 /* Show item context menu: */ 622 m_pContextMenu->exec(pTreeWidget->viewport()->mapToGlobal(position)); 633 623 } 634 624 … … 916 906 mTwHD->setSortingEnabled(true); 917 907 connect(mTwHD, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), 918 this, SLOT(sltHandleCurrentItemChanged(QTreeWidgetItem* , QTreeWidgetItem*)));908 this, SLOT(sltHandleCurrentItemChanged(QTreeWidgetItem*))); 919 909 connect(mTwHD, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)), 920 910 this, SLOT(sltHandleDoubleClick())); … … 940 930 mTwCD->setSortingEnabled(true); 941 931 connect(mTwCD, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), 942 this, SLOT(sltHandleCurrentItemChanged(QTreeWidgetItem* , QTreeWidgetItem*)));932 this, SLOT(sltHandleCurrentItemChanged(QTreeWidgetItem*))); 943 933 connect(mTwCD, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)), 944 934 this, SLOT(sltHandleDoubleClick())); … … 964 954 mTwFD->setSortingEnabled(true); 965 955 connect(mTwFD, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), 966 this, SLOT(sltHandleCurrentItemChanged(QTreeWidgetItem* , QTreeWidgetItem*)));956 this, SLOT(sltHandleCurrentItemChanged(QTreeWidgetItem*))); 967 957 connect(mTwFD, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)), 968 958 this, SLOT(sltHandleDoubleClick())); … … 1029 1019 1030 1020 /* Clear tree-widgets: */ 1031 mTwHD->clear(); 1032 mTwCD->clear(); 1033 mTwFD->clear(); 1021 QTreeWidget *pTreeWidgetHD = treeWidget(UIMediumType_HardDisk); 1022 QTreeWidget *pTreeWidgetCD = treeWidget(UIMediumType_DVD); 1023 QTreeWidget *pTreeWidgetFD = treeWidget(UIMediumType_Floppy); 1024 setCurrentItem(pTreeWidgetHD, 0); 1025 setCurrentItem(pTreeWidgetCD, 0); 1026 setCurrentItem(pTreeWidgetFD, 0); 1027 pTreeWidgetHD->clear(); 1028 pTreeWidgetCD->clear(); 1029 pTreeWidgetFD->clear(); 1034 1030 1035 1031 /* Create medium-items: */ … … 1037 1033 sltHandleMediumCreated(strMediumID); 1038 1034 1039 /* Select first medium-item as current one if nothing selected: */1035 /* Select first item as current one if nothing selected: */ 1040 1036 if (!mediumItem(UIMediumType_HardDisk)) 1041 if (QTreeWidgetItem *pItem = mTwHD->topLevelItem(0))1042 setCurrentItem( mTwHD, pItem);1037 if (QTreeWidgetItem *pItem = pTreeWidgetHD->topLevelItem(0)) 1038 setCurrentItem(pTreeWidgetHD, pItem); 1043 1039 if (!mediumItem(UIMediumType_DVD)) 1044 if (QTreeWidgetItem *pItem = mTwCD->topLevelItem(0))1045 setCurrentItem( mTwCD, pItem);1040 if (QTreeWidgetItem *pItem = pTreeWidgetCD->topLevelItem(0)) 1041 setCurrentItem(pTreeWidgetCD, pItem); 1046 1042 if (!mediumItem(UIMediumType_Floppy)) 1047 if (QTreeWidgetItem *pItem = mTwFD->topLevelItem(0))1048 setCurrentItem( mTwFD, pItem);1043 if (QTreeWidgetItem *pItem = pTreeWidgetFD->topLevelItem(0)) 1044 setCurrentItem(pTreeWidgetFD, pItem); 1049 1045 } 1050 1046 … … 1414 1410 setCurrentItem(treeWidget(medium.type()), pMediumItem); 1415 1411 1412 /* If no 'current-item' yet selected 1413 * we have to choose newly added as the 'current-item': */ 1414 if (!treeWidget(medium.type())->currentItem()) 1415 setCurrentItem(treeWidget(medium.type()), pMediumItem); 1416 1416 1417 /* Update linked stuff if that was 'current-item' added: */ 1417 1418 if (pMediumItem == currentTreeWidget()->currentItem()) … … 1630 1631 } 1631 1632 1632 void UIMediumManager::setCurrentItem(QTreeWidget *pTree, QTreeWidgetItem *pItem) 1633 { 1634 if (pTree && pItem) 1635 { 1633 void UIMediumManager::setCurrentItem(QTreeWidget *pTreeWidget, QTreeWidgetItem *pItem) 1634 { 1635 /* Make sure passed tree-widget is valid: */ 1636 AssertPtrReturnVoid(pTreeWidget); 1637 1638 /* Make passed item 'current' for passed tree-widget: */ 1639 pTreeWidget->setCurrentItem(pItem); 1640 1641 /* If non NULL item was passed: */ 1642 if (pItem) 1643 { 1644 /* Make sure it's also selected, and visible: */ 1636 1645 pItem->setSelected(true); 1637 pTree->setCurrentItem(pItem); 1638 pTree->scrollToItem(pItem, QAbstractItemView::EnsureVisible); 1639 sltHandleCurrentItemChanged(pItem); 1640 } 1641 else 1642 sltHandleCurrentTabChanged(); 1646 pTreeWidget->scrollToItem(pItem, QAbstractItemView::EnsureVisible); 1647 } 1648 1649 /* Update linked stuff: */ 1650 sltHandleCurrentItemChanged(pItem); 1643 1651 } 1644 1652 -
trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumManager.h
r50340 r50353 89 89 /* Handlers: Navigation stuff: */ 90 90 void sltHandleCurrentTabChanged(); 91 void sltHandleCurrentItemChanged(QTreeWidgetItem *pItem , QTreeWidgetItem *pPrevItem = 0);91 void sltHandleCurrentItemChanged(QTreeWidgetItem *pItem); 92 92 void sltHandleDoubleClick(); 93 93 void sltHandleContextMenuCall(const QPoint &position); … … 167 167 UIMediumItem* currentMediumItem() const; 168 168 169 /** Defines <i>current-item</i> for passed @a pTree as @a pItem. */170 void setCurrentItem(QTreeWidget *pTree , QTreeWidgetItem *pItem);169 /** Defines <i>current-item</i> for passed @a pTreeWidget as @a pItem. */ 170 void setCurrentItem(QTreeWidget *pTreeWidget, QTreeWidgetItem *pItem); 171 171 172 172 UIMediumItem* searchItem(QTreeWidget *pTree, const CheckIfSuitableBy &functor) const;
Note:
See TracChangeset
for help on using the changeset viewer.