public PEMidiTrack(Track track) { InitializeComponent(); if (!DesignMode) { DifficultyButtons.ForEach(x => { x.Button.Click += delegate(object o, EventArgs e) { setDifficulty(x.Difficulty); }; x.Button.MouseDown += delegate(object sender, MouseEventArgs e) { x.Button.Tag = e.Location; }; x.Button.MouseUp += delegate(object sender, MouseEventArgs e) { x.Button.Tag = null; }; x.Button.MouseMove += delegate(object sender, MouseEventArgs e) { if (e.Button == System.Windows.Forms.MouseButtons.Left && x.Button.Tag != null && ((Point)x.Button.Tag).Distance(e.Location) > 3) { x.Button.DoDragDrop(new PETrackDifficulty(this, x.Difficulty), DragDropEffects.All); ItemDifficultyBeginDrag.IfObjectNotNull(bd => bd(this, x.Difficulty, null)); } }; x.Button.AllowDrop = true; x.Button.DragEnter += new DragEventHandler(Button_DragEnter); x.Button.DragDrop += new DragEventHandler(Button_DragDrop); }); setDifficulty(GuitarDifficulty.Expert); Track = track; labelTrackName.AllowDrop = true; labelTrackName.DragEnter += new DragEventHandler(panelTrackName_DragEnter); labelTrackName.DragDrop += new DragEventHandler(panelTrackName_DragDrop); labelTrackName.DragOver += new DragEventHandler(panelTrackName_DragOver); labelTrackName.MouseMove += new MouseEventHandler(panelTrackName_MouseMove); labelTrackName.MouseUp += new MouseEventHandler(panelTrackName_MouseUp); labelTrackName.MouseDown += new MouseEventHandler(panelTrackName_MouseDown); } }
void Button_DragDrop(object sender, DragEventArgs e) { var dropDiff = e.GetDropObject <PETrackDifficulty>(); if (dropDiff != null) { var btn = DifficultyButtons.SingleOrDefault(x => x.Button == sender); if ((dropDiff.MidiTrack != btn.MidiTrack) || (dropDiff.MidiTrack == btn.MidiTrack && dropDiff.Difficulty != btn.Difficulty)) { DifficultyItemDropped.IfObjectNotNull(d => d(this, DifficultyButtons.Single(x => x.Button == sender).Difficulty, e)); } } }
void Button_DragEnter(object sender, DragEventArgs e) { e.Effect = DragDropEffects.None; var dropDiff = e.GetDropObject <PETrackDifficulty>(); if (dropDiff != null) { var btn = DifficultyButtons.SingleOrDefault(x => x.Button == sender); if ((dropDiff.MidiTrack != btn.MidiTrack) || (dropDiff.MidiTrack == btn.MidiTrack && dropDiff.Difficulty != btn.Difficulty)) { e.Effect = DragDropEffects.All; } } }