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