Esempio n. 1
0
 public void DeleteConnection(MindNode node2)
 {
     if (this.connNodes.Contains(node2))
     {
         int index = this.connNodes.IndexOf(node2);
         this.connNodes.RemoveAt(index);
         this.connections.RemoveAt(index);
     }
     else if (node2.connNodes.Contains(this))
     {
         int index = node2.connNodes.IndexOf(this);
         node2.connNodes.RemoveAt(index);
         node2.connections.RemoveAt(index);
     }
     if (this.backconnNodes.Contains(node2))
     {
         int index = this.backconnNodes.IndexOf(node2);
         this.backconnNodes.RemoveAt(index);
     }
     else if (node2.backconnNodes.Contains(this))
     {
         int index = node2.backconnNodes.IndexOf(this);
         node2.backconnNodes.RemoveAt(index);
     }
 }
Esempio n. 2
0
 public MindNodeAction(int newid, String newName, MindNode node1, MindNode node2)
 {
     this.involvedNodes.Push(node1);
     this.involvedNodes.Push(node2);
     this.id   = newid;
     this.name = newName;
 }
Esempio n. 3
0
        public bool AddChild(MindNode node, bool virtualCreate)
        {
            if (!CheckCollision(node) || virtualCreate)
            {
                if (!virtualCreate)
                {
                    node.id = GlobalNodeHandler.id;
                    //if(!GlobalNodeHandler.copy && !GlobalNodeHandler.paste) does not change nodestyle while copying or pasting

                    node.NodeDrawingStyle = GlobalNodeHandler.nodeStyle;

                    if (GlobalNodeHandler.lighttext)
                    {
                        node.TextColor = Colors.White;
                    }

                    node.SetTextStyle(GlobalNodeHandler.standardtextFormat);
                }
                if (GetLastChild() != null)
                {
                    //GetLastChild().AddConnection(node);
                    //GetLastChild().UpdateBridgesRepresentation();
                }
                node.parent = this;
                childNodes.Add(node);

                if (!virtualCreate)
                {
                    GlobalNodeHandler.id++;
                }

                return(true);
            }
            return(false);
        }
Esempio n. 4
0
        public bool AddChildNoStyle(MindNode node, bool virtualCreate)
        {
            if (!CheckCollision(node) || virtualCreate)
            {
                if (!virtualCreate)
                {
                    node.id = GlobalNodeHandler.id;
                    //if(!GlobalNodeHandler.copy && !GlobalNodeHandler.paste) does not change nodestyle while copying or pasting
                }
                if (GetLastChild() != null)
                {
                    //GetLastChild().AddConnection(node);
                    //GetLastChild().UpdateBridgesRepresentation();
                }
                node.parent = this;
                childNodes.Add(node);

                if (!virtualCreate)
                {
                    GlobalNodeHandler.id++;
                }

                return(true);
            }
            return(false);
        }
Esempio n. 5
0
        public void CopyToClipboard(MindNode copyNode)
        {
            DataPackage package = new DataPackage();

            package.SetText(copyNode.GetRepresentationText());
            Clipboard.SetContent(package);
        }
Esempio n. 6
0
        public void Centerview(MindNode node, int imgHeight, int imgWidth)
        {
            Point centerPos = new Point(imgWidth / 2, imgHeight / 2);
            Point move      = node.GetDiff(centerPos);

            this.MoveView(move, 1.0);
        }
Esempio n. 7
0
 public MindNodeAction(int newid, String newName, MindNode node, String tex)
 {
     this.involvedNodes.Push(node);
     this.id   = newid;
     this.name = newName;
     this.text = tex;
 }
Esempio n. 8
0
        public void viewPane_Released(MouseObject mousObj)
        {
            CalcPoint mousePos = mousObj.currentMousePos;

            if (GlobalNodeHandler.TabletSelected)
            {
                if (GlobalNodeHandler.adding && tickcnt - clickstartcount < 10)
                {
                    if (GlobalNodeHandler.clickedNode == null && GlobalNodeHandler.clickedLabel == null)
                    {
                        if (GlobalNodeHandler.CreateNewNode(mousePos.X, mousePos.Y, true))
                        {
                            CalcPoint CreatePoint;
                            CreatePoint = new CalcPoint(mousePos.X - GlobalNodeHandler.clickedNode.width,
                                                        mousePos.Y - GlobalNodeHandler.clickedNode.height);

                            GlobalNodeHandler.ShowTextBox(CreatePoint, activetext);
                            repaint(this, new EventArgs());
                        }
                    }
                }
                if (dragging)
                {
                    dragging = false;
                    int x = mousePos.X;
                    int y = mousePos.Y;
                    if (selectedGroup.Count != 0)
                    {
                        diffPoints = new List <CalcPoint>();
                    }
                    else if (GlobalNodeHandler.clickedNode != null)
                    {
                        GlobalNodeHandler.clickedNode.SetPosition(mousePos.X, mousePos.Y, true);
                        GlobalNodeHandler.clickedNode.setHovered(false);
                        GlobalNodeHandler.clickedNode = null;
                        repaint(this, new EventArgs());
                    }
                }
                if (transformPoint.X != 0 || transformPoint.Y != 0)
                {
                    transformPoint = new CalcPoint();
                    transformnode.SetScaled(true);
                    transformnode.UpdatePivots();
                    transformnode.UpdateTransformRec();
                    transformnode.updateRepresentation();
                    repaint(this, new EventArgs());
                    transformnode = null;
                }
                if (dragView)
                {
                    dragView = false;
                    repaint(this, new EventArgs());
                }
            }
            else if (GlobalNodeHandler.mouseSelected)
            {
                viewPane_MouseUp(mousObj);
            }
        }
 public static void JumpOut()
 {
     //Resets the GlobalNodeHandler.viewNode to master node
     //System.out.println("Try Jump out of:" + GlobalNodeHandler.viewNode.text);
     //System.out.println("Parent:" + GlobalNodeHandler.viewNode.parent);
     if (GlobalNodeHandler.viewNode.parent != null)
     {
         GlobalNodeHandler.viewNode = GlobalNodeHandler.viewNode.parent;
     }
 }
Esempio n. 10
0
 public void DeleteNode(MindNode node)
 {
     for (int i = childNodes.Count - 1; i >= 0; i--)
     {
         if (node.Equals(childNodes[i]))
         {
             childNodes.RemoveAt(i);
         }
     }
 }
