Пример #1
0
 public void ClearCanvas()
 {
     itemsList.Clear();
     dragItemNode  = null;
     hoverItemNode = null;
     hoverRoute    = null;
     diagramRouter.Clear();
 }
Пример #2
0
 public void ResetCanvas()
 {
     itemsList     = new List <CanvasItemData>();
     dragItemNode  = null;
     hoverItemNode = null;
     hoverRoute    = null;
     diagramRouter = new DiagramRouter();
 }
Пример #3
0
 // function to add items to the list and create an item in the inventory
 public void AddItem(int itemID)
 {
     // for i to the size of the inventory
     for (int i = 0; i < inv.Count; i++)
     {
         // if the slot has space create an item there
         if (inv[i].Name == null)
         {
             inv[i] = CanvasItemData.CreateItem(itemID);
             Debug.Log("Added Item: " + inv[i].Name);
             return;
         }
     }
 }
Пример #4
0
        /// <summary>
        /// Returns last selected canvas item
        /// </summary>
        public CanvasItem GetLastFocusItem()
        {
            if (itemsList.Count == 0)
            {
                return(null);
            }
            CanvasItemData item = itemsList.Last.Value;

            if (item.Focused)
            {
                return(item.Item);
            }

            return(null);
        }
Пример #5
0
        /// <summary>
        /// Do not call it directly
        /// </summary>
        public void AddSingleCanvasItem(CanvasItem item)
        {
            diagramRouter.AddItem(item);
            CanvasItemData itemData = new CanvasItemData(item, SizeGripMouseEntered, SizeGripMouseLeft);

            itemsData[item] = itemData;

            itemsList.Add(itemData);
            item.RedrawNeeded     += HandleRedraw;
            item.LayoutChanged    += HandleItemLayoutChange;
            item.PositionChanging += HandleItemPositionChange;
            item.SizeChanging     += HandleItemSizeChange;

            LayoutChanged(this, EventArgs.Empty);
        }
Пример #6
0
        public void SetFocusedCanvasItem(CanvasItem ci)
        {
            CanvasItemData value = null;

            if (itemsData.TryGetValue(ci, out value))
            {
                LinkedListNode <CanvasItemData> itemNode = new LinkedListNode <CanvasItemData>(value);
                SetItemFocus(itemNode);
                ClearAllItemsFocus(itemNode);
                if (itemsList.Last.Value != itemNode.Value)
                {
                    itemsList.Remove(itemNode.Value);
                    itemsList.AddLast(itemNode.Value);
                }
            }
        }
Пример #7
0
        private void PictureBox1MouseClick(object sender, MouseEventArgs e)
        {
            PointF pos = new PointF(e.X / zoom, e.Y / zoom);

            lastMouseClickPosition = pos;
            CanvasItemData itemNode = FindCanvasItemNode(pos);

            if (itemNode != null)
            {
                itemNode.Item.HandleMouseClick(pos);
                if (itemNode.Focused)
                {
                    if (itemNode.JustGainedFocus)
                    {
                        itemNode.JustGainedFocus = false;
                    }
                    else if (itemNode.Item.StartEditing())
                    {
                        Control ec = itemNode.Item.GetEditingControl();
                        if (ec != null)
                        {
                            //TODO - refactor this damn thing... why couldn't they make the "Scale" scale the font as well?
                            ec.Scale(new SizeF(zoom, zoom));
                            Font ecf = ec.Font;
                            ec.Font = new Font(ecf.FontFamily,
                                               ecf.Size * zoom,
                                               ecf.Style, ec.Font.Unit,
                                               ecf.GdiCharSet, ec.Font.GdiVerticalFont);
                            ec.Hide();
                            ec.VisibleChanged += delegate { if (!ec.Visible)
                                                            {
                                                                ec.Font = ecf;
                                                            }
                            };
                            panel1.Controls.Add(ec);
                            ec.Top  -= panel1.VerticalScroll.Value;
                            ec.Left -= panel1.HorizontalScroll.Value;
                            ec.Show();
                            panel1.Controls.SetChildIndex(ec, 0);
                            this.ActiveControl = ec;
                            ec.Focus();
                        }
                    }
                }
            }
            this.RefreshPictureBox();
        }
