コード例 #1
0
        public ServerDataControl(ServerScreen screen, Manager manager, ServerData server, Control parent) : base(manager)
        {
            this.screen  = screen;
            this.manager = manager;

            // Setup
            Passive = false;
            Height  = 76;
            data    = server;

            Width = parent.Width + 8;
            // Background "gradient" image
            // TODO: Make an actual control. not a statusbar
            gradient = new StatusBar(manager);
            gradient.Init();
            gradient.Height = ClientHeight;
            gradient.Alpha  = .8f;
            Add(gradient);

            // Add controls
            lblName = new Label(Manager)
            {
                Width     = Width,
                Text      = data.Name,
                Left      = 4,
                Top       = 4,
                Font      = FontSize.Default14,
                Alignment = Alignment.TopLeft
            };
            lblName.Init();
            Add(lblName);

            lblStats = new Label(Manager)
            {
                Width     = Width,
                Text      = string.Empty,
                Alignment = Alignment.TopLeft,
                Top       = 4,
                Font      = FontSize.Default12
            };
            lblStats.Init();
            Add(lblStats);

            lblDescription = new Label(Manager)
            {
                Width     = Width,
                Left      = 4,
                Top       = lblName.Bottom + 6,
                Font      = FontSize.Default8,
                Alignment = Alignment.TopLeft
            };
            lblDescription.Init();
            lblDescription.Text   = "Querying server for data...";
            lblDescription.Height = Manager.Skin.Fonts["Default8"].Height * 2;
            Add(lblDescription);

            imgStatus = new ImageBox(Manager)
            {
                Top    = lblStats.Top + 6,
                Left   = 4,
                Width  = 10,
                Height = 10,
                Image  = screen.Client.Content["gui.icons.ping"],
            };
            imgStatus.Init();
            imgStatus.Color = Color.Transparent;
            Add(imgStatus);

            lblHost = new Label(Manager)
            {
                Width     = Width,
                Text      = data.GetHostString(),
                Alignment = Alignment.TopLeft,
                Left      = 4,
                Top       = lblDescription.Bottom,
                TextColor = Color.Gray
            };
            lblHost.Init();
            Add(lblHost);

            this.screen.Client.Events.Network.Game.ServerInfoReceived.AddHandler(args =>
            {
                if (endPoint != null && args.Host.Equals(endPoint))
                {
                    pingTimer?.Dispose();

                    lblStats.Text       = args.Players + "/" + args.MaxPlayers;
                    lblDescription.Text = args.Description;

                    lblStats.TextColor = onlineColor;
                    lblStats.Left      = (ClientWidth -
                                          (int)Manager.Skin.Fonts["Default12"].Resource.MeasureString(lblStats.Text).X) - 4 -
                                         32;
                    imgStatus.Right = lblStats.Left - 2;
                    imgStatus.Color = onlineColor;
                }
            });
        }