Esempio n. 11
0
 public bool CheckCollision(MindNode childnode)
 {
     for (int i = childNodes.Count - 1; i >= 0; i--)
     {
         if (childnode.collides(childNodes[i]) || childNodes[i].collides(childnode))
         {
             return(true);
         }
     }
     return(false);
 }
 public static void ResetSelected()
 {
     if (clickedNode != null)
     {
         //clickedNode.setHovered(false);
         //clickedNode.setSelected(false);
         clickedNode = null;
     }
     clickedLabel = null;
     rightNode    = null;
 }
Esempio n. 13
0
        public Bridge GetPivotPoints(MindNode node1, MindNode node2)
        {
            Point     directionmdifier1 = (new Bridge(node1.GetCenter(), node2.GetCenter(), this.NodeColor)).PointDirection();
            Point     directionmdifier2 = (new Bridge(node2.GetCenter(), node1.GetCenter(), this.NodeColor)).PointDirection();
            CalcPoint startpoint        = new CalcPoint(node1.GetCenter().X + node1.width * directionmdifier1.X / 2,
                                                        node1.GetCenter().Y + node1.height * directionmdifier1.Y / 2);
            CalcPoint endpoint = new CalcPoint(node2.GetCenter().X + node2.width * directionmdifier2.X / 2,
                                               node2.GetCenter().Y + node2.height * directionmdifier2.Y / 2);

            return(new Bridge(startpoint, endpoint, this.NodeColor));
        }
 public static void ResetSelection()
 {
     if (rightNode != null)
     {
         rightNode.setSelected(false);
     }
     if (clickedNode != null)
     {
         clickedNode.setSelected(false);
     }
     rightNode = null;
 }
Esempio n. 15
0
        public int GetMinMaxSpanX()
        {
            int      spanx = -1;
            MindNode left  = GetMinChildX();
            MindNode right = GetMaxChildX();

            if (left != null && right != null)
            {
                spanx = right.xpos + right.width - left.xpos;
            }

            return(spanx);
        }
Esempio n. 16
0
        public int GetMinMaxSpanY()
        {
            int      spany = -1;
            MindNode up    = GetMinChildY();
            MindNode down  = GetMaxChildY();

            if (up != null && down != null)
            {
                spany = down.ypos + down.height - up.ypos;
            }

            return(spany);
        }
Esempio n. 17
0
        private MindNode GetMinMaxChild(bool isMin, bool isXAxis)
        {
            MindNode minmaxNode = null;

            if (childNodes.Count > 0)
            {
                minmaxNode = childNodes[0];

                for (int i = 1; i < childNodes.Count; i++)
                {
                    if (isXAxis)
                    {
                        if (isMin)
                        {
                            if (minmaxNode.xpos > childNodes[i].xpos)
                            {
                                minmaxNode = childNodes[i];
                            }
                        }
                        else
                        {
                            if (minmaxNode.xpos < childNodes[i].xpos)
                            {
                                minmaxNode = childNodes[i];
                            }
                        }
                    }
                    else
                    {
                        if (isMin)
                        {
                            if (minmaxNode.ypos > childNodes[i].ypos)
                            {
                                minmaxNode = childNodes[i];
                            }
                        }
                        else
                        {
                            if (minmaxNode.ypos < childNodes[i].ypos)
                            {
                                minmaxNode = childNodes[i];
                            }
                        }
                    }
                }
            }

            return(minmaxNode);
        }
Esempio n. 18
0
        public bool AddConnection(MindNode node2)
        {
            if (!this.connNodes.Contains(node2) && !node2.backconnNodes.Contains(this) && !node2.connNodes.Contains(this) && !this.backconnNodes.Contains(node2))
            {
                Bridge b = GetPivotPoints(this, node2);
                b.textNode.UpdateWidth();

                this.connections.Add(b);
                //connNodes could be redundant
                this.connNodes.Add(node2);

                node2.backconnNodes.Add(this);

                return(true);
            }

            return(false);
        }
 public static void JumpInto(MindNode jumpNode)
 {
     if (jumpNode.jumpable)
     {
         if (jumpNode.referenceNode == null)
         {
             GlobalNodeHandler.viewNode = jumpNode;
         }
         else
         {
             GlobalNodeHandler.viewNode = jumpNode.referenceNode;
         }
     }
     if (clickedNode != null)
     {
         GlobalNodeHandler.clickedNode.setHovered(false);
     }
 }
        public static bool CreateNewNode(int x, int y, bool mousepivot)
        {
            MindNode newnode = new MindNode(0, x, y, 40, 40, mousepivot);

            if (viewNode.AddChild(newnode, false))
            {
                newnode.SetNodeScale(zoom);

                newnode.NodeColor = ColorPicker.selectedcolor;

                actionLog.AddAction(new MindNodeAction(0, "CreateNode", newnode));
                typing      = true;
                clickedNode = newnode;

                return(true);
            }
            return(false);
        }
Esempio n. 21
0
 public bool collides(MindNode childnode)
 {
     if (new Rect(xpos, ypos, width, height).Contains(new Point(childnode.xpos, childnode.ypos)))
     {
         return(true);
     }
     if (new Rect(xpos, ypos, width, height).Contains(new Point(childnode.xpos, childnode.ypos + childnode.height)))
     {
         return(true);
     }
     if (new Rect(xpos, ypos, width, height).Contains(new Point(childnode.xpos + childnode.width, childnode.ypos)))
     {
         return(true);
     }
     if (new Rect(xpos, ypos, width, height).Contains(new Point(childnode.xpos + childnode.width, childnode.ypos + childnode.height)))
     {
         return(true);
     }
     return(false);
 }
Esempio n. 22
0
        public void MakeViewPositive(int offset)
        {
            MindNode minx = GetMinChildX();
            MindNode miny = GetMinChildY();

            if (minx != null && miny != null)
            {
                Point moving = new Point(0 - minx.xpos, 0 - miny.ypos);
                if (moving.X > 0)
                {
                    moving.X += offset;
                }
                if (moving.Y > 0)
                {
                    moving.Y += offset;
                }

                this.MoveView(moving, 1.0);
            }
        }
Esempio n. 23
0
        public void RestoreConnections(XContainer noderepresentation)
        {
            XContainer container = noderepresentation.Element("NODE");

            if (container == null)
            {
                container = noderepresentation;
            }

            foreach (XElement xe in container.Element("CONNECTIONSLIST").Descendants("CONNECTION"))
            {
                Color  connColor  = FileManager.GetColorFromHexString(xe.Element("CONNNODECOLOR").Value);
                String connText   = xe.Element("CONNNODETEXT").Value;
                int    connNodeId = -1;
                Int32.TryParse(xe.Element("NODECONNID").Value, out connNodeId);
                MindNode connNode = GlobalNodeHandler.masterNode.GetExistingNode(connNodeId);
                if (connNode != null)
                {
                    this.AddConnection(connNode, connColor, connText);
                }
            }
        }
Esempio n. 24
0
        public async Task RestoreFromClipboard(int posx, int posy)
        {
            DataPackageView dataPackage = Clipboard.GetContent();

            if (dataPackage != null)
            {
                if (dataPackage.Contains(StandardDataFormats.Text))
                {
                    String NodeText = await dataPackage.GetTextAsync();

                    MindNode clipNode = filemanager.RestoreNode(NodeText);
                    //string test = "";
                    if (clipNode.height > 0 && clipNode.width > 0)
                    {
                        clipNode.SetPosition(posx, posy, true);
                        clipNode.updateRepresentation();
                        clipNode.ReIDChilds();
                        GlobalNodeHandler.viewNode.AddChild(clipNode, false);
                        GlobalNodeHandler.actionLog.AddAction(new MindNodeAction(0, "CreateNode", clipNode));
                    }
                }
            }
        }
Esempio n. 25
0
        //Restores the Project from an XContainer Representation
        public void FromRepresentation(XContainer noderepresentation)
        {
            // Creates an Containers of all PROJECT ChildNodes
            XContainer container = noderepresentation.Element("NODE");

            if (container == null)
            {
                container = noderepresentation;
            }

            try
            {
                //System.Diagnostics.Debug.WriteLine(container.ToString());

                Int32.TryParse(container.Element("ID").Value, out this.id);

                double textpos = 0;
                double.TryParse(container.Element("TEXTPOSX").Value, out textpos);
                this.textpos.X = textpos;
                double.TryParse(container.Element("TEXTPOSY").Value, out textpos);
                this.textpos.Y = textpos;

                float fontsize = 0;
                float.TryParse(container.Element("TEXTSIZE").Value, out fontsize);
                this.NodeTextStyle.FontSize = fontsize;

                this.NodeTextStyle.FontFamily = container.Element("TEXTFONT").Value;

                String fontstyle = container.Element("TEXTSTYLE").Value;
                if (fontstyle.Equals("Italic"))
                {
                    this.NodeTextStyle.FontStyle = Windows.UI.Text.FontStyle.Italic;
                }
                else
                {
                    this.NodeTextStyle.FontStyle = Windows.UI.Text.FontStyle.Normal;
                }

                String fontweight = container.Element("TEXTFONT").Value;
                if (fontweight.Equals("Bold"))
                {
                    this.NodeTextStyle.FontWeight = Windows.UI.Text.FontWeights.Bold;
                }
                else
                {
                    this.NodeTextStyle.FontWeight = Windows.UI.Text.FontWeights.Normal;
                }

                this.TextColor = FileManager.GetColorFromHexString(container.Element("TEXTCOLOR").Value);

                this.text = container.Element("NODETEXT").Value;

                String nodestyle = container.Element("NODESTYLE").Value;
                this.NodeDrawingStyle = DrawingStyle.ELLIPSE;
                if ((nodestyle).Equals(DrawingStyle.BUTTON.ToString()))
                {
                    this.NodeDrawingStyle = DrawingStyle.BUTTON;
                }
                if ((nodestyle).Equals(DrawingStyle.CIRCLE.ToString()))
                {
                    this.NodeDrawingStyle = DrawingStyle.CIRCLE;
                }
                if ((nodestyle).Equals(DrawingStyle.ELLIPSEEDGE.ToString()))
                {
                    this.NodeDrawingStyle = DrawingStyle.ELLIPSEEDGE;
                }
                if ((nodestyle).Equals(DrawingStyle.RECTANGLE.ToString()))
                {
                    this.NodeDrawingStyle = DrawingStyle.RECTANGLE;
                }

                this.BorderColor = FileManager.GetColorFromHexString(container.Element("COLORBORDER").Value);
                this.NodeColor   = FileManager.GetColorFromHexString(container.Element("COLORNODE").Value);

                Int32.TryParse(container.Element("NODEBOUNDX").Value, out this.xpos);
                Int32.TryParse(container.Element("NODEBOUNDY").Value, out this.ypos);
                Int32.TryParse(container.Element("NODEBOUNDWIDTH").Value, out this.width);
                Int32.TryParse(container.Element("NODEBOUNDHEIGHT").Value, out this.height);

                Boolean.TryParse(container.Element("ISSCALED").Value, out this.scaled);
                this.SetScaled(this.scaled);

                childNodes.Clear();
                //Restore all child nodes
                foreach (XElement xe in container.Element("CHILDRENLIST").Descendants("NODE"))
                {
                    //if (xe.Parent.Parent.Parent.Name != "PROJECTTEMPLATE")
                    MindNode ch = new MindNode(0, 0, 0, 0, 0, false);
                    ch.FromRepresentation(xe);
                    childNodes.Add(ch);
                    //ch.RestoreConnections(xe);
                }
                this.connNodes.Clear();
                this.connections.Clear();
                // Only Restore Connections after all Nodes were added to Masternode, because otherwise the nodes could not be found
                for (int i = 0; i < this.childNodes.Count; i++)
                {
                    if (i < container.Element("CHILDRENLIST").Descendants("NODE").Count())
                    {
                        this.childNodes[i].RestoreConnections(container.Element("CHILDRENLIST").Descendants("NODE").ElementAt(i));
                    }
                }
            }
            catch (Exception e)
            {
                System.Diagnostics.Debug.WriteLine("There has been an error restoring Project XML file:" + e.Message);
            }
        }
