/// <summary> /// Updates the view. /// </summary> public void UpdatePanel() { if (ignoreUpdates) { return; } ignoreUpdates = true; settingsLabel.Text = config.configuration.Settings.SettingsName; #region playerListUpdate // Delete items for (int i = 0; i < playerListView.Items.Count; i++) { if (!players.Contains((PlayerInfoFilename)playerListView.Items[i].Tag)) { playerListView.Items.RemoveAt(i); i--; } } // Create new items ListViewGroup staticGroup = playerListView.Groups["staticGroup"]; ListViewGroup nonstaticGroup = playerListView.Groups["nonStaticGroup"]; for (int i = 0; i < players.Count; i++) { PlayerInfoFilename info = players[i]; if (!playerListView.Items.ContainsKey(info.GetHashCode().ToString())) { ListViewItem item = playerListView.Items.Add(info.GetHashCode().ToString(), info.ColonyName, 0); item.Tag = info; item.Group = info.Static ? staticGroup : nonstaticGroup; item.SubItems.Add( string.Format(Resource.SimulatorPluginAntPropertiesAuthorFormat, info.FirstName, info.LastName)); } } // Update Icon foreach (ListViewItem listViewItem in playerListView.Items) { // collect infos PlayerInfoFilename playerInfo = (PlayerInfoFilename)listViewItem.Tag; bool playerStatic = playerInfo.Static; bool playerEnabled = true; bool playerSecure = RightsRequest.RequestRights(playerInfo); string hintText = string.Empty; if (!RightsRequest.IsValidPlayer(playerInfo)) { playerEnabled = false; hintText = RightsRequest.GetRuleViolationMessage(playerInfo); } else if (RightsRequest.LockedRights(config, playerInfo)) { playerEnabled = false; hintText = RightsRequest.RequiredRightsList(config, playerInfo); } // Set Information to Item listViewItem.ImageKey = (playerStatic ? "static" : "nonstatic") + (!playerEnabled ? "_disabled" : string.Empty) + (playerSecure ? "_secure" : string.Empty); listViewItem.ToolTipText = hintText; } #endregion #region teamListUpdate // Kick player List <string> kickedPlayer = new List <string>(); for (int i = 0; i < teamListView.Items.Count; i++) { PlayerItem player = (PlayerItem)teamListView.Items[i].Tag; if (!config.teams[0].Players.Contains(player) && !config.teams[1].Players.Contains(player) && !config.teams[2].Players.Contains(player) && !config.teams[3].Players.Contains(player) && !config.teams[4].Players.Contains(player) && !config.teams[5].Players.Contains(player) && !config.teams[6].Players.Contains(player) && !config.teams[7].Players.Contains(player)) { teamListView.Items.RemoveAt(i); i--; continue; } for (int j = 0; j < 8; j++) { if (config.teams[j].Players.Contains(player)) { if (!RightsRequest.IsValidPlayer(player.PlayerInfo) || RightsRequest.LockedRights(config, player.PlayerInfo)) { kickedPlayer.Add( string.Format( Resource.SimulationPluginKicklistEntry, player.ColonyName, player.FileName, player.ClassName, player.AuthorName)); teamListView.Items.RemoveAt(i); config.teams[j].Players.Remove(player); i--; } break; } } } if (kickedPlayer.Count > 0) { MessageBox.Show( this, Resource.SimulationPluginKicklistHead + Environment.NewLine + Environment.NewLine + string.Join(Environment.NewLine, kickedPlayer.ToArray()), Resource.SimulationPluginMessageBoxTitle, MessageBoxButtons.OK, MessageBoxIcon.Information); } // Create new items and update Context-menues for (int i = 0; i < config.teams.Length; i++) { ListViewGroup group = teamListView.Groups["teamGroup" + i]; for (int j = 0; j < config.teams[i].Players.Count; j++) { PlayerItem player = config.teams[i].Players[j]; if (teamListView.Items.ContainsKey(player.Guid.ToString())) { ListViewItem item = teamListView.Items[player.Guid.ToString()]; if (item.Group != group) { item.Group = group; } } else { ListViewItem item = teamListView.Items.Add( player.Guid.ToString(), player.ColonyName, (player.PlayerInfo.Static ? "static" : "nonstatic")); item.SubItems.Add(player.AuthorName); item.Tag = player; item.Group = group; } } } // Update Team-Lists in Context-Menues newTeamMenuItem.Enabled = (config.teams[7].Players.Count == 0); chooseTeam1MenuItem.Visible = (config.teams[0].Players.Count > 0); chooseTeam2MenuItem.Visible = (config.teams[1].Players.Count > 0); chooseTeam3MenuItem.Visible = (config.teams[2].Players.Count > 0); chooseTeam4MenuItem.Visible = (config.teams[3].Players.Count > 0); chooseTeam5MenuItem.Visible = (config.teams[4].Players.Count > 0); chooseTeam6MenuItem.Visible = (config.teams[5].Players.Count > 0); chooseTeam7MenuItem.Visible = (config.teams[6].Players.Count > 0); chooseTeam8MenuItem.Visible = (config.teams[7].Players.Count > 0); moveNewTeamMenuItem.Enabled = (config.teams[7].Players.Count == 0); moveTeam1MenuItem.Visible = (config.teams[0].Players.Count > 0); moveTeam2MenuItem.Visible = (config.teams[1].Players.Count > 0); moveTeam3MenuItem.Visible = (config.teams[2].Players.Count > 0); moveTeam4MenuItem.Visible = (config.teams[3].Players.Count > 0); moveTeam5MenuItem.Visible = (config.teams[4].Players.Count > 0); moveTeam6MenuItem.Visible = (config.teams[5].Players.Count > 0); moveTeam7MenuItem.Visible = (config.teams[6].Players.Count > 0); moveTeam8MenuItem.Visible = (config.teams[7].Players.Count > 0); #endregion ignoreUpdates = false; }
private void dragDrop_teamList(object sender, DragEventArgs e) { // Drop some files if (e.Data.GetDataPresent("FileDrop")) { string[] files = (string[])e.Data.GetData("FileDrop"); foreach (string file in files) { List <PlayerInfoFilename> hits = loadPlayerFile(file, false, true); foreach (PlayerInfoFilename hit in hits) { addPlayerToTeam(hit, null); } } } // Drop new playerInfos if (e.Data.GetDataPresent("AntMe.Simulation.PlayerInfoFilename[]")) { PlayerInfoFilename[] player = (PlayerInfoFilename[])e.Data.GetData("AntMe.Simulation.PlayerInfoFilename[]"); Point dropPoint = new Point(e.X, e.Y); ListViewItem hit = teamListView.HitTest(teamListView.PointToClient(dropPoint)).Item; if (hit != null) { ListViewGroup group = hit.Group; int team = teamListView.Groups.IndexOf(group); for (int i = 0; i < player.Length; i++) { addPlayerToTeam(player[i], config.teams[team]); } } else { addPlayerToTeam(player, false); } } // Move PlayerItems if (e.Data.GetDataPresent("AntMe.Plugin.Simulation.PlayerItem[]")) { PlayerItem[] player = (PlayerItem[])e.Data.GetData("AntMe.Plugin.Simulation.PlayerItem[]"); Point dropPoint = new Point(e.X, e.Y); ListViewItem hit = teamListView.HitTest(teamListView.PointToClient(dropPoint)).Item; if (hit != null) { ListViewGroup group = hit.Group; int team = teamListView.Groups.IndexOf(group); if ((e.KeyState & 8) > 0) { PlayerItem[] newPlayer = new PlayerItem[player.Length]; for (int i = 0; i < player.Length; i++) { newPlayer[i] = (PlayerItem)player[i].Clone(); } addPlayerToTeam(newPlayer, config.teams[team]); } else { movePlayerToTeam(player, config.teams[team]); } } else { if ((e.KeyState & 8) > 0) { PlayerItem[] newPlayer = new PlayerItem[player.Length]; for (int i = 0; i < player.Length; i++) { newPlayer[i] = (PlayerItem)player[i].Clone(); } addPlayerToTeam(newPlayer, null); } else { movePlayerToTeam(player, null); } } } }