private void RenameTag(ModTag tag, string newTag)
        {
            if (tag != null && string.IsNullOrEmpty(newTag) == false)
            {
                var oldTag = tag.Label;

                if (AvailableTags.ContainsKey(newTag.ToLower()) == false)
                {
                    tag.Label = newTag;

                    AvailableTags.Remove(oldTag.ToLower());
                    AvailableTags[newTag.ToLower()] = tag;
                }
                else if (oldTag.ToLower().Equals(newTag.ToLower()))
                {
                    AvailableTags[oldTag.ToLower()].Label = newTag;
                }

                foreach (var mod in Mods.All)
                {
                    if (mod.Tags.Select(t => t.ToLower()).Contains(oldTag.ToLower()))
                    {
                        mod.Tags.Remove(mod.Tags.First(t => t.ToLower().Equals(oldTag.ToLower())));
                        AddTag(mod, newTag);
                    }
                }
            }
        }
        private void RenameTagPrompt(ModEntry m, ModTag tag, bool renameAll)
        {
            var prompt = renameAll ? $"Rename all instances of tag '{tag.Label}' ?"
                                   : $"Rename tag '{tag.Label}' for '{m.Name}' ?";
            var newTag = Interaction.InputBox(prompt, "Rename tag", tag.Label);

            if (string.IsNullOrEmpty(newTag) || (renameAll && MessageBox.Show($@"Are you sure you want to rename all instances of tag '{tag.Label}' to {newTag}?",
                                                                              @"Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes))
            {
                return;
            }

            if (newTag != tag.Label)
            {
                if (renameAll)
                {
                    RenameTag(tag, newTag);
                }
                else
                {
                    m.Tags.Remove(m.Tags.First(t => t.ToLower().Equals(tag.Label.ToLower())));

                    if (m.Tags.Contains(newTag) == false)
                    {
                        AddTag(m, newTag);
                    }
                }
            }
        }
Ejemplo n.º 3
0
        private bool AddTag(ModEntry mod, string newTag)
        {
            if (mod != null && string.IsNullOrEmpty(newTag) == false && mod.Tags.Contains(newTag) == false)
            {
                if (AvailableTags.ContainsKey(newTag) == false)
                {
                    AvailableTags[newTag] = new ModTag(newTag);
                }

                mod.Tags.Add(newTag);

                return(true);
            }

            return(false);
        }
Ejemplo n.º 4
0
        private void RenameTag(ModTag tag, string newTag)
        {
            if (tag != null && string.IsNullOrEmpty(newTag) == false)
            {
                var oldTag = tag.Label;

                if (AvailableTags.ContainsKey(newTag) == false)
                {
                    tag.Label = newTag;

                    AvailableTags.Remove(oldTag);
                    AvailableTags[newTag] = tag;
                }

                foreach (var mod in Mods.All)
                {
                    if (mod.Tags.Contains(oldTag))
                    {
                        mod.Tags.Remove(oldTag);
                        AddTag(mod, newTag);
                    }
                }
            }
        }
Ejemplo n.º 5
0
        private void ExportLoadButtonClick(object sender, EventArgs e)
        {
            var dialog = new OpenFileDialog
            {
                Filter          = "Text files|*.txt",
                DefaultExt      = "txt",
                CheckPathExists = true,
                CheckFileExists = true,
                Multiselect     = false,
            };

            if (dialog.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            // parse file

            var categoryRegex = new Regex(@"^(?<category>.*?)\s\(\d*\):$", RegexOptions.Compiled | RegexOptions.Multiline);
            var modEntryRegex = new Regex(@"^\s*(?<name>.*?)[ ]*\t(?<id>.*?)[ ]*\t(?:.*=)?(?<sourceID>\d+)([ ]*\t(?<tags>.*?))?$", RegexOptions.Compiled | RegexOptions.Multiline);

            var mods         = Mods.All.ToList();
            var activeMods   = new List <ModEntry>();
            var missingMods  = new List <Match>();
            var categoryName = "";

            foreach (var line in File.ReadAllLines(dialog.FileName))
            {
                var categoryMatch = categoryRegex.Match(line);
                if (categoryMatch.Success)
                {
                    categoryName = categoryMatch.Groups["category"].Value;
                }

                var modMatch = modEntryRegex.Match(line);
                if (!modMatch.Success)
                {
                    continue;
                }

                //        var active = false;
                //        if (modMatch.Groups["active"].Success)
                //        {
                //// Try just in case the value doesn't work, failsafe value is false, so this shouldn't be an issue
                //         try
                //{
                //	active = bool.Parse(modMatch.Groups["active"].Value);
                //}
                //catch
                //{ }
                //        }

                var entries = mods.Where(mod => mod.ID == modMatch.Groups["id"].Value).ToList();

                if (entries.Count == 0)
                {
                    // Mod missing
                    // -> add to list
                    missingMods.Add(modMatch);
                    continue;
                }

                activeMods.AddRange(entries);

                var tags = modMatch.Groups["tags"].Value.Split(';');

                foreach (var tag in tags)
                {
                    if (AvailableTags.ContainsKey(tag) == false)
                    {
                        AvailableTags[tag] = new ModTag(tag);
                    }
                }

                foreach (var modEntry in entries)
                {
                    modEntry.Tags = tags.ToList();
                    Mods.RemoveMod(modEntry);
                    Mods.AddMod(categoryName, modEntry);
                    //modEntry.isActive = active;
                }

                if (entries.Count > 1)
                {
                    // More than 1 mod
                    // Add warning?
                }
            }

            // Check entries
            if (activeMods.Count == 0)
            {
                MessageBox.Show("No mods found. Bad profile?");
                return;
            }

            // Check missing
            if (missingMods.Count > 0)
            {
                var steamMissingMods = missingMods.Where(match => match.Groups["sourceID"].Value != "Unknown").ToList();

                var text = $"This profile contains {missingMods.Count} mod(s) that are not currently installed:\r\n\r\n";

                foreach (var match in missingMods)
                {
                    text += match.Groups["name"].Value;

                    if (steamMissingMods.Contains(match))
                    {
                        text += "*";
                    }

                    text += "\r\n";
                }

                if (steamMissingMods.Count != 0)
                {
                    text += "\r\nDo you want to subscribe to the mods marked with an asterisk on Steam?";

                    var result = FlexibleMessageBox.Show(this, text, "Mods missing!", MessageBoxButtons.YesNoCancel);

                    if (result == DialogResult.Cancel)
                    {
                        return;
                    }

                    if (result == DialogResult.Yes)
                    {
                        // subscribe
                        foreach (var id in steamMissingMods.Select(match => ulong.Parse(match.Groups["sourceID"].Value)))
                        {
                            SteamUGC.SubscribeItem(id.ToPublishedFileID());
                        }

                        MessageBox.Show("Done. Close the launcher, wait for steam to download the mod(s) and try again.");
                        return;
                    }
                }
                else
                {
                    text += "\r\nDo you wish to continue?";

                    if (FlexibleMessageBox.Show(this, text, "Mods missing!", MessageBoxButtons.YesNo) == DialogResult.No)
                    {
                        return;
                    }
                }
            }

            // Confirm
            if (FlexibleMessageBox.Show(this, $"Adopt profile? {activeMods.Count} mods found.", "Confirm", MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }

            // Apply changes
            foreach (var mod in mods)
            {
                mod.isActive = false;
            }

            foreach (var mod in activeMods)
            {
                mod.isActive = true;
            }

            modlist_ListObjectListView.UpdateObjects(mods);

            UpdateExport();
            UpdateLabels();
        }
        private ContextMenu CreateModListContextMenu(ModEntry m, ModTag tag)
        {
            var menu = new ContextMenu();

            if (m?.ID == null || tag == null)
            {
                return(menu);
            }

            // change color
            var changeColorItem = new MenuItem("Change color");

            var editColor = new MenuItem("Edit");

            editColor.Click += (sender, e) =>
            {
                var colorPicker = new ColorDialog
                {
                    AllowFullOpen = true,
                    Color         = tag.Color,
                    AnyColor      = true,
                    FullOpen      = true
                };

                if (colorPicker.ShowDialog() == DialogResult.OK)
                {
                    tag.Color = colorPicker.Color;
                }
            };

            changeColorItem.MenuItems.Add(editColor);

            var makePastelItem = new MenuItem("Make pastel");

            makePastelItem.Click += (sender, e) => tag.Color = tag.Color.GetPastelShade();

            changeColorItem.MenuItems.Add(makePastelItem);

            var changeShadeItem = new MenuItem("Random shade");

            changeShadeItem.Click += (sender, e) => tag.Color = tag.Color.GetRandomShade(0.33, 1.0);

            changeColorItem.MenuItems.Add(changeShadeItem);

            var randomColorItem = new MenuItem("Random color");

            randomColorItem.Click += (sender, e) => tag.Color = ModTag.RandomColor();

            changeColorItem.MenuItems.Add(randomColorItem);
            menu.MenuItems.Add(changeColorItem);

            menu.MenuItems.Add("-");

            // renaming tags
            var renameTagItem = new MenuItem($"Rename '{tag.Label}'");

            renameTagItem.Click += (sender, e) => RenameTagPrompt(m, tag, false);

            menu.MenuItems.Add(renameTagItem);

            var renameAllTagItem = new MenuItem($"Rename all '{tag.Label}'");

            renameAllTagItem.Click += (sender, e) => RenameTagPrompt(m, tag, true);
            menu.MenuItems.Add(renameAllTagItem);

            menu.MenuItems.Add("-");

            // removing tags
            var removeTagItem = new MenuItem($"Remove '{tag.Label}'");

            removeTagItem.Click += (sender, args) => m.Tags.Remove(tag.Label);
            menu.MenuItems.Add(removeTagItem);

            var removeAllTagItem = new MenuItem($"Remove all '{tag.Label}'");

            removeAllTagItem.Click += (sender, args) =>
            {
                if (MessageBox.Show($@"Are you sure you want to remove all instances of tag '{tag.Label}'?",
                                    @"Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
                {
                    return;
                }

                foreach (var mod in Mods.All)
                {
                    mod.Tags.Remove(mod.Tags.First(t => t.ToLower().Equals(tag.Label.ToLower())));
                }
            };
            menu.MenuItems.Add(removeAllTagItem);

            return(menu);
        }
Ejemplo n.º 7
0
 public abstract void DisplayModTag(ModTag tag, string categoryName);
 public override void DisplayModTag(ModTag tag, string categoryName)
 {
     Debug.Assert(tag != null);
     DisplayModTag(tag.name, categoryName);
 }
 public void DisplayTag(ModTag tag, string category)
 {
     Debug.Assert(tag != null);
     DisplayModTag(tag.name, category);
 }