Esempio n. 26
0
        public MindNode RestoreNode(String NodeText)
        {
            MindNode newMasterNode = new MindNode(0, 0, 0, 0, 0, false);

            try
            {
                String[] FileLines    = NodeText.Split('\n');
                MindNode selectedNode = null;

                Stack <MindNode> Selnodes   = new Stack <MindNode>();
                Stack <int>      connIds    = new Stack <int>();
                Stack <Color>    conncolors = new Stack <Color>();
                Stack <String>   connnames  = new Stack <String>();

                bool masterfound = false;

                for (int i = 0; i < FileLines.Length; i++)
                {
                    String[] atts = FileLines[i].Split(':', '/');
                    switch (atts[0])
                    {
                    case "ID":
                        selectedNode = newMasterNode.GetExistingNode(int.Parse(atts[1]));
                        if (selectedNode == null)
                        {
                            selectedNode = new MindNode(0, 0, 0, 0, 0, false);
                        }
                        break;

                    case "TextPos":
                        if (selectedNode != null)
                        {
                            selectedNode.textpos.X = int.Parse(atts[1]);
                            selectedNode.textpos.Y = int.Parse(atts[2]);
                        }
                        break;

                    case "TextFormat":
                        if (selectedNode != null)
                        {
                            CanvasTextFormat newFormat = new CanvasTextFormat();
                            newFormat.FontSize   = int.Parse(atts[1]);
                            newFormat.FontFamily = atts[2];
                            if (atts[3].Equals("Italic"))
                            {
                                newFormat.FontStyle = Windows.UI.Text.FontStyle.Italic;
                            }
                            else
                            {
                                newFormat.FontStyle = Windows.UI.Text.FontStyle.Normal;
                            }
                            if (atts[4].Equals("Bold"))
                            {
                                newFormat.FontWeight = FontWeights.Bold;
                            }
                            else
                            {
                                newFormat.FontWeight = FontWeights.Normal;
                            }

                            selectedNode.SetTextStyle(newFormat);
                            selectedNode.TextColor = GetColorFromHexString(atts[5]);
                        }
                        break;

                    case "Name":
                        if (selectedNode != null)
                        {
                            selectedNode.SetText(atts[1]);
                        }
                        break;

                    case "NodeStyle":
                        if (selectedNode != null)
                        {
                            selectedNode.NodeDrawingStyle = DrawingStyle.ELLIPSE;

                            if ((atts[1]).Equals(DrawingStyle.BUTTON.ToString()))
                            {
                                selectedNode.NodeDrawingStyle = DrawingStyle.BUTTON;
                            }
                            if ((atts[1]).Equals(DrawingStyle.CIRCLE.ToString()))
                            {
                                selectedNode.NodeDrawingStyle = DrawingStyle.CIRCLE;
                            }
                            if ((atts[1]).Equals(DrawingStyle.ELLIPSEEDGE.ToString()))
                            {
                                selectedNode.NodeDrawingStyle = DrawingStyle.ELLIPSEEDGE;
                            }
                            if ((atts[1]).Equals(DrawingStyle.RECTANGLE.ToString()))
                            {
                                selectedNode.NodeDrawingStyle = DrawingStyle.RECTANGLE;
                            }
                        }
                        break;

                    case "Color":
                        if (selectedNode != null)
                        {
                            selectedNode.TextColor   = GetColorFromHexString(atts[1]);
                            selectedNode.BorderColor = GetColorFromHexString(atts[2]);
                            selectedNode.NodeColor   = GetColorFromHexString(atts[3]);
                        }
                        break;

                    case "Bounds":
                        if (selectedNode != null)
                        {
                            selectedNode.width  = int.Parse(atts[3]);
                            selectedNode.height = int.Parse(atts[4]);
                            selectedNode.SetPosition(int.Parse(atts[1]), int.Parse(atts[2]), false);
                        }
                        break;

                    case "Scaled":
                        if (selectedNode != null)
                        {
                            selectedNode.SetScaled(true);
                        }
                        break;

                    case "ConnNodes":
                        for (int c = 1; c < atts.Length; c++)
                        {
                            if (atts[c].Length >= 1)
                            {
                                Selnodes.Push(selectedNode);
                                connIds.Push(int.Parse(atts[c]));
                            }
                        }
                        break;

                    case "ConnColors":
                        for (int c = 1; c < atts.Length; c++)
                        {
                            if (atts[c].Length >= 1)
                            {
                                conncolors.Push(GetColorFromHexString(atts[c]));
                            }
                        }
                        break;

                    case "ConnNames":
                        for (int c = 1; c < atts.Length; c++)
                        {
                            if (atts[c].Length >= 1)
                            {
                                connnames.Push(atts[c]);
                            }
                        }
                        break;

                    case "Childs":
                        for (int c = 1; c < atts.Length; c++)
                        {
                            if (atts[c].Length >= 1)
                            {
                                MindNode newNode = newMasterNode.GetExistingNode(int.Parse(atts[c]));
                                if (newNode == null)
                                {
                                    newNode = new MindNode(int.Parse(atts[c]), 0, 0, 0, 0, false);
                                }
                                selectedNode.AddChild(newNode, true);
                            }
                        }

                        if (!masterfound)
                        {
                            newMasterNode = selectedNode;
                            masterfound   = true;
                        }

                        break;
                    }
                }

                newMasterNode.DeleteAllConnections();

                MindNode m;
                String   connText;
                Color    ncolor;
                while (Selnodes.Count > 0)
                {
                    m        = newMasterNode.GetExistingNode(connIds.Pop());
                    connText = connnames.Pop();
                    ncolor   = conncolors.Pop();
                    MindNode selectednode = Selnodes.Pop();
                    selectednode.AddConnection(m, ncolor, connText);
                    selectednode.UpdateBridgesRepresentation();
                }
            }
            catch (Exception e)
            {
            }
            return(newMasterNode);
        }
