protected override ContextMenuStrip CreateMenu() { this.RefreshPresetList(); ContextMenuStrip menu = new ContextMenuStrip(); ToolStripMenuItem fileConverterItem = new ToolStripMenuItem { Text = "File Converter", Image = Properties.Resources.ApplicationIcon_16x16.ToBitmap(), }; for (int index = 0; index < this.presetList.Count; index++) { PresetDefinition preset = this.presetList[index]; ToolStripMenuItem subItem = new ToolStripMenuItem { Text = preset.Name, Enabled = preset.Enabled }; fileConverterItem.DropDownItems.Add(subItem); subItem.Click += (sender, args) => this.ConvertFiles(preset.Name); } if (this.presetList.Count > 0) { fileConverterItem.DropDownItems.Add(new ToolStripSeparator()); } { ToolStripMenuItem subItem = new ToolStripMenuItem { Text = "Configure presets...", }; fileConverterItem.DropDownItems.Add(subItem); subItem.Click += (sender, args) => this.OpenSettings(); } menu.Items.Add(fileConverterItem); return(menu); }
private void RefreshPresetList() { // Retrieve selected files extensions. List <string> extensions = new List <string>(); foreach (string filePath in this.SelectedItemPaths) { string extension = Path.GetExtension(filePath); if (string.IsNullOrEmpty(extension)) { continue; } extension = extension.Substring(1).ToLowerInvariant(); if (extensions.Contains(extension)) { continue; } extensions.Add(extension); } // Compute preset list. this.presetList.Clear(); RegistryKey fileConverterKey = this.FileConverterRegistryKey; for (int extensionIndex = 0; extensionIndex < extensions.Count; extensionIndex++) { string extension = extensions[extensionIndex]; RegistryKey extensionKey = fileConverterKey.OpenSubKey(extension); if (extensionKey == null) { continue; } string presetsString = extensionKey.GetValue("Presets") as string; if (presetsString == null) { continue; } string[] presets = presetsString.Split(';'); for (int presetIndex = 0; presetIndex < presets.Length; presetIndex++) { string presetName = presets[presetIndex]; PresetDefinition presetDefinition = this.presetList.FirstOrDefault(match => match.Name == presetName); if (presetDefinition == null) { presetDefinition = new PresetDefinition(presetName); this.presetList.Add(presetDefinition); } presetDefinition.ExtensionRefCount++; } } // Update enable states. for (int index = 0; index < this.presetList.Count; index++) { this.presetList[index].Enabled = this.presetList[index].ExtensionRefCount == extensions.Count; } }