From 42434314d65cdc29402c7adcb08c2fa5113f7ca2 Mon Sep 17 00:00:00 2001 From: ConfuSomu Date: Wed, 2 Aug 2023 01:56:58 +0200 Subject: Implement find dialog This dialog consolidates options for searching through textual elements in lists which simplifies the logic present in the MainWindow class. --- src/mainwindow.cpp | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) (limited to 'src/mainwindow.cpp') diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 363f2b1..2b8a0df 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1,6 +1,7 @@ #include "mainwindow.h" #include "./ui_mainwindow.h" #include "src/archive_parser.h" +#include "src/finddialog.h" #include "src/list_item.h" #include "src/command_line.h" @@ -100,29 +101,29 @@ void MainWindow::on_actionCopy_status_triggered(bool checked) { } void MainWindow::on_buttonSearch_clicked() { - static QString* last_search = new QString; - static int selected_match = 0; - - QString current_search = ui->textInputSearch->text(); + if (!find_dialog) { + find_dialog = new FindDialog(this); + find_dialog->set_qlist_widget(ui->listWidget); + connect(find_dialog, &FindDialog::item_selected, this, &MainWindow::select_list_item); + connect(this, &MainWindow::search_text_changed, find_dialog, &FindDialog::set_search_text); + connect(find_dialog, &FindDialog::search_text_changed, this, &MainWindow::set_search_text); + } - QList matches = ui->listWidget->findItems(current_search, Qt::MatchContains); + find_dialog->show(); + find_dialog->raise(); + find_dialog->activateWindow(); +} - if (not (*last_search == current_search)) { - *last_search = current_search; - selected_match = 0; - } else if (++selected_match >= matches.size()) selected_match = 0; +void MainWindow::select_list_item(QListWidgetItem* item) { + on_listWidget_itemActivated(item); +} - if (not matches.isEmpty()) { - ui->listWidget->scrollToItem(matches[selected_match], QAbstractItemView::EnsureVisible); - ui->listWidget->setCurrentItem(matches[selected_match]); - on_listWidget_itemActivated(matches[selected_match]); - } +void MainWindow::on_textInputSearch_textEdited(const QString &text) { + emit search_text_changed(text); +} - if (matches.size() > 0) - ui->statusbar->showMessage(tr("Search result %1 out of %2") - .arg(selected_match+1) - .arg(matches.size())); - else ui->statusbar->showMessage(tr("No search results.")); +void MainWindow::set_search_text(const QString &text) { + ui->textInputSearch->setText(text); } void MainWindow::relist_statuses() { -- cgit v1.2.3-54-g00ecf