Esempio n. 27
0
        public void timer1_Tick(object sender, object e)
        {
            int x = currentViewPanePosition.X;
            int y = currentViewPanePosition.Y;

            tickcnt++;
            if (GlobalNodeHandler.typing)
            {
                FocusText(this, new EventArgs());
            }
            if (tickcnt - MainPage.startcnt > 10 && MainPage.scrolling)
            {
                MainPage.scrollcnt = 0;
                MainPage.scrolling = false;
                GlobalNodeHandler.viewNode.UpdateViewRepresentation();
                repaint(this, new EventArgs());
            }
            if (transformPoint.X != 0)
            {
                transformnode.width = startWidth + transformPoint.X * (x - transformStart.X);

                if (transformnode.width < 10)
                {
                    transformnode.width = 10;
                }
                else if (transformPoint.X == -1)
                {
                    transformnode.xpos = NodeStart.X - (transformStart.X - x);
                }
                repaint(this, new EventArgs());
            }
            if (transformPoint.Y != 0)
            {
                transformnode.height = startHeight + transformPoint.Y * (y - transformStart.Y);
                if (transformnode.height < 10)
                {
                    transformnode.height = 10;
                }
                else if (transformPoint.Y == -1)
                {
                    transformnode.ypos = NodeStart.Y - (transformStart.Y - y);
                }
                repaint(this, new EventArgs());
            }
            if (selectedGroup.Count == 0 && !dragging)
            {
                if (tempNode == null)
                {
                    tempNode = GlobalNodeHandler.viewNode.ContainsChildNode(x, y);
                    if (tempNode != null)
                    {
                        MainPage.status2 += "Hovered over child" + "\n";
                    }
                }
                else
                {
                    if (!hoveractive)
                    {
                        MainPage.status2 += "Hovered is true" + "\n";
                        tempNode.setHovered(true);
                        repaint(this, new EventArgs());
                    }
                    hoveractive = true;
                    if (!tempNode.Contains(x, y))
                    {
                        hoveractive = false;
                        tempNode.setHovered(false);
                        tempNode = null;
                        repaint(this, new EventArgs());
                    }
                }
            }
            else if (dragging)
            {
                if (selectedGroup.Count == 0)
                {
                    GlobalNodeHandler.clickedNode.SetPosition(x, y, true);
                    GlobalNodeHandler.clickedNode.UpdatePivots();
                    GlobalNodeHandler.clickedNode.UpdateBridgesRepresentation();
                    GlobalNodeHandler.clickedNode.UpdateBridgesRepresentationInward();
                    GlobalNodeHandler.clickedNode.setHovered(true);
                }
                else
                {
                    GlobalNodeHandler.clickedNode.SetPosition(x, y, true);
                    GlobalNodeHandler.clickedNode.UpdatePivots();
                    GlobalNodeHandler.clickedNode.setHovered(true);
                    if (selectedGroup.Contains(GlobalNodeHandler.clickedNode))
                    {
                        for (int i = 0; i < diffPoints.Count; i++)
                        {
                            selectedGroup.ElementAt(i).SetPosition(GlobalNodeHandler.clickedNode.xpos + diffPoints.ElementAt(i).X, GlobalNodeHandler.clickedNode.ypos + diffPoints.ElementAt(i).Y, false);
                            selectedGroup.ElementAt(i).UpdatePivots();
                        }
                    }
                    else if (diffPoints.Count != 0)
                    {
                        foreach (MindNode m in selectedGroup)
                        {
                            m.setHovered(false);
                        }
                        selectedGroup = new List <MindNode>();
                        diffPoints    = new List <CalcPoint>();
                    }
                }

                repaint(this, new EventArgs());
            }
            if (dragRec)
            {
                mouseEndPoint = new CalcPoint(x, y);
                if (mouseStartPoint.X < mouseEndPoint.X && mouseStartPoint.Y < mouseEndPoint.Y)
                {
                    selectionRec = new Rect(mouseStartPoint.X, mouseStartPoint.Y, mouseEndPoint.X - mouseStartPoint.X, mouseEndPoint.Y - mouseStartPoint.Y);
                }
                else if (mouseStartPoint.X > mouseEndPoint.X && mouseStartPoint.Y > mouseEndPoint.Y)
                {
                    selectionRec = new Rect(mouseEndPoint.X, mouseEndPoint.Y, mouseStartPoint.X - mouseEndPoint.X, mouseStartPoint.Y - mouseEndPoint.Y);
                }
                else if (mouseStartPoint.X > mouseEndPoint.X && mouseStartPoint.Y < mouseEndPoint.Y)
                {
                    selectionRec = new Rect(mouseEndPoint.X, mouseStartPoint.Y, mouseStartPoint.X - mouseEndPoint.X, mouseEndPoint.Y - mouseStartPoint.Y);
                }
                else if (mouseStartPoint.X < mouseEndPoint.X && mouseStartPoint.Y > mouseEndPoint.Y)
                {
                    selectionRec = new Rect(mouseStartPoint.X, mouseEndPoint.Y, mouseEndPoint.X - mouseStartPoint.X, mouseStartPoint.Y - mouseEndPoint.Y);
                }

                repaint(this, new EventArgs());;
            }
            else if (dragView)
            {
                mouseEndPoint = new CalcPoint(x, y);
                CalcPoint relative = new CalcPoint(mouseStartPoint.X - mouseEndPoint.X, mouseStartPoint.Y - mouseEndPoint.Y);
                mouseStartPoint = mouseEndPoint;

                GlobalNodeHandler.viewNode.MoveViewRelativePix(relative);
                repaint(this, new EventArgs());
            }
        }
