private void pbDashboard_MouseMove(object sender, MouseEventArgs e) { _mousePoint = new Point(e.X, e.Y); if (btnRefference.CheckState == CheckState.Checked) { // _DestinationRefferencePt = new Point(e.X, e.Y); pbDashboard.Refresh(); } if (this._selectedIndex != -1) { int dX, dY; dX = e.X - this._X; dY = e.Y - this._Y; this._X = e.X; this._Y = e.Y; if (this._items[this._selectedIndex] is IResizable && this._selectedItem != 0) { if (!((IResizable)this._items[this._selectedIndex]).Resize(dX, dY, this._selectedItem)) { Cursor.Position = _mousePoint; } } if (this._items[this._selectedIndex] is Flow) { Flow fl = (Flow)this._items[this._selectedIndex]; IRenderable itm = getitemex(e.X, e.Y, this._items[this._selectedIndex]); switch (this._selectedItem) { case 2: if (itm != null && itm is Stock && fl._source != itm && ((Stock)itm)._inFlow == null) { if (fl._source == null) { fl.SetDestStock((Stock)itm, false); } else { fl.SetDestPoint(_mousePoint, false); } } else { if (itm == null || fl._destination != itm) { fl.SetDestPoint(_mousePoint, false); } } pbDashboard.Refresh(); return; case 0: if (itm != null && itm is Stock && fl._destination != itm && ((Stock)itm)._outFlow == null) { if (fl._destination == null) { fl.SetSourceStock((Stock)itm, false); } else { fl.SetSourcePoint(_mousePoint, false); } } else { if (itm == null || fl._source != itm) { fl.SetSourcePoint(_mousePoint, false); } } pbDashboard.Refresh(); return; } } ((ITransformable)this._items[this._selectedIndex]).Translate(dX, dY, this._selectedItem); this.pbDashboard.Refresh(); } else if (this.start != null) { this.pbDashboard.Refresh(); Graphics g = this.pbDashboard.CreateGraphics(); Rectangle sRect = ((ITransformable)start).GetBounds(); Point sPoint = new Point(sRect.X + sRect.Width / 2, sRect.Y + sRect.Height / 2); g.DrawLine(new Pen(Color.Red), sPoint, new Point(e.X, e.Y)); } else if (this._startPoint != null) { ITransformable item = (ITransformable)getItem(_mousePoint); if (item != null && item is Stock && this._flow._source != item && ((Stock)item)._inFlow == null) { this._flow.SetDestStock((Stock)item, true); ((Stock)item)._inFlow = this._flow; this.pbDashboard.Refresh(); } else { if (item == null) { this._flow.SetDestPoint(_mousePoint, true); if (this._flow._destination != null) { this._flow._destination._outFlow = null; this._flow._destination = null; } } else { if (item != this._flow._destination) { this._flow.SetDestPoint(_mousePoint, true); } } this.pbDashboard.Refresh(); } } if (this._cursorItem == -1 && btnSelect.CheckState == CheckState.Checked) { while (true) { ITransformable item = getItem(new Point(e.X, e.Y)); if (item == null || !(item is IResizable)) { break; } int cnt = item.Contains(e.X, e.Y); if (cnt < 1) { break; } this.pbDashboard.Cursor = ((IResizable)item).GetCursor(cnt); return; } this.pbDashboard.Cursor = Cursors.Default; IRenderable it = getItem(new Point(e.X, e.Y)) as IRenderable; if (it != null) { if (sbLabel1.Tag == it) { return; } sbLabel1.Text = it.GetHint(); sbLabel1.Tag = it; } else { if (sbLabel1.Tag != null) { sbLabel1.Tag = null; sbLabel1.Text = ""; } } } else { this.pbDashboard.Cursor = Cursors.Default; } }
// items manupulation private void pbDashboard_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) { pbMenu.Items.Clear(); var pt = new Point(e.X, e.Y); menuItem = getItem(pt) as IDrawable; if (menuItem == null) { return; } if (menuItem is Stock) { var stock = menuItem as Stock; if (stock.InFlow != null) { pbMenu.Items.Add("Detach In Flow: " + stock.InFlow.Name); pbMenu.Items[pbMenu.Items.Count - 1].Click += MenuDeleteInFlow; } if (stock.OutFlow != null) { pbMenu.Items.Add("Detach Out Flow: " + stock.OutFlow.Name); pbMenu.Items[pbMenu.Items.Count - 1].Click += MenuDeleteOutFlow; } if (stock.References.Count > 0) { pbMenu.Items.Add("Detach References"); pbMenu.Items[pbMenu.Items.Count - 1].Click += MenuDeleteReference; } pbMenu.Items.Add("Edit Object"); pbMenu.Items[pbMenu.Items.Count - 1].Click += MenuEditObject; if (pbMenu.Items.Count > 0) { pbMenu.Items.Add("-"); } pbMenu.Items.Add("Delete " + stock.Name); pbMenu.Items[pbMenu.Items.Count - 1].Click += MenuDeleteObject; } else if (menuItem is Flow) { var fl = menuItem as Flow; if (fl.Source != null) { pbMenu.Items.Add("Detach Flow: " + fl.Source.Name); pbMenu.Items[pbMenu.Items.Count - 1].Click += MenuDeleteInFlow; } if (fl.Destination != null) { pbMenu.Items.Add("Detach Flow: " + fl.Destination.Name); pbMenu.Items[pbMenu.Items.Count - 1].Click += MenuDeleteOutFlow; } if (fl.References.Count > 0) { pbMenu.Items.Add("Detach References"); pbMenu.Items[pbMenu.Items.Count - 1].Click += MenuDeleteReference; } pbMenu.Items.Add("Edit Object"); pbMenu.Items[pbMenu.Items.Count - 1].Click += MenuEditObject; if (pbMenu.Items.Count > 0) { pbMenu.Items.Add("-"); } pbMenu.Items.Add("Delete " + fl.Name); pbMenu.Items[pbMenu.Items.Count - 1].Click += MenuDeleteObject; } else if (menuItem is Coefficient) { var fl = menuItem as Coefficient; if (fl.References.Count > 0) { pbMenu.Items.Add("Detach References"); pbMenu.Items[pbMenu.Items.Count - 1].Click += MenuDeleteReference; } pbMenu.Items.Add("Edit Object"); pbMenu.Items[pbMenu.Items.Count - 1].Click += MenuEditObject; if (pbMenu.Items.Count > 0) { pbMenu.Items.Add("-"); } pbMenu.Items.Add("Delete " + fl.Name); pbMenu.Items[pbMenu.Items.Count - 1].Click += MenuDeleteObject; } else if (menuItem is ResultTable) { var fl = menuItem as ResultTable; pbMenu.Items.Add("Edit Object"); pbMenu.Items[pbMenu.Items.Count - 1].Click += MenuEditObject; if (pbMenu.Items.Count > 0) { pbMenu.Items.Add("-"); } pbMenu.Items.Add("Delete " + fl.Name); pbMenu.Items[pbMenu.Items.Count - 1].Click += MenuDeleteObject; } else if (menuItem is Diagram) { var fl = menuItem as Diagram; pbMenu.Items.Add("Show in new form"); pbMenu.Items[pbMenu.Items.Count - 1].Click += MenuDiagramForm; pbMenu.Items.Add("Edit Object"); pbMenu.Items[pbMenu.Items.Count - 1].Click += MenuEditObject; if (pbMenu.Items.Count > 0) { pbMenu.Items.Add("-"); } pbMenu.Items.Add("Delete " + fl.Name); pbMenu.Items[pbMenu.Items.Count - 1].Click += MenuDeleteObject; } pbMenu.Show(pbDashboard, pt); } if (e.Button != MouseButtons.Left) { return; } Cursor.Clip = new Rectangle(PointToScreen(pbDashboard.Location), pbDashboard.Size); pbDashboard.Capture = true; if (btnStock.CheckState == CheckState.Checked) { items.Add(new Stock(new Rectangle(e.X - 50, e.Y - 25, 100, 50))); pbDashboard.Refresh(); SetMenuSelectButton(); } else if (tsbDiagram.CheckState == CheckState.Checked) { items.Add(new Diagram(new Rectangle(e.X - 250, e.Y - 125, 500, 250))); pbDashboard.Refresh(); SetMenuSelectButton(); } else if (tsbResultTable.CheckState == CheckState.Checked) { items.Add(new ResultTable(pbDashboard, new Rectangle(e.X - 150, e.Y - 100, 300, 200))); pbDashboard.Refresh(); SetMenuSelectButton(); } else if (btnFlow.CheckState == CheckState.Checked) { if (startPoint == null) { startPoint = new Point(e.X, e.Y); var sItem = getItem(startPoint.Value); var rect = new Rectangle(startPoint.Value.X, startPoint.Value.Y, 10, 10); if (sItem is Stock && ((Stock)sItem).InFlow == null) { flow = new Flow((Stock)sItem, rect); ((Stock)sItem).OutFlow = flow; } else { flow = new Flow(rect, new Rectangle(e.X, e.Y, 10, 10)); } } else { var EndPoint = new Point(e.X, e.Y); var sItem = getItem(startPoint.Value); // unused var eItem = getItem(EndPoint); // unused items.Add(flow); pbDashboard.Refresh(); startPoint = null; flow = null; SetMenuSelectButton(); } } else if (btnCoefficient.CheckState == CheckState.Checked) { items.Add(new Coefficient(new Rectangle(e.X - 25, e.Y - 25, 50, 50))); pbDashboard.Refresh(); SetMenuSelectButton(); } else if (btnRefference.CheckState == CheckState.Checked) { if (reference == null) { reference = getItem(new Point(e.X, e.Y)); if (reference is Diagram || reference is ResultTable || !(reference is IConnectable)) { reference = null; } if (reference == null) { return; } } else { var cnt = getItem(new Point(e.X, e.Y)) as IConnectable; if (cnt == null || cnt == reference) { reference = null; SetMenuSelectButton(); return; } cnt.Connect((IConnectable)reference); reference = null; SetMenuSelectButton(); } /* * foreach (ITransformable item in this.items) * if (item.Contains(e.X, e.Y) != -1) * { * selectedItem = item.Contains(e.X, e.Y); * selectedIndex = this.items.IndexOf((IDrawable)item); * break; * } * * if (selectedIndex == -1) * this.start = null; * else if (this.start == null) * this.start = (IConnectable)items[selectedIndex]; * else * { * this.start.Connect((IConnectable)items[selectedIndex]); * this.start = null; * } * * this.selectedIndex = -1; */ pbDashboard.Refresh(); } else if (btnSelect.CheckState == CheckState.Checked) { foreach (ITransformable item in items) { if (item.Contains(e.X, e.Y) != -1) { selectedItem = item.Contains(e.X, e.Y); cursorItem = selectedIndex; selectedIndex = items.IndexOf((IDrawable)item); if (item is ResultTable) { ((ResultTable)item).BeginDrag(); } break; } } x = e.X; y = e.Y; } }
//_items manupulation private void pbDashboard_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) { pbMenu.Items.Clear(); Point pt = new Point(e.X, e.Y); _menuItem = getItem(pt) as IDrawable; if (_menuItem == null) { return; } if (_menuItem is Stock) { Stock stk = _menuItem as Stock; if (stk._inFlow != null) { pbMenu.Items.Add("Detach In Flow: " + stk._inFlow.Name); pbMenu.Items[pbMenu.Items.Count - 1].Click += new EventHandler(this.MenuDeleteInFlow); } if (stk._outFlow != null) { pbMenu.Items.Add("Detach Out Flow: " + stk._outFlow.Name); pbMenu.Items[pbMenu.Items.Count - 1].Click += new EventHandler(this.MenuDeleteOutFlow); } if (stk.Refferences.Count > 0) { pbMenu.Items.Add("Detach Refferences"); pbMenu.Items[pbMenu.Items.Count - 1].Click += new EventHandler(this.MenuDeleteRefference); } pbMenu.Items.Add("Edit Object"); pbMenu.Items[pbMenu.Items.Count - 1].Click += new EventHandler(this.MenuEditObject); if (pbMenu.Items.Count > 0) { pbMenu.Items.Add("-"); } pbMenu.Items.Add("Delete " + stk.Name); pbMenu.Items[pbMenu.Items.Count - 1].Click += new EventHandler(this.MenuDeleteObject); } else if (_menuItem is Flow) { Flow fl = _menuItem as Flow; if (fl._source != null) { pbMenu.Items.Add("Detach Flow: " + fl._source.Name); pbMenu.Items[pbMenu.Items.Count - 1].Click += new EventHandler(this.MenuDeleteInFlow); } if (fl._destination != null) { pbMenu.Items.Add("Detach Flow: " + fl._destination.Name); pbMenu.Items[pbMenu.Items.Count - 1].Click += new EventHandler(this.MenuDeleteOutFlow); } if (fl.Refferences.Count > 0) { pbMenu.Items.Add("Detach Refferences"); pbMenu.Items[pbMenu.Items.Count - 1].Click += new EventHandler(this.MenuDeleteRefference); } pbMenu.Items.Add("Edit Object"); pbMenu.Items[pbMenu.Items.Count - 1].Click += new EventHandler(this.MenuEditObject); if (pbMenu.Items.Count > 0) { pbMenu.Items.Add("-"); } pbMenu.Items.Add("Delete " + fl.Name); pbMenu.Items[pbMenu.Items.Count - 1].Click += new EventHandler(this.MenuDeleteObject); } else if (_menuItem is Coefficient) { Coefficient fl = _menuItem as Coefficient; if (fl.Refferences.Count > 0) { pbMenu.Items.Add("Detach Refferences"); pbMenu.Items[pbMenu.Items.Count - 1].Click += new EventHandler(this.MenuDeleteRefference); } pbMenu.Items.Add("Edit Object"); pbMenu.Items[pbMenu.Items.Count - 1].Click += new EventHandler(this.MenuEditObject); if (pbMenu.Items.Count > 0) { pbMenu.Items.Add("-"); } pbMenu.Items.Add("Delete " + fl.Name); pbMenu.Items[pbMenu.Items.Count - 1].Click += new EventHandler(this.MenuDeleteObject); } else if (_menuItem is ResultTable) { ResultTable fl = _menuItem as ResultTable; pbMenu.Items.Add("Edit Object"); pbMenu.Items[pbMenu.Items.Count - 1].Click += new EventHandler(this.MenuEditObject); if (pbMenu.Items.Count > 0) { pbMenu.Items.Add("-"); } pbMenu.Items.Add("Delete " + fl.Name); pbMenu.Items[pbMenu.Items.Count - 1].Click += new EventHandler(this.MenuDeleteObject); } else if (_menuItem is Diagram) { Diagram fl = _menuItem as Diagram; pbMenu.Items.Add("Show in new form"); pbMenu.Items[pbMenu.Items.Count - 1].Click += new EventHandler(this.MenuDiagramForm); pbMenu.Items.Add("Edit Object"); pbMenu.Items[pbMenu.Items.Count - 1].Click += new EventHandler(this.MenuEditObject); if (pbMenu.Items.Count > 0) { pbMenu.Items.Add("-"); } pbMenu.Items.Add("Delete " + fl.Name); pbMenu.Items[pbMenu.Items.Count - 1].Click += new EventHandler(this.MenuDeleteObject); } pbMenu.Show(pbDashboard, pt); } if (e.Button != MouseButtons.Left) { return; } Cursor.Clip = new Rectangle(this.PointToScreen(this.pbDashboard.Location), this.pbDashboard.Size); this.pbDashboard.Capture = true; if (btnStock.CheckState == CheckState.Checked) { this._items.Add(new Stock(new Rectangle(e.X - 50, e.Y - 25, 100, 50))); this.pbDashboard.Refresh(); SetMenuSelectButton(); } else if (tsbDiagram.CheckState == CheckState.Checked) { this._items.Add(new Diagram(new Rectangle(e.X - 250, e.Y - 125, 500, 250))); this.pbDashboard.Refresh(); SetMenuSelectButton(); } else if (tsbResultTable.CheckState == CheckState.Checked) { this._items.Add(new ResultTable(this.pbDashboard, new Rectangle(e.X - 150, e.Y - 100, 300, 200))); this.pbDashboard.Refresh(); SetMenuSelectButton(); } else if (btnFlow.CheckState == CheckState.Checked) { if (_startPoint == null) { _startPoint = new Point(e.X, e.Y); Rectangle rect; ITransformable sItem = getItem(_startPoint.Value); rect = new Rectangle(_startPoint.Value.X, _startPoint.Value.Y, 10, 10); if (sItem != null && sItem is Stock && ((Stock)sItem).InFlow == null) { this._flow = new Flow((Stock)sItem, rect); ((Stock)sItem).OutFlow = this._flow; } else { this._flow = new Flow(rect, new Rectangle(e.X, e.Y, 10, 10)); } } else { Point EndPoint = new Point(e.X, e.Y); ITransformable sItem = getItem(_startPoint.Value); ITransformable eItem = getItem(EndPoint); this._items.Add(this._flow); this.pbDashboard.Refresh(); this._startPoint = null; this._flow = null; SetMenuSelectButton(); } } else if (btnCoefficient.CheckState == CheckState.Checked) { this._items.Add(new Coefficient(new Rectangle(e.X - 25, e.Y - 25, 50, 50))); this.pbDashboard.Refresh(); SetMenuSelectButton(); } else if (btnRefference.CheckState == CheckState.Checked) { if (_reff == null) { _reff = getItem(new Point(e.X, e.Y)); if (_reff is Diagram || _reff is ResultTable || !(_reff is IConnectable)) { _reff = null; } if (_reff == null) { return; } } else { IConnectable cnt = getItem(new Point(e.X, e.Y)) as IConnectable; if (cnt == null || cnt == _reff) { _reff = null; SetMenuSelectButton(); return; } cnt.Connect((IConnectable)_reff); _reff = null; SetMenuSelectButton(); } /* * foreach (ITransformable item in this._items) * if (item.Contains(e.X, e.Y) != -1) * { * _selectedItem = item.Contains(e.X, e.Y); * _selectedIndex = this._items.IndexOf((IDrawable)item); * break; * } * * if (_selectedIndex == -1) * this.start = null; * else if (this.start == null) * this.start = (IConnectable)_items[_selectedIndex]; * else * { * this.start.Connect((IConnectable)_items[_selectedIndex]); * this.start = null; * } * * this._selectedIndex = -1; */ this.pbDashboard.Refresh(); } else if (btnSelect.CheckState == CheckState.Checked) { foreach (ITransformable item in this._items) { if (item.Contains(e.X, e.Y) != -1) { _selectedItem = item.Contains(e.X, e.Y); _cursorItem = _selectedIndex; _selectedIndex = this._items.IndexOf((IDrawable)item); if (item is ResultTable) { ((ResultTable)item).BeginDrag(); } break; } } this._X = e.X; this._Y = e.Y; } }