Пример #8
0
        public void AddCanvasItem(CanvasItem item)
        {
            diagramRouter.AddItem(item);
            CanvasItemData itemData = new CanvasItemData(item, SizeGripMouseEntered, SizeGripMouseLeft);

            itemsData[item] = itemData;

            ClassCanvasItem classItem = item as ClassCanvasItem;

            if (classItem != null)
            {
                classesToData.Add(classItem.RepresentedClassType, itemData);
                foreach (CanvasItemData ci in itemsList)
                {
                    ClassCanvasItem cci = ci.Item as ClassCanvasItem;
                    if (cci != null)
                    {
                        Route r = null;
                        if (cci.RepresentedClassType == classItem.RepresentedClassType.BaseClass)
                        {
                            r = diagramRouter.AddRoute(item, cci);
                        }
                        else if (classItem.RepresentedClassType == cci.RepresentedClassType.BaseClass)
                        {
                            r = diagramRouter.AddRoute(cci, classItem);
                        }

                        if (r != null)
                        {
                            r.EndShape = new RouteInheritanceShape();
                        }
                    }
                }
            }

            itemsList.AddLast(itemData);
            item.RedrawNeeded     += HandleRedraw;
            item.LayoutChanged    += HandleItemLayoutChange;
            item.PositionChanging += HandleItemPositionChange;
            item.SizeChanging     += HandleItemSizeChange;
        }
Пример #9
0
        void pictureBox1_MouseDoubleClick(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            PointF pos = new PointF(e.X / zoom, e.Y / zoom);

            lastMouseClickPosition = pos;
            CanvasItemData itemNode = FindCanvasItemNode(pos);

            if (itemNode != null)
            {
                if (itemNode.Item is LabelItem)
                {
                    CanvasItemData state = (itemNode.Item as LabelItem).FindStateDataBasedOnLabelItem(this);
                    ItemDoubleClick(this, new CanvasItemEventArgs(state));
                }
                else if (itemNode.Item is Transition)
                {
                    Route route = (itemNode.Item as Transition).FindSelectedRouteBasedOnTransition(this);
                    RouteDoubleClick(this, new CanvasRouteEventArgs(route));
                }
                else
                {
                    ItemDoubleClick(this, new CanvasItemEventArgs(itemNode));
                }
            }
            else
            {
                foreach (Route route in diagramRouter.Routes)
                {
                    if (route.IsBelongRoute(pos))
                    {
                        RouteDoubleClick(this, new CanvasRouteEventArgs(route));
                        break;
                    }
                }
            }
        }
Пример #10
0
		public void AddCanvasItem (CanvasItem item)
		{
			diagramRouter.AddItem(item);
			CanvasItemData itemData = new CanvasItemData(item, SizeGripMouseEntered, SizeGripMouseLeft);
			itemsData[item] = itemData;

			ClassCanvasItem classItem = item as ClassCanvasItem;
			if (classItem != null)
			{
				classesToData.Add(classItem.RepresentedClassType, itemData);
				foreach (CanvasItemData ci in itemsList)
				{
					ClassCanvasItem cci = ci.Item as ClassCanvasItem;
					if (cci != null)
					{
						Route r = null;
						if (cci.RepresentedClassType == classItem.RepresentedClassType.BaseClass)
							r = diagramRouter.AddRoute(item, cci);
						else if (classItem.RepresentedClassType == cci.RepresentedClassType.BaseClass)
							r = diagramRouter.AddRoute(cci, classItem);
						
						if (r != null)
							r.EndShape = new RouteInheritanceShape();
					}
				}
			}

			itemsList.AddLast(itemData);
			item.RedrawNeeded += HandleRedraw;
			item.LayoutChanged += HandleItemLayoutChange;
			item.PositionChanging += HandleItemPositionChange;
			item.SizeChanging += HandleItemSizeChange;
		}
