From 84e137e16ad4ec7b0e4d96ef38290592d2d37aef Mon Sep 17 00:00:00 2001 From: Sebastian Date: Fri, 9 Oct 2026 17:10:21 +0200 Subject: [PATCH] Only list played songs in the statistics song list Songs never played are left out of the song list, so the Show menu is hidden while it is shown. --- statistics/statistics_view.gd | 34 +- tests/data/layout_baseline.json | 842 +++++++++++----------- tests/fakes/ui_tour.gd | 2 + tests/integration/test_statistics_view.gd | 57 +- 4 files changed, 464 insertions(+), 471 deletions(-) diff --git a/statistics/statistics_view.gd b/statistics/statistics_view.gd index 52bb87a..91d97e7 100644 --- a/statistics/statistics_view.gd +++ b/statistics/statistics_view.gd @@ -1,8 +1,8 @@ class_name StatisticsView extends Panel ## Shows every soundtrack on the server as a card with its play statistics, or every -## song in a list with its soundtrack. Either can be searched, filtered on whether it has -## been played, and sorted. +## played song in a list with its soundtrack. Both can be searched and sorted, and the +## cards filtered on whether the soundtrack has been played. ## ## Shown instead of the quiz when the Statistics tab is chosen. @@ -36,6 +36,7 @@ var _songs_ready: bool = false @onready var search_field: LineEdit = %SearchField @onready var clear_button: Button = %ClearButton +@onready var show_label: Label = $Toolbar/ShowLabel @onready var show_option: OptionButton = %ShowOption @onready var sort_option: OptionButton = %SortOption @onready var count_label: Label = %CountLabel @@ -81,6 +82,9 @@ func set_mode(new_mode: Mode) -> void: songs_mode_button.set_pressed_no_signal(mode == Mode.SONGS) card_scroll.visible = mode == Mode.SOUNDTRACKS song_list.visible = mode == Mode.SONGS + # The song list only has played songs, so there is nothing to filter + show_label.visible = mode == Mode.SOUNDTRACKS + show_option.visible = mode == Mode.SOUNDTRACKS search_field.placeholder_text = "Search soundtracks" if mode == Mode.SOUNDTRACKS \ else "Search songs and soundtracks" apply_sort() @@ -167,11 +171,10 @@ func _on_song_pressed(song: SongInfoForStats) -> void: soundtrack_selected.emit(_soundtracks[song.soundtrack_name]) -# Shows the songs matching the search text and the show menu, in the sort menu's order +# Shows the songs matching the search text, in the sort menu's order func _show_songs() -> void: _prepare_songs() var search_text: String = search_field.text.strip_edges() - var filter: ShowFilter = show_option.selected as ShowFilter var song_names: Dictionary = {} var soundtrack_names: Dictionary = {} if !search_text.is_empty(): @@ -182,18 +185,18 @@ func _show_songs() -> void: var shown: Array[SongInfoForStats] = [] for song: SongInfoForStats in songs_in_order(_songs_a_to_z, sort_option.selected as SortOrder): - if (search_text.is_empty() || song_names.has(song.song_name) - || soundtrack_names.has(song.soundtrack_name)) \ - && _song_passes_filter(song, filter): + if search_text.is_empty() || song_names.has(song.song_name) \ + || soundtrack_names.has(song.soundtrack_name): shown.append(song) song_list.show_songs(shown, search_text) if shown.size() == _songs_a_to_z.size(): - count_label.text = "%d songs" % shown.size() + count_label.text = "%d played songs" % shown.size() else: - count_label.text = "%d of %d songs" % [shown.size(), _songs_a_to_z.size()] + count_label.text = "%d of %d played songs" % [shown.size(), _songs_a_to_z.size()] -# Lists every song once after loading, sorted A to Z, which the other orders start from +# Lists every played song once after loading, sorted A to Z, which the other orders +# start from. Songs never played are left out: there are many and they say nothing. func _prepare_songs() -> void: if _songs_ready: return @@ -202,6 +205,8 @@ func _prepare_songs() -> void: var names: Dictionary = {} for soundtrack: SoundtrackWithSongs in _soundtracks.values(): for song: SongInfoForStats in soundtrack.songs: + if song.times_played == 0: + continue # The song list finds a song's soundtrack by its name song.soundtrack_name = soundtrack.soundtrack_name _songs_a_to_z.append(song) @@ -243,15 +248,6 @@ static func songs_in_order( return a_to_z -static func _song_passes_filter(song: SongInfoForStats, filter: ShowFilter) -> bool: - match filter: - ShowFilter.PLAYED: - return song.times_played > 0 - ShowFilter.NEVER_PLAYED: - return song.times_played == 0 - return true - - func _on_load_failed() -> void: _loading = false if cards.is_empty(): diff --git a/tests/data/layout_baseline.json b/tests/data/layout_baseline.json index 5359f3f..f319609 100644 --- a/tests/data/layout_baseline.json +++ b/tests/data/layout_baseline.json @@ -8466,7 +8466,7 @@ "rect": [ 32.0, 128.0, - 1844.0, + 1856.0, 936.0 ], "visible": false @@ -8475,7 +8475,7 @@ "rect": [ 32.0, 128.0, - 1844.0, + 1856.0, 30.0 ], "visible": false @@ -8484,14 +8484,14 @@ "rect": [ 40.0, 130.0, - 1828.0, + 1840.0, 26.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/Header/Titles/PlayedTitle": { "rect": [ - 1768.0, + 1780.0, 130.0, 100.0, 26.0 @@ -8502,16 +8502,16 @@ "rect": [ 40.0, 130.0, - 1017.0, + 1024.0, 26.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/Header/Titles/SoundtrackTitle": { "rect": [ - 1073.0, + 1080.0, 130.0, - 679.0, + 684.0, 26.0 ], "visible": false @@ -8520,7 +8520,7 @@ "rect": [ 32.0, 162.0, - 1844.0, + 1856.0, 902.0 ], "visible": false @@ -8529,7 +8529,7 @@ "rect": [ 32.0, 194.0, - 1844.0, + 1856.0, 32.0 ], "visible": false @@ -8538,14 +8538,14 @@ "rect": [ 40.0, 196.0, - 1828.0, + 1840.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#1/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 197.0, 100.0, 26.0 @@ -8556,16 +8556,16 @@ "rect": [ 40.0, 196.0, - 1017.0, + 1024.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#1/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 196.0, - 679.0, + 684.0, 28.0 ], "visible": false @@ -8574,7 +8574,7 @@ "rect": [ 32.0, 482.0, - 1844.0, + 1856.0, 32.0 ], "visible": false @@ -8583,14 +8583,14 @@ "rect": [ 40.0, 484.0, - 1828.0, + 1840.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#10/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 485.0, 100.0, 26.0 @@ -8601,16 +8601,16 @@ "rect": [ 40.0, 484.0, - 1017.0, + 1024.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#10/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 484.0, - 679.0, + 684.0, 28.0 ], "visible": false @@ -8619,7 +8619,7 @@ "rect": [ 32.0, 514.0, - 1844.0, + 1856.0, 32.0 ], "visible": false @@ -8628,14 +8628,14 @@ "rect": [ 40.0, 516.0, - 1828.0, + 1840.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#11/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 517.0, 100.0, 26.0 @@ -8646,16 +8646,16 @@ "rect": [ 40.0, 516.0, - 1017.0, + 1024.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#11/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 516.0, - 679.0, + 684.0, 28.0 ], "visible": false @@ -8664,7 +8664,7 @@ "rect": [ 32.0, 546.0, - 1844.0, + 1856.0, 32.0 ], "visible": false @@ -8673,14 +8673,14 @@ "rect": [ 40.0, 548.0, - 1828.0, + 1840.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#12/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 549.0, 100.0, 26.0 @@ -8691,16 +8691,16 @@ "rect": [ 40.0, 548.0, - 1017.0, + 1024.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#12/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 548.0, - 679.0, + 684.0, 28.0 ], "visible": false @@ -8709,7 +8709,7 @@ "rect": [ 32.0, 578.0, - 1844.0, + 1856.0, 32.0 ], "visible": false @@ -8718,14 +8718,14 @@ "rect": [ 40.0, 580.0, - 1828.0, + 1840.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#13/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 581.0, 100.0, 26.0 @@ -8736,16 +8736,16 @@ "rect": [ 40.0, 580.0, - 1017.0, + 1024.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#13/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 580.0, - 679.0, + 684.0, 28.0 ], "visible": false @@ -8754,7 +8754,7 @@ "rect": [ 32.0, 610.0, - 1844.0, + 1856.0, 32.0 ], "visible": false @@ -8763,14 +8763,14 @@ "rect": [ 40.0, 612.0, - 1828.0, + 1840.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#14/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 613.0, 100.0, 26.0 @@ -8781,16 +8781,16 @@ "rect": [ 40.0, 612.0, - 1017.0, + 1024.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#14/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 612.0, - 679.0, + 684.0, 28.0 ], "visible": false @@ -8799,7 +8799,7 @@ "rect": [ 32.0, 642.0, - 1844.0, + 1856.0, 32.0 ], "visible": false @@ -8808,14 +8808,14 @@ "rect": [ 40.0, 644.0, - 1828.0, + 1840.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#15/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 645.0, 100.0, 26.0 @@ -8826,16 +8826,16 @@ "rect": [ 40.0, 644.0, - 1017.0, + 1024.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#15/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 644.0, - 679.0, + 684.0, 28.0 ], "visible": false @@ -8844,7 +8844,7 @@ "rect": [ 32.0, 674.0, - 1844.0, + 1856.0, 32.0 ], "visible": false @@ -8853,14 +8853,14 @@ "rect": [ 40.0, 676.0, - 1828.0, + 1840.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#16/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 677.0, 100.0, 26.0 @@ -8871,16 +8871,16 @@ "rect": [ 40.0, 676.0, - 1017.0, + 1024.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#16/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 676.0, - 679.0, + 684.0, 28.0 ], "visible": false @@ -8889,7 +8889,7 @@ "rect": [ 32.0, 706.0, - 1844.0, + 1856.0, 32.0 ], "visible": false @@ -8898,14 +8898,14 @@ "rect": [ 40.0, 708.0, - 1828.0, + 1840.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#17/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 709.0, 100.0, 26.0 @@ -8916,16 +8916,16 @@ "rect": [ 40.0, 708.0, - 1017.0, + 1024.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#17/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 708.0, - 679.0, + 684.0, 28.0 ], "visible": false @@ -8934,7 +8934,7 @@ "rect": [ 32.0, 738.0, - 1844.0, + 1856.0, 32.0 ], "visible": false @@ -8943,14 +8943,14 @@ "rect": [ 40.0, 740.0, - 1828.0, + 1840.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#18/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 741.0, 100.0, 26.0 @@ -8961,16 +8961,16 @@ "rect": [ 40.0, 740.0, - 1017.0, + 1024.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#18/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 740.0, - 679.0, + 684.0, 28.0 ], "visible": false @@ -8979,7 +8979,7 @@ "rect": [ 32.0, 770.0, - 1844.0, + 1856.0, 32.0 ], "visible": false @@ -8988,14 +8988,14 @@ "rect": [ 40.0, 772.0, - 1828.0, + 1840.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#19/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 773.0, 100.0, 26.0 @@ -9006,16 +9006,16 @@ "rect": [ 40.0, 772.0, - 1017.0, + 1024.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#19/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 772.0, - 679.0, + 684.0, 28.0 ], "visible": false @@ -9024,7 +9024,7 @@ "rect": [ 32.0, 226.0, - 1844.0, + 1856.0, 32.0 ], "visible": false @@ -9033,14 +9033,14 @@ "rect": [ 40.0, 228.0, - 1828.0, + 1840.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#2/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 229.0, 100.0, 26.0 @@ -9051,16 +9051,16 @@ "rect": [ 40.0, 228.0, - 1017.0, + 1024.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#2/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 228.0, - 679.0, + 684.0, 28.0 ], "visible": false @@ -9069,7 +9069,7 @@ "rect": [ 32.0, 802.0, - 1844.0, + 1856.0, 32.0 ], "visible": false @@ -9078,14 +9078,14 @@ "rect": [ 40.0, 804.0, - 1828.0, + 1840.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#20/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 805.0, 100.0, 26.0 @@ -9096,16 +9096,16 @@ "rect": [ 40.0, 804.0, - 1017.0, + 1024.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#20/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 804.0, - 679.0, + 684.0, 28.0 ], "visible": false @@ -9114,7 +9114,7 @@ "rect": [ 32.0, 834.0, - 1844.0, + 1856.0, 32.0 ], "visible": false @@ -9123,14 +9123,14 @@ "rect": [ 40.0, 836.0, - 1828.0, + 1840.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#21/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 837.0, 100.0, 26.0 @@ -9141,16 +9141,16 @@ "rect": [ 40.0, 836.0, - 1017.0, + 1024.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#21/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 836.0, - 679.0, + 684.0, 28.0 ], "visible": false @@ -9159,7 +9159,7 @@ "rect": [ 32.0, 866.0, - 1844.0, + 1856.0, 32.0 ], "visible": false @@ -9168,14 +9168,14 @@ "rect": [ 40.0, 868.0, - 1828.0, + 1840.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#22/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 869.0, 100.0, 26.0 @@ -9186,16 +9186,16 @@ "rect": [ 40.0, 868.0, - 1017.0, + 1024.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#22/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 868.0, - 679.0, + 684.0, 28.0 ], "visible": false @@ -9204,7 +9204,7 @@ "rect": [ 32.0, 898.0, - 1844.0, + 1856.0, 32.0 ], "visible": false @@ -9213,14 +9213,14 @@ "rect": [ 40.0, 900.0, - 1828.0, + 1840.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#23/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 901.0, 100.0, 26.0 @@ -9231,16 +9231,16 @@ "rect": [ 40.0, 900.0, - 1017.0, + 1024.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#23/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 900.0, - 679.0, + 684.0, 28.0 ], "visible": false @@ -9249,7 +9249,7 @@ "rect": [ 32.0, 930.0, - 1844.0, + 1856.0, 32.0 ], "visible": false @@ -9258,14 +9258,14 @@ "rect": [ 40.0, 932.0, - 1828.0, + 1840.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#24/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 933.0, 100.0, 26.0 @@ -9276,16 +9276,16 @@ "rect": [ 40.0, 932.0, - 1017.0, + 1024.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#24/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 932.0, - 679.0, + 684.0, 28.0 ], "visible": false @@ -9294,7 +9294,7 @@ "rect": [ 32.0, 962.0, - 1844.0, + 1856.0, 32.0 ], "visible": false @@ -9303,14 +9303,14 @@ "rect": [ 40.0, 964.0, - 1828.0, + 1840.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#25/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 965.0, 100.0, 26.0 @@ -9321,16 +9321,16 @@ "rect": [ 40.0, 964.0, - 1017.0, + 1024.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#25/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 964.0, - 679.0, + 684.0, 28.0 ], "visible": false @@ -9339,7 +9339,7 @@ "rect": [ 32.0, 994.0, - 1844.0, + 1856.0, 32.0 ], "visible": false @@ -9348,14 +9348,14 @@ "rect": [ 40.0, 996.0, - 1828.0, + 1840.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#26/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 997.0, 100.0, 26.0 @@ -9366,16 +9366,16 @@ "rect": [ 40.0, 996.0, - 1017.0, + 1024.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#26/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 996.0, - 679.0, + 684.0, 28.0 ], "visible": false @@ -9384,7 +9384,7 @@ "rect": [ 32.0, 1026.0, - 1844.0, + 1856.0, 32.0 ], "visible": false @@ -9393,14 +9393,14 @@ "rect": [ 40.0, 1028.0, - 1828.0, + 1840.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#27/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 1029.0, 100.0, 26.0 @@ -9411,16 +9411,16 @@ "rect": [ 40.0, 1028.0, - 1017.0, + 1024.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#27/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 1028.0, - 679.0, + 684.0, 28.0 ], "visible": false @@ -9428,25 +9428,25 @@ "StatisticsView/SongList/Layout/Columns/RowsArea/#28": { "rect": [ 32.0, - 1058.0, - 1844.0, + 162.0, + 1856.0, 32.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#28/Columns": { "rect": [ - 40.0, - 1060.0, - 1828.0, + 32.0, + 162.0, + 132.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#28/Columns/PlayedLabel": { "rect": [ - 1768.0, - 1061.0, + 32.0, + 162.0, 100.0, 26.0 ], @@ -9454,18 +9454,18 @@ }, "StatisticsView/SongList/Layout/Columns/RowsArea/#28/Columns/SongLabel": { "rect": [ - 40.0, - 1060.0, - 1017.0, + 32.0, + 162.0, + 0.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#28/Columns/SoundtrackLabel": { "rect": [ - 1073.0, - 1060.0, - 679.0, + 32.0, + 162.0, + 0.0, 28.0 ], "visible": false @@ -9473,25 +9473,25 @@ "StatisticsView/SongList/Layout/Columns/RowsArea/#29": { "rect": [ 32.0, - 1090.0, - 1844.0, + 162.0, + 1856.0, 32.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#29/Columns": { "rect": [ - 40.0, - 1092.0, - 1828.0, + 32.0, + 162.0, + 132.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#29/Columns/PlayedLabel": { "rect": [ - 1768.0, - 1093.0, + 32.0, + 162.0, 100.0, 26.0 ], @@ -9499,18 +9499,18 @@ }, "StatisticsView/SongList/Layout/Columns/RowsArea/#29/Columns/SongLabel": { "rect": [ - 40.0, - 1092.0, - 1017.0, + 32.0, + 162.0, + 0.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#29/Columns/SoundtrackLabel": { "rect": [ - 1073.0, - 1092.0, - 679.0, + 32.0, + 162.0, + 0.0, 28.0 ], "visible": false @@ -9519,7 +9519,7 @@ "rect": [ 32.0, 258.0, - 1844.0, + 1856.0, 32.0 ], "visible": false @@ -9528,14 +9528,14 @@ "rect": [ 40.0, 260.0, - 1828.0, + 1840.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#3/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 261.0, 100.0, 26.0 @@ -9546,16 +9546,16 @@ "rect": [ 40.0, 260.0, - 1017.0, + 1024.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#3/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 260.0, - 679.0, + 684.0, 28.0 ], "visible": false @@ -9564,7 +9564,7 @@ "rect": [ 32.0, 290.0, - 1844.0, + 1856.0, 32.0 ], "visible": false @@ -9573,14 +9573,14 @@ "rect": [ 40.0, 292.0, - 1828.0, + 1840.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#4/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 293.0, 100.0, 26.0 @@ -9591,16 +9591,16 @@ "rect": [ 40.0, 292.0, - 1017.0, + 1024.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#4/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 292.0, - 679.0, + 684.0, 28.0 ], "visible": false @@ -9609,7 +9609,7 @@ "rect": [ 32.0, 322.0, - 1844.0, + 1856.0, 32.0 ], "visible": false @@ -9618,14 +9618,14 @@ "rect": [ 40.0, 324.0, - 1828.0, + 1840.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#5/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 325.0, 100.0, 26.0 @@ -9636,16 +9636,16 @@ "rect": [ 40.0, 324.0, - 1017.0, + 1024.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#5/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 324.0, - 679.0, + 684.0, 28.0 ], "visible": false @@ -9654,7 +9654,7 @@ "rect": [ 32.0, 354.0, - 1844.0, + 1856.0, 32.0 ], "visible": false @@ -9663,14 +9663,14 @@ "rect": [ 40.0, 356.0, - 1828.0, + 1840.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#6/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 357.0, 100.0, 26.0 @@ -9681,16 +9681,16 @@ "rect": [ 40.0, 356.0, - 1017.0, + 1024.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#6/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 356.0, - 679.0, + 684.0, 28.0 ], "visible": false @@ -9699,7 +9699,7 @@ "rect": [ 32.0, 386.0, - 1844.0, + 1856.0, 32.0 ], "visible": false @@ -9708,14 +9708,14 @@ "rect": [ 40.0, 388.0, - 1828.0, + 1840.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#7/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 389.0, 100.0, 26.0 @@ -9726,16 +9726,16 @@ "rect": [ 40.0, 388.0, - 1017.0, + 1024.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#7/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 388.0, - 679.0, + 684.0, 28.0 ], "visible": false @@ -9744,7 +9744,7 @@ "rect": [ 32.0, 418.0, - 1844.0, + 1856.0, 32.0 ], "visible": false @@ -9753,14 +9753,14 @@ "rect": [ 40.0, 420.0, - 1828.0, + 1840.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#8/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 421.0, 100.0, 26.0 @@ -9771,16 +9771,16 @@ "rect": [ 40.0, 420.0, - 1017.0, + 1024.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#8/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 420.0, - 679.0, + 684.0, 28.0 ], "visible": false @@ -9789,7 +9789,7 @@ "rect": [ 32.0, 450.0, - 1844.0, + 1856.0, 32.0 ], "visible": false @@ -9798,14 +9798,14 @@ "rect": [ 40.0, 452.0, - 1828.0, + 1840.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#9/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 453.0, 100.0, 26.0 @@ -9816,16 +9816,16 @@ "rect": [ 40.0, 452.0, - 1017.0, + 1024.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#9/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 452.0, - 679.0, + 684.0, 28.0 ], "visible": false @@ -9834,7 +9834,7 @@ "rect": [ 32.0, 162.0, - 1844.0, + 1856.0, 32.0 ], "visible": false @@ -9843,14 +9843,14 @@ "rect": [ 40.0, 164.0, - 1828.0, + 1840.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/SongStatsRow/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 165.0, 100.0, 26.0 @@ -9861,16 +9861,16 @@ "rect": [ 40.0, 164.0, - 1017.0, + 1024.0, 28.0 ], "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/SongStatsRow/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 164.0, - 679.0, + 684.0, 28.0 ], "visible": false @@ -31352,7 +31352,7 @@ "rect": [ 32.0, 128.0, - 1844.0, + 1856.0, 936.0 ], "visible": true @@ -31361,7 +31361,7 @@ "rect": [ 32.0, 128.0, - 1844.0, + 1856.0, 30.0 ], "visible": true @@ -31370,14 +31370,14 @@ "rect": [ 40.0, 130.0, - 1828.0, + 1840.0, 26.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/Header/Titles/PlayedTitle": { "rect": [ - 1768.0, + 1780.0, 130.0, 100.0, 26.0 @@ -31388,16 +31388,16 @@ "rect": [ 40.0, 130.0, - 1017.0, + 1024.0, 26.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/Header/Titles/SoundtrackTitle": { "rect": [ - 1073.0, + 1080.0, 130.0, - 679.0, + 684.0, 26.0 ], "visible": true @@ -31406,7 +31406,7 @@ "rect": [ 32.0, 162.0, - 1844.0, + 1856.0, 902.0 ], "visible": true @@ -31415,7 +31415,7 @@ "rect": [ 32.0, 194.0, - 1844.0, + 1856.0, 32.0 ], "visible": true @@ -31424,14 +31424,14 @@ "rect": [ 40.0, 196.0, - 1828.0, + 1840.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#1/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 197.0, 100.0, 26.0 @@ -31442,16 +31442,16 @@ "rect": [ 40.0, 196.0, - 1017.0, + 1024.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#1/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 196.0, - 679.0, + 684.0, 28.0 ], "visible": true @@ -31460,7 +31460,7 @@ "rect": [ 32.0, 482.0, - 1844.0, + 1856.0, 32.0 ], "visible": true @@ -31469,14 +31469,14 @@ "rect": [ 40.0, 484.0, - 1828.0, + 1840.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#10/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 485.0, 100.0, 26.0 @@ -31487,16 +31487,16 @@ "rect": [ 40.0, 484.0, - 1017.0, + 1024.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#10/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 484.0, - 679.0, + 684.0, 28.0 ], "visible": true @@ -31505,7 +31505,7 @@ "rect": [ 32.0, 514.0, - 1844.0, + 1856.0, 32.0 ], "visible": true @@ -31514,14 +31514,14 @@ "rect": [ 40.0, 516.0, - 1828.0, + 1840.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#11/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 517.0, 100.0, 26.0 @@ -31532,16 +31532,16 @@ "rect": [ 40.0, 516.0, - 1017.0, + 1024.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#11/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 516.0, - 679.0, + 684.0, 28.0 ], "visible": true @@ -31550,7 +31550,7 @@ "rect": [ 32.0, 546.0, - 1844.0, + 1856.0, 32.0 ], "visible": true @@ -31559,14 +31559,14 @@ "rect": [ 40.0, 548.0, - 1828.0, + 1840.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#12/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 549.0, 100.0, 26.0 @@ -31577,16 +31577,16 @@ "rect": [ 40.0, 548.0, - 1017.0, + 1024.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#12/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 548.0, - 679.0, + 684.0, 28.0 ], "visible": true @@ -31595,7 +31595,7 @@ "rect": [ 32.0, 578.0, - 1844.0, + 1856.0, 32.0 ], "visible": true @@ -31604,14 +31604,14 @@ "rect": [ 40.0, 580.0, - 1828.0, + 1840.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#13/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 581.0, 100.0, 26.0 @@ -31622,16 +31622,16 @@ "rect": [ 40.0, 580.0, - 1017.0, + 1024.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#13/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 580.0, - 679.0, + 684.0, 28.0 ], "visible": true @@ -31640,7 +31640,7 @@ "rect": [ 32.0, 610.0, - 1844.0, + 1856.0, 32.0 ], "visible": true @@ -31649,14 +31649,14 @@ "rect": [ 40.0, 612.0, - 1828.0, + 1840.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#14/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 613.0, 100.0, 26.0 @@ -31667,16 +31667,16 @@ "rect": [ 40.0, 612.0, - 1017.0, + 1024.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#14/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 612.0, - 679.0, + 684.0, 28.0 ], "visible": true @@ -31685,7 +31685,7 @@ "rect": [ 32.0, 642.0, - 1844.0, + 1856.0, 32.0 ], "visible": true @@ -31694,14 +31694,14 @@ "rect": [ 40.0, 644.0, - 1828.0, + 1840.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#15/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 645.0, 100.0, 26.0 @@ -31712,16 +31712,16 @@ "rect": [ 40.0, 644.0, - 1017.0, + 1024.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#15/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 644.0, - 679.0, + 684.0, 28.0 ], "visible": true @@ -31730,7 +31730,7 @@ "rect": [ 32.0, 674.0, - 1844.0, + 1856.0, 32.0 ], "visible": true @@ -31739,14 +31739,14 @@ "rect": [ 40.0, 676.0, - 1828.0, + 1840.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#16/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 677.0, 100.0, 26.0 @@ -31757,16 +31757,16 @@ "rect": [ 40.0, 676.0, - 1017.0, + 1024.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#16/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 676.0, - 679.0, + 684.0, 28.0 ], "visible": true @@ -31775,7 +31775,7 @@ "rect": [ 32.0, 706.0, - 1844.0, + 1856.0, 32.0 ], "visible": true @@ -31784,14 +31784,14 @@ "rect": [ 40.0, 708.0, - 1828.0, + 1840.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#17/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 709.0, 100.0, 26.0 @@ -31802,16 +31802,16 @@ "rect": [ 40.0, 708.0, - 1017.0, + 1024.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#17/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 708.0, - 679.0, + 684.0, 28.0 ], "visible": true @@ -31820,7 +31820,7 @@ "rect": [ 32.0, 738.0, - 1844.0, + 1856.0, 32.0 ], "visible": true @@ -31829,14 +31829,14 @@ "rect": [ 40.0, 740.0, - 1828.0, + 1840.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#18/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 741.0, 100.0, 26.0 @@ -31847,16 +31847,16 @@ "rect": [ 40.0, 740.0, - 1017.0, + 1024.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#18/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 740.0, - 679.0, + 684.0, 28.0 ], "visible": true @@ -31865,7 +31865,7 @@ "rect": [ 32.0, 770.0, - 1844.0, + 1856.0, 32.0 ], "visible": true @@ -31874,14 +31874,14 @@ "rect": [ 40.0, 772.0, - 1828.0, + 1840.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#19/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 773.0, 100.0, 26.0 @@ -31892,16 +31892,16 @@ "rect": [ 40.0, 772.0, - 1017.0, + 1024.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#19/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 772.0, - 679.0, + 684.0, 28.0 ], "visible": true @@ -31910,7 +31910,7 @@ "rect": [ 32.0, 226.0, - 1844.0, + 1856.0, 32.0 ], "visible": true @@ -31919,14 +31919,14 @@ "rect": [ 40.0, 228.0, - 1828.0, + 1840.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#2/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 229.0, 100.0, 26.0 @@ -31937,16 +31937,16 @@ "rect": [ 40.0, 228.0, - 1017.0, + 1024.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#2/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 228.0, - 679.0, + 684.0, 28.0 ], "visible": true @@ -31955,7 +31955,7 @@ "rect": [ 32.0, 802.0, - 1844.0, + 1856.0, 32.0 ], "visible": true @@ -31964,14 +31964,14 @@ "rect": [ 40.0, 804.0, - 1828.0, + 1840.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#20/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 805.0, 100.0, 26.0 @@ -31982,16 +31982,16 @@ "rect": [ 40.0, 804.0, - 1017.0, + 1024.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#20/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 804.0, - 679.0, + 684.0, 28.0 ], "visible": true @@ -32000,7 +32000,7 @@ "rect": [ 32.0, 834.0, - 1844.0, + 1856.0, 32.0 ], "visible": true @@ -32009,14 +32009,14 @@ "rect": [ 40.0, 836.0, - 1828.0, + 1840.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#21/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 837.0, 100.0, 26.0 @@ -32027,16 +32027,16 @@ "rect": [ 40.0, 836.0, - 1017.0, + 1024.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#21/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 836.0, - 679.0, + 684.0, 28.0 ], "visible": true @@ -32045,7 +32045,7 @@ "rect": [ 32.0, 866.0, - 1844.0, + 1856.0, 32.0 ], "visible": true @@ -32054,14 +32054,14 @@ "rect": [ 40.0, 868.0, - 1828.0, + 1840.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#22/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 869.0, 100.0, 26.0 @@ -32072,16 +32072,16 @@ "rect": [ 40.0, 868.0, - 1017.0, + 1024.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#22/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 868.0, - 679.0, + 684.0, 28.0 ], "visible": true @@ -32090,7 +32090,7 @@ "rect": [ 32.0, 898.0, - 1844.0, + 1856.0, 32.0 ], "visible": true @@ -32099,14 +32099,14 @@ "rect": [ 40.0, 900.0, - 1828.0, + 1840.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#23/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 901.0, 100.0, 26.0 @@ -32117,16 +32117,16 @@ "rect": [ 40.0, 900.0, - 1017.0, + 1024.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#23/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 900.0, - 679.0, + 684.0, 28.0 ], "visible": true @@ -32135,7 +32135,7 @@ "rect": [ 32.0, 930.0, - 1844.0, + 1856.0, 32.0 ], "visible": true @@ -32144,14 +32144,14 @@ "rect": [ 40.0, 932.0, - 1828.0, + 1840.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#24/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 933.0, 100.0, 26.0 @@ -32162,16 +32162,16 @@ "rect": [ 40.0, 932.0, - 1017.0, + 1024.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#24/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 932.0, - 679.0, + 684.0, 28.0 ], "visible": true @@ -32180,7 +32180,7 @@ "rect": [ 32.0, 962.0, - 1844.0, + 1856.0, 32.0 ], "visible": true @@ -32189,14 +32189,14 @@ "rect": [ 40.0, 964.0, - 1828.0, + 1840.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#25/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 965.0, 100.0, 26.0 @@ -32207,16 +32207,16 @@ "rect": [ 40.0, 964.0, - 1017.0, + 1024.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#25/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 964.0, - 679.0, + 684.0, 28.0 ], "visible": true @@ -32225,7 +32225,7 @@ "rect": [ 32.0, 994.0, - 1844.0, + 1856.0, 32.0 ], "visible": true @@ -32234,14 +32234,14 @@ "rect": [ 40.0, 996.0, - 1828.0, + 1840.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#26/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 997.0, 100.0, 26.0 @@ -32252,16 +32252,16 @@ "rect": [ 40.0, 996.0, - 1017.0, + 1024.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#26/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 996.0, - 679.0, + 684.0, 28.0 ], "visible": true @@ -32270,7 +32270,7 @@ "rect": [ 32.0, 1026.0, - 1844.0, + 1856.0, 32.0 ], "visible": true @@ -32279,14 +32279,14 @@ "rect": [ 40.0, 1028.0, - 1828.0, + 1840.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#27/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 1029.0, 100.0, 26.0 @@ -32297,16 +32297,16 @@ "rect": [ 40.0, 1028.0, - 1017.0, + 1024.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#27/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 1028.0, - 679.0, + 684.0, 28.0 ], "visible": true @@ -32314,98 +32314,98 @@ "StatisticsView/SongList/Layout/Columns/RowsArea/#28": { "rect": [ 32.0, - 1058.0, - 1844.0, + 162.0, + 1856.0, 32.0 ], - "visible": true + "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#28/Columns": { "rect": [ - 40.0, - 1060.0, - 1828.0, + 32.0, + 162.0, + 132.0, 28.0 ], - "visible": true + "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#28/Columns/PlayedLabel": { "rect": [ - 1768.0, - 1061.0, + 32.0, + 162.0, 100.0, 26.0 ], - "visible": true + "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#28/Columns/SongLabel": { "rect": [ - 40.0, - 1060.0, - 1017.0, + 32.0, + 162.0, + 0.0, 28.0 ], - "visible": true + "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#28/Columns/SoundtrackLabel": { "rect": [ - 1073.0, - 1060.0, - 679.0, + 32.0, + 162.0, + 0.0, 28.0 ], - "visible": true + "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#29": { "rect": [ 32.0, - 1090.0, - 1844.0, + 162.0, + 1856.0, 32.0 ], - "visible": true + "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#29/Columns": { "rect": [ - 40.0, - 1092.0, - 1828.0, + 32.0, + 162.0, + 132.0, 28.0 ], - "visible": true + "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#29/Columns/PlayedLabel": { "rect": [ - 1768.0, - 1093.0, + 32.0, + 162.0, 100.0, 26.0 ], - "visible": true + "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#29/Columns/SongLabel": { "rect": [ - 40.0, - 1092.0, - 1017.0, + 32.0, + 162.0, + 0.0, 28.0 ], - "visible": true + "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#29/Columns/SoundtrackLabel": { "rect": [ - 1073.0, - 1092.0, - 679.0, + 32.0, + 162.0, + 0.0, 28.0 ], - "visible": true + "visible": false }, "StatisticsView/SongList/Layout/Columns/RowsArea/#3": { "rect": [ 32.0, 258.0, - 1844.0, + 1856.0, 32.0 ], "visible": true @@ -32414,14 +32414,14 @@ "rect": [ 40.0, 260.0, - 1828.0, + 1840.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#3/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 261.0, 100.0, 26.0 @@ -32432,16 +32432,16 @@ "rect": [ 40.0, 260.0, - 1017.0, + 1024.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#3/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 260.0, - 679.0, + 684.0, 28.0 ], "visible": true @@ -32450,7 +32450,7 @@ "rect": [ 32.0, 290.0, - 1844.0, + 1856.0, 32.0 ], "visible": true @@ -32459,14 +32459,14 @@ "rect": [ 40.0, 292.0, - 1828.0, + 1840.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#4/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 293.0, 100.0, 26.0 @@ -32477,16 +32477,16 @@ "rect": [ 40.0, 292.0, - 1017.0, + 1024.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#4/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 292.0, - 679.0, + 684.0, 28.0 ], "visible": true @@ -32495,7 +32495,7 @@ "rect": [ 32.0, 322.0, - 1844.0, + 1856.0, 32.0 ], "visible": true @@ -32504,14 +32504,14 @@ "rect": [ 40.0, 324.0, - 1828.0, + 1840.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#5/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 325.0, 100.0, 26.0 @@ -32522,16 +32522,16 @@ "rect": [ 40.0, 324.0, - 1017.0, + 1024.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#5/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 324.0, - 679.0, + 684.0, 28.0 ], "visible": true @@ -32540,7 +32540,7 @@ "rect": [ 32.0, 354.0, - 1844.0, + 1856.0, 32.0 ], "visible": true @@ -32549,14 +32549,14 @@ "rect": [ 40.0, 356.0, - 1828.0, + 1840.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#6/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 357.0, 100.0, 26.0 @@ -32567,16 +32567,16 @@ "rect": [ 40.0, 356.0, - 1017.0, + 1024.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#6/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 356.0, - 679.0, + 684.0, 28.0 ], "visible": true @@ -32585,7 +32585,7 @@ "rect": [ 32.0, 386.0, - 1844.0, + 1856.0, 32.0 ], "visible": true @@ -32594,14 +32594,14 @@ "rect": [ 40.0, 388.0, - 1828.0, + 1840.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#7/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 389.0, 100.0, 26.0 @@ -32612,16 +32612,16 @@ "rect": [ 40.0, 388.0, - 1017.0, + 1024.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#7/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 388.0, - 679.0, + 684.0, 28.0 ], "visible": true @@ -32630,7 +32630,7 @@ "rect": [ 32.0, 418.0, - 1844.0, + 1856.0, 32.0 ], "visible": true @@ -32639,14 +32639,14 @@ "rect": [ 40.0, 420.0, - 1828.0, + 1840.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#8/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 421.0, 100.0, 26.0 @@ -32657,16 +32657,16 @@ "rect": [ 40.0, 420.0, - 1017.0, + 1024.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#8/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 420.0, - 679.0, + 684.0, 28.0 ], "visible": true @@ -32675,7 +32675,7 @@ "rect": [ 32.0, 450.0, - 1844.0, + 1856.0, 32.0 ], "visible": true @@ -32684,14 +32684,14 @@ "rect": [ 40.0, 452.0, - 1828.0, + 1840.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#9/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 453.0, 100.0, 26.0 @@ -32702,16 +32702,16 @@ "rect": [ 40.0, 452.0, - 1017.0, + 1024.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/#9/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 452.0, - 679.0, + 684.0, 28.0 ], "visible": true @@ -32720,7 +32720,7 @@ "rect": [ 32.0, 162.0, - 1844.0, + 1856.0, 32.0 ], "visible": true @@ -32729,14 +32729,14 @@ "rect": [ 40.0, 164.0, - 1828.0, + 1840.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/SongStatsRow/Columns/PlayedLabel": { "rect": [ - 1768.0, + 1780.0, 165.0, 100.0, 26.0 @@ -32747,16 +32747,16 @@ "rect": [ 40.0, 164.0, - 1017.0, + 1024.0, 28.0 ], "visible": true }, "StatisticsView/SongList/Layout/Columns/RowsArea/SongStatsRow/Columns/SoundtrackLabel": { "rect": [ - 1073.0, + 1080.0, 164.0, - 679.0, + 684.0, 28.0 ], "visible": true @@ -32768,7 +32768,7 @@ 8.0, 936.0 ], - "visible": true + "visible": false }, "StatisticsView/StatusLabel": { "rect": [ @@ -32801,7 +32801,7 @@ "rect": [ 865.0, 80.0, - 581.0, + 807.0, 23.0 ], "visible": true @@ -32831,7 +32831,7 @@ 42.0, 23.0 ], - "visible": true + "visible": false }, "StatisticsView/Toolbar/ShowOption": { "rect": [ @@ -32840,7 +32840,7 @@ 160.0, 40.0 ], - "visible": true + "visible": false }, "StatisticsView/Toolbar/SongsModeButton": { "rect": [ @@ -35449,7 +35449,7 @@ "rect": [ 865.0, 80.0, - 581.0, + 807.0, 23.0 ], "visible": true @@ -35479,7 +35479,7 @@ 42.0, 23.0 ], - "visible": true + "visible": false }, "StatisticsView/Toolbar/ShowOption": { "rect": [ @@ -35488,7 +35488,7 @@ 160.0, 40.0 ], - "visible": true + "visible": false }, "StatisticsView/Toolbar/SongsModeButton": { "rect": [ diff --git a/tests/fakes/ui_tour.gd b/tests/fakes/ui_tour.gd index fe19b43..e63c8db 100644 --- a/tests/fakes/ui_tour.gd +++ b/tests/fakes/ui_tour.gd @@ -267,6 +267,8 @@ func run(on_state: Callable) -> void: statistics_view.apply_filter() await _settle() await on_state.call("statistics_search", statistics_view) + # Chrono Trigger has never been played, so the song list searches for another + statistics_view.search_field.text = "zelda" statistics_view.set_mode(StatisticsView.Mode.SONGS) await _settle() await on_state.call("statistics_songs_search", statistics_view) diff --git a/tests/integration/test_statistics_view.gd b/tests/integration/test_statistics_view.gd index 8181041..b0ea2b9 100644 --- a/tests/integration/test_statistics_view.gd +++ b/tests/integration/test_statistics_view.gd @@ -339,19 +339,19 @@ func _search(text: String) -> void: _view.apply_filter() -func test_songs_button_shows_every_song_a_to_z_instead_of_the_cards() -> void: +func test_songs_button_shows_every_played_song_a_to_z_instead_of_the_cards() -> void: await _show_songs_mode() assert_bool(_view.song_list.visible).is_true() assert_bool(_view.card_scroll.visible).is_false() assert_bool(_view.songs_mode_button.button_pressed).is_true() assert_bool(_view.soundtracks_mode_button.button_pressed).is_false() + # Songs never played are left out assert_array(_listed_songs()).contains_exactly([ "Battle with Magus", "Corridors of Time", "Dancing Mad", "Frog's Theme", - "Peaceful Days", "Schala's Theme", "To Far Away Times", "Underworld", "Wind Scene", - "Zeal Palace", + "Peaceful Days", "Schala's Theme", "Zeal Palace", ]) - assert_str(_view.count_label.text).is_equal("10 songs") + assert_str(_view.count_label.text).is_equal("7 played songs") assert_str(_view.search_field.placeholder_text).is_equal("Search songs and soundtracks") @@ -362,7 +362,7 @@ func test_song_rows_show_the_song_its_soundtrack_and_plays() -> void: assert_str(row.song_label.get_parsed_text()).is_equal("Battle with Magus") assert_str(row.soundtrack_label.get_parsed_text()).is_equal("Chrono Trigger") assert_str(row.played_label.text).is_equal("2") - assert_int(_view.song_list.shown_rows().size()).is_equal(10) + assert_int(_view.song_list.shown_rows().size()).is_equal(7) func test_soundtracks_button_shows_the_cards_again() -> void: @@ -373,6 +373,7 @@ func test_soundtracks_button_shows_the_cards_again() -> void: assert_bool(_view.card_scroll.visible).is_true() assert_bool(_view.song_list.visible).is_false() assert_str(_view.count_label.text).is_equal("4 soundtracks") + assert_bool(_view.show_option.visible).is_true() func test_song_search_finds_song_names_and_soundtrack_names() -> void: @@ -380,7 +381,7 @@ func test_song_search_finds_song_names_and_soundtrack_names() -> void: _search("magus") assert_array(_listed_songs()).contains_exactly(["Battle with Magus"]) - assert_str(_view.count_label.text).is_equal("1 of 10 songs") + assert_str(_view.count_label.text).is_equal("1 of 7 played songs") # Every song of a soundtrack whose name matches _search("final fantasy") @@ -403,24 +404,17 @@ func test_typing_a_song_search_waits_for_a_pause() -> void: _view.search_field.text = "magus" _view.search_field.text_changed.emit("magus") - assert_int(_view.song_list.songs.size()).is_equal(10) + assert_int(_view.song_list.songs.size()).is_equal(7) await await_millis(300) assert_array(_listed_songs()).contains_exactly(["Battle with Magus"]) -func test_show_filter_for_songs() -> void: +func test_show_menu_is_hidden_for_songs() -> void: await _show_songs_mode() - _view.show_option.select(StatisticsView.ShowFilter.NEVER_PLAYED) - _view.show_option.item_selected.emit(StatisticsView.ShowFilter.NEVER_PLAYED) - assert_array(_listed_songs()).contains_exactly( - ["To Far Away Times", "Underworld", "Wind Scene"]) - - _view.show_option.select(StatisticsView.ShowFilter.PLAYED) - _view.show_option.item_selected.emit(StatisticsView.ShowFilter.PLAYED) - assert_int(_listed_songs().size()).is_equal(7) - assert_str(_view.count_label.text).is_equal("7 of 10 songs") + assert_bool(_view.show_option.visible).is_false() + assert_bool(_view.get_node("Toolbar/ShowLabel").visible).is_false() func test_song_sort_orders() -> void: @@ -428,13 +422,12 @@ func test_song_sort_orders() -> void: var expected: Dictionary = { StatisticsView.SortOrder.MOST_PLAYED: ["Schala's Theme", "Frog's Theme", "Battle with Magus", "Corridors of Time", "Dancing Mad", "Peaceful Days", - "Zeal Palace", "To Far Away Times", "Underworld", "Wind Scene"], - StatisticsView.SortOrder.LEAST_PLAYED: ["To Far Away Times", "Underworld", - "Wind Scene", "Corridors of Time", "Dancing Mad", "Peaceful Days", - "Zeal Palace", "Battle with Magus", "Frog's Theme", "Schala's Theme"], - StatisticsView.SortOrder.Z_TO_A: ["Zeal Palace", "Wind Scene", "Underworld", - "To Far Away Times", "Schala's Theme", "Peaceful Days", "Frog's Theme", - "Dancing Mad", "Corridors of Time", "Battle with Magus"], + "Zeal Palace"], + StatisticsView.SortOrder.LEAST_PLAYED: ["Corridors of Time", "Dancing Mad", + "Peaceful Days", "Zeal Palace", "Battle with Magus", "Frog's Theme", + "Schala's Theme"], + StatisticsView.SortOrder.Z_TO_A: ["Zeal Palace", "Schala's Theme", "Peaceful Days", + "Frog's Theme", "Dancing Mad", "Corridors of Time", "Battle with Magus"], } for order: StatisticsView.SortOrder in expected: _view.sort_option.select(order) @@ -445,8 +438,10 @@ func test_song_sort_orders() -> void: func test_songs_with_the_same_name_are_sorted_by_soundtrack() -> void: _server.respond_json("/statistics/soundtracks", [ - {"soundtrack_name": "Lufia II", "songs": [{"song_name": "Main Theme"}]}, - {"soundtrack_name": "Earthbound", "songs": [{"song_name": "Main Theme"}]}, + {"soundtrack_name": "Lufia II", + "songs": [{"song_name": "Main Theme", "times_played": 1}]}, + {"soundtrack_name": "Earthbound", + "songs": [{"song_name": "Main Theme", "times_played": 1}]}, ]) await _show_songs_mode() @@ -469,25 +464,25 @@ func test_clicking_a_song_shows_its_soundtrack() -> void: func test_songs_stay_shown_when_statistics_are_loaded_again() -> void: await _show_songs_mode() - _server.respond_json("/statistics/soundtracks", STATISTICS.slice(1, 2)) + _server.respond_json("/statistics/soundtracks", STATISTICS.slice(3, 4)) _view.refresh() assert_bool(_view.song_list.visible).is_true() - assert_array(_listed_songs()).contains_exactly(["Underworld"]) + assert_array(_listed_songs()).contains_exactly(["Dancing Mad"]) func test_only_the_rows_on_screen_are_made_for_many_songs() -> void: var songs: Array[Dictionary] = [] for i: int in 5000: - songs.append({"song_name": "Song %04d" % i, "times_played": i % 7}) + songs.append({"song_name": "Song %04d" % i, "times_played": i % 7 + 1}) _server.respond_json("/statistics/soundtracks", [{"soundtrack_name": "Big", "songs": songs}]) await _show_songs_mode() var rows: int = _view.song_list.rows_area.get_child_count() assert_int(rows).is_less(60) - assert_str(_view.count_label.text).is_equal("5000 songs") + assert_str(_view.count_label.text).is_equal("5000 played songs") _view.song_list.scroll_to(2500) await _runner.simulate_frames(1) @@ -498,7 +493,7 @@ func test_only_the_rows_on_screen_are_made_for_many_songs() -> void: func test_mouse_wheel_scrolls_the_songs() -> void: var songs: Array[Dictionary] = [] for i: int in 200: - songs.append({"song_name": "Song %03d" % i}) + songs.append({"song_name": "Song %03d" % i, "times_played": 1}) _server.respond_json("/statistics/soundtracks", [{"soundtrack_name": "Big", "songs": songs}]) await _show_songs_mode()