mirror of
https://github.com/ppy/osu.git
synced 2024-11-11 09:27:29 +08:00
Use sheared text box with filter count in multi/playlists lounge
This commit is contained in:
parent
007062496e
commit
c19802e923
@ -9,6 +9,7 @@ using osu.Framework.Bindables;
|
||||
using osu.Framework.Screens;
|
||||
using osu.Framework.Testing;
|
||||
using osu.Game.Graphics.Containers;
|
||||
using osu.Game.Graphics.UserInterface;
|
||||
using osu.Game.Online.Rooms;
|
||||
using osu.Game.Screens.OnlinePlay.Lounge.Components;
|
||||
using osu.Game.Screens.OnlinePlay.Playlists;
|
||||
@ -91,6 +92,20 @@ namespace osu.Game.Tests.Visual.Playlists
|
||||
AddAssert("selected room is disabled", () => loungeScreen.SelectedRoom.Disabled);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TestFilterTextCount()
|
||||
{
|
||||
AddAssert("filter text is 0 matches", () => this.ChildrenOfType<ShearedFilterTextBox>().Single().FilterText.ToString(), () => Is.EqualTo("0 matches"));
|
||||
|
||||
AddStep("add 10 rooms", () => RoomManager.AddRooms(10));
|
||||
|
||||
AddAssert("filter text is 10 matches", () => this.ChildrenOfType<ShearedFilterTextBox>().Single().FilterText.ToString(), () => Is.EqualTo("10 matches"));
|
||||
|
||||
AddStep("search for room 1", () => this.ChildrenOfType<ShearedFilterTextBox>().Single().Current.Value = "room 1");
|
||||
|
||||
AddUntilStep("filter text is 1 match", () => this.ChildrenOfType<ShearedFilterTextBox>().Single().FilterText.ToString(), () => Is.EqualTo("1 match"));
|
||||
}
|
||||
|
||||
private bool checkRoomVisible(DrawableRoom room) =>
|
||||
loungeScreen.ChildrenOfType<OsuScrollContainer>().First().ScreenSpaceDrawQuad
|
||||
.Contains(room.ScreenSpaceDrawQuad.Centre);
|
||||
|
@ -29,6 +29,8 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components
|
||||
|
||||
public IReadOnlyList<DrawableRoom> Rooms => roomFlow.FlowingChildren.Cast<DrawableRoom>().ToArray();
|
||||
|
||||
public Bindable<int> VisibleRoomCount = new Bindable<int>();
|
||||
|
||||
private readonly IBindableList<Room> rooms = new BindableList<Room>();
|
||||
private readonly FillFlowContainer<DrawableLoungeRoom> roomFlow;
|
||||
|
||||
@ -94,6 +96,8 @@ namespace osu.Game.Screens.OnlinePlay.Lounge.Components
|
||||
}
|
||||
});
|
||||
|
||||
VisibleRoomCount.Value = roomFlow.Count(r => r.MatchingFilter);
|
||||
|
||||
static bool matchPermissions(DrawableLoungeRoom room, RoomPermissionsFilter accessType)
|
||||
{
|
||||
switch (accessType)
|
||||
|
@ -85,7 +85,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge
|
||||
private PopoverContainer popoverContainer;
|
||||
private LoadingLayer loadingLayer;
|
||||
private RoomsContainer roomsContainer;
|
||||
private SearchTextBox searchTextBox;
|
||||
private ShearedFilterTextBox searchTextBox;
|
||||
private Dropdown<RoomStatusFilter> statusDropdown;
|
||||
|
||||
[BackgroundDependencyLoader(true)]
|
||||
@ -135,7 +135,7 @@ namespace osu.Game.Screens.OnlinePlay.Lounge
|
||||
{
|
||||
RelativeSizeAxes = Axes.X,
|
||||
Height = Header.HEIGHT,
|
||||
Child = searchTextBox = new BasicSearchTextBox
|
||||
Child = searchTextBox = new ShearedFilterTextBox
|
||||
{
|
||||
Anchor = Anchor.CentreRight,
|
||||
Origin = Anchor.CentreRight,
|
||||
@ -196,10 +196,17 @@ namespace osu.Game.Screens.OnlinePlay.Lounge
|
||||
if (ongoingOperationTracker != null)
|
||||
{
|
||||
operationInProgress.BindTo(ongoingOperationTracker.InProgress);
|
||||
operationInProgress.BindValueChanged(_ => updateLoadingLayer());
|
||||
operationInProgress.BindValueChanged(_ => updateLoadingState());
|
||||
}
|
||||
|
||||
ListingPollingComponent.InitialRoomsReceived.BindValueChanged(_ => updateLoadingLayer(), true);
|
||||
ListingPollingComponent.InitialRoomsReceived.BindValueChanged(_ => updateLoadingState(), true);
|
||||
|
||||
roomsContainer.VisibleRoomCount.BindValueChanged(_ =>
|
||||
{
|
||||
if (operationInProgress.Value || !ListingPollingComponent.InitialRoomsReceived.Value) return;
|
||||
|
||||
updateFilterText();
|
||||
}, true);
|
||||
|
||||
updateFilter();
|
||||
}
|
||||
@ -382,12 +389,24 @@ namespace osu.Game.Screens.OnlinePlay.Lounge
|
||||
this.Push(CreateRoomSubScreen(room));
|
||||
}
|
||||
|
||||
private void updateLoadingLayer()
|
||||
private void updateLoadingState()
|
||||
{
|
||||
if (operationInProgress.Value || !ListingPollingComponent.InitialRoomsReceived.Value)
|
||||
{
|
||||
loadingLayer.Show();
|
||||
searchTextBox.FilterText = "loading...";
|
||||
}
|
||||
else
|
||||
{
|
||||
loadingLayer.Hide();
|
||||
updateFilterText();
|
||||
}
|
||||
}
|
||||
|
||||
private void updateFilterText()
|
||||
{
|
||||
int visibleRoomCount = roomsContainer.VisibleRoomCount.Value;
|
||||
searchTextBox.FilterText = visibleRoomCount != 1 ? $"{visibleRoomCount:#,0} matches" : $"{visibleRoomCount:#,0} match";
|
||||
}
|
||||
|
||||
private void updatePollingRate(bool isCurrentScreen)
|
||||
|
Loading…
Reference in New Issue
Block a user