Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--assets/opensb/interface/windowconfig/songbook.config.patch23
-rw-r--r--source/frontend/StarSongbookInterface.cpp49
-rw-r--r--source/frontend/StarSongbookInterface.hpp4
3 files changed, 67 insertions, 9 deletions
diff --git a/assets/opensb/interface/windowconfig/songbook.config.patch b/assets/opensb/interface/windowconfig/songbook.config.patch
new file mode 100644
index 0000000..36991a5
--- /dev/null
+++ b/assets/opensb/interface/windowconfig/songbook.config.patch
@@ -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
+ }
+ }
+} \ No newline at end of file
diff --git a/source/frontend/StarSongbookInterface.cpp b/source/frontend/StarSongbookInterface.cpp
index 8ccb437..cc6a17d 100644
--- a/source/frontend/StarSongbookInterface.cpp
+++ b/source/frontend/StarSongbookInterface.cpp
@@ -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;
}
-}
+} \ No newline at end of file
diff --git a/source/frontend/StarSongbookInterface.hpp b/source/frontend/StarSongbookInterface.hpp
index 47622a4..f8a6cb2 100644
--- a/source/frontend/StarSongbookInterface.hpp
+++ b/source/frontend/StarSongbookInterface.hpp
@@ -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();
};