Пример #11
0
    // Start is called before the first frame update
    void Start()
    {
        inv.Add(CanvasItemData.CreateItem(1));
        #region find parents
        // inv
        invparent = GameObject.Find("BackPack");
        // quest
        questparent = GameObject.Find("QuestItem");
        // weapons
        weaponparent[0] = GameObject.Find("Weapon1img");
        weaponparent[1] = GameObject.Find("Weapon2img");
        weaponparent[2] = GameObject.Find("Relicimg");
        // equip
        armourparent[0] = GameObject.Find("headimg");
        armourparent[1] = GameObject.Find("chestimg");
        armourparent[2] = GameObject.Find("armsimg");
        armourparent[3] = GameObject.Find("legsimg");
        #endregion
        #region add parent children to list of images
        // search and get images
        for (int i = 0; i < invparent.transform.childCount + 1; i++)
        {
            invSlots.Add(invparent.GetComponentsInChildren <Image>()[i]);
        }
        // remove first in list because it is dumb and gets the parent's image
        invSlots.RemoveAt(0);
        for (int i = 0; i < questparent.transform.childCount + 1; i++)
        {
            questSlots.Add(questparent.GetComponentsInChildren <Image>()[i]);
        }
        // remove first in list because it is dumb and gets the parent's image
        questSlots.RemoveAt(0);
        for (int i = 0; i < 4; i++)
        {
            // one parent per image so yeah
            armourSlots.Add(armourparent[i].GetComponentInChildren <Image>());
        }
        for (int i = 0; i < 3; i++)
        {
            // one parent per image so yeah
            weaponSlots.Add(weaponparent[i].GetComponentInChildren <Image>());
        }
        #endregion
        #region tooltip text

        itemName   = GameObject.Find("NameTxt").GetComponent <Text>();
        itemDesc   = GameObject.Find("DescTxt").GetComponent <Text>();
        itemAmount = GameObject.Find("AmountTxt").GetComponent <Text>();
        itemValue  = GameObject.Find("ValueTxt").GetComponent <Text>();
        toolTipPanel.SetActive(false);
        #endregion
        #region addItems
        // for (int i = 0; i < invparent.transform.childCount; i++)
        // {
        inv.Add(CanvasItemData.CreateItem(0));
        inv.Add(CanvasItemData.CreateItem(2));
        inv.Add(CanvasItemData.CreateItem(3));
        inv.Add(CanvasItemData.CreateItem(4));

        invSlots[1].sprite = inv[1].Icon;
        //invSlots[i] = inv[i].Icon;
        //  }
        #endregion
    }
Пример #12
0
        private void PictureBox1MouseUp(object sender, MouseEventArgs e)
        {
            PointF pos = new PointF(e.X / zoom, e.Y / zoom);

            switch (this.multiSelectPhase)
            {
            case MultiObjectSelect.STAR:
                if (!(pos.X == lastMouseDownPosition.X && pos.Y == lastMouseDownPosition.Y))
                {
                    this.multiSelectPhase    = MultiObjectSelect.AREA_SELECTED;
                    this.selectedArea.X      = (int)Math.Min(lastMouseDownPosition.X, pos.X);
                    this.selectedArea.Y      = (int)Math.Min(lastMouseDownPosition.Y, pos.Y);
                    this.selectedArea.Width  = (int)Math.Abs(lastMouseDownPosition.X - pos.X);
                    this.selectedArea.Height = (int)Math.Abs(lastMouseDownPosition.Y - pos.Y);

                    List <CanvasItemData> selectedItems = new List <CanvasItemData>();
                    foreach (CanvasItemData item in itemsList)
                    {
                        if (GraphUltility.IsBelongRectangle(this.selectedArea, new PointF(item.Item.X, item.Item.Y)))
                        {
                            selectedItems.Add(item);
                        }
                    }

                    this.selectedItems.Clear();
                    this.selectedItems.AddRange(selectedItems);

                    foreach (CanvasItemData selectedItem in this.selectedItems)
                    {
                        selectedItem.Item.HandleMouseDown(new PointF(selectedItem.Item.X, selectedItem.Item.Y));
                    }

                    CanvasItemsSelected(this, new CanvasItemsEventArgs(selectedItems));
                    this.Refresh();
                    this.RefreshPictureBox();
                }
                break;

            case MultiObjectSelect.START_MOVING:
                this.SaveCurrentCanvas(this, EventArgs.Empty);
                FinishMultiObjectAction();
                break;

            default:
                break;
            }


            if (dragItemNode != null)
            {
                dragItemNode.Item.HandleMouseUp(pos);
                if (this.lastMouseDownPosition != pos)
                {
                    this.SaveCurrentCanvas(this, EventArgs.Empty);
                }
            }
            dragItemNode = null;

            CanvasItemData itemNode = FindCanvasItemNode(pos);

            if (itemNode != null)
            {
                itemNode.Item.HandleMouseUp(pos);
            }
        }
