Example #1
0
        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);
            }
        }