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;
            }
        }
Ejemplo n.º 2
0
        // 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;
            }
        }