// -------------------------------------------------------------------------------------------------------------------- // // This file is part of the HandBrake source code - It may be used under the terms of the GNU General Public License. // // // A Converter to manage the Presets list and turn it into a grouped set of MenuItems // // -------------------------------------------------------------------------------------------------------------------- namespace HandBrakeWPF.Converters { using System; using System.Collections.Generic; using System.Linq; using System.Globalization; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using HandBrakeWPF.Commands; using HandBrakeWPF.Services.Presets.Model; public class PresetsMenuConverter : IValueConverter { /// Converts a value. /// A converted value. If the method returns null, the valid null value is used. /// The value produced by the binding source. /// The type of the binding target property. /// The converter parameter to use. /// The culture to use in the converter. public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { IEnumerable presets = value as IEnumerable; if (presets ==null) { return null; } Dictionary groupedMenu = new Dictionary(); foreach (Preset item in presets) { if (groupedMenu.ContainsKey(item.Category)) { MenuItem newMeuItem = new MenuItem { Header = item.Name, Tag = item, Command = new PresetMenuSelectCommand(item)}; if (item.IsDefault) { newMeuItem.FontStyle = FontStyles.Italic; } groupedMenu[item.Category].Items.Add(newMeuItem); } else { MenuItem group = new MenuItem(); group.Header = item.Category; MenuItem newMeuItem = new MenuItem { Header = item.Name, Tag = item, Command = new PresetMenuSelectCommand(item) }; if (item.IsDefault) { newMeuItem.FontStyle = FontStyles.Italic; } group.Items.Add(newMeuItem); groupedMenu[item.Category] = group; } } return groupedMenu.Values.ToList(); } /// Converts a value. /// A converted value. If the method returns null, the valid null value is used. /// The value that is produced by the binding target. /// The type to convert to. /// The converter parameter to use. /// The culture to use in the converter. public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } }