using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; using BuzzGUI.Interfaces; using BuzzGUI.Common; using BuzzGUI.Common.Templates; namespace BuzzGUI.MachineView { /// /// Interaction logic for CreateTemplateWindow.xaml /// public partial class CreateTemplateWindow : Window { public IEnumerable Machines { get; private set; } public IEnumerable ExistingTemplates { get; private set; } public string TemplateName { get; private set; } public static TemplatePatternMode PatternMode { get; set; } public static TemplateWavetableMode WavetableMode { get; set; } static CreateTemplateWindow() { PatternMode = TemplatePatternMode.PatternsAndSequences; WavetableMode = TemplateWavetableMode.NoWavetable; } public CreateTemplateWindow(IEnumerable machines, IEnumerable existing) { Machines = machines; ExistingTemplates = existing; InitializeComponent(); noPatterns.IsChecked = PatternMode == TemplatePatternMode.NoPatterns; includePatterns.IsChecked = PatternMode == TemplatePatternMode.PatternsOnly; includeSequences.IsChecked = PatternMode == TemplatePatternMode.PatternsAndSequences; noWaves.IsChecked = WavetableMode == TemplateWavetableMode.NoWavetable; waveRefs.IsChecked = WavetableMode == TemplateWavetableMode.WaveRefsOnly; waves.IsChecked = WavetableMode == TemplateWavetableMode.WaveFiles; var generators = Machines.Where(m => m.DLL.Info.Type == MachineType.Generator && !m.IsControlMachine); var effects = Machines.Where(m => m.DLL.Info.Type == MachineType.Effect && !m.IsControlMachine); if (generators.Count() == 1) name.Text = Enumerable.Range(1, 10000).Select(n => generators.First().DLL.Info.ShortName + " - " + n.ToString()).Where(x => !ExistingTemplates.Contains(x)).First(); else if (generators.Count() == 0 && effects.Count() == 1) name.Text = Enumerable.Range(1, 10000).Select(n => effects.First().DLL.Info.ShortName + " - " + n.ToString()).Where(x => !ExistingTemplates.Contains(x)).First(); else name.Text = Enumerable.Range(1, 10000).Select(n => "Template" + n.ToString()).Where(x => !ExistingTemplates.Contains(x)).First(); name.TextChanged += (sender, e) => { bool exists = existing.Contains(name.Text); okButton.Content = exists ? "Update" : "OK"; okButton.IsEnabled = name.Text.Length > 0 && name.Text.IsValidFileName(); }; okButton.Click += (sender, e) => { if ((bool)includePatterns.IsChecked) PatternMode = TemplatePatternMode.PatternsOnly; else if ((bool)includeSequences.IsChecked) PatternMode = TemplatePatternMode.PatternsAndSequences; else PatternMode = TemplatePatternMode.NoPatterns; if ((bool)waveRefs.IsChecked) WavetableMode = TemplateWavetableMode.WaveRefsOnly; else if ((bool)waves.IsChecked) WavetableMode = TemplateWavetableMode.WaveFiles; else WavetableMode = TemplateWavetableMode.NoWavetable; TemplateName = name.Text; this.DialogResult = true; Close(); }; cancelButton.Click += (sender, e) => { this.DialogResult = false; Close(); }; name.SelectAll(); name.Focus(); } } }