Пример #13
0
        private void PictureBox1MouseMove(object sender, MouseEventArgs e)
        {
            HoldRedraw = true;
            PointF pos = new PointF(e.X / zoom, e.Y / zoom);

            if (dragItemNode != null)
            {
                dragItemNode.Item.HandleMouseMove(pos);
            }
            else if (this.multiSelectPhase == MultiObjectSelect.START_MOVING)
            {
                float xOffSet = pos.X - lastMouseDownPosition.X;
                float yOffSet = pos.Y - lastMouseDownPosition.Y;
                foreach (CanvasItemData selectedItem in this.selectedItems)
                {
                    float newPositionX = selectedItem.Item.X + xOffSet;
                    float newPositionY = selectedItem.Item.Y + yOffSet;
                    selectedItem.Item.MoveFast(newPositionX, newPositionY);
                }

                this.lastMouseDownPosition = pos;
            }
            else
            {
                Route          hoverRoute = null;
                CanvasItemData itemNode   = FindCanvasItemNode(pos);
                if (itemNode == null)
                {
                    foreach (Route route in diagramRouter.Routes)
                    {
                        if (route.IsBelongRoute(pos))
                        {
                            hoverRoute = route;
                            break;
                        }
                    }
                }

                //only free when it is not selected and hover out
                //only hover when not selected and hover in
                if (itemNode == null && hoverRoute == null)
                {
                    if (this.hoverItemNode != null)
                    {
                        this.hoverItemNode.Item.HandleMouseHoverOut(this);
                    }

                    if (this.hoverRoute != null)
                    {
                        this.hoverRoute.HandleMouseHoverOut(this);
                    }
                }
                else if (itemNode != null && itemNode != this.hoverItemNode)
                {
                    if (this.hoverItemNode != null)
                    {
                        this.hoverItemNode.Item.HandleMouseHoverOut(this);
                    }

                    itemNode.Item.HandleMouseHoverIn(this);

                    if (this.hoverRoute != null)
                    {
                        this.hoverRoute.HandleMouseHoverOut(this);
                    }
                }
                else if (hoverRoute != null && hoverRoute != this.hoverRoute)
                {
                    if (this.hoverItemNode != null)
                    {
                        this.hoverItemNode.Item.HandleMouseHoverOut(this);
                    }

                    if (this.hoverRoute != null)
                    {
                        this.hoverRoute.HandleMouseHoverOut(this);
                    }

                    hoverRoute.HandleMouseHoverIn(this);
                }

                this.hoverItemNode = itemNode;
                this.hoverRoute    = hoverRoute;
                this.Refresh();
                this.RefreshPictureBox();
            }

            HoldRedraw = false;
        }
