コード例 #1
0
ファイル: ServerWindow.cs プロジェクト: westurner/Bricklayer
        public ServerWindow(Manager manager, ServerScreen screen) : base(manager)
        {
            this.screen = screen;
            // Setup the window
            CaptionVisible   = false;
            TopPanel.Visible = false;
            Movable          = false;
            Resizable        = false;
            Width            = 550;
            Height           = 500;
            Shadow           = true;
            Center();

            // Create main server list
            lstServers = new ControlList <ServerDataControl>(manager)
            {
                Left   = 8,
                Top    = 8,
                Width  = ClientWidth - 16,
                Height = ClientHeight - BottomPanel.Height - 16,
            };
            lstServers.Init();
            Add(lstServers);
            RefreshServerList();
            lstServers.DoubleClick += (sender, args) =>
            {
                if (lstServers.ItemIndex < 0)
                {
                    return;
                }

                var sdc = (ServerDataControl)lstServers.Items[lstServers.ItemIndex];
                // Make sure the user clicks the item and not the empty space in the list
                if (sdc.CheckPositionMouse(((MouseEventArgs)args).Position - lstServers.AbsoluteRect.Location))
                {
                    this.screen.Client.Network.SendSessionRequest(servers[lstServers.ItemIndex].Host,
                                                                  servers[lstServers.ItemIndex].Port);
                }
            };

            // Add controls to the bottom panel. (Add server, edit server, etc.)

            btnEdit = new Button(manager)
            {
                Text = "Edit", Top = 8, Width = 64
            };
            btnEdit.Init();
            btnEdit.Left   = (Width / 2) - (btnEdit.Width / 2);
            btnEdit.Click += (sender, args) =>
            {
                if (lstServers.Items.Count <= 0)
                {
                    return;
                }

                var window = new AddServerDialog(Manager, this, lstServers.ItemIndex, true,
                                                 servers[lstServers.ItemIndex].Name, servers[lstServers.ItemIndex].Host, servers[lstServers.ItemIndex].Port);
                window.Init();
                Manager.Add(window);
                window.ShowModal();
            };
            BottomPanel.Add(btnEdit);

            btnRemove = new Button(manager)
            {
                Text = "Remove", Left = btnEdit.Right + 8, Top = 8, Width = 64
            };
            btnRemove.Init();
            btnRemove.Click += (clickSender, clickArgs) =>
            {
                // Show a messagebox that asks for confirmation to delete the selected server.
                if (lstServers.Items.Count > 0)
                {
                    var confirm = new MessageBox(manager, MessageBoxType.YesNo,
                                                 "Are you sure you would like to remove\nthis server from your server list?",
                                                 "Confirm Removal");
                    confirm.Init();
                    // When the message box is closed, check if the user clicked yes, if so, removed the server from the list.
                    confirm.Closed += (closedSender, closedArgs) =>
                    {
                        var dialog = closedSender as Dialog;
                        if (dialog?.ModalResult != ModalResult.Yes)
                        {
                            return;
                        }
                        // If user clicked Yes
                        servers.RemoveAt(lstServers.ItemIndex);
                        lstServers.Items.RemoveAt(lstServers.ItemIndex);
                        screen.Client.IO.WriteServers(servers); // Write the new server list to disk.
                    };
                    Manager.Add(confirm);
                    confirm.Show();
                }
            };
            BottomPanel.Add(btnRemove);

            btnAdd = new Button(manager)
            {
                Text = "Add", Top = 8, Width = 64
            };
            btnAdd.Init();
            btnAdd.Right  = btnEdit.Left - 8;
            btnAdd.Click += (sender, args) =>
            {
                // Show add server dialog
                var window = new AddServerDialog(Manager, this, lstServers.ItemIndex, false, string.Empty,
                                                 string.Empty, Globals.Values.DefaultServerPort);
                window.Init();
                Manager.Add(window);
                window.ShowModal();
            };
            BottomPanel.Add(btnAdd);

            btnJoin = new Button(manager)
            {
                Text = "Connect", Top = 8, Width = 100
            };
            btnJoin.Init();
            btnJoin.Right  = btnAdd.Left - 8;
            btnJoin.Click += (sender, args) =>
            {
                if (lstServers.ItemIndex < 0)
                {
                    return;
                }

                btnJoin.Enabled = false;
                btnJoin.Text    = "Connecting...";
                this.screen.Client.Network.SendSessionRequest(servers[lstServers.ItemIndex].Host,
                                                              servers[lstServers.ItemIndex].Port);
            };
            BottomPanel.Add(btnJoin);

            btnRefresh = new Button(manager)
            {
                Text = "Refresh", Left = btnRemove.Right + 8, Top = 8, Width = 64
            };
            btnRefresh.Init();
            btnRefresh.Click += (sender, args) => { RefreshServerList(); };
            BottomPanel.Add(btnRefresh);

            // Listen for when init message is recieved
            screen.Client.Events.Network.Game.InitReceived.AddHandler(OnInit);

            // If user was disconnected from the server
            screen.Client.Events.Network.Game.Disconnected.AddHandler(OnDisconnect);
        }
コード例 #2
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;
                }
            });
        }