Esempio n. 28
0
        public async void viewPane_Pressed(MouseObject mousObj)
        {
            CalcPoint mousePos = mousObj.currentMousePos;

            if (GlobalNodeHandler.TabletSelected)
            {
                if (!GlobalNodeHandler.typing)
                {
                    if (GlobalNodeHandler.pick1.BoxContains(mousePos.ToPoint()))
                    {
                        if (GlobalNodeHandler.pick1.ChangeColorTo(mousePos.ToPoint()))
                        {
                            repaint(this, new EventArgs());
                        }
                    }
                    else
                    {
                        if (GlobalNodeHandler.transforming)
                        {
                            if ((transformnode = GlobalNodeHandler.viewNode.ContainsTRecChild(mousePos.X, mousePos.Y)) != null)
                            {
                                MindNodeAction action = new MindNodeAction(6, "Transform", transformnode);
                                transformStart      = mousePos;
                                startWidth          = transformnode.width;
                                startHeight         = transformnode.height;
                                action.sourceSize.X = startWidth;
                                action.sourceSize.Y = startHeight;
                                action.startpoint.Push(new CalcPoint(transformnode.xpos, transformnode.ypos));
                                dragView = false;

                                NodeStart = new CalcPoint(transformnode.xpos, transformnode.ypos);

                                if (mousePos.X < transformnode.xpos + transformInBorder)
                                {
                                    transformPoint.X = -1;
                                }
                                else if (mousePos.X > transformnode.xpos + transformnode.width - transformInBorder)
                                {
                                    transformPoint.X = 1;
                                }
                                if (mousePos.Y < transformnode.ypos + transformInBorder)
                                {
                                    transformPoint.Y = -1;
                                }
                                else if (mousePos.Y > transformnode.ypos + transformnode.height - transformInBorder)
                                {
                                    transformPoint.Y = 1;
                                }
                                GlobalNodeHandler.actionLog.AddAction(action);
                            }
                        }
                        if (GlobalNodeHandler.connecting)
                        {
                            if (GlobalNodeHandler.clickedNode != null)
                            {
                                GlobalNodeHandler.clickedNode.setSelected(false);
                            }
                        }


                        if ((GlobalNodeHandler.clickedNode = GlobalNodeHandler.viewNode.ContainsChildNode(mousePos.X, mousePos.Y)) == null)
                        {
                            GlobalNodeHandler.clickedLabel = GlobalNodeHandler.viewNode.ContainsChildLabel(mousePos.X, mousePos.Y);
                            GlobalNodeHandler.rightNode    = null;
                            mouseStartPoint = mousePos;
                            if (transformnode == null)
                            {
                                dragView = true;
                            }
                            clickstartcount = tickcnt;

                            if (GlobalNodeHandler.coloring)
                            {
                                if (GlobalNodeHandler.clickedLabel != null)
                                {
                                    GlobalNodeHandler.clickedLabel.NodeColor = ColorPicker.selectedcolor;
                                    GlobalNodeHandler.clickedLabel.updateRepresentation();
                                    repaint(this, new EventArgs());;
                                }
                            }

                            if (GlobalNodeHandler.paste)
                            {
                                await GlobalNodeHandler.settings.RestoreFromClipboard(mousePos.X, mousePos.Y);
                            }
                        }
                        else
                        {
                            if (mousObj.thisButton.Equals(MouseButton.LEFT))
                            {
                                if (GlobalNodeHandler.coloring)
                                {
                                    if (GlobalNodeHandler.clickedNode != null)
                                    {
                                        GlobalNodeHandler.clickedNode.NodeColor = ColorPicker.selectedcolor;
                                        GlobalNodeHandler.clickedNode.updateRepresentation();
                                        repaint(this, new EventArgs());;
                                    }
                                }
                                if (GlobalNodeHandler.jumping)
                                {
                                    GlobalNodeHandler.JumpInto(GlobalNodeHandler.clickedNode);
                                    repaint(this, new EventArgs());
                                }
                                if (GlobalNodeHandler.copy)
                                {
                                    GlobalNodeHandler.settings.CopyToClipboard(GlobalNodeHandler.clickedNode);
                                }
                                else if (GlobalNodeHandler.cut)
                                {
                                    GlobalNodeHandler.settings.CopyToClipboard(GlobalNodeHandler.clickedNode);
                                    GlobalNodeHandler.actionLog.AddAction(new MindNodeAction(1, "DeleteNode", GlobalNodeHandler.clickedNode));
                                    GlobalNodeHandler.clickedNode.DeleteAllConnections();
                                    GlobalNodeHandler.clickedNode.DeleteNode();
                                    repaint(this, new EventArgs());
                                }
                                else if (GlobalNodeHandler.connecting)
                                {
                                    if (GlobalNodeHandler.rightNode == null)
                                    {
                                        GlobalNodeHandler.rightNode = GlobalNodeHandler.clickedNode;
                                        GlobalNodeHandler.rightNode.setSelected(true);
                                    }
                                    else if (!GlobalNodeHandler.clickedNode.Equals(GlobalNodeHandler.rightNode))
                                    {
                                        GlobalNodeHandler.rightNode.setSelected(false);
                                        if (GlobalNodeHandler.rightNode.AddConnection(GlobalNodeHandler.clickedNode))
                                        {
                                            GlobalNodeHandler.actionLog.AddAction(new MindNodeAction(3, "ConnectNodes", GlobalNodeHandler.rightNode, GlobalNodeHandler.clickedNode));
                                        }
                                        GlobalNodeHandler.rightNode.UpdateBridgesRepresentation();
                                        GlobalNodeHandler.clickedNode = null;
                                        GlobalNodeHandler.rightNode   = null;
                                    }
                                    repaint(this, new EventArgs());
                                }
                                else if (GlobalNodeHandler.disconnecting)
                                {
                                    if (GlobalNodeHandler.rightNode == null)
                                    {
                                        GlobalNodeHandler.rightNode = GlobalNodeHandler.clickedNode;
                                        GlobalNodeHandler.rightNode.setSelected(true);
                                    }
                                    else
                                    {
                                        GlobalNodeHandler.rightNode.setSelected(false);

                                        if (GlobalNodeHandler.rightNode.connNodes.Contains(GlobalNodeHandler.clickedNode))
                                        {
                                            GlobalNodeHandler.actionLog.AddAction(new MindNodeAction(4, "DeleteConnections", GlobalNodeHandler.rightNode, GlobalNodeHandler.clickedNode));
                                        }
                                        else
                                        {
                                            GlobalNodeHandler.actionLog.AddAction(new MindNodeAction(4, "DeleteConnections", GlobalNodeHandler.clickedNode, GlobalNodeHandler.rightNode));
                                        }

                                        GlobalNodeHandler.rightNode.DeleteConnection(GlobalNodeHandler.clickedNode);
                                        GlobalNodeHandler.clickedNode.DeleteConnection(GlobalNodeHandler.rightNode);


                                        GlobalNodeHandler.clickedNode = null;
                                        GlobalNodeHandler.rightNode   = null;
                                    }
                                    repaint(this, new EventArgs());
                                }
                                else if (GlobalNodeHandler.deleting)
                                {
                                    MindNodeAction action = new MindNodeAction(3, "DeleteConnections");
                                    action.involvedNodes.Push(GlobalNodeHandler.clickedNode);
                                    foreach (MindNode m in GlobalNodeHandler.clickedNode.connNodes)
                                    {
                                        action.involvedNodes.Push(GlobalNodeHandler.clickedNode);
                                        action.involvedNodes.Push(m);
                                    }
                                    foreach (MindNode m in GlobalNodeHandler.clickedNode.backconnNodes)
                                    {
                                        action.involvedNodes.Push(m);
                                        action.involvedNodes.Push(GlobalNodeHandler.clickedNode);
                                    }
                                    GlobalNodeHandler.actionLog.AddAction(action);

                                    GlobalNodeHandler.clickedNode.DeleteAllConnections();

                                    GlobalNodeHandler.actionLog.AddAction(new MindNodeAction(1, "DeleteNode", GlobalNodeHandler.clickedNode));
                                    GlobalNodeHandler.viewNode.DeleteNode(GlobalNodeHandler.clickedNode);
                                    repaint(this, new EventArgs());
                                }
                                else if (GlobalNodeHandler.moving)
                                {
                                    if (selectedGroup.Count != 0)
                                    {
                                        MindNodeAction moveaction = new MindNodeAction(2, "MoveNodes");
                                        foreach (MindNode m in selectedGroup)
                                        {
                                            diffPoints.Add(new CalcPoint(m.xpos - GlobalNodeHandler.clickedNode.xpos, m.ypos - GlobalNodeHandler.clickedNode.ypos));
                                            moveaction.startpoint.Push(new CalcPoint(m.xpos, m.ypos));
                                            moveaction.involvedNodes.Push(m);
                                        }
                                        GlobalNodeHandler.actionLog.AddAction(moveaction);
                                    }
                                    else
                                    {
                                        MindNodeAction moveaction = new MindNodeAction(2, "MoveNodes", GlobalNodeHandler.clickedNode);
                                        moveaction.startpoint.Push(new CalcPoint(GlobalNodeHandler.clickedNode.xpos, GlobalNodeHandler.clickedNode.ypos));
                                        GlobalNodeHandler.actionLog.AddAction(moveaction);
                                    }
                                    dragging = true;
                                }
                            }
                        }
                        if (GlobalNodeHandler.placelabel)
                        {
                            if (GlobalNodeHandler.clickedNode != null)
                            {
                                activetext.Text = GlobalNodeHandler.clickedNode.text;
                                GlobalNodeHandler.ShowTextBox(mousObj.currentMousePos, activetext);
                                GlobalNodeHandler.actionLog.AddAction(new MindNodeAction(5, "ChangeText", GlobalNodeHandler.clickedNode, GlobalNodeHandler.clickedNode.text));
                                GlobalNodeHandler.typing = true;
                            }
                            else if (GlobalNodeHandler.clickedLabel != null)
                            {
                                activetext.Text = GlobalNodeHandler.clickedLabel.GetText();
                                GlobalNodeHandler.ShowTextBox(mousObj.currentMousePos, activetext);
                                GlobalNodeHandler.actionLog.AddAction(new MindNodeAction(5, "ChangeText", GlobalNodeHandler.clickedLabel, GlobalNodeHandler.clickedLabel.GetText()));
                                GlobalNodeHandler.typing = true;
                            }
                        }
                    }
                }
            }
            else if (GlobalNodeHandler.mouseSelected)
            {
                viewPane_MouseDown(mousObj);
            }
        }
