- Timestamp:
- Jun 5, 2018 8:19:32 AM (7 years ago)
- svn:sync-xref-src-repo-rev:
- 122919
- Location:
- trunk/src/VBox/Frontends/VirtualBox
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk
r72377 r72444 1184 1184 src/logviewer/UIVMLogViewerTextEdit.cpp \ 1185 1185 src/medium/UIMediumEnumerator.cpp \ 1186 src/medium/UIMediumSelector.cpp \ 1186 1187 src/runtime/UIActionPoolRuntime.cpp \ 1187 1188 src/runtime/UIConsoleEventHandler.cpp \ … … 1264 1265 src/logviewer/UIVMLogViewerTextEdit.cpp \ 1265 1266 src/medium/UIMediumEnumerator.cpp \ 1267 src/medium/UIMediumSelector.cpp \ 1266 1268 src/runtime/UIActionPoolRuntime.cpp \ 1267 1269 src/selector/UIActionPoolSelector.cpp \ -
trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumSelector.cpp
r72431 r72444 27 27 28 28 /* GUI includes: */ 29 # include "QIComboBox.h" 29 30 # include "QIDialogButtonBox.h" 31 # include "QILineEdit.h" 30 32 # include "QIMessageBox.h" 31 33 # include "QITabWidget.h" … … 52 54 53 55 #endif /* !VBOX_WITH_PRECOMPILED_HEADERS */ 56 57 class UIMediumSearchWidget : public QWidget 58 { 59 Q_OBJECT; 60 61 public: 62 63 enum SearchType 64 { 65 SearchByName, 66 SearchByUUID, 67 SearchByMax 68 }; 69 70 signals: 71 72 void sigSearchTypeChanged(int newType); 73 void sigSearchTermChanged(QString searchTerm); 74 75 public: 76 77 UIMediumSearchWidget(QWidget *pParent = 0); 78 SearchType searchType() const; 79 QString searchTerm() const; 80 81 private: 82 83 void prepareWidgets(); 84 QIComboBox *m_pSearchComboxBox; 85 QILineEdit *m_pSearchTermLineEdit; 86 }; 87 88 UIMediumSearchWidget::UIMediumSearchWidget(QWidget *pParent) 89 :QWidget(pParent) 90 , m_pSearchComboxBox(0) 91 , m_pSearchTermLineEdit(0) 92 { 93 prepareWidgets(); 94 } 95 96 void UIMediumSearchWidget::prepareWidgets() 97 { 98 QHBoxLayout *pLayout = new QHBoxLayout; 99 setLayout(pLayout); 100 pLayout->setContentsMargins(0, 0, 0, 0); 101 pLayout->setSpacing(0); 102 103 m_pSearchComboxBox = new QIComboBox; 104 if (m_pSearchComboxBox) 105 { 106 m_pSearchComboxBox->setEditable(false); 107 m_pSearchComboxBox->insertItem(SearchByName, "By Name"); 108 m_pSearchComboxBox->insertItem(SearchByUUID, "By UUID"); 109 pLayout->addWidget(m_pSearchComboxBox); 110 111 connect(m_pSearchComboxBox, static_cast<void(QIComboBox::*)(int)>(&QIComboBox::currentIndexChanged), 112 this, &UIMediumSearchWidget::sigSearchTypeChanged); 113 114 } 115 116 m_pSearchTermLineEdit = new QILineEdit; 117 if (pLayout) 118 { 119 pLayout->addWidget(m_pSearchTermLineEdit); 120 connect(m_pSearchTermLineEdit, &QILineEdit::textChanged, 121 this, &UIMediumSearchWidget::sigSearchTermChanged); 122 } 123 } 124 125 UIMediumSearchWidget::SearchType UIMediumSearchWidget::searchType() const 126 { 127 if (!m_pSearchComboxBox || m_pSearchComboxBox->currentIndex() >= static_cast<int>(SearchByMax)) 128 return SearchByMax; 129 return static_cast<SearchType>(m_pSearchComboxBox->currentIndex()); 130 } 131 132 QString UIMediumSearchWidget::searchTerm() const 133 { 134 if (!m_pSearchTermLineEdit) 135 return QString(); 136 return m_pSearchTermLineEdit->text(); 137 } 54 138 55 139 … … 66 150 , m_pNotAttachedSubTreeRoot(0) 67 151 , m_pParent(pParent) 152 , m_pSearchWidget(0) 68 153 { 69 154 configure(); … … 185 270 connect(m_pButtonBox, &QIDialogButtonBox::rejected, this, &UIMediumSelector::close); 186 271 connect(m_pButtonBox, &QIDialogButtonBox::accepted, this, &UIMediumSelector::accept); 272 } 273 274 if (m_pSearchWidget) 275 { 276 connect(m_pSearchWidget, &UIMediumSearchWidget::sigSearchTypeChanged, 277 this, &UIMediumSelector::sltHandleSearchTypeChange); 278 connect(m_pSearchWidget, &UIMediumSearchWidget::sigSearchTermChanged, 279 this, &UIMediumSelector::sltHandleSearchTermChange); 187 280 } 188 281 } … … 313 406 } 314 407 408 m_pSearchWidget = new UIMediumSearchWidget; 409 if (m_pSearchWidget) 410 { 411 m_pMainLayout->addWidget(m_pSearchWidget); 412 } 413 315 414 m_pButtonBox = new QIDialogButtonBox; 316 415 if (m_pButtonBox) … … 325 424 326 425 repopulateTreeWidget(); 327 //m_pMainLayout->addWidget(328 426 } 329 427 … … 333 431 vboxGlobal().openMediumWithFileOpenDialog(m_enmMediumType, this, strDefaultMachineFolder); 334 432 } 335 336 // void UIMediumSelector::sltHandleCurrentItemChanged()337 // {338 // printf("%d\n", m_pTreeWidget->selectedItems().size());339 // updateOkButton();340 341 // }342 433 343 434 void UIMediumSelector::sltHandleItemSelectionChanged() … … 368 459 /* Initialize media enumation: */ 369 460 vboxGlobal().startMediumEnumeration(); 461 } 462 463 void UIMediumSelector::sltHandleSearchTypeChange(int type) 464 { 465 Q_UNUSED(type); 466 performMediumSearch(); 467 } 468 469 void UIMediumSelector::sltHandleSearchTermChange(QString searchTerm) 470 { 471 Q_UNUSED(searchTerm); 472 performMediumSearch(); 370 473 } 371 474 … … 440 543 /* uuid list of selected items: */ 441 544 /* Reset the related data structure: */ 545 m_mediumItemList.clear(); 442 546 m_pTreeWidget->clear(); 443 547 m_pAttachedSubTreeRoot = 0; … … 474 578 pParent = m_pNotAttachedSubTreeRoot; 475 579 } 476 menuItemVector.push_back(addTreeItem(medium, pParent)); 580 UIMediumItem *treeItem = addTreeItem(medium, pParent); 581 m_mediumItemList.append(treeItem); 582 menuItemVector.push_back(treeItem); 477 583 } 478 584 } 479 585 restoreSelection(selectedMediums, menuItemVector); 480 586 saveDefaultForeground(); 481 587 updateOkButton(); 482 588 if (m_pAttachedSubTreeRoot) … … 485 591 if (m_pNotAttachedSubTreeRoot) 486 592 m_pTreeWidget->expandItem(m_pNotAttachedSubTreeRoot); 487 593 } 594 595 void UIMediumSelector::saveDefaultForeground() 596 { 597 if (!m_pTreeWidget) 598 return; 599 if (m_defaultItemForeground == QBrush() && m_pTreeWidget->topLevelItemCount() >= 1) 600 { 601 QTreeWidgetItem *item = m_pTreeWidget->topLevelItem(0); 602 if (item) 603 { 604 QVariant data = item->data(0, Qt::ForegroundRole); 605 if (data.canConvert<QBrush>()) 606 { 607 m_defaultItemForeground = data.value<QBrush>(); 608 } 609 } 610 } 488 611 } 489 612 … … 514 637 return 0; 515 638 } 639 640 void UIMediumSelector::performMediumSearch() 641 { 642 if (!m_pSearchWidget) 643 return; 644 /* Unmark all tree items to remove the highltights: */ 645 for (int i = 0; i < m_mediumItemList.size(); ++i) 646 { 647 m_mediumItemList[i]->setData(0, Qt::ForegroundRole, m_defaultItemForeground); 648 } 649 650 651 UIMediumSearchWidget::SearchType searchType = 652 m_pSearchWidget->searchType(); 653 if (searchType >= UIMediumSearchWidget::SearchByMax) 654 return; 655 QString strTerm = m_pSearchWidget->searchTerm(); 656 if (strTerm.isEmpty()) 657 return; 658 659 for (int i = 0; i < m_mediumItemList.size(); ++i) 660 { 661 if (!m_mediumItemList[i]) 662 continue; 663 QString strMedium; 664 if (searchType == UIMediumSearchWidget::SearchByName) 665 strMedium = m_mediumItemList[i]->medium().name(); 666 else if(searchType == UIMediumSearchWidget::SearchByUUID) 667 strMedium = m_mediumItemList[i]->medium().id(); 668 if (strMedium.isEmpty()) 669 continue; 670 if (strMedium.contains(strTerm, Qt::CaseInsensitive)) 671 { 672 // mark the item 673 m_mediumItemList[i]->setData(0, Qt::ForegroundRole, QBrush(QColor(255, 0, 0))); 674 } 675 } 676 } 677 678 #include "UIMediumSelector.moc" -
trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumSelector.h
r72431 r72444 34 34 class QIDialogButtonBox; 35 35 class UIMediumItem; 36 class UIMediumSearchWidget; 36 37 class UIToolBar; 37 38 … … 62 63 void sltHandleMediumEnumerationFinish(); 63 64 void sltHandleRefresh(); 65 void sltHandleSearchTypeChange(int type); 66 void sltHandleSearchTermChange(QString searchTerm); 64 67 65 68 private: … … 83 86 /** @} */ 84 87 85 void repopulateTreeWidget();88 void repopulateTreeWidget(); 86 89 /** Disable/enable 'ok' button on the basis of having a selected item */ 87 void updateOkButton();90 void updateOkButton(); 88 91 UIMediumItem* addTreeItem(const UIMedium &medium, QITreeWidgetItem *pParent); 89 void restoreSelection(const QStringList &selectedMediums, QVector<UIMediumItem*> &mediumList);92 void restoreSelection(const QStringList &selectedMediums, QVector<UIMediumItem*> &mediumList); 90 93 /** Recursively create the hard disk hierarchy under the tree widget */ 91 94 UIMediumItem* createHardDiskItem(const UIMedium &medium, QITreeWidgetItem *pParent); 92 95 UIMediumItem* searchItem(const QTreeWidgetItem *pParent, const QString &mediumId); 96 void performMediumSearch(); 97 /** Remember the default foreground brush of the tree so that we can reset tree items' foreground later */ 98 void saveDefaultForeground(); 93 99 94 QVBoxLayout *m_pMainLayout;95 QITreeWidget *m_pTreeWidget;96 UIMediumType m_enmMediumType;97 QIDialogButtonBox *m_pButtonBox;98 UIToolBar *m_pToolBar;99 QAction *m_pActionAdd;100 QAction *m_pActionRefresh;100 QVBoxLayout *m_pMainLayout; 101 QITreeWidget *m_pTreeWidget; 102 UIMediumType m_enmMediumType; 103 QIDialogButtonBox *m_pButtonBox; 104 UIToolBar *m_pToolBar; 105 QAction *m_pActionAdd; 106 QAction *m_pActionRefresh; 101 107 /** All the known media that are already attached to some vm are added under the following top level tree item */ 102 QITreeWidgetItem *m_pAttachedSubTreeRoot;108 QITreeWidgetItem *m_pAttachedSubTreeRoot; 103 109 /** All the known media that are not attached to any vm are added under the following top level tree item */ 104 QITreeWidgetItem *m_pNotAttachedSubTreeRoot; 105 QWidget *m_pParent; 110 QITreeWidgetItem *m_pNotAttachedSubTreeRoot; 111 QWidget *m_pParent; 112 UIMediumSearchWidget *m_pSearchWidget; 113 QList<UIMediumItem*> m_mediumItemList; 114 QBrush m_defaultItemForeground; 115 106 116 }; 107 117
Note:
See TracChangeset
for help on using the changeset viewer.