private void changeTeamButton_Click(object sender, EventArgs e)
        {
            ContextMenu menu = new ContextMenu();

            if (Program.TasClient.MyBattle != null)
            {
                int  freeAllyTeam;
                bool iAmSpectator = Program.TasClient.MyBattleStatus.IsSpectator;
                foreach (var allyTeam in ZeroKLobby.MicroLobby.ContextMenus.GetExistingTeams(out freeAllyTeam).Distinct())
                {
                    if (iAmSpectator || allyTeam != Program.TasClient.MyBattleStatus.AllyNumber)
                    {
                        var item = new System.Windows.Forms.MenuItem("Join Team " + (allyTeam + 1));
                        item.Click += (s, e2) => ActionHandler.JoinAllyTeam(allyTeam);
                        menu.MenuItems.Add(item);
                    }
                }

                menu.MenuItems.Add("-");

                var newTeamItem = new System.Windows.Forms.MenuItem("Start New Team");
                newTeamItem.Click += (s, e2) => ActionHandler.JoinAllyTeam(freeAllyTeam);
                menu.MenuItems.Add(newTeamItem);

                if (!Program.TasClient.MyBattleStatus.IsSpectator)
                {
                    var specItem = new System.Windows.Forms.MenuItem("Spectate");
                    specItem.Click += (s, e2) => ActionHandler.Spectate();
                    menu.MenuItems.Add(specItem);
                }
            }

            menu.Show(btnChangeTeam, new Point(0, 0));
        }
        public static MenuItem[] GetSetAllyItems()
        {
            var setAllyItems = new List <MenuItem>();
            int freeAllyTeam;

            foreach (var allyTeam in GetExistingTeams(out freeAllyTeam).Distinct())
            {
                var at = allyTeam;
                if (allyTeam != Program.TasClient.MyBattleStatus.AllyNumber)
                {
                    var item = new MenuItem("Join Team " + (allyTeam + 1));
                    item.Click += (s, e) => ActionHandler.JoinAllyTeam(at);
                    setAllyItems.Add(item);
                }
            }

            setAllyItems.Add(new MenuItem("-"));

            var newTeamItem = new MenuItem("Start New Team");

            newTeamItem.Click += (s, e) => ActionHandler.JoinAllyTeam(freeAllyTeam);
            setAllyItems.Add(newTeamItem);

            if (!Program.TasClient.MyBattleStatus.IsSpectator)
            {
                var specItem = new System.Windows.Forms.MenuItem("Spectate");
                specItem.Click += (s, e) => ActionHandler.Spectate();
                setAllyItems.Add(specItem);
            }

            return(setAllyItems.ToArray());
        }
        static System.Windows.Forms.MenuItem GetSetAllyTeamItem(User user)
        {
            var setAllyTeamItem = new System.Windows.Forms.MenuItem("Select Team");

            if (Program.TasClient.MyBattle == null || user.Name != Program.TasClient.UserName)
            {
                setAllyTeamItem.Enabled = false;
            }
            else if (Program.TasClient.MyBattle != null)
            {
                int freeAllyTeam;

                foreach (var allyTeam in GetExistingTeams(out freeAllyTeam).Distinct())
                {
                    var at = allyTeam;
                    if (allyTeam != Program.TasClient.MyBattleStatus.AllyNumber)
                    {
                        var item = new System.Windows.Forms.MenuItem("Join Team " + (allyTeam + 1));
                        item.Click += (s, e) => ActionHandler.JoinAllyTeam(at);
                        setAllyTeamItem.MenuItems.Add(item);
                    }
                }

                setAllyTeamItem.MenuItems.Add("-");

                var newTeamItem = new System.Windows.Forms.MenuItem("Start New Team");
                newTeamItem.Click += (s, e) => ActionHandler.JoinAllyTeam(freeAllyTeam);
                setAllyTeamItem.MenuItems.Add(newTeamItem);

                if (!Program.TasClient.MyBattleStatus.IsSpectator)
                {
                    var specItem = new System.Windows.Forms.MenuItem("Spectate");
                    specItem.Click += (s, e) => ActionHandler.Spectate();
                    setAllyTeamItem.MenuItems.Add(specItem);
                }
            }

            return(setAllyTeamItem);
        }
        void playerBox_MouseDown(object sender, MouseEventArgs mea)
        {
            if (mea.Button == MouseButtons.Left)
            {
                if (playerBox.HoverItem != null)
                {
                    if (playerBox.HoverItem.IsSpectatorsTitle)
                    {
                        ActionHandler.Spectate();
                    }
                    else if (playerBox.HoverItem.SlotButton != null)
                    {
                        ActionHandler.JoinSlot(playerBox.HoverItem.MissionSlot);
                    }
                    else if (playerBox.HoverItem.AllyTeam.HasValue)
                    {
                        ActionHandler.JoinAllyTeam(playerBox.HoverItem.AllyTeam.Value);
                    }
                }
            }

            if (mea.Button == MouseButtons.Right || !Program.Conf.LeftClickSelectsPlayer)
            {
                if (playerBox.HoverItem == null && mea.Button == MouseButtons.Right)
                {
                    var cm = ContextMenus.GetPlayerContextMenu(Program.TasClient.MyUser, true);
                    Program.ToolTip.Visible = false;
                    try {
                        cm.Show(playerBox, mea.Location);
                    } catch (Exception ex) {
                        Trace.TraceError("Error displaying tooltip: {0}", ex);
                    } finally {
                        Program.ToolTip.Visible = true;
                    }
                }
            }
            if (playerBox.HoverItem != null)
            {
                if (playerBox.HoverItem.BotBattleStatus != null)
                {
                    playerBox.SelectedItem = playerBox.HoverItem;
                    var cm = ContextMenus.GetBotContextMenu(playerBox.HoverItem.BotBattleStatus.Name);
                    Program.ToolTip.Visible = false;
                    try {
                        cm.Show(playerBox, mea.Location);
                    } catch (Exception ex) {
                        Trace.TraceError("Error displaying tooltip: {0}", ex);
                    } finally {
                        Program.ToolTip.Visible = true;
                    }
                }

                /*
                 *      if (playerBox.HoverItem.UserBattleStatus != null) {
                 *              playerBox.SelectedItem = playerBox.HoverItem;
                 *              var cm = ContextMenus.GetPlayerContextMenu(playerBox.HoverItem.User, true);
                 *              Program.ToolTip.Visible = false;
                 *              cm.Show(playerBox, mea.Location);
                 *              Program.ToolTip.Visible = true;
                 *      }*/
            }
        }