Esempio n. 29
0
        public async Task ReadFile(String path, IStorageFile fiel)
        {
            try
            {
                MindNode newMasterNode = new MindNode(0, 0, 0, 0, 0, false);

                string fullText = await Windows.Storage.FileIO.ReadTextAsync(fiel, Windows.Storage.Streams.UnicodeEncoding.Utf8);

                System.Xml.Linq.XDocument xmlFile = null;
                try
                {
                    xmlFile = System.Xml.Linq.XDocument.Parse(fullText);
                }
                catch (Exception e)
                {
                    System.Diagnostics.Debug.WriteLine("No valid XML File falling back to text parser!");
                }

                if (xmlFile == null)
                {
                    IList <String> text = await Windows.Storage.FileIO.ReadLinesAsync(fiel, Windows.Storage.Streams.UnicodeEncoding.Utf8);

                    String[] FileLines    = text.ToArray();
                    MindNode selectedNode = null;

                    Stack <MindNode> Selnodes   = new Stack <MindNode>();
                    Stack <int>      connIds    = new Stack <int>();
                    Stack <Color>    conncolors = new Stack <Color>();
                    Stack <String>   connnames  = new Stack <String>();

                    for (int i = 0; i < FileLines.Length; i++)
                    {
                        String[] atts = FileLines[i].Split(':', '/');
                        switch (atts[0])
                        {
                        case "ID":
                            selectedNode = newMasterNode.GetExistingNode(int.Parse(atts[1]));
                            break;

                        case "TextPos":
                            if (selectedNode != null)
                            {
                                selectedNode.textpos.X = int.Parse(atts[1]);
                                selectedNode.textpos.Y = int.Parse(atts[2]);
                            }
                            break;

                        case "TextFormat":
                            if (selectedNode != null)
                            {
                                CanvasTextFormat newFormat = new CanvasTextFormat();
                                newFormat.FontSize   = int.Parse(atts[1]);
                                newFormat.FontFamily = atts[2];
                                if (atts[3].Equals("Italic"))
                                {
                                    newFormat.FontStyle = Windows.UI.Text.FontStyle.Italic;
                                }
                                else
                                {
                                    newFormat.FontStyle = Windows.UI.Text.FontStyle.Normal;
                                }
                                if (atts[4].Equals("Bold"))
                                {
                                    newFormat.FontWeight = FontWeights.Bold;
                                }
                                else
                                {
                                    newFormat.FontWeight = FontWeights.Normal;
                                }

                                selectedNode.SetTextStyle(newFormat);
                                selectedNode.TextColor = GetColorFromHexString(atts[5]);
                            }
                            break;

                        case "Name":
                            if (selectedNode != null)
                            {
                                selectedNode.SetText(atts[1]);
                            }
                            break;

                        case "NodeStyle":
                            if (selectedNode != null)
                            {
                                selectedNode.NodeDrawingStyle = DrawingStyle.ELLIPSE;

                                if ((atts[1]).Equals(DrawingStyle.BUTTON.ToString()))
                                {
                                    selectedNode.NodeDrawingStyle = DrawingStyle.BUTTON;
                                }
                                if ((atts[1]).Equals(DrawingStyle.CIRCLE.ToString()))
                                {
                                    selectedNode.NodeDrawingStyle = DrawingStyle.CIRCLE;
                                }
                                if ((atts[1]).Equals(DrawingStyle.ELLIPSEEDGE.ToString()))
                                {
                                    selectedNode.NodeDrawingStyle = DrawingStyle.ELLIPSEEDGE;
                                }
                                if ((atts[1]).Equals(DrawingStyle.RECTANGLE.ToString()))
                                {
                                    selectedNode.NodeDrawingStyle = DrawingStyle.RECTANGLE;
                                }
                            }
                            break;

                        case "Color":
                            if (selectedNode != null)
                            {
                                selectedNode.TextColor   = GetColorFromHexString(atts[1]);
                                selectedNode.BorderColor = GetColorFromHexString(atts[2]);
                                selectedNode.NodeColor   = GetColorFromHexString(atts[3]);
                            }
                            break;

                        case "Bounds":
                            if (selectedNode != null)
                            {
                                selectedNode.width  = int.Parse(atts[3]);
                                selectedNode.height = int.Parse(atts[4]);
                                selectedNode.SetPosition(int.Parse(atts[1]), int.Parse(atts[2]), false);
                            }
                            break;

                        case "Scaled":
                            if (selectedNode != null)
                            {
                                selectedNode.SetScaled(true);
                            }
                            break;

                        case "ConnNodes":
                            for (int c = 1; c < atts.Length; c++)
                            {
                                if (atts[c].Length >= 1)
                                {
                                    Selnodes.Push(selectedNode);
                                    connIds.Push(int.Parse(atts[c]));
                                }
                            }
                            break;

                        case "ConnColors":
                            for (int c = 1; c < atts.Length; c++)
                            {
                                if (atts[c].Length >= 1)
                                {
                                    conncolors.Push(GetColorFromHexString(atts[c]));
                                }
                            }
                            break;

                        case "ConnNames":
                            for (int c = 1; c < atts.Length; c++)
                            {
                                if (atts[c].Length >= 1)
                                {
                                    connnames.Push(atts[c]);
                                }
                            }
                            break;

                        case "Childs":
                            for (int c = 1; c < atts.Length; c++)
                            {
                                if (atts[c].Length >= 1)
                                {
                                    MindNode newNode = newMasterNode.GetExistingNode(int.Parse(atts[c]));
                                    if (newNode == null)
                                    {
                                        newNode = new MindNode(int.Parse(atts[c]), 0, 0, 0, 0, false);
                                    }
                                    selectedNode.AddChild(newNode, true);
                                }
                            }

                            break;
                        }
                    }

                    MindNode m;
                    String   connText;
                    Color    ncolor;
                    while (Selnodes.Count > 0)
                    {
                        m        = newMasterNode.GetExistingNode(connIds.Pop());
                        connText = connnames.Pop();
                        ncolor   = conncolors.Pop();
                        MindNode selectednode = Selnodes.Pop();
                        selectednode.AddConnection(m, ncolor, connText);
                    }
                }

                GlobalNodeHandler.masterNode = newMasterNode;

                if (xmlFile != null)
                {
                    GlobalNodeHandler.masterNode.FromRepresentation(xmlFile);
                }

                GlobalNodeHandler.masterNode.UpdateAllWidths();
            }
            catch
            {
            }
        }
