public MainWindow()
{
InitializeComponent();
_player = new Player(this);
WindowStartupLocation = WindowStartupLocation.CenterScreen;
CInstrument.ItemsSource = InstrumentNames;
CTunes.ItemsSource = _tunes;
CChordMods.ItemsSource = Chords.chordMods;
CChords.ItemsSource = Chords.chordsBases;
for (double speed = 0.25; speed <= 2.0; speed += 0.25)
{
CPlaySpeed.Items.Add(speed);
}
int devicesCount = MidiIn.NumberOfDevices;
for (int i = 0; i < devicesCount; i++)
{
MidiInCapabilities device = MidiIn.DeviceInfo(i);
CSelectedInput.Items.Add(device);
}
#region Генерация клавиш пианино
int keyPosition = KeysOffset;
for (byte octave = StartOctave; octave <= EndOctave; ++octave)
{
for (int i = 0; i < 12; ++i) // 12 полутонов в октаве
{
var currentKey = new TextBlock();
var note = new Note(octave, (Tones) i);
currentKey.Text = note.ToString();
currentKey.Name = GenerateKeyName(note);
if (!note.isDiez()) //Если не диез
{
currentKey.Width = KeyWidth;
currentKey.Height = KeyHeight;
currentKey.Background = _genericColor;
currentKey.Margin = new Thickness(keyPosition, 0, 0, 0);
currentKey.Padding = new Thickness(0, 130, 0, 0);
currentKey.SetValue(Panel.ZIndexProperty, 0);
keyPosition += KeyWidth + KeysOffset;
currentKey.Foreground = Brushes.Black;
currentKey.FontSize = 14;
}
else
{
currentKey.Width = DiezWiddth;
currentKey.Height = DiezHeight;
currentKey.Background = _diezColor;
currentKey.Margin = new Thickness(keyPosition - DiezWiddth/2 + KeysOffset/2,
0, 0, 0);
currentKey.Padding = new Thickness(0, 75, 0, 0);
currentKey.SetValue(Panel.ZIndexProperty, 1);
currentKey.Foreground = Brushes.White;
currentKey.FontSize = 10;
}
currentKey.TextAlignment = TextAlignment.Center;
currentKey.FontWeight = FontWeights.Bold;
currentKey.Focusable = true;
currentKey.HorizontalAlignment = HorizontalAlignment.Left;
currentKey.VerticalAlignment = VerticalAlignment.Top;
currentKey.PreviewMouseLeftButtonDown += PianoKeyDown;
currentKey.PreviewMouseLeftButtonUp += PianoKeyUp;
currentKey.MouseLeave += PianoKeyLeave;
currentKey.PreviewMouseRightButtonUp += KeyToggled;
KeysGrid.Children.Add(currentKey);
}
}
#endregion
#region Генерация ладов для гитары
for (byte guitarString = 0; guitarString < 6; ++guitarString)
{
for (byte fret = 0; fret < FretsCount; ++fret)
{
Shape currentFret;
if (fret != 0)
{
currentFret = new Ellipse {Margin = new Thickness(FretOffset)};
}
else
{
currentFret = new Rectangle {Margin = new Thickness(0)};
}
currentFret.Name = GenerateFretName(guitarString, fret);
currentFret.Stroke = _fretStroke;
currentFret.Fill = _inactiveFret;
FretsGrid.Children.Add(currentFret);
currentFret.SetValue(Grid.ColumnProperty, (int) fret);
currentFret.SetValue(Grid.RowProperty, (int) guitarString);
currentFret.PreviewMouseLeftButtonDown += FretMouseDown;
currentFret.PreviewMouseLeftButtonUp += FretMouseUp;
currentFret.MouseLeave += FretMouseLeave;
currentFret.PreviewMouseRightButtonUp += FretToggled;
}
}
#endregion
}