/// <summary> /// Constructor /// </summary> /// <param name="containerPanel"></param> /// <param name="flowItem"></param> /// <param name="ctlBase"></param> /// <param name="pathSeg"></param> public SegmentCtl(SMContainerPanel containerPanel, SMFlowBase flowItem, SMCtlBase ctlBase, SMPathSegment pathSeg) { _containerPanel = containerPanel; _flowItem = flowItem; _ctlBase = ctlBase; _pathSeg = pathSeg; if (pathSeg.First is SMPathOutError) { _penLine = new Pen(Color.Red, 2); _penSelected = new Pen(Color.Red, 6); _penNoTarget = new Pen(Color.Salmon, 6); } else if (pathSeg.First is SMPathOutStop) { _penLine = new Pen(Color.Black, 2); _penSelected = new Pen(Color.Blue, 6); _penNoTarget = new Pen(Color.DarkGray, 6); } else { _penLine = new Pen(Color.Green, 2); _penSelected = new Pen(Color.Green, 6); _penNoTarget = new Pen(Color.DarkGreen, 6); } _ctlBase.LocationChanged += new EventHandler(ctlBase_OnLocationChanged); InitializeComponent(); }
/// <summary> /// Move the arrow to the right position /// </summary> /// <param name="flowItem"></param> /// <param name="pathOut"></param> public void MoveIt(SMFlowBase flowItem, SMPathOut pathOut) { try { _ctrlBasefromPathOut = _containerPanel.GetFlowCtl(pathOut.Owner.Name); _ctlBaseTgt = _containerPanel.GetFlowCtl(pathOut.TargetID); if (_ctlBaseTgt == null) { return; } Size arrowSize = global::MCore.Comp.SMLib.SMFlowChart.Properties.Resources.ArrowUp.Size; Point borderLocation = _ctlBaseTgt.Location; Size borderSize = _ctlBaseTgt.Size; borderLocation.Offset(-arrowSize.Width, -arrowSize.Height); borderSize.Width += arrowSize.Width; borderSize.Height += arrowSize.Height; Rectangle rcBorder = new Rectangle(borderLocation, borderSize); PointF endPt = flowItem.FindEndPoint(pathOut); Point pixXY = SMContainerPanel.GridToPixel(endPt); SMPathSegment pathLastSeg = pathOut.Last; if (pathLastSeg.Vertical) { if (pathLastSeg.GridDistance < 0) { // Up SetBackgroundImage(global::MCore.Comp.SMLib.SMFlowChart.Properties.Resources.ArrowUp); Location = new Point(pixXY.X - arrowSize.Width / 2, rcBorder.Bottom); } else { // Down SetBackgroundImage(global::MCore.Comp.SMLib.SMFlowChart.Properties.Resources.ArrowDown); Location = new Point(pixXY.X - arrowSize.Width / 2, rcBorder.Top); } } else { if (pathLastSeg.GridDistance < 0) { // Left SetBackgroundImage(global::MCore.Comp.SMLib.SMFlowChart.Properties.Resources.ArrowLeft); Location = new Point(rcBorder.Right, pixXY.Y - arrowSize.Height / 2); } else { // Right SetBackgroundImage(global::MCore.Comp.SMLib.SMFlowChart.Properties.Resources.ArrowRight); Location = new Point(rcBorder.Left, pixXY.Y - arrowSize.Height / 2); } } _ctrlBasefromPathOut.LocationChanged += new EventHandler(ctrlBasefromPathOut_OnLocationChanged); _locOfstFromCtrlBase = new Point(_ctrlBasefromPathOut.Location.X - this.Location.X, _ctrlBasefromPathOut.Location.Y - this.Location.Y); Show(); } catch (Exception ex) { ex.ToString(); } }
/// <summary> /// Constructor /// </summary> /// <param name="pathSegmentBool"></param> public YesNoLabel(SMCtlBase smCrlBase, SMPathOutBool pathSegmentBool) { _smCrlBase = smCrlBase; PathSegmentBool = pathSegmentBool; _smCrlBase.LocationChanged += new EventHandler(smCrlBase_OnLocationChanged); }