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>
183 lines
5.0 KiB
Plaintext
183 lines
5.0 KiB
Plaintext
[gd_scene format=3]
|
|
|
|
[ext_resource type="Script" path="res://popups/soundtrack_stats_popup.gd" id="popup_script"]
|
|
|
|
[node name="SoundtrackStatsPopup" type="Control" unique_id=1213000001 node_paths=PackedStringArray("panel")]
|
|
layout_mode = 3
|
|
anchors_preset = 15
|
|
anchor_right = 1.0
|
|
anchor_bottom = 1.0
|
|
grow_horizontal = 2
|
|
grow_vertical = 2
|
|
script = ExtResource("popup_script")
|
|
panel = NodePath("StatsPanel")
|
|
|
|
[node name="StatsPanel" type="Panel" parent="." unique_id=1213000002]
|
|
unique_name_in_owner = true
|
|
layout_mode = 0
|
|
offset_right = 700.0
|
|
offset_bottom = 800.0
|
|
theme_type_variation = &"PopupBackground"
|
|
|
|
[node name="TitleLabel" type="Label" parent="StatsPanel" unique_id=1213000003]
|
|
unique_name_in_owner = true
|
|
layout_mode = 0
|
|
offset_left = 20.0
|
|
offset_top = 12.0
|
|
offset_right = 680.0
|
|
offset_bottom = 50.0
|
|
theme_type_variation = &"Title"
|
|
horizontal_alignment = 1
|
|
text_overrun_behavior = 3
|
|
|
|
[node name="CoverFrame" type="Panel" parent="StatsPanel"]
|
|
unique_name_in_owner = true
|
|
clip_children = 2
|
|
layout_mode = 0
|
|
offset_left = 20.0
|
|
offset_top = 64.0
|
|
offset_right = 164.0
|
|
offset_bottom = 264.0
|
|
mouse_filter = 2
|
|
theme_type_variation = &"SoundtrackCover"
|
|
|
|
[node name="CoverPlaceholder" type="Label" parent="StatsPanel/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
|
|
theme_type_variation = &"TitleMedium"
|
|
horizontal_alignment = 1
|
|
vertical_alignment = 1
|
|
|
|
[node name="CoverPicture" type="TextureRect" parent="StatsPanel/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="StatsPanel"]
|
|
layout_mode = 0
|
|
offset_left = 180.0
|
|
offset_top = 64.0
|
|
offset_right = 680.0
|
|
offset_bottom = 264.0
|
|
|
|
[node name="SummaryLabel" type="Label" parent="StatsPanel/Info" unique_id=1213000004]
|
|
unique_name_in_owner = true
|
|
layout_mode = 2
|
|
autowrap_mode = 3
|
|
|
|
[node name="NamesTitle" type="Label" parent="StatsPanel/Info"]
|
|
layout_mode = 2
|
|
theme_type_variation = &"HighlightMedium"
|
|
text = "Also known as"
|
|
|
|
[node name="NamesLabel" type="Label" parent="StatsPanel/Info"]
|
|
unique_name_in_owner = true
|
|
layout_mode = 2
|
|
theme_type_variation = &"TextMedium"
|
|
autowrap_mode = 3
|
|
text_overrun_behavior = 3
|
|
max_lines_visible = 3
|
|
|
|
[node name="EditNamesButton" type="Button" parent="StatsPanel/Info"]
|
|
unique_name_in_owner = true
|
|
layout_mode = 2
|
|
size_flags_horizontal = 0
|
|
focus_mode = 0
|
|
text = "Edit names"
|
|
|
|
[node name="ScrollContainer" type="ScrollContainer" parent="StatsPanel" unique_id=1213000005]
|
|
unique_name_in_owner = true
|
|
layout_mode = 0
|
|
offset_left = 20.0
|
|
offset_top = 280.0
|
|
offset_right = 680.0
|
|
offset_bottom = 784.0
|
|
horizontal_scroll_mode = 0
|
|
|
|
[node name="SongList" type="VBoxContainer" parent="StatsPanel/ScrollContainer" unique_id=1213000006]
|
|
unique_name_in_owner = true
|
|
layout_mode = 2
|
|
size_flags_horizontal = 3
|
|
|
|
[node name="NamesEditor" type="VBoxContainer" parent="StatsPanel"]
|
|
unique_name_in_owner = true
|
|
visible = false
|
|
layout_mode = 0
|
|
offset_left = 20.0
|
|
offset_top = 280.0
|
|
offset_right = 680.0
|
|
offset_bottom = 784.0
|
|
theme_override_constants/separation = 10
|
|
|
|
[node name="EditorTitle" type="Label" parent="StatsPanel/NamesEditor"]
|
|
layout_mode = 2
|
|
theme_type_variation = &"Title"
|
|
text = "Alternative names"
|
|
|
|
[node name="EditorHelp" type="Label" parent="StatsPanel/NamesEditor"]
|
|
layout_mode = 2
|
|
autowrap_mode = 3
|
|
text = "Other names the soundtrack goes by, e.g. short names or the name in another language. Search finds it by any of them."
|
|
|
|
[node name="EditorScroll" type="ScrollContainer" parent="StatsPanel/NamesEditor"]
|
|
layout_mode = 2
|
|
size_flags_vertical = 3
|
|
horizontal_scroll_mode = 0
|
|
|
|
[node name="EditorNames" type="VBoxContainer" parent="StatsPanel/NamesEditor/EditorScroll"]
|
|
unique_name_in_owner = true
|
|
layout_mode = 2
|
|
size_flags_horizontal = 3
|
|
|
|
[node name="AddRow" type="HBoxContainer" parent="StatsPanel/NamesEditor"]
|
|
layout_mode = 2
|
|
theme_override_constants/separation = 8
|
|
|
|
[node name="NewNameField" type="LineEdit" parent="StatsPanel/NamesEditor/AddRow"]
|
|
unique_name_in_owner = true
|
|
layout_mode = 2
|
|
size_flags_horizontal = 3
|
|
placeholder_text = "Another name"
|
|
|
|
[node name="AddNameButton" type="Button" parent="StatsPanel/NamesEditor/AddRow"]
|
|
unique_name_in_owner = true
|
|
layout_mode = 2
|
|
focus_mode = 0
|
|
text = "Add"
|
|
|
|
[node name="EditorStatus" type="Label" parent="StatsPanel/NamesEditor"]
|
|
unique_name_in_owner = true
|
|
visible = false
|
|
layout_mode = 2
|
|
theme_type_variation = &"HighlightMedium"
|
|
autowrap_mode = 3
|
|
|
|
[node name="EditorButtons" type="HBoxContainer" parent="StatsPanel/NamesEditor"]
|
|
layout_mode = 2
|
|
theme_override_constants/separation = 12
|
|
alignment = 2
|
|
|
|
[node name="CancelNamesButton" type="Button" parent="StatsPanel/NamesEditor/EditorButtons"]
|
|
unique_name_in_owner = true
|
|
layout_mode = 2
|
|
focus_mode = 0
|
|
text = "Cancel"
|
|
|
|
[node name="SaveNamesButton" type="Button" parent="StatsPanel/NamesEditor/EditorButtons"]
|
|
unique_name_in_owner = true
|
|
layout_mode = 2
|
|
focus_mode = 0
|
|
text = "Save"
|