public void APIStateChanged(APIAccess api, APIState state) { form = null; switch (state) { case APIState.Offline: Children = new Drawable[] { new OsuSpriteText { Text = "ACCOUNT", Margin = new MarginPadding { Bottom = 5 }, Font = @"Exo2.0-Black", }, form = new LoginForm() }; break; case APIState.Failing: Children = new Drawable[] { new OsuSpriteText { Text = "Connection failing :(", }, }; break; case APIState.Connecting: Children = new Drawable[] { new OsuSpriteText { Anchor = Anchor.Centre, Origin = Anchor.Centre, Text = "Connecting...", Margin = new MarginPadding { Top = 10, Bottom = 10 }, }, }; break; case APIState.Online: Children = new Drawable[] { new FillFlowContainer { RelativeSizeAxes = Axes.X, AutoSizeAxes = Axes.Y, Padding = new MarginPadding { Left = 20, Right = 20 }, Direction = FillDirection.Vertical, Spacing = new Vector2(0f, 10f), Children = new Drawable[] { new Container { RelativeSizeAxes = Axes.X, AutoSizeAxes = Axes.Y, Children = new[] { new OsuSpriteText { Anchor = Anchor.Centre, Origin = Anchor.Centre, Text = "Signed in", TextSize = 18, Font = @"Exo2.0-Bold", Margin = new MarginPadding { Top = 5, Bottom = 5 }, }, }, }, panel = new UserPanel(api.LocalUser.Value) { RelativeSizeAxes = Axes.X, Action = RequestHide }, dropdown = new UserDropdown { RelativeSizeAxes = Axes.X }, }, }, }; panel.Status.BindTo(api.LocalUser.Value.Status); dropdown.Current.ValueChanged += newValue => { switch (newValue) { case UserAction.Online: api.LocalUser.Value.Status.Value = new UserStatusOnline(); dropdown.StatusColour = colours.Green; break; case UserAction.DoNotDisturb: api.LocalUser.Value.Status.Value = new UserStatusDoNotDisturb(); dropdown.StatusColour = colours.Red; break; case UserAction.AppearOffline: api.LocalUser.Value.Status.Value = new UserStatusOffline(); dropdown.StatusColour = colours.Gray7; break; case UserAction.SignOut: api.Logout(); break; } }; dropdown.Current.TriggerChange(); break; } if (form != null) { GetContainingInputManager()?.ChangeFocus(form); } }