diff --git a/osu.Game/Screens/Edit/Setup/FileChooserLabelledTextBox.cs b/osu.Game/Screens/Edit/Setup/FileChooserLabelledTextBox.cs
index 69c27702f8..fd43349793 100644
--- a/osu.Game/Screens/Edit/Setup/FileChooserLabelledTextBox.cs
+++ b/osu.Game/Screens/Edit/Setup/FileChooserLabelledTextBox.cs
@@ -8,28 +8,28 @@ using System.Linq;
using System.Threading.Tasks;
using osu.Framework.Allocation;
using osu.Framework.Bindables;
+using osu.Framework.Extensions;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
+using osu.Framework.Graphics.Cursor;
+using osu.Framework.Graphics.UserInterface;
using osu.Framework.Input.Events;
using osu.Game.Database;
using osu.Game.Graphics.Containers;
using osu.Game.Graphics.UserInterface;
using osu.Game.Graphics.UserInterfaceV2;
+using osuTK;
namespace osu.Game.Screens.Edit.Setup
{
///
/// A labelled textbox which reveals an inline file chooser when clicked.
///
- internal class FileChooserLabelledTextBox : LabelledTextBox, ICanAcceptFiles
+ internal class FileChooserLabelledTextBox : LabelledTextBox, ICanAcceptFiles, IHasPopover
{
private readonly string[] handledExtensions;
- public IEnumerable HandledExtensions => handledExtensions;
- ///
- /// The target container to display the file chooser in.
- ///
- public Container Target;
+ public IEnumerable HandledExtensions => handledExtensions;
private readonly Bindable currentFile = new Bindable();
@@ -51,23 +51,9 @@ namespace osu.Game.Screens.Edit.Setup
Origin = Anchor.Centre,
RelativeSizeAxes = Axes.X,
CornerRadius = CORNER_RADIUS,
- OnFocused = DisplayFileChooser
+ OnFocused = this.ShowPopover
};
- public void DisplayFileChooser()
- {
- OsuFileSelector fileSelector;
-
- Target.Child = fileSelector = new OsuFileSelector(currentFile.Value?.DirectoryName, handledExtensions)
- {
- RelativeSizeAxes = Axes.X,
- Height = 400,
- CurrentFile = { BindTarget = currentFile }
- };
-
- sectionsContainer.ScrollTo(fileSelector);
- }
-
protected override void LoadComplete()
{
base.LoadComplete();
@@ -81,7 +67,7 @@ namespace osu.Game.Screens.Edit.Setup
if (file.NewValue == null)
return;
- Target.Clear();
+ this.HidePopover();
Current.Value = file.NewValue.FullName;
}
@@ -111,5 +97,23 @@ namespace osu.Game.Screens.Edit.Setup
GetContainingInputManager().TriggerFocusContention(this);
}
}
+
+ public Popover GetPopover() => new FileChooserPopover(handledExtensions, currentFile);
+
+ private class FileChooserPopover : OsuPopover
+ {
+ public FileChooserPopover(string[] handledExtensions, Bindable currentFile)
+ {
+ Child = new Container
+ {
+ Size = new Vector2(600, 400),
+ Child = new OsuFileSelector(currentFile.Value?.DirectoryName, handledExtensions)
+ {
+ RelativeSizeAxes = Axes.Both,
+ CurrentFile = { BindTarget = currentFile }
+ },
+ };
+ }
+ }
}
}
diff --git a/osu.Game/Screens/Edit/Setup/ResourcesSection.cs b/osu.Game/Screens/Edit/Setup/ResourcesSection.cs
index ba22c82ecc..8e739a786f 100644
--- a/osu.Game/Screens/Edit/Setup/ResourcesSection.cs
+++ b/osu.Game/Screens/Edit/Setup/ResourcesSection.cs
@@ -6,7 +6,6 @@ using System.Linq;
using osu.Framework.Allocation;
using osu.Framework.Bindables;
using osu.Framework.Graphics;
-using osu.Framework.Graphics.Containers;
using osu.Framework.Localisation;
using osu.Game.Beatmaps;
using osu.Game.Graphics.UserInterfaceV2;
@@ -39,62 +38,30 @@ namespace osu.Game.Screens.Edit.Setup
[BackgroundDependencyLoader]
private void load()
{
- Container audioTrackFileChooserContainer = createFileChooserContainer();
- Container backgroundFileChooserContainer = createFileChooserContainer();
-
Children = new Drawable[]
{
- new FillFlowContainer
+ backgroundTextBox = new FileChooserLabelledTextBox(".jpg", ".jpeg", ".png")
{
- RelativeSizeAxes = Axes.X,
- AutoSizeAxes = Axes.Y,
- Direction = FillDirection.Vertical,
- Children = new Drawable[]
- {
- backgroundTextBox = new FileChooserLabelledTextBox(".jpg", ".jpeg", ".png")
- {
- Label = "Background",
- FixedLabelWidth = LABEL_WIDTH,
- PlaceholderText = "Click to select a background image",
- Current = { Value = working.Value.Metadata.BackgroundFile },
- Target = backgroundFileChooserContainer,
- TabbableContentContainer = this
- },
- backgroundFileChooserContainer,
- }
+ Label = "Background",
+ FixedLabelWidth = LABEL_WIDTH,
+ PlaceholderText = "Click to select a background image",
+ Current = { Value = working.Value.Metadata.BackgroundFile },
+ TabbableContentContainer = this
},
- new FillFlowContainer
+ audioTrackTextBox = new FileChooserLabelledTextBox(".mp3", ".ogg")
{
- RelativeSizeAxes = Axes.X,
- AutoSizeAxes = Axes.Y,
- Direction = FillDirection.Vertical,
- Children = new Drawable[]
- {
- audioTrackTextBox = new FileChooserLabelledTextBox(".mp3", ".ogg")
- {
- Label = "Audio Track",
- FixedLabelWidth = LABEL_WIDTH,
- PlaceholderText = "Click to select a track",
- Current = { Value = working.Value.Metadata.AudioFile },
- Target = audioTrackFileChooserContainer,
- TabbableContentContainer = this
- },
- audioTrackFileChooserContainer,
- }
- }
+ Label = "Audio Track",
+ FixedLabelWidth = LABEL_WIDTH,
+ PlaceholderText = "Click to select a track",
+ Current = { Value = working.Value.Metadata.AudioFile },
+ TabbableContentContainer = this
+ },
};
backgroundTextBox.Current.BindValueChanged(backgroundChanged);
audioTrackTextBox.Current.BindValueChanged(audioTrackChanged);
}
- private static Container createFileChooserContainer() =>
- new Container
- {
- RelativeSizeAxes = Axes.X,
- AutoSizeAxes = Axes.Y,
- };
-
public bool ChangeBackgroundImage(string path)
{
var info = new FileInfo(path);