94 lines
2.7 KiB
C++
94 lines
2.7 KiB
C++
#include "searchview.h"
|
|
|
|
#include <mainwindow.h>
|
|
|
|
SearchView::SearchView(QWidget *parent, QTabWidget *tabWidget, SoundPlayback* soundPlayback) : QDockWidget(parent)
|
|
{
|
|
this->tabWidget = tabWidget;
|
|
this->soundPlayback = soundPlayback;
|
|
|
|
auto layout = new QVBoxLayout();
|
|
layout->setSpacing(0);
|
|
layout->setMargin(0);
|
|
|
|
this->searchBox = new QLineEdit(this);
|
|
layout->addWidget(searchBox);
|
|
layout->setAlignment(searchBox, Qt::AlignTop);
|
|
|
|
soundsList = new QSoundsList();
|
|
soundsList->setObjectName("searchResults");
|
|
|
|
connect(soundsList, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(on_soundsList_itemDoubleClicked(QListWidgetItem *)));
|
|
|
|
layout->addWidget(soundsList);
|
|
layout->setAlignment(soundsList, Qt::AlignJustify);
|
|
|
|
|
|
connect(searchBox, SIGNAL(textChanged(QString)), this, SLOT(on_searchBox_textChanged(QString)));
|
|
|
|
auto widget = new QWidget(this);
|
|
widget->setLayout(layout);
|
|
|
|
setWidget(widget);
|
|
setWindowTitle("Search");
|
|
setFeatures(DockWidgetClosable);
|
|
setMinimumWidth(250);
|
|
|
|
connect(this, SIGNAL(visibilityChanged(bool)), SLOT(on_visibilityChanged(bool)));
|
|
|
|
}
|
|
|
|
// TODO: right click scrollToItem()
|
|
|
|
void SearchView::on_searchBox_textChanged(const QString &text) {
|
|
auto searchText = text.toStdString();
|
|
transform(searchText.begin(), searchText.end(), searchText.begin(), [](char c) { return tolower(c); });
|
|
|
|
this->soundsList->clear();
|
|
|
|
if (searchText.length() <= 0) {
|
|
return;
|
|
}
|
|
|
|
for (auto i = 0; i < tabWidget->count(); i++)
|
|
{
|
|
QSoundsList *listWidget = (QSoundsList *)tabWidget->widget(i);
|
|
|
|
for (auto *_item : listWidget->findItems("*", Qt::MatchWildcard))
|
|
{
|
|
auto item = (SoundListWidgetItem*) _item;
|
|
auto name = item->text().toStdString();
|
|
// case insensitive search
|
|
transform(name.begin(), name.end(), name.begin(), [](char c) { return tolower(c); });
|
|
auto path = item->toolTip().toStdString();
|
|
|
|
if (name.find(searchText) != string::npos) {
|
|
// why do we have to create a new item here?
|
|
auto newItem = new SoundListWidgetItem(this->soundsList);
|
|
newItem->setText(item->text());
|
|
newItem->setToolTip(item->toolTip());
|
|
|
|
this->soundsList->addItem(newItem);
|
|
//this->soundsList->addItem(item);
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
void SearchView::on_visibilityChanged(bool visible) {
|
|
if (visible) {
|
|
this->searchBox->setFocus(Qt::ShortcutFocusReason);
|
|
}
|
|
}
|
|
|
|
|
|
void SearchView::on_soundsList_itemDoubleClicked(QListWidgetItem *listWidgetItem)
|
|
{
|
|
if (listWidgetItem)
|
|
{
|
|
this->soundPlayback->playSound(listWidgetItem->toolTip().toStdString());
|
|
}
|
|
}
|