Added searchbar to songbook

This commit is contained in:
JamesTheMaker 2024-03-08 11:39:39 -05:00
parent 15a12c06a6
commit 53c102b0c7
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(); dismiss();
}); });
reader.registerCallback("group", [=](Widget*) {}); reader.registerCallback("group", [=](Widget*) {});
reader.registerCallback("search", [=](Widget*) {});
reader.construct(assets->json("/interface/windowconfig/songbook.config:paneLayout"), this); reader.construct(assets->json("/interface/windowconfig/songbook.config:paneLayout"), this);
auto songList = fetchChild<ListWidget>("songs.list"); auto songList = fetchChild<ListWidget>("songs.list");
auto search = fetchChild<TextBoxWidget>("search")->getText();
StringList files = assets->scan(".abc"); if (m_searchValue != search)
sort(files, [](String const& a, String const& b) -> bool { return b.compare(a, String::CaseInsensitive) > 0; }); m_searchValue = search;
for (auto s : files) {
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 song = s.substr(7, s.length() - (7 + 4));
auto widget = songList->addItem(); if (song.contains(m_searchValue, String::CaseInsensitive)) {
widget->setData(s); auto widget = songList->addItem();
auto songName = widget->fetchChild<LabelWidget>("songName"); widget->setData(s);
songName->setText(song); 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; return true;
} }
} }

View File

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