Esempio n. 5
0
        protected override void PlayerBox_MouseClick(object sender, MouseEventArgs mea)
        {
            if (mea.Button == MouseButtons.Left)
            {
                if (this.playerBox.HoverItem != null)
                {
                    if (this.playerBox.HoverItem.IsSpectatorsTitle)
                    {
                        ActionHandler.Spectate();
                    }
                    else if (this.playerBox.HoverItem.Button != null)
                    {
                        ActionHandler.JoinAllyTeam(this.playerBox.HoverItem.AllyTeam.Value);
                    }
                }
            }

            if (mea.Button == MouseButtons.Right || !Program.Conf.LeftClickSelectsPlayer)
            {
                if (this.playerBox.HoverItem == null && mea.Button == MouseButtons.Right)
                { //right click on empty space
                    var cm = ContextMenus.GetPlayerContextMenu(Program.TasClient.MyUser, true);
                    Program.ToolTip.Visible = false;
                    try
                    {
                        cm.Show(playerBox, mea.Location);
                    }
                    catch (Exception ex)
                    {
                        Trace.TraceError("Error displaying tooltip: {0}", ex);
                    }
                    finally
                    {
                        Program.ToolTip.Visible = true;
                    }
                    return;
                }
                //NOTE: code that display player's context menu on Left-mouse-click is in ChatControl.playerBox_MouseClick();
            }
            if (this.playerBox.HoverItem != null)
            {
                if (this.playerBox.HoverItem.BotBattleStatus != null)
                {
                    playerBox.SelectedItem = this.playerBox.HoverItem;
                    var cm = ContextMenus.GetBotContextMenu(this.playerBox.HoverItem.BotBattleStatus.Name);
                    Program.ToolTip.Visible = false;
                    try
                    {
                        cm.Show(playerBox, mea.Location);
                    }
                    catch (Exception ex)
                    {
                        Trace.TraceError("Error displaying tooltip: {0}", ex);
                    }
                    finally
                    {
                        Program.ToolTip.Visible = true;
                    }
                    return;
                }

                /*
                 *                      if (playerBox.HoverItem.UserBattleStatus != null) {
                 *                              playerBox.SelectedItem = playerBox.HoverItem;
                 *                              var cm = ContextMenus.GetPlayerContextMenu(playerBox.HoverItem.User, true);
                 *                              Program.ToolTip.Visible = false;
                 *                              cm.Show(playerBox, mea.Location);
                 *                              Program.ToolTip.Visible = true;
                 *                      }*/
            }
            base.PlayerBox_MouseClick(sender, mea);
        }
        public static ContextMenu GetPlayerContextMenu(User user, bool isBattle)
        {
            var contextMenu = new ContextMenu();

            try
            {
                var headerItem = new System.Windows.Forms.MenuItem("Player - " + user.Name)
                {
                    Enabled = false, DefaultItem = true
                };
                // default is to make it appear bold
                contextMenu.MenuItems.Add(headerItem);

                if (user.Name != Program.TasClient.UserName)
                {
                    contextMenu.MenuItems.Add("-");

                    var details = new System.Windows.Forms.MenuItem("Details");
                    details.Click += (s, e) => NavigationControl.Instance.Path = "http://zero-k.info/Users/LobbyDetail/" + user.LobbyID;
                    contextMenu.MenuItems.Add(details);

                    var pmItem = new System.Windows.Forms.MenuItem("Send Message");
                    pmItem.Click += (s, e) => NavigationControl.Instance.Path = "chat/user/" + user.Name;
                    contextMenu.MenuItems.Add(pmItem);

                    if (Program.FriendManager.Friends.Contains(user.Name))
                    {
                        var pinItem = new System.Windows.Forms.MenuItem("Unfriend");
                        pinItem.Click += (s, e) => Program.FriendManager.RemoveFriend(user.Name);
                        contextMenu.MenuItems.Add(pinItem);
                    }
                    else
                    {
                        var pinItem = new System.Windows.Forms.MenuItem("Friend");
                        pinItem.Click += (s, e) => Program.FriendManager.AddFriend(user.Name);
                        contextMenu.MenuItems.Add(pinItem);
                    }

                    var joinItem = new System.Windows.Forms.MenuItem("Join Same Battle")
                    {
                        Enabled = Program.TasClient.ExistingUsers[user.Name].IsInBattleRoom
                    };
                    joinItem.Click += (s, e) => ActionHandler.JoinPlayer(user.Name);
                    contextMenu.MenuItems.Add(joinItem);

                    var ignoreUser = new System.Windows.Forms.MenuItem("Ignore User")
                    {
                        Checked = Program.Conf.IgnoredUsers.Contains(user.Name)
                    };
                    ignoreUser.Click += (s, e) =>
                    {
                        ignoreUser.Checked = !ignoreUser.Checked;
                        if (ignoreUser.Checked)
                        {
                            Program.Conf.IgnoredUsers.Add(user.Name);
                        }
                        else
                        {
                            Program.Conf.IgnoredUsers.Remove(user.Name);
                        }
                    };
                    contextMenu.MenuItems.Add(ignoreUser);

                    var reportUser = new System.Windows.Forms.MenuItem("Report User");
                    reportUser.Click += (s, e) => NavigationControl.Instance.Path = "http://zero-k.info/Users/ReportToAdminFromLobby/" + user.Name;
                    contextMenu.MenuItems.Add(reportUser);
                }

                if (Program.TasClient.MyBattle != null)
                {
                    var battleStatus = Program.TasClient.MyBattle.Users.SingleOrDefault(u => u.Name == user.Name);
                    var myStatus     = Program.TasClient.MyBattleStatus;

                    if (isBattle)
                    {
                        contextMenu.MenuItems.Add("-");

                        if (user.Name != Program.TasClient.UserName)
                        {
                            var allyWith = new System.Windows.Forms.MenuItem("Ally")
                            {
                                Enabled =
                                    !battleStatus.IsSpectator &&
                                    (battleStatus.AllyNumber != myStatus.AllyNumber || myStatus.IsSpectator)
                            };
                            allyWith.Click += (s, e) => ActionHandler.JoinAllyTeam(battleStatus.AllyNumber);
                            contextMenu.MenuItems.Add(allyWith);
                        }

                        var colorItem = new System.Windows.Forms.MenuItem("Select Color")
                        {
                            Enabled = Program.TasClient.UserName == user.Name && !myStatus.IsSpectator
                        };
                        colorItem.Click += (s, e) =>
                        {
                            if (Program.TasClient.MyBattle == null)
                            {
                                return;
                            }
                            var myColor     = Program.TasClient.MyBattleStatus.TeamColorRGB;
                            var colorDialog = new ColorDialog {
                                Color = Color.FromArgb(myColor[0], myColor[1], myColor[2])
                            };
                            // fixme: set site
                            // colorDialog.Site = Program.MainWindow.ChatTab.Site;
                            if (colorDialog.ShowDialog() == DialogResult.OK)
                            {
                                var newColor = (int)(MyCol)colorDialog.Color;
                                Program.Conf.DefaultPlayerColorInt = newColor;
                                Program.SaveConfig();
                                var newStatus = Program.TasClient.MyBattleStatus.Clone();
                                newStatus.TeamColor = newColor;
                                Program.TasClient.SendMyBattleStatus(newStatus);
                            }
                        };
                        contextMenu.MenuItems.Add(colorItem);

                        contextMenu.MenuItems.Add(GetSetAllyTeamItem(user));

                        contextMenu.MenuItems.Add("-");
                        contextMenu.MenuItems.Add(GetShowOptions());
                        contextMenu.MenuItems.Add(GetAddBotItem());
                    }
                }
            }
            catch (Exception e)
            {
                Trace.WriteLine("Error generating player context menu: " + e);
            }
            return(contextMenu);
        }
        public static ContextMenu GetPlayerContextMenu(User user, bool isBattle)
        {
            var contextMenu = new ContextMenu();

            try
            {
                var headerItem = new System.Windows.Forms.MenuItem("Player - " + user.Name)
                {
                    Enabled = false, DefaultItem = true
                };
                // default is to make it appear bold
                contextMenu.MenuItems.Add(headerItem);

                if (user.Name != Program.TasClient.UserName)
                {
                    contextMenu.MenuItems.Add("-");

                    var details = new MenuItem("Details");
                    details.Click += (s, e) => NavigationControl.Instance.Path = string.Format("{1}/Users/LobbyDetail/{0}", user.AccountID, GlobalConst.BaseSiteUrl);
                    contextMenu.MenuItems.Add(details);

                    var pmItem = new MenuItem("Send Message");
                    pmItem.Click += (s, e) => NavigationControl.Instance.Path = "chat/user/" + user.Name;
                    contextMenu.MenuItems.Add(pmItem);

                    if (Program.FriendManager.Friends.Contains(user.Name))
                    {
                        var pinItem = new MenuItem("Unfriend");
                        pinItem.Click += (s, e) => Program.FriendManager.RemoveFriend(user.Name);
                        contextMenu.MenuItems.Add(pinItem);
                    }
                    else
                    {
                        var pinItem = new MenuItem("Friend");
                        pinItem.Click += (s, e) => Program.FriendManager.AddFriend(user.Name);
                        contextMenu.MenuItems.Add(pinItem);
                    }

                    var joinItem = new MenuItem("Join Same Battle")
                    {
                        Enabled = Program.TasClient.ExistingUsers[user.Name].IsInBattleRoom
                    };
                    joinItem.Click += (s, e) => ActionHandler.JoinPlayer(user.Name);
                    contextMenu.MenuItems.Add(joinItem);

                    var ignoreUser = new MenuItem("Ignore User")
                    {
                        Checked = Program.Conf.IgnoredUsers.Contains(user.Name)
                    };
                    ignoreUser.Click += (s, e) =>
                    {
                        ignoreUser.Checked = !ignoreUser.Checked;
                        if (ignoreUser.Checked)
                        {
                            Program.Conf.IgnoredUsers.Add(user.Name);
                        }
                        else
                        {
                            Program.Conf.IgnoredUsers.Remove(user.Name);
                        }
                    };
                    contextMenu.MenuItems.Add(ignoreUser);

                    var reportUser = new MenuItem("Report User");
                    reportUser.Click += (s, e) => NavigationControl.Instance.Path = string.Format("{1}/Users/ReportToAdminFromLobby/{0}", user.Name, GlobalConst.BaseSiteUrl);
                    contextMenu.MenuItems.Add(reportUser);
                }

                if (Program.TasClient.MyBattle != null)
                {
                    var battleStatus = Program.TasClient.MyBattle.Users[user.Name];
                    var myStatus     = Program.TasClient.MyBattleStatus;

                    if (isBattle)
                    {
                        contextMenu.MenuItems.Add("-");

                        if (!Program.TasClient.MyBattle.IsQueue)
                        {
                            if (user.Name != Program.TasClient.UserName)
                            {
                                var allyWith = new MenuItem("Ally")
                                {
                                    Enabled =
                                        !battleStatus.IsSpectator &&
                                        (battleStatus.AllyNumber != myStatus.AllyNumber || myStatus.IsSpectator)
                                };
                                allyWith.Click += (s, e) => ActionHandler.JoinAllyTeam(battleStatus.AllyNumber);
                                contextMenu.MenuItems.Add(allyWith);
                            }
                            contextMenu.MenuItems.Add(GetSetAllyTeam(user));

                            contextMenu.MenuItems.Add("-");
                            contextMenu.MenuItems.Add(GetShowGameOptionsItem());
                            contextMenu.MenuItems.Add(GetAddBot());
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Trace.WriteLine("Error generating player context menu: " + e);
            }
            return(contextMenu);
        }