Added searchbar to songbook
This commit is contained in:
parent
15a12c06a6
commit
53c102b0c7
23
assets/opensb/interface/windowconfig/songbook.config.patch
Normal file
23
assets/opensb/interface/windowconfig/songbook.config.patch
Normal 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
|
||||
}
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user