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); } } } }
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); }
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); } } } }
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); }
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); }