protected override void OnMouseUp(MouseEventArgs e) { base.OnMouseUp(e); switch (Drag) { case DragOp.CableFrom: { var src = Selected as TPin; var dest = Hovered as TPin; if (dest != null && !dest.IsOutput && dest.Module.Mod.Inputs[dest.Index] == null) { try { MyGraph.Connect(src.Module.Mod, dest.Module.Mod, (dest.Index > 0 ? dest.Module.Mod.Definition.ParamNames[dest.Index - 1] : null)); } catch (ModelException me) { MessageBox.Show(me.Message); } Dirty = true; } DragCable = null; Invalidate(); } break; case DragOp.CableTo: { var src = Hovered as TPin; var dest = Selected as TPin; if (src != null && src.IsOutput) { try { MyGraph.Connect(src.Module.Mod, dest.Module.Mod, (dest.Index > 0 ? dest.Module.Mod.Definition.ParamNames[dest.Index - 1] : null)); } catch (ModelException me) { MessageBox.Show(me.Message); } Dirty = true; } DragCable = null; Invalidate(); } break; } Drag = DragOp.None; }
protected override void OnMouseDown(MouseEventArgs e) { base.OnMouseDown(e); SetSelected(Hit(e.Location)); if (e.Button == MouseButtons.Left) { (Parent as Form1).SetEditModule(null); if (Selected is TModule) { var tmod = (Selected as TModule); Drag = DragOp.Module; DragOffset.X = e.X - tmod.Mod.X; DragOffset.Y = e.Y - tmod.Mod.Y; (Parent as Form1).SetEditModule(tmod.Mod); } else if (Selected is TPin) { var tpin = (Selected as TPin); if (tpin.IsOutput) Drag = DragOp.CableFrom; else if (tpin.Module.Mod.Inputs[tpin.Index] == null) Drag = DragOp.CableTo; } } else if (e.Button == MouseButtons.Right) { if (Selected is TModule || Selected is TCable) { var item = new MenuItem("Delete", (o, ev) => Delete()); var menu = new ContextMenu(new[] { item }); menu.Show(this, e.Location); } else if (Selected == null) { var items = GetModuleMenuItems("", n => AddModule(n, e.Location)); var menu = new ContextMenu(items); menu.Show(this, e.Location); } } }