Changeset 77005 in vbox
- Timestamp:
- Jan 26, 2019 6:12:43 PM (6 years ago)
- Location:
- trunk/src/VBox/Frontends/VirtualBox/src/medium
- Files:
-
- 2 edited
-
UIMediumSearchWidget.cpp (modified) (7 diffs)
-
UIMediumSearchWidget.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumSearchWidget.cpp
r76996 r77005 25 25 #include "QIDialogButtonBox.h" 26 26 #include "QIToolButton.h" 27 #include "QITreeWidget.h" 27 28 #include "UIFDCreationDialog.h" 28 29 #include "UIIconPool.h" 30 #include "UIMediumItem.h" 29 31 #include "UIMediumSearchWidget.h" 30 32 #include "UIToolBar.h" … … 33 35 # include "UIWindowMenuManager.h" 34 36 #endif /* VBOX_WS_MAC */ 37 38 39 class FilterByNameUUID : public QITreeWidgetItemFilter 40 { 41 42 public: 43 44 FilterByNameUUID(UIMediumSearchWidget::SearchType enmSearchType, const QString &strSearchTerm) 45 : m_enmSearchType(enmSearchType) 46 , m_strSearchTerm(strSearchTerm){} 47 48 virtual bool operator()(QTreeWidgetItem *pItem) const 49 { 50 if (!pItem || m_strSearchTerm.isEmpty()) 51 return false; 52 if (pItem->type() != QITreeWidgetItem::ItemType) 53 return false; 54 55 UIMediumItem *pMediumItem = static_cast<UIMediumItem*>(pItem); 56 if (!pMediumItem) 57 return false; 58 if (m_enmSearchType == UIMediumSearchWidget::SearchByUUID && !pMediumItem->id().toString().contains(m_strSearchTerm)) 59 return false; 60 if (m_enmSearchType == UIMediumSearchWidget::SearchByName && !pMediumItem->name().contains(m_strSearchTerm)) 61 return false; 62 return true; 63 } 64 65 private: 66 67 UIMediumSearchWidget::SearchType m_enmSearchType; 68 QString m_strSearchTerm; 69 }; 35 70 36 71 UIMediumSearchWidget::UIMediumSearchWidget(QWidget *pParent) … … 40 75 , m_pShowNextMatchButton(0) 41 76 , m_pShowPreviousMatchButton(0) 77 , m_pTreeWidget(0) 78 , m_iScrollToIndex(0) 42 79 { 43 80 prepareWidgets(); … … 78 115 m_pShowPreviousMatchButton->setIcon(UIIconPool::iconSet(":/log_viewer_search_backward_16px.png", ":/log_viewer_search_backward_disabled_16px.png")); 79 116 connect(m_pShowPreviousMatchButton, &QIToolButton::clicked, this, &UIMediumSearchWidget::sigShowPreviousMatchingItem); 117 connect(m_pShowPreviousMatchButton, &QIToolButton::clicked, this, &UIMediumSearchWidget::sltShowPreviousMatchingItem); 118 80 119 pLayout->addWidget(m_pShowPreviousMatchButton); 81 120 } … … 85 124 m_pShowNextMatchButton->setIcon(UIIconPool::iconSet(":/log_viewer_search_forward_16px.png", ":/log_viewer_search_forward_disabled_16px.png")); 86 125 connect(m_pShowNextMatchButton, &QIToolButton::clicked, this, &UIMediumSearchWidget:: sigShowNextMatchingItem); 126 connect(m_pShowNextMatchButton, &QIToolButton::clicked, this, &UIMediumSearchWidget:: sltShowNextMatchingItem); 127 87 128 pLayout->addWidget(m_pShowNextMatchButton); 88 129 } … … 103 144 return QString(); 104 145 return m_pSearchTermLineEdit->text(); 146 } 147 148 void UIMediumSearchWidget::search(QITreeWidget* pTreeWidget) 149 { 150 if (!pTreeWidget) 151 return; 152 153 m_pTreeWidget = pTreeWidget; 154 QList<QTreeWidgetItem*> allItems = pTreeWidget->filterItems(QITreeWidgetItemFilter()); 155 markUnmarkItems(allItems, false); 156 157 m_matchedItemList = pTreeWidget->filterItems(FilterByNameUUID(searchType(), searchTerm())); 158 markUnmarkItems(m_matchedItemList, true); 159 if (!m_matchedItemList.isEmpty()) 160 { 161 m_iScrollToIndex = 0; 162 pTreeWidget->scrollTo(pTreeWidget->itemIndex(m_matchedItemList[m_iScrollToIndex]), QAbstractItemView::PositionAtCenter); 163 } 105 164 } 106 165 … … 120 179 m_pShowNextMatchButton->setToolTip("Show the next item matching the search term"); 121 180 } 181 182 void UIMediumSearchWidget::showEvent(QShowEvent *pEvent) 183 { 184 if (m_pSearchTermLineEdit) 185 m_pSearchTermLineEdit->setFocus(); 186 QIWithRetranslateUI<QWidget>::showEvent(pEvent); 187 } 188 189 void UIMediumSearchWidget::markUnmarkItems(QList<QTreeWidgetItem*> &itemList, bool fMark) 190 { 191 foreach (QTreeWidgetItem* pItem, itemList) 192 { 193 if (pItem->type() != QITreeWidgetItem::ItemType) 194 continue; 195 UIMediumItem *pMediumItem = static_cast<UIMediumItem*>(pItem); 196 if (!pMediumItem) 197 continue; 198 QFont font = pMediumItem->font(0); 199 font.setBold(fMark); 200 pMediumItem->setFont(0, font); 201 } 202 } 203 204 void UIMediumSearchWidget::sltShowNextMatchingItem() 205 { 206 if (!m_pTreeWidget) 207 return; 208 if (++m_iScrollToIndex >= m_matchedItemList.size()) 209 m_iScrollToIndex = 0; 210 if (!m_matchedItemList[m_iScrollToIndex]) 211 return; 212 m_pTreeWidget->scrollTo(m_pTreeWidget->itemIndex(m_matchedItemList[m_iScrollToIndex]), QAbstractItemView::PositionAtCenter); 213 } 214 215 void UIMediumSearchWidget::sltShowPreviousMatchingItem() 216 { 217 if (!m_pTreeWidget) 218 return; 219 if (--m_iScrollToIndex <= 0) 220 m_iScrollToIndex = m_matchedItemList.size() - 1; 221 if (!m_matchedItemList[m_iScrollToIndex]) 222 return; 223 m_pTreeWidget->scrollTo(m_pTreeWidget->itemIndex(m_matchedItemList[m_iScrollToIndex]), QAbstractItemView::PositionAtCenter); 224 225 } -
trunk/src/VBox/Frontends/VirtualBox/src/medium/UIMediumSearchWidget.h
r76996 r77005 27 27 /* Forward declarations: */ 28 28 class QAction; 29 class QTreeWidgetItem; 29 30 class QLineEdit; 30 31 class QIComboBox; 31 32 class QIDialogButtonBox; 32 33 class QIToolButton; 34 class QITreeWidget; 35 class UIMediumItem; 36 33 37 34 38 /** QWidget extension providing a simple way to enter a earch term and search type for medium searching … … 58 62 SearchType searchType() const; 59 63 QString searchTerm() const; 64 void search(QITreeWidget* pTreeWidget); 60 65 61 protected:66 protected: 62 67 63 68 void retranslateUi() /* override */; 69 virtual void showEvent(QShowEvent *pEvent) /* override */; 70 71 private slots: 72 73 void sltShowNextMatchingItem(); 74 void sltShowPreviousMatchingItem(); 64 75 65 76 private: 66 77 67 void prepareWidgets(); 78 void prepareWidgets(); 79 void markUnmarkItems(QList<QTreeWidgetItem*> &itemList, bool fMark); 80 68 81 QIComboBox *m_pSearchComboxBox; 69 82 QLineEdit *m_pSearchTermLineEdit; 70 83 QIToolButton *m_pShowNextMatchButton; 71 84 QIToolButton *m_pShowPreviousMatchButton; 85 86 QList<QTreeWidgetItem*> m_matchedItemList; 87 QITreeWidget *m_pTreeWidget; 88 int m_iScrollToIndex; 72 89 }; 73 90
Note:
See TracChangeset
for help on using the changeset viewer.

