private void ChangeMapIDs(IEnumerable <MapIDControl> boxes, MapStatus area) { var input = new IDInputDialog(boxes.First().ID); input.ShowDialog(this); if (input.Confirmed) { long firstid; if (input.WantsAuto) { firstid = Controller.GetSafeID(); } else { firstid = input.SelectedID; } int count = Controller.ChangeMapIDs(boxes, firstid, area, MapReplaceOption.Info); if (count > 0) { var picker = new ReplaceOptionDialog(count); picker.ShowDialog(this); Controller.ChangeMapIDs(boxes, firstid, area, picker.SelectedOption); } else { Controller.ChangeMapIDs(boxes, firstid, area, MapReplaceOption.Skip); } } }
private void InputChangeMapIDs(IEnumerable <long> originals) { var input = new IDInputDialog(originals.First()); input.ShowDialog(this); if (input.Confirmed) { long firstid; if (input.WantsAuto) { firstid = GetSafeID(); } else { firstid = input.SelectedID; } var desired_range = Util.CreateRange(firstid, originals.Count()); var from_to = originals.OrderBy(x => x).Zip(desired_range.OrderBy(x => x), (x, y) => new KeyValuePair <long, long>(x, y)); // the map IDs that are currently being used and are not changing (potentially conflicting with the ones we want) var taken_ids = ActiveSide.GetTakenIDs().Except(originals); var conflicts = taken_ids.Intersect(desired_range); var replace_option = MapReplaceOption.ReplaceExisting; if (conflicts.Any()) { var picker = new ReplaceOptionDialog(conflicts.Count()); picker.ShowDialog(this); if (picker.Confirmed) { replace_option = picker.SelectedOption; } else { return; } } // go reverse so that we can change 0->1->2->3 without replacing 1 before we can change it to 2 if (firstid > originals.First()) { from_to = from_to.Reverse(); } foreach (var change in from_to.ToList()) { if (replace_option == MapReplaceOption.ChangeExisting && conflicts.Contains(change.Value)) { ActiveSide.ChangeMapID(change.Value, GetSafeID()); } else if (replace_option == MapReplaceOption.Skip && conflicts.Contains(change.Value)) { /* do nothing */ } else { ActiveSide.ChangeMapID(change.Key, change.Value); } } } }