diff --git a/mainwindow.cpp b/mainwindow.cpp index 822019b..66d524a 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -27,9 +27,18 @@ MainWindow::MainWindow(QWidget *parent) powerOnCountLineEdit = qobject_cast(ui->centralwidget->findChild("powerOnCountLineEdit")); powerOnHoursLineEdit = qobject_cast(ui->centralwidget->findChild("powerOnHoursLineEdit")); - tableWidget = qobject_cast(ui->centralwidget->findChild("dataTable"));; + tableWidget = qobject_cast(ui->centralwidget->findChild("dataTable")); serialNumberLineEdit->setEchoMode(QLineEdit::Password); + nextButton = ui->centralwidget->findChild("nextButton"); + prevButton = ui->centralwidget->findChild("previousButton"); + + connect(nextButton, &QPushButton::clicked, this, &MainWindow::onNextButtonClicked); + connect(prevButton, &QPushButton::clicked, this, &MainWindow::onPrevButtonClicked); + + nextButton->setFocusPolicy(Qt::NoFocus); + prevButton->setFocusPolicy(Qt::NoFocus); + QAction *toggleEchoModeAction = serialNumberLineEdit->addAction(QIcon::fromTheme(QStringLiteral("visibility")), QLineEdit::TrailingPosition); connect(toggleEchoModeAction, &QAction::triggered, this, [=]() { if (serialNumberLineEdit->echoMode() == QLineEdit::Password) { @@ -42,6 +51,8 @@ MainWindow::MainWindow(QWidget *parent) }); scanDevices(); + + this->setFocus(); } MainWindow::~MainWindow() @@ -49,6 +60,28 @@ MainWindow::~MainWindow() delete ui; } +void MainWindow::onNextButtonClicked() +{ + int currentIndex = buttonGroup->buttons().indexOf(buttonGroup->checkedButton()); + int nextIndex = (currentIndex + 1) % buttonGroup->buttons().size(); + buttonGroup->buttons().at(nextIndex)->click(); + updateNavigationButtons(nextIndex); +} + +void MainWindow::onPrevButtonClicked() +{ + int currentIndex = buttonGroup->buttons().indexOf(buttonGroup->checkedButton()); + int prevIndex = (currentIndex - 1 + buttonGroup->buttons().size()) % buttonGroup->buttons().size(); + buttonGroup->buttons().at(prevIndex)->click(); + updateNavigationButtons(prevIndex); +} + +void MainWindow::updateNavigationButtons(int currentIndex) +{ + prevButton->setVisible(currentIndex > 0); + nextButton->setVisible(currentIndex < buttonGroup->buttons().size() - 1); +} + void MainWindow::scanDevices() { QString output = getSmartctlOutput({"--scan", "--json"}, false); @@ -61,7 +94,6 @@ void MainWindow::scanDevices() bool firstTime = true; bool globalIsNvme = false; - for (const QJsonValue &value : devices) { QJsonObject device = value.toObject(); QString deviceName = device["name"].toString(); @@ -155,6 +187,7 @@ void MainWindow::scanDevices() } else { populateWindow(localObj, health); } + updateNavigationButtons(buttonGroup->buttons().indexOf(button)); }); if (firstTime) { @@ -175,6 +208,8 @@ void MainWindow::scanDevices() } else { populateWindow(globalObj, globalHealth); } + + updateNavigationButtons(buttonGroup->buttons().indexOf(buttonGroup->checkedButton())); } void MainWindow::populateWindow(const QJsonObject &localObj, const QString &health, const QVector>& nvmeLogOrdered) diff --git a/mainwindow.h b/mainwindow.h index 50a0899..f593e7a 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -38,7 +38,11 @@ private: QLineEdit *firmwareLineEdit, *serialNumberLineEdit, *typeLineEdit, *protocolLineEdit, *deviceNodeLineEdit; QLineEdit *totalReadsLineEdit, *totalWritesLineEdit, *rotationRateLineEdit, *powerOnCountLineEdit, *powerOnHoursLineEdit; QTableWidget *tableWidget; + QPushButton *prevButton, *nextButton; + void onNextButtonClicked(); + void onPrevButtonClicked(); + void updateNavigationButtons(int currentIndex); void scanDevices(); void populateWindow(const QJsonObject &tempObj, const QString &health, const QVector>& nvmeLogOrdered = QVector>()); void addNvmeLogTable(const QVector>& nvmeLogOrdered);