Пример #14
0
        private void PictureBox1MouseDown(object sender, MouseEventArgs e)
        {
            itemSelected = false;
            HoldRedraw   = true;
            PointF pos = new PointF(e.X / zoom, e.Y / zoom);

            if (this.multiSelectPhase == MultiObjectSelect.AREA_SELECTED)
            {
                if (GraphUltility.IsBelongRectangle(this.selectedArea, pos))
                {
                    this.multiSelectPhase = MultiObjectSelect.START_MOVING;
                    foreach (CanvasItemData selectedItem in this.selectedItems)
                    {
                        selectedItem.JustGainedFocus = true;
                        selectedItem.Focused         = true;
                        itemsList.Remove(selectedItem);
                        itemsList.Add(selectedItem);
                        selectedItem.Item.HandleMouseDown(new PointF(selectedItem.Item.X, selectedItem.Item.Y));
                    }
                    this.CanvasItemsSelected(this, new CanvasItemsEventArgs(this.selectedItems));
                }
                else
                {
                    this.multiSelectPhase = MultiObjectSelect.STAR;
                }
            }
            lastMouseDownPosition  = pos;
            lastMouseClickPosition = pos;
            if (e.Button == MouseButtons.Right)
            {
                this.lastRightClickPosition = pos;
            }

            CanvasItemData itemNode = FindCanvasItemNode(pos);

            dragItemNode = itemNode;

            if (!ctrlDown)
            {
                foreach (CanvasItemData item in itemsList)
                {
                    item.Item.StopEditing();
                    if (itemNode == null || item != itemNode)
                    {
                        item.Focused = false;
                        if (item.Item is StateItem)
                        {
                            (item.Item as StateItem).CurrentState = ItemState.Free;
                        }
                    }
                }
            }

            foreach (Route route in diagramRouter.Routes)
            {
                route.CurrentState = ItemState.Free;
            }

            if (itemNode != null)
            {
                if (!itemNode.Focused)
                {
                    itemNode.JustGainedFocus = true;
                    itemNode.Focused         = true;
                    itemsList.Remove(itemNode);
                    itemsList.Add(itemNode);
                    itemNode.Item.HandleMouseDown(pos);
                    itemSelected = true;
                    CanvasItemSelected(this, new CanvasItemEventArgs(itemNode));
                }
                else
                {
                    itemSelected = true;
                    itemNode.Item.HandleMouseDown(pos);
                    CanvasItemSelected(this, new CanvasItemEventArgs(itemNode));
                }
            }
            else
            {
                foreach (Route route in diagramRouter.Routes)
                {
                    if (route.IsBelongRoute(pos))
                    {
                        route.CurrentState = ItemState.Selected;
                        CanvasRouteSelected(this, new CanvasRouteEventArgs(route));
                        this.itemSelected = true;
                        break;
                    }
                }
                if (!this.itemSelected)
                {
                    CanvasItemSelected(this, new CanvasItemEventArgs(null));
                }
            }

            HoldRedraw = false;
            this.RefreshPictureBox();
        }
Пример #15
0
        /// <summary>
        /// добавление новой ноды
        /// </summary>
        /// <param name="item"></param>
        public void AddCanvasItem(CanvasItem item, CanvasItem itemAt = null)
        {
            NodeCanvasItem classItem = item as NodeCanvasItem;

            if (classItem != null)
            {
                classItem.OffsetPointTo();
            }

            diagramRouter.AddItem(item);
            CanvasItemData itemData = new CanvasItemData(item, SizeGripMouseEntered, SizeGripMouseLeft);

            itemsData[item] = itemData;

            if (classItem != null)
            {
                nodesToData.Add(classItem.GetNodeData, item);
                foreach (CanvasItemData ci in itemsList)
                {
                    NodeCanvasItem cci = ci.Item as NodeCanvasItem;
                    if (cci != null)
                    {
                        //Route r = null;
                        foreach (LinkTo link in cci.GetNodeData.LinkedToNodes)
                        {
                            if (link.NameTo == classItem.GetNodeData.Name)
                            {
                                //                  link: from  >>>  to
                                Route r = diagramRouter.AddRoute(cci, classItem, link.ContentLine);
                                r.EndShape   = new RouteInheritanceShape();
                                r.StartShape = new RouteStartShape();
                            }
                        }
                        //if (r != null) {}
                        foreach (LinkTo link in classItem.GetNodeData.LinkedToNodes)
                        {
                            if (link.NameTo == cci.GetNodeData.Name)
                            {
                                //                  link: from  >>>  to
                                Route r = diagramRouter.AddRoute(classItem, cci, link.ContentLine);
                                r.EndShape   = new RouteInheritanceShape();
                                r.StartShape = new RouteStartShape();
                            }
                        }
                        //if (r != null && r.EndShape == null) {}
                    }
                }
            }

            // добавление ноды в лист
            if (itemAt != null)
            {
                LinkedListNode <CanvasItemData> find = itemsList.Find(itemsData[itemAt]);
                if (find != null)
                {
                    itemsList.AddBefore(find, itemData);
                }
                else
                {
                    itemsList.AddLast(itemData);
                }
            }
            else
            {
                itemsList.AddLast(itemData);
            }

            item.RedrawNeeded     += HandleRedraw;
            item.LayoutChanged    += HandleItemLayoutChange;
            item.PositionChanging += HandleItemPositionChange;
            item.SizeChanging     += HandleItemSizeChange;
        }