Esempio n. 30
0
        public void UndoLast()
        {
            if (undoactions.Count >= 1)
            {
                MindNodeAction action = undoactions.Last();
                undoactions.Remove(action);
                switch (action.name)
                {
                case "CreateNode":
                    if (action.involvedNodes.Count >= 1)
                    {
                        MindNode createdNode = action.involvedNodes.Pop();
                        redoactions.Add(new MindNodeAction(1, "DeleteNode", createdNode));
                        createdNode.DeleteNode();
                    }
                    break;

                case "DeleteNode":
                    if (action.involvedNodes.Count >= 1)
                    {
                        MindNode deletednode = action.involvedNodes.Pop();
                        redoactions.Add(new MindNodeAction(0, "CreateNode", deletednode));
                        if (deletednode.parent != null)
                        {
                            deletednode.parent.AddChildNoStyle(deletednode, false);
                        }
                        // Refresh Pivot Representation after reinstating node
                        deletednode.UpdatePivots();
                    }
                    break;

                case "MoveNodes":
                    if (action.involvedNodes.Count >= 1)
                    {
                        MindNodeAction newaction = new MindNodeAction(2, "MoveNodes");
                        foreach (MindNode movedNode in action.involvedNodes)
                        {
                            newaction.involvedNodes.Push(movedNode);
                            newaction.startpoint.Push(new CalcPoint(movedNode.xpos, movedNode.ypos));

                            if (action.startpoint.Count > 0)
                            {
                                CalcPoint oldPos = action.startpoint.Pop();

                                movedNode.SetPosition(oldPos.X, oldPos.Y, false);
                            }
                            // Refresh Pivot Representation after moving node
                            movedNode.UpdatePivots();
                        }
                        redoactions.Add(newaction);
                    }
                    break;

                case "ConnectNodes":
                    if (action.involvedNodes.Count >= 2)
                    {
                        MindNodeAction newAction = new MindNodeAction(3, "DeleteConnections");
                        for (int i = 0; i < action.involvedNodes.Count / 2; i++)
                        {
                            MindNode rightnode = action.involvedNodes.Pop();
                            MindNode leftnode  = action.involvedNodes.Pop();

                            newAction.involvedNodes.Push(leftnode);
                            newAction.involvedNodes.Push(rightnode);

                            leftnode.DeleteConnection(rightnode);
                        }
                        redoactions.Add(newAction);
                    }
                    break;

                case "DeleteConnections":
                    if (action.involvedNodes.Count >= 2)
                    {
                        MindNodeAction newAction = new MindNodeAction(3, "ConnectNodes");
                        for (int i = 0; i < action.involvedNodes.Count / 2; i++)
                        {
                            MindNode rightnode = action.involvedNodes.Pop();
                            MindNode leftnode  = action.involvedNodes.Pop();

                            newAction.involvedNodes.Push(leftnode);
                            newAction.involvedNodes.Push(rightnode);

                            leftnode.AddConnection(rightnode);

                            // Refresh Pivot Representation after reinstating connection
                            leftnode.UpdatePivots();
                        }

                        redoactions.Add(newAction);
                    }
                    break;

                case "ChangeText":
                    if (action.involvedNodes.Count >= 1)
                    {
                        MindNodeAction newaction = new MindNodeAction(4, "ChangeText");

                        MindNode changedNode = action.involvedNodes.Pop();
                        newaction.text = changedNode.text;
                        newaction.involvedNodes.Push(changedNode);

                        changedNode.SetText(action.text);

                        redoactions.Add(newaction);
                    }
                    else if (action.involvedLabel != null)
                    {
                        MindNodeAction newaction = new MindNodeAction(4, "ChangeText");

                        NodeLabel changedLabel = action.involvedLabel;
                        newaction.text          = changedLabel.GetText();
                        newaction.involvedLabel = changedLabel;

                        changedLabel.SetText(action.text);

                        redoactions.Add(newaction);
                    }
                    break;

                case "Transform":
                    if (action.involvedNodes.Count >= 1)
                    {
                        MindNodeAction newaction = new MindNodeAction(5, "Transform");

                        MindNode changedNode = action.involvedNodes.Pop();
                        newaction.sourceSize.X = changedNode.width;
                        newaction.sourceSize.Y = changedNode.height;
                        newaction.startpoint.Push(new CalcPoint(changedNode.xpos, changedNode.ypos));
                        newaction.involvedNodes.Push(changedNode);

                        if (action.sourceSize.X != -1)
                        {
                            changedNode.width = action.sourceSize.X;
                            changedNode.SetScaled(false);
                        }
                        if (action.sourceSize.Y != -1)
                        {
                            changedNode.height = action.sourceSize.Y;
                            changedNode.SetScaled(false);
                        }

                        CalcPoint oldPos = action.startpoint.Pop();
                        if (oldPos != null)
                        {
                            changedNode.SetPosition(oldPos.X, oldPos.Y, false);
                        }

                        // Refresh Pivot Representation after resetting transformation
                        changedNode.UpdatePivots();
                        changedNode.updateRepresentation();

                        redoactions.Add(newaction);
                    }
                    break;
                }
            }
        }