Пример #1
0
        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);
                    }
                }
            }
        }