aboutsummaryrefslogtreecommitdiffstats
path: root/src/mainwindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mainwindow.cpp')
-rw-r--r--src/mainwindow.cpp39
1 files changed, 20 insertions, 19 deletions
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<QListWidgetItem*> 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() {