diff --git a/include/gridview.h b/include/gridview.h index d0418b1..5a9ce90 100644 --- a/include/gridview.h +++ b/include/gridview.h @@ -13,6 +13,8 @@ class GridView : public QWidget { public: explicit GridView(QWidget *parent = nullptr); void setDisks(const QVector &newDisks); + void highlightDisk(qsizetype index); + void setActiveIndex(qsizetype index); protected: void resizeEvent(QResizeEvent *) override; @@ -32,4 +34,6 @@ private: void extracted(const QVector &filteredDisks, int &cols, int &row, int &col); void populateGrid(); + + qsizetype activeIndex = -1; }; diff --git a/src/gridview.cpp b/src/gridview.cpp index 87b3c2b..cbff829 100644 --- a/src/gridview.cpp +++ b/src/gridview.cpp @@ -62,6 +62,35 @@ void GridView::setDisks(const QVector &newDisks) { populateGrid(); } +void GridView::highlightDisk(qsizetype index) { + if (index < 0 || index >= gridLayout->count()) + return; + + QWidget *diskWidget = gridLayout->itemAt(static_cast(index))->widget(); + if (!diskWidget) + return; + + QPushButton *iconButton = diskWidget->findChild(); + if (!iconButton) + return; + + if (selectedButton) { + selectedButton->setStyleSheet(iconButton->styleSheet()); + } + + selectedButton = iconButton; + selectedButton->setStyleSheet( + QString("QPushButton { border: 2px solid %1; background-color: %2; }") + .arg(selectedColor, hoverColor)); +} + +void GridView::setActiveIndex(qsizetype index) { + activeIndex = index; + if (gridLayout && gridLayout->count() > 0) { + highlightDisk(activeIndex); + } +} + void GridView::populateGrid() { selectedButton = nullptr; QLayoutItem *child; @@ -89,6 +118,10 @@ void GridView::populateGrid() { } extracted(filteredDisks, cols, row, col); + + if (activeIndex >= 0 && activeIndex < filteredDisks.size()) { + highlightDisk(activeIndex); + } } void GridView::extracted(const QVector &filteredDisks, int &cols, int &row, int &col) { diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 1fa23d7..0ec7217 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -352,11 +352,15 @@ void MainWindow::updateUI() connect(button, &QPushButton::clicked, this, [=]() { updateWindow(); disksGroup->actions().at(buttonIndex)->setChecked(true); + gridView->highlightDisk(buttonIndex); + gridView->setActiveIndex(buttonIndex); }); connect(diskAction, &QAction::triggered, this, [=]() { updateWindow(); button->setChecked(true); + gridView->highlightDisk(buttonIndex); + gridView->setActiveIndex(buttonIndex); }); if (firstTime) { @@ -364,6 +368,7 @@ void MainWindow::updateUI() globalHealth = health; button->setChecked(true); diskAction->setChecked(true); + gridView->setActiveIndex(0); firstTime = false; globalIsNvme = isNvme; if (isNvme) {