Covers: statistics cards show the soundtrack's cover on the left, and the
statistics popup shows it large. Until it arrives, and without a cover, the
soundtrack's initials stand in. Covers load only for cards on or near the
screen, three at a time, and are cached in covers/ next to the settings
(CoverCache), downloaded again only when cover_modified changes. The index and
file handling are shared with CharacterCache in a new FileCache.
Alternative names: the popup shows them and has an editor (add, remove, save)
that sends PUT /soundtracks/{uuid}/alternative-names. The statistics search and
the Search popup find soundtracks by them; Search shows the matching name after
the real one. Search now loads /soundtracks, falling back to the plain list.
The API types are regenerated from the server's spec, with a SoundtrackCover
theme style in every theme.
Closes #49
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
101 lines
2.7 KiB
Plaintext
101 lines
2.7 KiB
Plaintext
[gd_scene format=3]
|
|
|
|
[ext_resource type="Script" path="res://statistics/soundtrack_card.gd" id="card_script"]
|
|
|
|
[node name="SoundtrackCard" type="PanelContainer" unique_id=1211000001]
|
|
custom_minimum_size = Vector2(290, 340)
|
|
mouse_default_cursor_shape = 2
|
|
theme_type_variation = &"StatisticsCard"
|
|
script = ExtResource("card_script")
|
|
|
|
[node name="VBox" type="VBoxContainer" parent="." unique_id=1211000002]
|
|
layout_mode = 2
|
|
mouse_filter = 2
|
|
|
|
[node name="Header" type="HBoxContainer" parent="VBox"]
|
|
layout_mode = 2
|
|
mouse_filter = 2
|
|
theme_override_constants/separation = 10
|
|
|
|
[node name="CoverFrame" type="Panel" parent="VBox/Header"]
|
|
unique_name_in_owner = true
|
|
clip_children = 2
|
|
custom_minimum_size = Vector2(72, 100)
|
|
layout_mode = 2
|
|
mouse_filter = 2
|
|
theme_type_variation = &"SoundtrackCover"
|
|
|
|
[node name="CoverPlaceholder" type="Label" parent="VBox/Header/CoverFrame"]
|
|
unique_name_in_owner = true
|
|
layout_mode = 1
|
|
anchors_preset = 15
|
|
anchor_right = 1.0
|
|
anchor_bottom = 1.0
|
|
grow_horizontal = 2
|
|
grow_vertical = 2
|
|
mouse_filter = 2
|
|
theme_type_variation = &"TextLarge"
|
|
horizontal_alignment = 1
|
|
vertical_alignment = 1
|
|
|
|
[node name="CoverPicture" type="TextureRect" parent="VBox/Header/CoverFrame"]
|
|
unique_name_in_owner = true
|
|
layout_mode = 1
|
|
anchors_preset = 15
|
|
anchor_right = 1.0
|
|
anchor_bottom = 1.0
|
|
grow_horizontal = 2
|
|
grow_vertical = 2
|
|
mouse_filter = 2
|
|
expand_mode = 1
|
|
stretch_mode = 6
|
|
|
|
[node name="Info" type="VBoxContainer" parent="VBox/Header"]
|
|
layout_mode = 2
|
|
size_flags_horizontal = 3
|
|
mouse_filter = 2
|
|
|
|
[node name="NameLabel" type="Label" parent="VBox/Header/Info" unique_id=1211000003]
|
|
unique_name_in_owner = true
|
|
custom_minimum_size = Vector2(0, 50)
|
|
layout_mode = 2
|
|
mouse_filter = 2
|
|
theme_type_variation = &"TextLarge"
|
|
autowrap_mode = 3
|
|
text_overrun_behavior = 3
|
|
max_lines_visible = 2
|
|
|
|
[node name="PlayedLabel" type="Label" parent="VBox/Header/Info" unique_id=1211000004]
|
|
unique_name_in_owner = true
|
|
layout_mode = 2
|
|
mouse_filter = 2
|
|
|
|
[node name="LastPlayedLabel" type="Label" parent="VBox/Header/Info" unique_id=1211000005]
|
|
unique_name_in_owner = true
|
|
layout_mode = 2
|
|
mouse_filter = 2
|
|
|
|
[node name="MostPlayedHeader" type="Label" parent="VBox" unique_id=1211000006]
|
|
unique_name_in_owner = true
|
|
layout_mode = 2
|
|
mouse_filter = 2
|
|
theme_type_variation = &"HighlightMedium"
|
|
text = "Most played"
|
|
|
|
[node name="MostPlayedList" type="VBoxContainer" parent="VBox" unique_id=1211000007]
|
|
unique_name_in_owner = true
|
|
layout_mode = 2
|
|
mouse_filter = 2
|
|
|
|
[node name="LeastPlayedHeader" type="Label" parent="VBox" unique_id=1211000008]
|
|
unique_name_in_owner = true
|
|
layout_mode = 2
|
|
mouse_filter = 2
|
|
theme_type_variation = &"HighlightMedium"
|
|
text = "Least played"
|
|
|
|
[node name="LeastPlayedList" type="VBoxContainer" parent="VBox" unique_id=1211000009]
|
|
unique_name_in_owner = true
|
|
layout_mode = 2
|
|
mouse_filter = 2
|