diff --git a/osu.Game.Tests/Visual/Editing/TestSceneEditorBeatmapCreation.cs b/osu.Game.Tests/Visual/Editing/TestSceneEditorBeatmapCreation.cs index 841f50e7bd..6bcd947f2f 100644 --- a/osu.Game.Tests/Visual/Editing/TestSceneEditorBeatmapCreation.cs +++ b/osu.Game.Tests/Visual/Editing/TestSceneEditorBeatmapCreation.cs @@ -96,7 +96,7 @@ namespace osu.Game.Tests.Visual.Editing using (var zip = ZipArchive.Open(temp)) zip.WriteToDirectory(extractedFolder); - bool success = setup.ChildrenOfType().First().ChangeAudioTrack(Path.Combine(extractedFolder, "03. Renatus - Soleily 192kbps.mp3")); + bool success = setup.ChildrenOfType().First().ChangeAudioTrack(new FileInfo(Path.Combine(extractedFolder, "03. Renatus - Soleily 192kbps.mp3"))); File.Delete(temp); Directory.Delete(extractedFolder, true); diff --git a/osu.Game/Screens/Edit/Setup/LabelledFileChooser.cs b/osu.Game/Screens/Edit/Setup/LabelledFileChooser.cs index 2cb3af61c8..6c56320666 100644 --- a/osu.Game/Screens/Edit/Setup/LabelledFileChooser.cs +++ b/osu.Game/Screens/Edit/Setup/LabelledFileChooser.cs @@ -27,20 +27,18 @@ namespace osu.Game.Screens.Edit.Setup /// A labelled drawable displaying file chooser on click, with placeholder text support. /// todo: this should probably not use PopoverTextBox just to display placeholder text, but is the best way for now. /// - internal class LabelledFileChooser : LabelledDrawable, IHasCurrentValue, ICanAcceptFiles, IHasPopover + internal class LabelledFileChooser : LabelledDrawable, IHasCurrentValue, ICanAcceptFiles, IHasPopover { private readonly string[] handledExtensions; public IEnumerable HandledExtensions => handledExtensions; - private readonly Bindable currentFile = new Bindable(); - [Resolved] private OsuGameBase game { get; set; } = null!; - private readonly BindableWithCurrent current = new BindableWithCurrent(); + private readonly BindableWithCurrent current = new BindableWithCurrent(); - public Bindable Current + public Bindable Current { get => current.Current; set => current.Current = value; @@ -68,21 +66,18 @@ namespace osu.Game.Screens.Edit.Setup base.LoadComplete(); game.RegisterImportHandler(this); - currentFile.BindValueChanged(onFileSelected); + Current.BindValueChanged(onFileSelected); } private void onFileSelected(ValueChangedEvent file) { - if (file.NewValue == null) - return; - - this.HidePopover(); - Current.Value = file.NewValue.FullName; + if (file.NewValue != null) + this.HidePopover(); } Task ICanAcceptFiles.Import(params string[] paths) { - Schedule(() => currentFile.Value = new FileInfo(paths.First())); + Schedule(() => Current.Value = new FileInfo(paths.First())); return Task.CompletedTask; } @@ -105,7 +100,7 @@ namespace osu.Game.Screens.Edit.Setup OnFocused = this.ShowPopover, }; - public Popover GetPopover() => new FileChooserPopover(handledExtensions, currentFile); + public Popover GetPopover() => new FileChooserPopover(handledExtensions, Current); private class FileChooserPopover : OsuPopover { diff --git a/osu.Game/Screens/Edit/Setup/ResourcesSection.cs b/osu.Game/Screens/Edit/Setup/ResourcesSection.cs index b4e350b94b..2471886d9b 100644 --- a/osu.Game/Screens/Edit/Setup/ResourcesSection.cs +++ b/osu.Game/Screens/Edit/Setup/ResourcesSection.cs @@ -43,26 +43,28 @@ namespace osu.Game.Screens.Edit.Setup { Label = "Background", FixedLabelWidth = LABEL_WIDTH, - Current = { Value = working.Value.Metadata.BackgroundFile }, TabbableContentContainer = this }, audioTrackChooser = new LabelledFileChooser(".mp3", ".ogg") { Label = "Audio Track", FixedLabelWidth = LABEL_WIDTH, - Current = { Value = working.Value.Metadata.AudioFile }, TabbableContentContainer = this }, }; + if (!string.IsNullOrEmpty(working.Value.Metadata.BackgroundFile)) + backgroundChooser.Current.Value = new FileInfo(working.Value.Metadata.BackgroundFile); + + if (!string.IsNullOrEmpty(working.Value.Metadata.AudioFile)) + audioTrackChooser.Current.Value = new FileInfo(working.Value.Metadata.AudioFile); + backgroundChooser.Current.BindValueChanged(backgroundChanged, true); audioTrackChooser.Current.BindValueChanged(audioTrackChanged, true); } - public bool ChangeBackgroundImage(string path) + public bool ChangeBackgroundImage(FileInfo source) { - var source = new FileInfo(path); - if (!source.Exists) return false; @@ -88,10 +90,8 @@ namespace osu.Game.Screens.Edit.Setup return true; } - public bool ChangeAudioTrack(string path) + public bool ChangeAudioTrack(FileInfo source) { - var source = new FileInfo(path); - if (!source.Exists) return false; @@ -119,29 +119,29 @@ namespace osu.Game.Screens.Edit.Setup return true; } - private void backgroundChanged(ValueChangedEvent filePath) + private void backgroundChanged(ValueChangedEvent file) { - backgroundChooser.Text = string.IsNullOrEmpty(filePath.NewValue) + backgroundChooser.Text = file.NewValue == null ? "Click to select a background image" : "Click to replace the background image"; - if (filePath.NewValue != filePath.OldValue) + if (file.NewValue != file.OldValue) { - if (!ChangeBackgroundImage(filePath.NewValue)) - backgroundChooser.Current.Value = filePath.OldValue; + if (!ChangeBackgroundImage(file.NewValue)) + backgroundChooser.Current.Value = file.OldValue; } } - private void audioTrackChanged(ValueChangedEvent filePath) + private void audioTrackChanged(ValueChangedEvent file) { - audioTrackChooser.Text = string.IsNullOrEmpty(filePath.NewValue) + audioTrackChooser.Text = file.NewValue == null ? "Click to select a track" : "Click to replace the track"; - if (filePath.NewValue != filePath.OldValue) + if (file.NewValue != file.OldValue) { - if (!ChangeAudioTrack(filePath.NewValue)) - audioTrackChooser.Current.Value = filePath.OldValue; + if (!ChangeAudioTrack(file.NewValue)) + audioTrackChooser.Current.Value = file.OldValue; } } }