Merge pull request #31 from JamesTheMaker/main

Added search bar to Songbook
This commit is contained in:
Kae 2024-03-09 09:07:39 +11:00 committed by GitHub
commit 7bc9eaa432
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 67 additions and 9 deletions

View File

@ -0,0 +1,23 @@
{
"paneLayout" : {
"group" : {
"position" : [8, 71]
},
"search" : {
"type" : "textbox",
"position" : [86, 71],
"hint" : "Search",
"maxWidth" : 50
},
"lblBandInput" : {
"position" : [3, 68]
},
"lblSearchInput" : {
"type" : "image",
"file" : "/interface/songbook/band.png",
"position" : [81, 68],
"zlevel" : -3
}
}
}

View File

@ -23,21 +23,52 @@ SongbookInterface::SongbookInterface(PlayerPtr player) {
dismiss();
});
reader.registerCallback("group", [=](Widget*) {});
reader.registerCallback("search", [=](Widget*) {});
reader.construct(assets->json("/interface/windowconfig/songbook.config:paneLayout"), this);
auto songList = fetchChild<ListWidget>("songs.list");
auto search = fetchChild<TextBoxWidget>("search")->getText();
StringList files = assets->scan(".abc");
sort(files, [](String const& a, String const& b) -> bool { return b.compare(a, String::CaseInsensitive) > 0; });
for (auto s : files) {
if (m_searchValue != search)
m_searchValue = search;
m_files = assets->scan(".abc");
sort(m_files, [](String const& a, String const& b) -> bool { return b.compare(a, String::CaseInsensitive) > 0; });
for (auto s : m_files) {
auto song = s.substr(7, s.length() - (7 + 4));
auto widget = songList->addItem();
widget->setData(s);
auto songName = widget->fetchChild<LabelWidget>("songName");
songName->setText(song);
if (song.contains(m_searchValue, String::CaseInsensitive)) {
auto widget = songList->addItem();
widget->setData(s);
auto songName = widget->fetchChild<LabelWidget>("songName");
songName->setText(song);
widget->show();
widget->show();
}
}
}
void SongbookInterface::update(float dt) {
Pane::update(dt);
auto search = fetchChild<TextBoxWidget>("search")->getText();
if (m_searchValue != search) {
m_searchValue = search;
auto songList = fetchChild<ListWidget>("songs.list");
songList->clear();
for (auto s : m_files) {
auto song = s.substr(7, s.length() - (7 + 4));
if (song.contains(m_searchValue, String::CaseInsensitive)) {
auto widget = songList->addItem();
widget->setData(s);
auto songName = widget->fetchChild<LabelWidget>("songName");
songName->setText(song);
widget->show();
}
}
}
}
@ -58,4 +89,4 @@ bool SongbookInterface::play() {
return true;
}
}
}

View File

@ -13,8 +13,12 @@ class SongbookInterface : public Pane {
public:
SongbookInterface(PlayerPtr player);
void update(float dt) override;
private:
PlayerPtr m_player;
StringList m_files;
String m_searchValue;
bool play();
};