From 6e2851fee5288ad85ba32762b41ec47a9a7f8ee3 Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Fri, 1 Jul 2016 08:08:49 +0530 Subject: [PATCH 01/57] Initialised the undo queue in structure.js --- html/js/structure.js | 1 + 1 file changed, 1 insertion(+) diff --git a/html/js/structure.js b/html/js/structure.js index 5c8f4e3..5170b9b 100644 --- a/html/js/structure.js +++ b/html/js/structure.js @@ -93,5 +93,6 @@ var GTE = (function () { DEFAULT_CHANCE_NAME: "chance" }; + GTE.UNDOQUEUE = []; return GTE; }()); From c5910c4109bf182859d402d8c45414d65eccca87 Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Fri, 1 Jul 2016 08:14:41 +0530 Subject: [PATCH 02/57] Initialised Change and Changes class --- html/js/undoredo/Change.js | 19 +++++++++++++++++++ html/js/undoredo/Changes.js | 18 ++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 html/js/undoredo/Change.js create mode 100644 html/js/undoredo/Changes.js diff --git a/html/js/undoredo/Change.js b/html/js/undoredo/Change.js new file mode 100644 index 0000000..aab00a3 --- /dev/null +++ b/html/js/undoredo/Change.js @@ -0,0 +1,19 @@ +GTE.TREE = (function (parentModule) { + "use strict"; + + /** + * Creates a new Change. + * @class + * @param {node} Represents the node that was affected by this change. + */ + function Change(node) { + var node = node; + var from = null; + var to = null; + } + + // Add class to parent module + parentModule.Change = Change; + + return parentModule; +}(GTE.TREE)); // Add to GTE.TREE sub-module diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js new file mode 100644 index 0000000..d4769a8 --- /dev/null +++ b/html/js/undoredo/Changes.js @@ -0,0 +1,18 @@ +GTE.TREE = (function (parentModule) { + "use strict"; + + /** + * Creates a new Changes Object. + * @class + * @param {type} Represents the type of the changes. + */ + function Changes(mode) { + var change = []; + var type = mode || null; + } + + // Add class to parent module + parentModule.Changes = Changes; + + return parentModule; +}(GTE.TREE)); // Add to GTE.TREE sub-module From f4b5c6b2c06d9b80a11d1185b95a11ee5c65750a Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Fri, 1 Jul 2016 08:36:54 +0530 Subject: [PATCH 03/57] Added prototype functions --- html/js/undoredo/Change.js | 32 +++++++++++++++++++++++++++----- html/js/undoredo/Changes.js | 6 +++++- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/html/js/undoredo/Change.js b/html/js/undoredo/Change.js index aab00a3..5ca6eee 100644 --- a/html/js/undoredo/Change.js +++ b/html/js/undoredo/Change.js @@ -6,14 +6,36 @@ GTE.TREE = (function (parentModule) { * @class * @param {node} Represents the node that was affected by this change. */ - function Change(node) { - var node = node; - var from = null; - var to = null; + function Change(node, from, to) { + var node = node || null; + var from = from || null; + var to = to || null; + var mode = mode || null; } + Change.prototype.undo = function() { + switch (this.mode) { + case GTE.MODES.ADD: + + break; + case GTE.MODES.DELETE: + + break; + case GTE.MODES.MERGE: + + break; + case GTE.MODES.DISSOLVE: + + break; + case GTE.MODES.PLAYER_ASSIGNMENT: + + break; + default: + break; + } + }; // Add class to parent module parentModule.Change = Change; return parentModule; -}(GTE.TREE)); // Add to GTE.TREE sub-module +}(GTE.TREE)); // Add to GTE.TREE sub-module \ No newline at end of file diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index d4769a8..05db93e 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -8,9 +8,13 @@ GTE.TREE = (function (parentModule) { */ function Changes(mode) { var change = []; - var type = mode || null; } + Changes.prototype.undo= function() { + for (var i = 0; i Date: Fri, 1 Jul 2016 08:56:17 +0530 Subject: [PATCH 04/57] Added undo feature for GTE.TREE.ADD --- html/js/undoredo/Change.js | 6 +++--- html/js/undoredo/Changes.js | 30 +++++++++++++++++++++++++++--- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/html/js/undoredo/Change.js b/html/js/undoredo/Change.js index 5ca6eee..52d2640 100644 --- a/html/js/undoredo/Change.js +++ b/html/js/undoredo/Change.js @@ -6,17 +6,17 @@ GTE.TREE = (function (parentModule) { * @class * @param {node} Represents the node that was affected by this change. */ - function Change(node, from, to) { + function Change(node, mode, from, to) { var node = node || null; + var mode = mode || null; var from = from || null; var to = to || null; - var mode = mode || null; } Change.prototype.undo = function() { switch (this.mode) { case GTE.MODES.ADD: - + this.node.delete(); break; case GTE.MODES.DELETE: diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index 05db93e..b3dceb6 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -7,14 +7,38 @@ GTE.TREE = (function (parentModule) { * @param {type} Represents the type of the changes. */ function Changes(mode) { - var change = []; + var queue = []; } Changes.prototype.undo= function() { - for (var i = 0; i Date: Fri, 1 Jul 2016 09:28:34 +0530 Subject: [PATCH 05/57] Added undo feature for GTE.TREE.DELETE --- html/js/undoredo/Change.js | 7 ++++++- html/js/undoredo/Changes.js | 10 +++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/html/js/undoredo/Change.js b/html/js/undoredo/Change.js index 52d2640..c0122dc 100644 --- a/html/js/undoredo/Change.js +++ b/html/js/undoredo/Change.js @@ -19,7 +19,12 @@ GTE.TREE = (function (parentModule) { this.node.delete(); break; case GTE.MODES.DELETE: - + this.node.player = this.from.player; + this.node.parent = this.from.parent; + this.node.reachedBy = this.from.reachedBy; + if(this.node.parent != null) { + this.node.parent.children.splice(this.from.index, 0, this.node); + } break; case GTE.MODES.MERGE: diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index b3dceb6..ba5e035 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -23,7 +23,15 @@ GTE.TREE = (function (parentModule) { this.queue.push(change); break; case GTE.MODES.DELETE: - + var newNode = new GTE.TREE.Node(); + newNode.player = node.player; + newNode.parent = node.parent; + newNode.reachedBy = node.reachedBy; + if(node.parent != null) { + newNode.index = node.parent.children.indexOf(node); + } + var change = new GTE.TREE.Change(node, GTE.MODES.DELETE, newNode); + this.queue.push(change, GTE) break; case GTE.MODES.MERGE: From 5ec344b4d83ecbed5be31e7417a25965a1f37d5f Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Fri, 1 Jul 2016 10:58:25 +0530 Subject: [PATCH 06/57] Added more functions for deletion --- html/index.html | 2 ++ html/js/tree/ISet.js | 3 ++- html/js/tree/Node.js | 22 +++++++++++++++++++--- html/js/undoredo/Change.js | 9 +++++---- html/js/undoredo/Changes.js | 11 ++++++++--- 5 files changed, 36 insertions(+), 11 deletions(-) diff --git a/html/index.html b/html/index.html index 7566841..f034f2a 100644 --- a/html/index.html +++ b/html/index.html @@ -103,5 +103,7 @@ + + diff --git a/html/js/tree/ISet.js b/html/js/tree/ISet.js index b05c0e3..68621a9 100644 --- a/html/js/tree/ISet.js +++ b/html/js/tree/ISet.js @@ -287,7 +287,8 @@ GTE.TREE = (function (parentModule) { GTE.tree.addChildISetTo(this); } else { GTE.tree.addChildNodeToISet(this); - }// Tell the tree to redraw itself + } + // Tell the tree to redraw itself GTE.tree.draw(); break; case GTE.MODES.DELETE: diff --git a/html/js/tree/Node.js b/html/js/tree/Node.js index e34bb34..66a7a7d 100644 --- a/html/js/tree/Node.js +++ b/html/js/tree/Node.js @@ -132,7 +132,9 @@ GTE.TREE = (function (parentModule) { /** * Function that defines the behaviour of the node on click */ - Node.prototype.onClick = function () { + Node.prototype.onClick = function (undo) { + if(undo !== false) + undo = undo || true; switch (GTE.MODE) { case GTE.MODES.ADD: // As talked in email "the phases of creating a game tree" @@ -145,28 +147,42 @@ GTE.TREE = (function (parentModule) { // if (this.iset.numberOfNodes > 1) { // this.createSingletonISetWithNode(); // } + changes = new GTE.TREE.Changes(); if (this.iset === null) { if (this.isLeaf()) { // If no children, add two, since one child only doesn't // make sense - GTE.tree.addChildNodeTo(this); + var nodeCur = GTE.tree.addChildNodeTo(this); + if(undo) + changes.addChange(GTE.MODES.ADD, nodeCur); } - GTE.tree.addChildNodeTo(this); + var nodeCur = GTE.tree.addChildNodeTo(this); + if(undo) + changes.addChange(GTE.MODES.ADD, nodeCur); // Tell the tree to redraw itself GTE.tree.draw(); } else { this.iset.onClick(); } + if(undo) + GTE.UNDOQUEUE.push(changes); break; case GTE.MODES.DELETE: if (this.iset === null) { + var changes = new GTE.TREE.Changes(); // If it is a leaf, delete itself, if not, delete all children if (this.isLeaf()) { + if(undo) + changes.addChange(GTE.MODES.DELETE, this); this.delete(); } else { + if(undo) + changes.pushChildrenDeleted(this); GTE.tree.deleteChildrenOf(this); this.deassignPlayer(); } + if(undo) + GTE.UNDOQUEUE.push(changes); // Tell the tree to redraw itself GTE.tree.draw(); } else { diff --git a/html/js/undoredo/Change.js b/html/js/undoredo/Change.js index c0122dc..a78925f 100644 --- a/html/js/undoredo/Change.js +++ b/html/js/undoredo/Change.js @@ -7,10 +7,10 @@ GTE.TREE = (function (parentModule) { * @param {node} Represents the node that was affected by this change. */ function Change(node, mode, from, to) { - var node = node || null; - var mode = mode || null; - var from = from || null; - var to = to || null; + this.node = node || null; + this.mode = mode || null; + this.from = from || null; + this.to = to || null; } Change.prototype.undo = function() { @@ -39,6 +39,7 @@ GTE.TREE = (function (parentModule) { break; } }; + // Add class to parent module parentModule.Change = Change; diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index ba5e035..7b52258 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -7,7 +7,7 @@ GTE.TREE = (function (parentModule) { * @param {type} Represents the type of the changes. */ function Changes(mode) { - var queue = []; + this.queue = []; } Changes.prototype.undo= function() { @@ -31,7 +31,7 @@ GTE.TREE = (function (parentModule) { newNode.index = node.parent.children.indexOf(node); } var change = new GTE.TREE.Change(node, GTE.MODES.DELETE, newNode); - this.queue.push(change, GTE) + this.queue.push(change) break; case GTE.MODES.MERGE: @@ -46,7 +46,12 @@ GTE.TREE = (function (parentModule) { break; } }; - + Changes.prototype.pushChildrenDeleted = function(node) { + for(var i = 0; i Date: Fri, 1 Jul 2016 12:38:38 +0530 Subject: [PATCH 07/57] Added buttns and fixed minor bugs --- html/css/font.css | 3 +++ html/index.html | 6 +++++- html/js/guiutils/Tools.js | 6 ++++++ html/js/main.js | 5 +++++ html/js/tree/Tree.js | 6 +++--- html/js/undoredo/Change.js | 8 ++++++-- html/js/undoredo/Changes.js | 2 +- 7 files changed, 29 insertions(+), 7 deletions(-) diff --git a/html/css/font.css b/html/css/font.css index dfe9888..2038617 100755 --- a/html/css/font.css +++ b/html/css/font.css @@ -59,3 +59,6 @@ .icon-cog:before { content: "\e900"; } +.icon-undo:before { + content: "\f0e2"; + } \ No newline at end of file diff --git a/html/index.html b/html/index.html index f034f2a..8ead488 100644 --- a/html/index.html +++ b/html/index.html @@ -45,6 +45,10 @@
+
    +
  • +
+
@@ -102,7 +106,7 @@ - + diff --git a/html/js/guiutils/Tools.js b/html/js/guiutils/Tools.js index 760e868..ba1ff7f 100644 --- a/html/js/guiutils/Tools.js +++ b/html/js/guiutils/Tools.js @@ -189,6 +189,12 @@ GTE.UI = (function (parentModule) { } }; + Tools.prototype.undo = function() { + if(GTE.UNDOQUEUE.length > 0) { + GTE.UNDOQUEUE.pop().undo(); + } + } + /** * Returns the colour correspondent to a given index. It is used to get the * player colour. Player id would be the same as colourIndex diff --git a/html/js/main.js b/html/js/main.js index 84abc8e..8996a22 100644 --- a/html/js/main.js +++ b/html/js/main.js @@ -115,6 +115,11 @@ return false; }); + document.getElementById("button-undo").addEventListener("click", function(){ + GTE.tools.undo(); + return false; + }); + document.getElementById("button-settings").addEventListener("click", function(){ var el = document.getElementById("settings"); el.style.display = (el.style.display == "block") ? "none" : "block"; diff --git a/html/js/tree/Tree.js b/html/js/tree/Tree.js index 4d4ecff..4297b0c 100644 --- a/html/js/tree/Tree.js +++ b/html/js/tree/Tree.js @@ -645,11 +645,11 @@ GTE.TREE = (function (parentModule) { */ Tree.prototype.recursiveDeleteChildren = function (node) { if (!node.isLeaf()) { - for (var i=0; i < node.children.length; i++) { - this.recursiveDeleteChildren(node.children[i]); + while(node.children.length !== 0) { + this.recursiveDeleteChildren(node.children[0]); } } - node.delete(); + node.delete(); }; /** diff --git a/html/js/undoredo/Change.js b/html/js/undoredo/Change.js index a78925f..39f049f 100644 --- a/html/js/undoredo/Change.js +++ b/html/js/undoredo/Change.js @@ -7,8 +7,8 @@ GTE.TREE = (function (parentModule) { * @param {node} Represents the node that was affected by this change. */ function Change(node, mode, from, to) { - this.node = node || null; - this.mode = mode || null; + this.node = node; + this.mode = mode; this.from = from || null; this.to = to || null; } @@ -17,6 +17,8 @@ GTE.TREE = (function (parentModule) { switch (this.mode) { case GTE.MODES.ADD: this.node.delete(); + GTE.tree.positionsUpdated = false; + GTE.tree.draw(); break; case GTE.MODES.DELETE: this.node.player = this.from.player; @@ -25,6 +27,8 @@ GTE.TREE = (function (parentModule) { if(this.node.parent != null) { this.node.parent.children.splice(this.from.index, 0, this.node); } + GTE.tree.positionsUpdated = false; + GTE.tree.draw(); break; case GTE.MODES.MERGE: diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index 7b52258..738ff1a 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -48,8 +48,8 @@ GTE.TREE = (function (parentModule) { }; Changes.prototype.pushChildrenDeleted = function(node) { for(var i = 0; i Date: Fri, 1 Jul 2016 13:44:13 +0530 Subject: [PATCH 08/57] Added undo feature for GTE.TREE.PLAYER_ASSIGNMENT --- html/js/tree/Node.js | 10 ++++++++-- html/js/undoredo/Change.js | 7 ++++++- html/js/undoredo/Changes.js | 3 ++- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/html/js/tree/Node.js b/html/js/tree/Node.js index 66a7a7d..4799e2a 100644 --- a/html/js/tree/Node.js +++ b/html/js/tree/Node.js @@ -176,8 +176,10 @@ GTE.TREE = (function (parentModule) { changes.addChange(GTE.MODES.DELETE, this); this.delete(); } else { - if(undo) + if(undo) { + changes.addChange(GTE.MODES.PLAYER_ASSIGNMENT, this); changes.pushChildrenDeleted(this); + } GTE.tree.deleteChildrenOf(this); this.deassignPlayer(); } @@ -212,7 +214,11 @@ GTE.TREE = (function (parentModule) { if (this.iset !== null) { this.iset.onClick(); } else { - + if(undo) { + var changes = new GTE.TREE.Changes(); + changes.addChange(GTE.MODES.PLAYER_ASSIGNMENT, this); + GTE.UNDOQUEUE.push(changes); + } GTE.tree.assignSelectedPlayerToNode(this); GTE.tree.draw(); } diff --git a/html/js/undoredo/Change.js b/html/js/undoredo/Change.js index 39f049f..a78685a 100644 --- a/html/js/undoredo/Change.js +++ b/html/js/undoredo/Change.js @@ -37,7 +37,12 @@ GTE.TREE = (function (parentModule) { break; case GTE.MODES.PLAYER_ASSIGNMENT: - + if(this.from) { + this.node.assignPlayer(this.from); + } else { + this.node.deassignPlayer(); + GTE.tree.draw(); + } break; default: break; diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index 738ff1a..16ca690 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -40,7 +40,8 @@ GTE.TREE = (function (parentModule) { break; case GTE.MODES.PLAYER_ASSIGNMENT: - + var change = new GTE.TREE.Change(node, GTE.MODES.PLAYER_ASSIGNMENT, node.player, null); + this.queue.push(change); break; default: break; From d9307050e057e845a723dcf816b911cb149e4afd Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Fri, 1 Jul 2016 14:02:26 +0530 Subject: [PATCH 09/57] Added undo feature for GTE.TREE.ADD of multiaction lines --- html/js/guiutils/MultiAction.js | 12 ++++++++++-- html/js/tree/Node.js | 4 ++++ html/js/undoredo/Change.js | 2 +- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/html/js/guiutils/MultiAction.js b/html/js/guiutils/MultiAction.js index ffad6ed..5e48b60 100644 --- a/html/js/guiutils/MultiAction.js +++ b/html/js/guiutils/MultiAction.js @@ -56,10 +56,14 @@ GTE.TREE = (function(parentModule) { // for the nodes in the line var smallestAndLargest = this.findSmallestAndLargest(); // If S < L, add children to those nodes so that ALL nodes have L children now. + var changes = new GTE.TREE.Changes(); if (smallestAndLargest.smallest < smallestAndLargest.largest) { for (var i = 0; i < this.nodesInLine.length; i++) { while (this.nodesInLine[i].children.length < smallestAndLargest.largest) { - this.nodesInLine[i].onClick(); + var nodesAdded = this.nodesInLine[i].onClick(false); + for(var j = 0; j Date: Fri, 1 Jul 2016 14:34:35 +0530 Subject: [PATCH 10/57] Added function to get all nodes in the subtree of a node --- html/js/tree/Node.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/html/js/tree/Node.js b/html/js/tree/Node.js index deca266..44111be 100644 --- a/html/js/tree/Node.js +++ b/html/js/tree/Node.js @@ -446,6 +446,21 @@ GTE.TREE = (function (parentModule) { return GTE.tree.getPathToRoot(this); }; + Node.prototype.getRecursiveNodesBelowThis = function(node) { + var listOfNodes = []; + for(var i = 0; i Date: Sat, 2 Jul 2016 01:11:27 +0530 Subject: [PATCH 11/57] Added undo feature for GTE.TREE.DELETE of multiaction lines --- html/js/guiutils/MultiAction.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/html/js/guiutils/MultiAction.js b/html/js/guiutils/MultiAction.js index 5e48b60..e43bcae 100644 --- a/html/js/guiutils/MultiAction.js +++ b/html/js/guiutils/MultiAction.js @@ -85,18 +85,27 @@ GTE.TREE = (function(parentModule) { // of the tree (i.e. even if some nodes are leaves already, // do not delete them). otherwise (that is, ALL nodes in the // multiaction line are leaves), delete all these leaves. + var changes = new GTE.TREE.Changes(); var allLeaves = true; for (var k = 0; k < this.nodesInLine.length; k++) { if (this.nodesInLine[k].children.length > 0) { allLeaves = false; - this.nodesInLine[k].onClick(); + if(this.nodesInLine[k].isLeaf()) { + changes.addChange(GTE.MODES.DELETE, this.nodesInLine[k]); + } else { + changes.addChange(GTE.MODES.PLAYER_ASSIGNMENT, this.nodesInLine[k]); + changes.pushChildrenDeleted(this.nodesInLine[k]); + } + this.nodesInLine[k].onClick(false); } } if (allLeaves) { for (k = 0; k < this.nodesInLine.length; k++) { - this.nodesInLine[k].onClick(); + changes.addChange(GTE.MODES.DELETE, this.nodesInLine[k]); + this.nodesInLine[k].onClick(false); } } + GTE.UNDOQUEUE.push(changes); break; case GTE.MODES.PLAYER_ASSIGNMENT: // set all nodes on the multiaction line to belong to the From a51984b261dcf844ebe45355fe921faca8fcf29a Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Sat, 2 Jul 2016 01:15:07 +0530 Subject: [PATCH 12/57] Added undo feature for GTE.TREE.PLAYER_ASSIGNMENT of multiaction lines --- html/js/guiutils/MultiAction.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/html/js/guiutils/MultiAction.js b/html/js/guiutils/MultiAction.js index e43bcae..e4ed573 100644 --- a/html/js/guiutils/MultiAction.js +++ b/html/js/guiutils/MultiAction.js @@ -110,9 +110,12 @@ GTE.TREE = (function(parentModule) { case GTE.MODES.PLAYER_ASSIGNMENT: // set all nodes on the multiaction line to belong to the // current player (which may be chance) + var changes = new GTE.TREE.Changes(); for (var l = 0; l < this.nodesInLine.length; l++) { - this.nodesInLine[l].onClick(); + changes.addChange(GTE.MODES.PLAYER_ASSIGNMENT, this.nodesInLine[l]); + this.nodesInLine[l].onClick(false); } + GTE.UNDOQUEUE.push(changes); break; case GTE.MODES.MERGE: // note that this mode button only works if every node belongs From 1c266ad696f25ee90bb06fb588d7a54ae88caba8 Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Sun, 3 Jul 2016 10:43:28 +0530 Subject: [PATCH 13/57] Started with adding undo functionality to GTE.TREE.MERGE --- html/js/structure.js | 4 ++++ html/js/tree/ISet.js | 3 +++ html/js/tree/Node.js | 2 +- html/js/undoredo/Change.js | 10 ++++++++++ html/js/undoredo/Changes.js | 27 +++++++++++++++++++++++++-- 5 files changed, 43 insertions(+), 3 deletions(-) diff --git a/html/js/structure.js b/html/js/structure.js index 5170b9b..0c76943 100644 --- a/html/js/structure.js +++ b/html/js/structure.js @@ -93,6 +93,10 @@ var GTE = (function () { DEFAULT_CHANCE_NAME: "chance" }; + GTE.UNDO = { + POPSELECTEDQUEUE : 5 + }; + GTE.UNDOQUEUE = []; return GTE; }()); diff --git a/html/js/tree/ISet.js b/html/js/tree/ISet.js index 68621a9..74bf4c5 100644 --- a/html/js/tree/ISet.js +++ b/html/js/tree/ISet.js @@ -321,6 +321,9 @@ GTE.TREE = (function (parentModule) { break; case GTE.MODES.MERGE: if (this.getPlayer().id !== 0) { + var changes = new GTE.TREE.Changes(); + changes.addChange(GTE.MODES.MERGE, null, this); + GTE.UNDOQUEUE.push(changes); this.select(); } break; diff --git a/html/js/tree/Node.js b/html/js/tree/Node.js index 44111be..8f4660f 100644 --- a/html/js/tree/Node.js +++ b/html/js/tree/Node.js @@ -148,8 +148,8 @@ GTE.TREE = (function (parentModule) { // this.createSingletonISetWithNode(); // } changes = new GTE.TREE.Changes(); + var nodes = []; if (this.iset === null) { - var nodes = []; if (this.isLeaf()) { // If no children, add two, since one child only doesn't // make sense diff --git a/html/js/undoredo/Change.js b/html/js/undoredo/Change.js index 34953b2..5cc3676 100644 --- a/html/js/undoredo/Change.js +++ b/html/js/undoredo/Change.js @@ -31,7 +31,13 @@ GTE.TREE = (function (parentModule) { GTE.tree.draw(); break; case GTE.MODES.MERGE: + if(this.selected) { + if (this.node.shape !== null) { + this.node.shape.toggleClass('selected'); + } + } else { + } break; case GTE.MODES.DISSOLVE: @@ -44,6 +50,10 @@ GTE.TREE = (function (parentModule) { } GTE.tree.draw(); break; + case GTE.UNDO.POPSELECTEDQUEUE: + GTE.tree.selected.pop(); + break; + default: break; } diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index 16ca690..116c90f 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -16,7 +16,7 @@ GTE.TREE = (function (parentModule) { } }; - Changes.prototype.addChange= function(mode, node) { + Changes.prototype.addChange= function(mode, node, iset) { switch (mode) { case GTE.MODES.ADD: var change = new GTE.TREE.Change(node, GTE.MODES.ADD); @@ -34,7 +34,27 @@ GTE.TREE = (function (parentModule) { this.queue.push(change) break; case GTE.MODES.MERGE: - + if (GTE.tree.selected.length > 0 ) { + var firstSelected = GTE.tree.selected.pop(); + // There are two selected nodes. Merge + if (this !== firstSelected) { + GTE.tree.merge(firstSelected, this); + } + GTE.tree.draw(); + } else { + if (iset.shape !== null) { + var change = new GTE.TREE.Change(iset, GTE.MODES.MERGE); + change.selected = true; + this.queue.push(change); + } + var nodes = iset.getNodes(); + for (var i = 0; i < nodes.length; i++) { + var change = new GTE.TREE.Change(nodes[i], GTE.MODES.MERGE); + change.selected = true; + this.queue.push(change); + } + this.queue.push(new GTE.TREE.Change(iset, GTE.UNDO.POPSELECTEDQUEUE)) + } break; case GTE.MODES.DISSOLVE: @@ -47,12 +67,15 @@ GTE.TREE = (function (parentModule) { break; } }; + Changes.prototype.pushChildrenDeleted = function(node) { for(var i = 0; i Date: Mon, 4 Jul 2016 06:28:41 +0530 Subject: [PATCH 14/57] Added undo feature to undo initialising isets --- html/js/guiutils/Tools.js | 3 +++ html/js/structure.js | 3 ++- html/js/tree/Tree.js | 28 ++++++++++++++++++++++++++++ html/js/undoredo/Change.js | 4 +++- html/js/undoredo/Changes.js | 3 +++ 5 files changed, 39 insertions(+), 2 deletions(-) diff --git a/html/js/guiutils/Tools.js b/html/js/guiutils/Tools.js index ba1ff7f..f63edfa 100644 --- a/html/js/guiutils/Tools.js +++ b/html/js/guiutils/Tools.js @@ -62,6 +62,9 @@ GTE.UI = (function (parentModule) { // If iset tools have never been chosen if (!this.isetToolsRan) { // Assign singleton isets to each node with no iset + var changes = new GTE.TREE.Changes(); + changes.pushSingletonChange(GTE.UNDO.INITIALIZEISETS); + GTE.UNDOQUEUE.push(changes); GTE.tree.initializeISets(); this.isetToolsRan = true; } diff --git a/html/js/structure.js b/html/js/structure.js index 0c76943..29f0749 100644 --- a/html/js/structure.js +++ b/html/js/structure.js @@ -94,7 +94,8 @@ var GTE = (function () { }; GTE.UNDO = { - POPSELECTEDQUEUE : 5 + POPSELECTEDQUEUE : 5, + INITIALIZEISETS : 6 }; GTE.UNDOQUEUE = []; diff --git a/html/js/tree/Tree.js b/html/js/tree/Tree.js index 4297b0c..58f5fd6 100644 --- a/html/js/tree/Tree.js +++ b/html/js/tree/Tree.js @@ -513,6 +513,17 @@ GTE.TREE = (function (parentModule) { } }; + /** + * Function that deletes payoffs assigned to all players + */ + Tree.prototype.deletePayoffs = function () { + for (var i = 1; i < this.players.length; i++) { + this.players[i].payoffs = []; + } + }; + + + /** * Function that removes a node from the tree * @param {Node} node Node that will be deleted @@ -1021,6 +1032,23 @@ GTE.TREE = (function (parentModule) { this.cleanMemoryAfterISetInitialization(); }; + /** + * Undo things done by initializeISets + */ + Tree.prototype.deinitializeISets = function () { + // Get nodes breadth first + var nodes = this.getAllNodes(true); + for(var i = 0; i Date: Mon, 4 Jul 2016 11:24:14 +0530 Subject: [PATCH 15/57] Added undo feature for GTE.TREE.MERGE --- html/js/structure.js | 3 ++- html/js/tree/ISet.js | 5 ++++- html/js/undoredo/Change.js | 4 +++- html/js/undoredo/Changes.js | 23 ++++++++++++++++------- 4 files changed, 25 insertions(+), 10 deletions(-) diff --git a/html/js/structure.js b/html/js/structure.js index 29f0749..62ce347 100644 --- a/html/js/structure.js +++ b/html/js/structure.js @@ -95,7 +95,8 @@ var GTE = (function () { GTE.UNDO = { POPSELECTEDQUEUE : 5, - INITIALIZEISETS : 6 + INITIALIZEISETS : 6, + POPISET : 7 }; GTE.UNDOQUEUE = []; diff --git a/html/js/tree/ISet.js b/html/js/tree/ISet.js index 74bf4c5..3b16f39 100644 --- a/html/js/tree/ISet.js +++ b/html/js/tree/ISet.js @@ -323,6 +323,10 @@ GTE.TREE = (function (parentModule) { if (this.getPlayer().id !== 0) { var changes = new GTE.TREE.Changes(); changes.addChange(GTE.MODES.MERGE, null, this); + if(GTE.tree.selected.length != 0) { + changes.select = true; + changes.iset = GTE.tree.selected[0]; + } GTE.UNDOQUEUE.push(changes); this.select(); } @@ -366,7 +370,6 @@ GTE.TREE = (function (parentModule) { this.removeNode(nodes[i]); } } else { // If there are no nodes - this.moves = []; //remove references to moves GTE.tree.deleteISetFromList(this); } }; diff --git a/html/js/undoredo/Change.js b/html/js/undoredo/Change.js index 3a02bc5..3c81c88 100644 --- a/html/js/undoredo/Change.js +++ b/html/js/undoredo/Change.js @@ -36,7 +36,7 @@ GTE.TREE = (function (parentModule) { this.node.shape.toggleClass('selected'); } } else { - + this.node.changeISet(this.from); } break; case GTE.MODES.DISSOLVE: @@ -56,6 +56,8 @@ GTE.TREE = (function (parentModule) { case GTE.UNDO.INITIALIZEISETS: GTE.tree.deinitializeISets(); break; + case GTE.UNDO.POPISET: + GTE.tree.isets.splice(this.index, 0, this.node); default: break; } diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index 294427f..c71ff95 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -6,14 +6,19 @@ GTE.TREE = (function (parentModule) { * @class * @param {type} Represents the type of the changes. */ - function Changes(mode) { + function Changes(mode, select ) { this.queue = []; + this.select = select || null; } Changes.prototype.undo= function() { for (var i = 0; i 0 ) { - var firstSelected = GTE.tree.selected.pop(); - // There are two selected nodes. Merge - if (this !== firstSelected) { - GTE.tree.merge(firstSelected, this); + var selectedIset = GTE.tree.selected[0]; + var nodesInA = selectedIset.getNodes(); + var change = new GTE.TREE.Change(selectedIset, GTE.UNDO.POPISET); + change.index = GTE.tree.isets.indexOf(selectedIset); + this.queue.push(change); + for (var i = 0; i < nodesInA.length; i++) { + var change = new GTE.TREE.Change(nodesInA[i], GTE.MODES.MERGE, selectedIset); + change.from = selectedIset; + this.queue.push(change); } - GTE.tree.draw(); } else { if (iset.shape !== null) { var change = new GTE.TREE.Change(iset, GTE.MODES.MERGE); From ccb0f45e4ec095bf3a1d984acaba6ee2ece25411 Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Wed, 6 Jul 2016 07:18:32 +0530 Subject: [PATCH 16/57] Added undo feature for merging using multiaction lines --- html/js/guiutils/MultiAction.js | 5 +++++ html/js/structure.js | 3 ++- html/js/tree/ISet.js | 4 ++++ html/js/undoredo/Change.js | 2 ++ html/js/undoredo/Changes.js | 20 ++++++++++++++++---- 5 files changed, 29 insertions(+), 5 deletions(-) diff --git a/html/js/guiutils/MultiAction.js b/html/js/guiutils/MultiAction.js index e4ed573..cd7a53b 100644 --- a/html/js/guiutils/MultiAction.js +++ b/html/js/guiutils/MultiAction.js @@ -131,15 +131,20 @@ GTE.TREE = (function(parentModule) { var playerInLoop = null; var numberOfChildrenInLoop = -1; var isetInLoop = null; + var changes = new GTE.TREE.Changes(); for (var m = 0; m < this.nodesInLine.length; m++) { if (playerInLoop === this.nodesInLine[m].player && numberOfChildrenInLoop === this.nodesInLine[m].children.length) { + changes.pushMultiactionMerge(isetInLoop, this.nodesInLine[m].iset); isetInLoop = GTE.tree.merge(isetInLoop, this.nodesInLine[m].iset); } isetInLoop = this.nodesInLine[m].iset; numberOfChildrenInLoop = this.nodesInLine[m].children.length; playerInLoop = this.nodesInLine[m].player; } + if(changes.queue.length >= 0) { + GTE.UNDOQUEUE.push(changes); + } GTE.tree.draw(); break; } diff --git a/html/js/structure.js b/html/js/structure.js index 62ce347..7aea7b7 100644 --- a/html/js/structure.js +++ b/html/js/structure.js @@ -96,7 +96,8 @@ var GTE = (function () { GTE.UNDO = { POPSELECTEDQUEUE : 5, INITIALIZEISETS : 6, - POPISET : 7 + POPISET : 7, + ASSIGNMOVES : 8 }; GTE.UNDOQUEUE = []; diff --git a/html/js/tree/ISet.js b/html/js/tree/ISet.js index 3b16f39..da35178 100644 --- a/html/js/tree/ISet.js +++ b/html/js/tree/ISet.js @@ -311,9 +311,13 @@ GTE.TREE = (function (parentModule) { case GTE.MODES.PLAYER_ASSIGNMENT: // Change the player of every node in the iset var nodes = this.getNodes(); + var changes = new GTE.TREE.Changes(); for (var j = 0; j < nodes.length; j++) { + changes.addChange(GTE.MODES.PLAYER_ASSIGNMENT, nodes[j]); GTE.tree.assignSelectedPlayerToNode(nodes[j]); } + changes.pushSingletonChange(GTE.UNDO.ASSIGNMOVES, this); + GTE.UNDOQUEUE.push(changes); // Reassign moves (create new moves and assign them to the // children nodes as reachedBy) this.reassignMoves(); diff --git a/html/js/undoredo/Change.js b/html/js/undoredo/Change.js index 3c81c88..77605ab 100644 --- a/html/js/undoredo/Change.js +++ b/html/js/undoredo/Change.js @@ -58,6 +58,8 @@ GTE.TREE = (function (parentModule) { break; case GTE.UNDO.POPISET: GTE.tree.isets.splice(this.index, 0, this.node); + case GTE.UNDO.ASSIGNMOVES: + this.node.reassignMoves(); default: break; } diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index c71ff95..61c743e 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -12,8 +12,8 @@ GTE.TREE = (function (parentModule) { } Changes.prototype.undo= function() { - for (var i = 0; i Date: Wed, 6 Jul 2016 16:48:37 +0530 Subject: [PATCH 17/57] Added undo feature for deletion of isets --- html/js/tree/ISet.js | 5 +++++ html/js/undoredo/Change.js | 9 ++++++--- html/js/undoredo/Changes.js | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 3 deletions(-) diff --git a/html/js/tree/ISet.js b/html/js/tree/ISet.js index da35178..a289103 100644 --- a/html/js/tree/ISet.js +++ b/html/js/tree/ISet.js @@ -293,11 +293,15 @@ GTE.TREE = (function (parentModule) { break; case GTE.MODES.DELETE: var children = this.getChildrenNodes(); + var changes = new GTE.TREE.Changes(); if (children.length === 0) { // Delete node + changes.addChange(GTE.MODES.DELETE, this.firstNode); + changes.pushRemovedIset(this); GTE.tree.deleteNode(this.firstNode); } else { // Delete all children + changes.assignChangesOnDeletingIset(this); for (var i = 0; i < children.length; i++) { // deleteNode() will delete everything below as well GTE.tree.deleteNode(children[i]); @@ -305,6 +309,7 @@ GTE.TREE = (function (parentModule) { // Dissolve current iset this.dissolve(); } + GTE.UNDOQUEUE.push(changes); // Tell the tree to redraw itself GTE.tree.draw(); break; diff --git a/html/js/undoredo/Change.js b/html/js/undoredo/Change.js index 77605ab..68edb44 100644 --- a/html/js/undoredo/Change.js +++ b/html/js/undoredo/Change.js @@ -24,11 +24,13 @@ GTE.TREE = (function (parentModule) { this.node.player = this.from.player; this.node.parent = this.from.parent; this.node.reachedBy = this.from.reachedBy; - if(this.node.parent != null) { + if(this.node.parent !== null) { this.node.parent.children.splice(this.from.index, 0, this.node); } + if(this.from.iset !== null) { + this.from.iset.addNode(this.node); + } GTE.tree.positionsUpdated = false; - GTE.tree.draw(); break; case GTE.MODES.MERGE: if(this.selected) { @@ -57,7 +59,8 @@ GTE.TREE = (function (parentModule) { GTE.tree.deinitializeISets(); break; case GTE.UNDO.POPISET: - GTE.tree.isets.splice(this.index, 0, this.node); + if(GTE.tree.isets.indexOf(this.node) == -1) + GTE.tree.isets.splice(this.index, 0, this.node); case GTE.UNDO.ASSIGNMOVES: this.node.reassignMoves(); default: diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index 61c743e..a58f264 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -32,6 +32,9 @@ GTE.TREE = (function (parentModule) { newNode.player = node.player; newNode.parent = node.parent; newNode.reachedBy = node.reachedBy; + if(node.iset !== null) { + newNode.iset = node.iset; + } if(node.parent != null) { newNode.index = node.parent.children.indexOf(node); } @@ -100,6 +103,40 @@ GTE.TREE = (function (parentModule) { this.queue.push(change); } } + + Changes.prototype.pushSingleNodeWithRemovedIset = function(node) { + var change = new GTE.TREE.Change(node, GTE.MODES.MERGE, node.iset); + change.from = node.iset; + this.queue.push(change); + } + + Changes.prototype.pushRemovedIset = function(iset) { + var change = new GTE.TREE.Change(iset, GTE.UNDO.POPISET); + change.index = GTE.tree.isets.indexOf(iset); + this.queue.push(change); + } + + Changes.prototype.assignChangesOnDeletingIset = function(iset) { + var children = iset.getChildrenNodes(); + for(var i = 0; i Date: Fri, 8 Jul 2016 11:24:56 +0530 Subject: [PATCH 18/57] Fixed minor rreference bug --- html/js/undoredo/Changes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index a58f264..ca32b82 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -132,7 +132,7 @@ GTE.TREE = (function (parentModule) { Changes.prototype.assignChangesOnDeletingIsetToNode = function(node) { for(var i = 0; i Date: Fri, 8 Jul 2016 16:35:58 +0530 Subject: [PATCH 19/57] Added functions to implement deletion of isets --- html/js/structure.js | 4 +++- html/js/tree/ISet.js | 3 +-- html/js/undoredo/Change.js | 14 +++++++++++--- html/js/undoredo/Changes.js | 31 +++++++++++++++++++++++++++++++ 4 files changed, 46 insertions(+), 6 deletions(-) diff --git a/html/js/structure.js b/html/js/structure.js index 7aea7b7..a15b90b 100644 --- a/html/js/structure.js +++ b/html/js/structure.js @@ -97,7 +97,9 @@ var GTE = (function () { POPSELECTEDQUEUE : 5, INITIALIZEISETS : 6, POPISET : 7, - ASSIGNMOVES : 8 + ASSIGNMOVES : 8, + POPMOVES : 9, + ASSIGNISET : 10 }; GTE.UNDOQUEUE = []; diff --git a/html/js/tree/ISet.js b/html/js/tree/ISet.js index a289103..0e0e49d 100644 --- a/html/js/tree/ISet.js +++ b/html/js/tree/ISet.js @@ -296,8 +296,7 @@ GTE.TREE = (function (parentModule) { var changes = new GTE.TREE.Changes(); if (children.length === 0) { // Delete node - changes.addChange(GTE.MODES.DELETE, this.firstNode); - changes.pushRemovedIset(this); + changes.assignSingletonIsetDeletion(this); GTE.tree.deleteNode(this.firstNode); } else { // Delete all children diff --git a/html/js/undoredo/Change.js b/html/js/undoredo/Change.js index 68edb44..127c224 100644 --- a/html/js/undoredo/Change.js +++ b/html/js/undoredo/Change.js @@ -24,12 +24,10 @@ GTE.TREE = (function (parentModule) { this.node.player = this.from.player; this.node.parent = this.from.parent; this.node.reachedBy = this.from.reachedBy; + this.node.deleted = false; if(this.node.parent !== null) { this.node.parent.children.splice(this.from.index, 0, this.node); } - if(this.from.iset !== null) { - this.from.iset.addNode(this.node); - } GTE.tree.positionsUpdated = false; break; case GTE.MODES.MERGE: @@ -61,8 +59,18 @@ GTE.TREE = (function (parentModule) { case GTE.UNDO.POPISET: if(GTE.tree.isets.indexOf(this.node) == -1) GTE.tree.isets.splice(this.index, 0, this.node); + break; case GTE.UNDO.ASSIGNMOVES: this.node.reassignMoves(); + break; + case GTE.UNDO.POPMOVES: + if(this.node.moves.indexOf(this.move) == -1) { + this.node.moves.splice(this.index, 0, this.move); + } + break; + case GTE.UNDO.ASSIGNISET: + this.from.addNode(this.node); + break; default: break; } diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index ca32b82..c97f084 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -118,6 +118,9 @@ GTE.TREE = (function (parentModule) { Changes.prototype.assignChangesOnDeletingIset = function(iset) { var children = iset.getChildrenNodes(); + for(var i = 0; i=0 ; i--) { + var change = new GTE.TREE.Change(iset, GTE.UNDO.POPMOVES); + change.index = i; + change.move = iset.moves[i]; + this.queue.push(change); + } + } + + Changes.prototype.assignSingletonIsetDeletion = function(iset) { + this.queue.push(new GTE.TREE.Change(iset.firstNode, GTE.UNDO.ASSIGNISET, iset.firstNode.iset)); + this.pushRemovedIset(iset); + this.assignMovesOnDeletingIset(iset.firstNode.parent.iset); + this.addChange(GTE.MODES.PLAYER_ASSIGNMENT, iset.firstNode.parent); + this.addChange(GTE.MODES.DELETE, iset.firstNode); + } // Add class to parent module parentModule.Changes = Changes; From af4de7dbfda1904d17a581e769e2efb46bf4729e Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Sat, 9 Jul 2016 15:16:29 +0530 Subject: [PATCH 20/57] Added undo feature to dissolving isets --- html/js/tree/ISet.js | 3 +++ html/js/undoredo/Change.js | 7 ++++++- html/js/undoredo/Changes.js | 9 +++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/html/js/tree/ISet.js b/html/js/tree/ISet.js index 0e0e49d..bb3facb 100644 --- a/html/js/tree/ISet.js +++ b/html/js/tree/ISet.js @@ -340,7 +340,10 @@ GTE.TREE = (function (parentModule) { } break; case GTE.MODES.DISSOLVE: + var changes = new GTE.TREE.Changes(); + changes.pushChangesBeforeDisolving(this); this.dissolve(); + GTE.UNDOQUEUE.push(changes); GTE.tree.draw(); break; default: diff --git a/html/js/undoredo/Change.js b/html/js/undoredo/Change.js index 127c224..14f68fd 100644 --- a/html/js/undoredo/Change.js +++ b/html/js/undoredo/Change.js @@ -69,7 +69,12 @@ GTE.TREE = (function (parentModule) { } break; case GTE.UNDO.ASSIGNISET: - this.from.addNode(this.node); + if(this.to) { + this.node.changeISet(this.from); + } + else if(this.from != null) { + this.from.addNode(this.node); + } break; default: break; diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index c97f084..6f2490b 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -168,6 +168,15 @@ GTE.TREE = (function (parentModule) { this.addChange(GTE.MODES.PLAYER_ASSIGNMENT, iset.firstNode.parent); this.addChange(GTE.MODES.DELETE, iset.firstNode); } + + Changes.prototype.pushChangesBeforeDisolving = function(iset) { + var nodes = iset.getNodes(); + for(var i = 0; i Date: Sun, 10 Jul 2016 14:57:30 +0530 Subject: [PATCH 21/57] Added undo feature to GTE.TREE.ADD after assigning isets --- html/js/structure.js | 3 ++- html/js/tree/ISet.js | 12 +++++++++--- html/js/tree/Tree.js | 6 +++++- html/js/undoredo/Change.js | 3 +++ html/js/undoredo/Changes.js | 10 ++++++++++ 5 files changed, 29 insertions(+), 5 deletions(-) diff --git a/html/js/structure.js b/html/js/structure.js index a15b90b..281eb81 100644 --- a/html/js/structure.js +++ b/html/js/structure.js @@ -99,7 +99,8 @@ var GTE = (function () { POPISET : 7, ASSIGNMOVES : 8, POPMOVES : 9, - ASSIGNISET : 10 + ASSIGNISET : 10, + ADDISET : 11 }; GTE.UNDOQUEUE = []; diff --git a/html/js/tree/ISet.js b/html/js/tree/ISet.js index bb3facb..3400e29 100644 --- a/html/js/tree/ISet.js +++ b/html/js/tree/ISet.js @@ -280,14 +280,20 @@ GTE.TREE = (function (parentModule) { ISet.prototype.onClick = function () { switch (GTE.MODE) { case GTE.MODES.ADD: + var changes = new GTE.TREE.Changes(); + changes.pushChangesBeforeDisolving(this); if (this.numberOfMoves() === 0) { // If no children, add two, since one child only doesn't // make sense - GTE.tree.addChildISetTo(this); - GTE.tree.addChildISetTo(this); + var iset = GTE.tree.addChildISetTo(this); + changes.pushChangesAfterAddingIsets(iset); + var iset = GTE.tree.addChildISetTo(this); + changes.pushChangesAfterAddingIsets(iset); } else { - GTE.tree.addChildNodeToISet(this); + var isets = GTE.tree.addChildNodeToISet(this); + changes.pushChangesAfterAddingIsetsToArray(isets); } + GTE.UNDOQUEUE.push(changes); // Tell the tree to redraw itself GTE.tree.draw(); break; diff --git a/html/js/tree/Tree.js b/html/js/tree/Tree.js index 58f5fd6..d596ab0 100644 --- a/html/js/tree/Tree.js +++ b/html/js/tree/Tree.js @@ -614,6 +614,7 @@ GTE.TREE = (function (parentModule) { } parentISet.addChildISet(newISet); this.positionsUpdated = false; + return newISet; }; /** @@ -629,10 +630,13 @@ GTE.TREE = (function (parentModule) { var nodesInParentISet = parentISet.getNodes(); // Iterate over the nodes in the parent and create a child node // for each of them. This new node will be connected by the new move + var isets = []; for (var i = 0; i < nodesInParentISet.length; i++) { - this.addNewISet().addNewNode(nodesInParentISet[i], null, newMove); + var node = this.addNewISet().addNewNode(nodesInParentISet[i], null, newMove); + isets.push(node.iset); } this.positionsUpdated = false; + return isets; }; /** diff --git a/html/js/undoredo/Change.js b/html/js/undoredo/Change.js index 14f68fd..0acdc3e 100644 --- a/html/js/undoredo/Change.js +++ b/html/js/undoredo/Change.js @@ -76,6 +76,9 @@ GTE.TREE = (function (parentModule) { this.from.addNode(this.node); } break; + case GTE.UNDO.ADDISET: + GTE.tree.deleteNode(this.node.firstNode); + break; default: break; } diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index 6f2490b..b546a5f 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -177,6 +177,16 @@ GTE.TREE = (function (parentModule) { this.assignMovesOnDeletingIset(iset); this.pushRemovedIset(iset); } + + Changes.prototype.pushChangesAfterAddingIsets = function(iset) { + this.queue.push(new GTE.TREE.Change(iset, GTE.UNDO.ADDISET)); + } + Changes.prototype.pushChangesAfterAddingIsetsToArray = function(isets) { + for(var i = 0; i Date: Sun, 10 Jul 2016 15:30:27 +0530 Subject: [PATCH 22/57] Fixed minor bugs in previous commit --- html/js/tree/ISet.js | 4 ++-- html/js/tree/Node.js | 4 ++-- html/js/undoredo/Changes.js | 1 + 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/html/js/tree/ISet.js b/html/js/tree/ISet.js index 3400e29..d99cea2 100644 --- a/html/js/tree/ISet.js +++ b/html/js/tree/ISet.js @@ -281,7 +281,6 @@ GTE.TREE = (function (parentModule) { switch (GTE.MODE) { case GTE.MODES.ADD: var changes = new GTE.TREE.Changes(); - changes.pushChangesBeforeDisolving(this); if (this.numberOfMoves() === 0) { // If no children, add two, since one child only doesn't // make sense @@ -290,6 +289,8 @@ GTE.TREE = (function (parentModule) { var iset = GTE.tree.addChildISetTo(this); changes.pushChangesAfterAddingIsets(iset); } else { + if(this.getNodes().length > 1) + changes.pushChangesBeforeDisolving(this); var isets = GTE.tree.addChildNodeToISet(this); changes.pushChangesAfterAddingIsetsToArray(isets); } @@ -355,7 +356,6 @@ GTE.TREE = (function (parentModule) { default: break; } - }; /** diff --git a/html/js/tree/Node.js b/html/js/tree/Node.js index 8f4660f..db3d57e 100644 --- a/html/js/tree/Node.js +++ b/html/js/tree/Node.js @@ -164,11 +164,11 @@ GTE.TREE = (function (parentModule) { changes.addChange(GTE.MODES.ADD, nodeCur); // Tell the tree to redraw itself GTE.tree.draw(); + if(undo) + GTE.UNDOQUEUE.push(changes); } else { this.iset.onClick(); } - if(undo) - GTE.UNDOQUEUE.push(changes); return nodes; break; case GTE.MODES.DELETE: diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index b546a5f..b29a095 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -181,6 +181,7 @@ GTE.TREE = (function (parentModule) { Changes.prototype.pushChangesAfterAddingIsets = function(iset) { this.queue.push(new GTE.TREE.Change(iset, GTE.UNDO.ADDISET)); } + Changes.prototype.pushChangesAfterAddingIsetsToArray = function(isets) { for(var i = 0; i Date: Sun, 10 Jul 2016 15:49:12 +0530 Subject: [PATCH 23/57] Fixed typo and bug in dissolving isets --- html/js/tree/ISet.js | 7 +++---- html/js/undoredo/Changes.js | 4 +++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/html/js/tree/ISet.js b/html/js/tree/ISet.js index d99cea2..6dbf675 100644 --- a/html/js/tree/ISet.js +++ b/html/js/tree/ISet.js @@ -289,8 +289,7 @@ GTE.TREE = (function (parentModule) { var iset = GTE.tree.addChildISetTo(this); changes.pushChangesAfterAddingIsets(iset); } else { - if(this.getNodes().length > 1) - changes.pushChangesBeforeDisolving(this); + changes.pushChangesBeforeDissolving(this); var isets = GTE.tree.addChildNodeToISet(this); changes.pushChangesAfterAddingIsetsToArray(isets); } @@ -348,9 +347,9 @@ GTE.TREE = (function (parentModule) { break; case GTE.MODES.DISSOLVE: var changes = new GTE.TREE.Changes(); - changes.pushChangesBeforeDisolving(this); + if(changes.pushChangesBeforeDissolving(this)) + GTE.UNDOQUEUE.push(changes); this.dissolve(); - GTE.UNDOQUEUE.push(changes); GTE.tree.draw(); break; default: diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index b29a095..1a0ae7a 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -169,8 +169,10 @@ GTE.TREE = (function (parentModule) { this.addChange(GTE.MODES.DELETE, iset.firstNode); } - Changes.prototype.pushChangesBeforeDisolving = function(iset) { + Changes.prototype.pushChangesBeforeDissolving = function(iset) { var nodes = iset.getNodes(); + if(nodes.length <= 1) + return false; for(var i = 0; i Date: Sun, 17 Jul 2016 14:09:22 +0530 Subject: [PATCH 24/57] Added the redo queue --- html/js/structure.js | 1 + 1 file changed, 1 insertion(+) diff --git a/html/js/structure.js b/html/js/structure.js index 281eb81..76caac2 100644 --- a/html/js/structure.js +++ b/html/js/structure.js @@ -104,5 +104,6 @@ var GTE = (function () { }; GTE.UNDOQUEUE = []; + GTE.REDOQUEUE = []; return GTE; }()); From 9c09c2b323564f6dc45ccc44890debeba05ef9d2 Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Sun, 17 Jul 2016 14:12:56 +0530 Subject: [PATCH 25/57] Initialised Event.js --- html/js/undoredo/Event.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 html/js/undoredo/Event.js diff --git a/html/js/undoredo/Event.js b/html/js/undoredo/Event.js new file mode 100644 index 0000000..dfa0d6d --- /dev/null +++ b/html/js/undoredo/Event.js @@ -0,0 +1,16 @@ +GTE.TREE = (function (parentModule) { + "use strict"; + + /** + * Creates a new Event. + * @class + */ + function Event(unit) { + this.unit = unit; + } + + // Add class to parent module + parentModule.Event = Event; + + return parentModule; +}(GTE.TREE)); // Add to GTE.TREE sub-module \ No newline at end of file From 1b4b24b53ddf6399fbbb572d9e1df9c9df52c1a4 Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Sun, 17 Jul 2016 14:14:32 +0530 Subject: [PATCH 26/57] Added redo function --- html/js/undoredo/Event.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/html/js/undoredo/Event.js b/html/js/undoredo/Event.js index dfa0d6d..92e98f2 100644 --- a/html/js/undoredo/Event.js +++ b/html/js/undoredo/Event.js @@ -9,6 +9,13 @@ GTE.TREE = (function (parentModule) { this.unit = unit; } + + Event.prototype.redo = function() { + this.unit.onClick(); + }; + + + // Add class to parent module parentModule.Event = Event; From bc29c3b633adc2a4e6df713204ad586280450d3c Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Sun, 17 Jul 2016 14:21:22 +0530 Subject: [PATCH 27/57] Added redo button to the front end --- html/css/font.css | 3 +++ html/index.html | 2 +- html/js/undoredo/Event.js | 2 -- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/html/css/font.css b/html/css/font.css index 2038617..917bc75 100755 --- a/html/css/font.css +++ b/html/css/font.css @@ -61,4 +61,7 @@ } .icon-undo:before { content: "\f0e2"; + } + .icon-redo:before { + content: "\f064"; } \ No newline at end of file diff --git a/html/index.html b/html/index.html index 8ead488..cdbd432 100644 --- a/html/index.html +++ b/html/index.html @@ -47,8 +47,8 @@
  • +
-
diff --git a/html/js/undoredo/Event.js b/html/js/undoredo/Event.js index 92e98f2..f80a936 100644 --- a/html/js/undoredo/Event.js +++ b/html/js/undoredo/Event.js @@ -14,8 +14,6 @@ GTE.TREE = (function (parentModule) { this.unit.onClick(); }; - - // Add class to parent module parentModule.Event = Event; From eb4232ff01a796ec71f2398cd52cbd591e9e4db1 Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Mon, 18 Jul 2016 09:37:57 +0530 Subject: [PATCH 28/57] Added event listener to redo button --- html/index.html | 3 ++- html/js/guiutils/Tools.js | 4 ++++ html/js/main.js | 7 ++++++- html/js/undoredo/Changes.js | 3 ++- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/html/index.html b/html/index.html index cdbd432..1b4775e 100644 --- a/html/index.html +++ b/html/index.html @@ -106,8 +106,9 @@ - + + diff --git a/html/js/guiutils/Tools.js b/html/js/guiutils/Tools.js index f63edfa..7e62bc5 100644 --- a/html/js/guiutils/Tools.js +++ b/html/js/guiutils/Tools.js @@ -198,6 +198,10 @@ GTE.UI = (function (parentModule) { } } + Tools.prototype.redo = function() { + + } + /** * Returns the colour correspondent to a given index. It is used to get the * player colour. Player id would be the same as colourIndex diff --git a/html/js/main.js b/html/js/main.js index 8996a22..4b12b9f 100644 --- a/html/js/main.js +++ b/html/js/main.js @@ -118,7 +118,12 @@ document.getElementById("button-undo").addEventListener("click", function(){ GTE.tools.undo(); return false; - }); + }); + + document.getElementById("button-redo").addEventListener("click", function(){ + GTE.tools.redo(); + return false; + }); document.getElementById("button-settings").addEventListener("click", function(){ var el = document.getElementById("settings"); diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index 1a0ae7a..b2a272b 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -6,9 +6,10 @@ GTE.TREE = (function (parentModule) { * @class * @param {type} Represents the type of the changes. */ - function Changes(mode, select ) { + function Changes(unit, select ) { this.queue = []; this.select = select || null; + this.event = new GTE.TREE.Event(unit); } Changes.prototype.undo= function() { From d76a98318dc3356b05d9aee4002eb61c18dab3ef Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Mon, 18 Jul 2016 10:36:48 +0530 Subject: [PATCH 29/57] Modified redo function --- html/js/guiutils/Tools.js | 8 ++++++-- html/js/undoredo/Event.js | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/html/js/guiutils/Tools.js b/html/js/guiutils/Tools.js index 7e62bc5..05ed290 100644 --- a/html/js/guiutils/Tools.js +++ b/html/js/guiutils/Tools.js @@ -194,12 +194,16 @@ GTE.UI = (function (parentModule) { Tools.prototype.undo = function() { if(GTE.UNDOQUEUE.length > 0) { - GTE.UNDOQUEUE.pop().undo(); + var changes = GTE.UNDOQUEUE.pop(); + GTE.REDOQUEUE.push(changes.event); + changes.undo(); } } Tools.prototype.redo = function() { - + if(GTE.REDOQUEUE.length > 0) { + GTE.REDOQUEUE.pop().execute(); + } } /** diff --git a/html/js/undoredo/Event.js b/html/js/undoredo/Event.js index f80a936..8bf817d 100644 --- a/html/js/undoredo/Event.js +++ b/html/js/undoredo/Event.js @@ -10,7 +10,7 @@ GTE.TREE = (function (parentModule) { } - Event.prototype.redo = function() { + Event.prototype.execute = function() { this.unit.onClick(); }; From 34a2c6fd591489e2eba397cba8868a32a402cf1d Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Mon, 18 Jul 2016 23:53:41 +0530 Subject: [PATCH 30/57] Modified functions --- html/js/undoredo/Changes.js | 4 ++-- html/js/undoredo/Event.js | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index b2a272b..e085b9d 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -6,10 +6,10 @@ GTE.TREE = (function (parentModule) { * @class * @param {type} Represents the type of the changes. */ - function Changes(unit, select ) { + function Changes(unit, select, mode) { this.queue = []; this.select = select || null; - this.event = new GTE.TREE.Event(unit); + this.event = new GTE.TREE.Event(unit, mode); } Changes.prototype.undo= function() { diff --git a/html/js/undoredo/Event.js b/html/js/undoredo/Event.js index 8bf817d..a9f305f 100644 --- a/html/js/undoredo/Event.js +++ b/html/js/undoredo/Event.js @@ -5,13 +5,17 @@ GTE.TREE = (function (parentModule) { * Creates a new Event. * @class */ - function Event(unit) { + function Event(unit, mode) { this.unit = unit; + this.mode = mode; } Event.prototype.execute = function() { + var curMode = GTE.MODE; + GTE.MODE = this.mode; this.unit.onClick(); + GTE.MODE = curMode; }; // Add class to parent module From ad0d55c0d975dc9002547b4391de8fdfaac7e337 Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Tue, 19 Jul 2016 01:09:57 +0530 Subject: [PATCH 31/57] Completed redo function for adding and deleteing nodes --- html/js/guiutils/Tools.js | 6 ++---- html/js/tree/Node.js | 2 +- html/js/undoredo/Change.js | 22 ++++++++++++++++++++++ html/js/undoredo/Changes.js | 25 ++++++++++++++++++++++--- 4 files changed, 47 insertions(+), 8 deletions(-) diff --git a/html/js/guiutils/Tools.js b/html/js/guiutils/Tools.js index 05ed290..689fd82 100644 --- a/html/js/guiutils/Tools.js +++ b/html/js/guiutils/Tools.js @@ -194,15 +194,13 @@ GTE.UI = (function (parentModule) { Tools.prototype.undo = function() { if(GTE.UNDOQUEUE.length > 0) { - var changes = GTE.UNDOQUEUE.pop(); - GTE.REDOQUEUE.push(changes.event); - changes.undo(); + GTE.UNDOQUEUE.pop().undo(); } } Tools.prototype.redo = function() { if(GTE.REDOQUEUE.length > 0) { - GTE.REDOQUEUE.pop().execute(); + GTE.REDOQUEUE.pop().redo(); } } diff --git a/html/js/tree/Node.js b/html/js/tree/Node.js index db3d57e..67c8d6f 100644 --- a/html/js/tree/Node.js +++ b/html/js/tree/Node.js @@ -147,7 +147,7 @@ GTE.TREE = (function (parentModule) { // if (this.iset.numberOfNodes > 1) { // this.createSingletonISetWithNode(); // } - changes = new GTE.TREE.Changes(); + changes = new GTE.TREE.Changes(this, null, GTE.MODES.ADD); var nodes = []; if (this.iset === null) { if (this.isLeaf()) { diff --git a/html/js/undoredo/Change.js b/html/js/undoredo/Change.js index 0acdc3e..8cc5cc1 100644 --- a/html/js/undoredo/Change.js +++ b/html/js/undoredo/Change.js @@ -84,6 +84,28 @@ GTE.TREE = (function (parentModule) { } }; + Change.prototype.convertChangeToRedo = function(changes) { + switch (this.mode) { + case GTE.MODES.ADD: + changes.addChange(GTE.MODES.DELETE, this.node); + break; + case GTE.MODES.DELETE: + changes.addChange(GTE.MODES.ADD, this.node); + break; + } + } + + Change.prototype.convertChangeToUndo = function(changes) { + switch (this.mode) { + case GTE.MODES.ADD: + changes.addChange(GTE.MODES.DELETE, this.node); + break; + case GTE.MODES.DELETE: + changes.addChange(GTE.MODES.ADD, this.node); + break; + } + } + // Add class to parent module parentModule.Change = Change; diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index e085b9d..aedcc2f 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -9,12 +9,31 @@ GTE.TREE = (function (parentModule) { function Changes(unit, select, mode) { this.queue = []; this.select = select || null; - this.event = new GTE.TREE.Event(unit, mode); } Changes.prototype.undo= function() { - while(this.queue.length != 0) { - this.queue.pop().undo(); + var changes = new GTE.TREE.Changes(); + for(var i = this.queue.length-1; i>=0; i--) { + this.queue[i].convertChangeToRedo(changes); + } + GTE.REDOQUEUE.push(changes); + for(var i = this.queue.length-1; i>=0; i--) { + this.queue[i].undo(); + } + GTE.tree.draw(); + if(this.select) { + this.iset.select(); + } + }; + + Changes.prototype.redo= function() { + var changes = new GTE.TREE.Changes(); + for(var i = this.queue.length-1; i>=0; i--) { + this.queue[i].convertChangeToUndo(changes); + } + GTE.UNDOQUEUE.push(changes); + for(var i = this.queue.length-1; i>=0; i--) { + this.queue[i].undo(); } GTE.tree.draw(); if(this.select) { From b6824c8edba3a18ff52510e7ebc84341bc69c50b Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Tue, 19 Jul 2016 01:20:22 +0530 Subject: [PATCH 32/57] undo -> execute --- html/js/undoredo/Change.js | 2 +- html/js/undoredo/Changes.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/html/js/undoredo/Change.js b/html/js/undoredo/Change.js index 8cc5cc1..2af9859 100644 --- a/html/js/undoredo/Change.js +++ b/html/js/undoredo/Change.js @@ -13,7 +13,7 @@ GTE.TREE = (function (parentModule) { this.to = to || null; } - Change.prototype.undo = function() { + Change.prototype.execute = function() { switch (this.mode) { case GTE.MODES.ADD: this.node.delete(); diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index aedcc2f..31656b3 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -18,7 +18,7 @@ GTE.TREE = (function (parentModule) { } GTE.REDOQUEUE.push(changes); for(var i = this.queue.length-1; i>=0; i--) { - this.queue[i].undo(); + this.queue[i].execute(); } GTE.tree.draw(); if(this.select) { @@ -33,7 +33,7 @@ GTE.TREE = (function (parentModule) { } GTE.UNDOQUEUE.push(changes); for(var i = this.queue.length-1; i>=0; i--) { - this.queue[i].undo(); + this.queue[i].execute(); } GTE.tree.draw(); if(this.select) { From 6772b66b2870da00785ff72c981ea257399d5c49 Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Tue, 19 Jul 2016 01:22:15 +0530 Subject: [PATCH 33/57] Deleted Event.js --- html/js/undoredo/Event.js | 25 ------------------------- 1 file changed, 25 deletions(-) delete mode 100644 html/js/undoredo/Event.js diff --git a/html/js/undoredo/Event.js b/html/js/undoredo/Event.js deleted file mode 100644 index a9f305f..0000000 --- a/html/js/undoredo/Event.js +++ /dev/null @@ -1,25 +0,0 @@ -GTE.TREE = (function (parentModule) { - "use strict"; - - /** - * Creates a new Event. - * @class - */ - function Event(unit, mode) { - this.unit = unit; - this.mode = mode; - } - - - Event.prototype.execute = function() { - var curMode = GTE.MODE; - GTE.MODE = this.mode; - this.unit.onClick(); - GTE.MODE = curMode; - }; - - // Add class to parent module - parentModule.Event = Event; - - return parentModule; -}(GTE.TREE)); // Add to GTE.TREE sub-module \ No newline at end of file From 853c8ee8870c291a941fc92b2fbffbebdd2225d8 Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Tue, 19 Jul 2016 02:00:09 +0530 Subject: [PATCH 34/57] Added redo feature for player assignment --- html/js/undoredo/Change.js | 13 +++---------- html/js/undoredo/Changes.js | 12 ++++++------ html/js/undoredo/Event.js | 25 +++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 16 deletions(-) create mode 100644 html/js/undoredo/Event.js diff --git a/html/js/undoredo/Change.js b/html/js/undoredo/Change.js index 2af9859..aba955a 100644 --- a/html/js/undoredo/Change.js +++ b/html/js/undoredo/Change.js @@ -92,16 +92,9 @@ GTE.TREE = (function (parentModule) { case GTE.MODES.DELETE: changes.addChange(GTE.MODES.ADD, this.node); break; - } - } - - Change.prototype.convertChangeToUndo = function(changes) { - switch (this.mode) { - case GTE.MODES.ADD: - changes.addChange(GTE.MODES.DELETE, this.node); - break; - case GTE.MODES.DELETE: - changes.addChange(GTE.MODES.ADD, this.node); + case GTE.MODES.PLAYER_ASSIGNMENT: + var change = new GTE.TREE.Change(this.node, GTE.MODES.PLAYER_ASSIGNMENT, GTE.tree.getActivePlayer()); + changes.queue.push(change); break; } } diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index 31656b3..ba248ec 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -9,13 +9,15 @@ GTE.TREE = (function (parentModule) { function Changes(unit, select, mode) { this.queue = []; this.select = select || null; + this.toggleQueue = null; } - Changes.prototype.undo= function() { + Changes.prototype.undo = function() { var changes = new GTE.TREE.Changes(); for(var i = this.queue.length-1; i>=0; i--) { this.queue[i].convertChangeToRedo(changes); } + changes.toggleQueue = this.queue; GTE.REDOQUEUE.push(changes); for(var i = this.queue.length-1; i>=0; i--) { this.queue[i].execute(); @@ -26,11 +28,9 @@ GTE.TREE = (function (parentModule) { } }; - Changes.prototype.redo= function() { + Changes.prototype.redo = function() { var changes = new GTE.TREE.Changes(); - for(var i = this.queue.length-1; i>=0; i--) { - this.queue[i].convertChangeToUndo(changes); - } + changes.queue = this.toggleQueue; GTE.UNDOQUEUE.push(changes); for(var i = this.queue.length-1; i>=0; i--) { this.queue[i].execute(); @@ -41,7 +41,7 @@ GTE.TREE = (function (parentModule) { } }; - Changes.prototype.addChange= function(mode, node, iset) { + Changes.prototype.addChange = function(mode, node, iset) { switch (mode) { case GTE.MODES.ADD: var change = new GTE.TREE.Change(node, GTE.MODES.ADD); diff --git a/html/js/undoredo/Event.js b/html/js/undoredo/Event.js new file mode 100644 index 0000000..a9f305f --- /dev/null +++ b/html/js/undoredo/Event.js @@ -0,0 +1,25 @@ +GTE.TREE = (function (parentModule) { + "use strict"; + + /** + * Creates a new Event. + * @class + */ + function Event(unit, mode) { + this.unit = unit; + this.mode = mode; + } + + + Event.prototype.execute = function() { + var curMode = GTE.MODE; + GTE.MODE = this.mode; + this.unit.onClick(); + GTE.MODE = curMode; + }; + + // Add class to parent module + parentModule.Event = Event; + + return parentModule; +}(GTE.TREE)); // Add to GTE.TREE sub-module \ No newline at end of file From 9a9dfc2966aed2595b483501f07ddac00bc50d4f Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Tue, 19 Jul 2016 11:36:22 +0530 Subject: [PATCH 35/57] Code Refactor --- html/js/guiutils/MultiAction.js | 8 ++++---- html/js/guiutils/Tools.js | 2 +- html/js/tree/ISet.js | 10 +++++----- html/js/tree/Node.js | 6 +++--- html/js/undoredo/Changes.js | 12 ++++++++++-- 5 files changed, 23 insertions(+), 15 deletions(-) diff --git a/html/js/guiutils/MultiAction.js b/html/js/guiutils/MultiAction.js index cd7a53b..facddfc 100644 --- a/html/js/guiutils/MultiAction.js +++ b/html/js/guiutils/MultiAction.js @@ -77,7 +77,7 @@ GTE.TREE = (function(parentModule) { } } } - GTE.UNDOQUEUE.push(changes); + changes.endSetOfChanges(); break; case GTE.MODES.DELETE: // if ANY of the nodes in the multiaction line have children, @@ -105,7 +105,7 @@ GTE.TREE = (function(parentModule) { this.nodesInLine[k].onClick(false); } } - GTE.UNDOQUEUE.push(changes); + changes.endSetOfChanges(); break; case GTE.MODES.PLAYER_ASSIGNMENT: // set all nodes on the multiaction line to belong to the @@ -115,7 +115,7 @@ GTE.TREE = (function(parentModule) { changes.addChange(GTE.MODES.PLAYER_ASSIGNMENT, this.nodesInLine[l]); this.nodesInLine[l].onClick(false); } - GTE.UNDOQUEUE.push(changes); + changes.endSetOfChanges(); break; case GTE.MODES.MERGE: // note that this mode button only works if every node belongs @@ -143,7 +143,7 @@ GTE.TREE = (function(parentModule) { playerInLoop = this.nodesInLine[m].player; } if(changes.queue.length >= 0) { - GTE.UNDOQUEUE.push(changes); + changes.endSetOfChanges(); } GTE.tree.draw(); break; diff --git a/html/js/guiutils/Tools.js b/html/js/guiutils/Tools.js index 689fd82..e1c4610 100644 --- a/html/js/guiutils/Tools.js +++ b/html/js/guiutils/Tools.js @@ -64,7 +64,7 @@ GTE.UI = (function (parentModule) { // Assign singleton isets to each node with no iset var changes = new GTE.TREE.Changes(); changes.pushSingletonChange(GTE.UNDO.INITIALIZEISETS); - GTE.UNDOQUEUE.push(changes); + changes.endSetOfChanges(); GTE.tree.initializeISets(); this.isetToolsRan = true; } diff --git a/html/js/tree/ISet.js b/html/js/tree/ISet.js index 6dbf675..476dd6d 100644 --- a/html/js/tree/ISet.js +++ b/html/js/tree/ISet.js @@ -293,7 +293,7 @@ GTE.TREE = (function (parentModule) { var isets = GTE.tree.addChildNodeToISet(this); changes.pushChangesAfterAddingIsetsToArray(isets); } - GTE.UNDOQUEUE.push(changes); + changes.endSetOfChanges(); // Tell the tree to redraw itself GTE.tree.draw(); break; @@ -314,7 +314,7 @@ GTE.TREE = (function (parentModule) { // Dissolve current iset this.dissolve(); } - GTE.UNDOQUEUE.push(changes); + changes.endSetOfChanges(); // Tell the tree to redraw itself GTE.tree.draw(); break; @@ -327,7 +327,7 @@ GTE.TREE = (function (parentModule) { GTE.tree.assignSelectedPlayerToNode(nodes[j]); } changes.pushSingletonChange(GTE.UNDO.ASSIGNMOVES, this); - GTE.UNDOQUEUE.push(changes); + changes.endSetOfChanges(); // Reassign moves (create new moves and assign them to the // children nodes as reachedBy) this.reassignMoves(); @@ -341,14 +341,14 @@ GTE.TREE = (function (parentModule) { changes.select = true; changes.iset = GTE.tree.selected[0]; } - GTE.UNDOQUEUE.push(changes); + changes.endSetOfChanges(); this.select(); } break; case GTE.MODES.DISSOLVE: var changes = new GTE.TREE.Changes(); if(changes.pushChangesBeforeDissolving(this)) - GTE.UNDOQUEUE.push(changes); + changes.endSetOfChanges(); this.dissolve(); GTE.tree.draw(); break; diff --git a/html/js/tree/Node.js b/html/js/tree/Node.js index 67c8d6f..4278ff0 100644 --- a/html/js/tree/Node.js +++ b/html/js/tree/Node.js @@ -165,7 +165,7 @@ GTE.TREE = (function (parentModule) { // Tell the tree to redraw itself GTE.tree.draw(); if(undo) - GTE.UNDOQUEUE.push(changes); + changes.endSetOfChanges(); } else { this.iset.onClick(); } @@ -188,7 +188,7 @@ GTE.TREE = (function (parentModule) { this.deassignPlayer(); } if(undo) - GTE.UNDOQUEUE.push(changes); + changes.endSetOfChanges(); // Tell the tree to redraw itself GTE.tree.draw(); } else { @@ -221,7 +221,7 @@ GTE.TREE = (function (parentModule) { if(undo) { var changes = new GTE.TREE.Changes(); changes.addChange(GTE.MODES.PLAYER_ASSIGNMENT, this); - GTE.UNDOQUEUE.push(changes); + changes.endSetOfChanges(); } GTE.tree.assignSelectedPlayerToNode(this); GTE.tree.draw(); diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index ba248ec..91e7085 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -17,7 +17,6 @@ GTE.TREE = (function (parentModule) { for(var i = this.queue.length-1; i>=0; i--) { this.queue[i].convertChangeToRedo(changes); } - changes.toggleQueue = this.queue; GTE.REDOQUEUE.push(changes); for(var i = this.queue.length-1; i>=0; i--) { this.queue[i].execute(); @@ -30,7 +29,9 @@ GTE.TREE = (function (parentModule) { Changes.prototype.redo = function() { var changes = new GTE.TREE.Changes(); - changes.queue = this.toggleQueue; + for(var i = this.queue.length-1; i>=0; i--) { + this.queue[i].convertChangeToRedo(changes); + } GTE.UNDOQUEUE.push(changes); for(var i = this.queue.length-1; i>=0; i--) { this.queue[i].execute(); @@ -210,6 +211,13 @@ GTE.TREE = (function (parentModule) { } } + Changes.prototype.pushToQueue = function() { + GTE.UNDOQUEUE.push(this); + } + + Changes.prototype.endSetOfChanges = function() { + this.pushToQueue(); + } // Add class to parent module parentModule.Changes = Changes; From 0645cf785938c92a5384b4dc7785ebd063a5cf4b Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Tue, 19 Jul 2016 11:39:26 +0530 Subject: [PATCH 36/57] Fixed minor bug in redoing player assignment --- html/js/undoredo/Change.js | 2 +- html/js/undoredo/Changes.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/html/js/undoredo/Change.js b/html/js/undoredo/Change.js index aba955a..7a29143 100644 --- a/html/js/undoredo/Change.js +++ b/html/js/undoredo/Change.js @@ -93,7 +93,7 @@ GTE.TREE = (function (parentModule) { changes.addChange(GTE.MODES.ADD, this.node); break; case GTE.MODES.PLAYER_ASSIGNMENT: - var change = new GTE.TREE.Change(this.node, GTE.MODES.PLAYER_ASSIGNMENT, GTE.tree.getActivePlayer()); + var change = new GTE.TREE.Change(this.node, GTE.MODES.PLAYER_ASSIGNMENT, this.to); changes.queue.push(change); break; } diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index 91e7085..2227631 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -93,7 +93,7 @@ GTE.TREE = (function (parentModule) { break; case GTE.MODES.PLAYER_ASSIGNMENT: - var change = new GTE.TREE.Change(node, GTE.MODES.PLAYER_ASSIGNMENT, node.player, null); + var change = new GTE.TREE.Change(node, GTE.MODES.PLAYER_ASSIGNMENT, node.player, GTE.tree.getActivePlayer()); this.queue.push(change); break; default: From 71d9c27a4d69f96a4bfe7641e75c93d2323dcc33 Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Tue, 19 Jul 2016 15:40:52 +0530 Subject: [PATCH 37/57] Fixed minor bug in redoing player assignment --- html/js/undoredo/Change.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/html/js/undoredo/Change.js b/html/js/undoredo/Change.js index 7a29143..7781cdc 100644 --- a/html/js/undoredo/Change.js +++ b/html/js/undoredo/Change.js @@ -93,7 +93,7 @@ GTE.TREE = (function (parentModule) { changes.addChange(GTE.MODES.ADD, this.node); break; case GTE.MODES.PLAYER_ASSIGNMENT: - var change = new GTE.TREE.Change(this.node, GTE.MODES.PLAYER_ASSIGNMENT, this.to); + var change = new GTE.TREE.Change(this.node, GTE.MODES.PLAYER_ASSIGNMENT, this.to, this.from); changes.queue.push(change); break; } From 03c7e3f04988ce1c95f3fe406c4abb36781c7aec Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Wed, 20 Jul 2016 17:55:17 +0530 Subject: [PATCH 38/57] Added redo feature for Initialising isets --- html/js/structure.js | 3 ++- html/js/undoredo/Change.js | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/html/js/structure.js b/html/js/structure.js index 76caac2..1dda98b 100644 --- a/html/js/structure.js +++ b/html/js/structure.js @@ -100,7 +100,8 @@ var GTE = (function () { ASSIGNMOVES : 8, POPMOVES : 9, ASSIGNISET : 10, - ADDISET : 11 + ADDISET : 11, + DEINITIALIZEISETS : 12 }; GTE.UNDOQUEUE = []; diff --git a/html/js/undoredo/Change.js b/html/js/undoredo/Change.js index 7781cdc..859de0e 100644 --- a/html/js/undoredo/Change.js +++ b/html/js/undoredo/Change.js @@ -55,6 +55,11 @@ GTE.TREE = (function (parentModule) { break; case GTE.UNDO.INITIALIZEISETS: GTE.tree.deinitializeISets(); + this.isetToolsRan = false; + break; + case GTE.UNDO.DEINITIALIZEISETS: + GTE.tree.initializeISets(); + this.isetToolsRan = true; break; case GTE.UNDO.POPISET: if(GTE.tree.isets.indexOf(this.node) == -1) @@ -96,6 +101,14 @@ GTE.TREE = (function (parentModule) { var change = new GTE.TREE.Change(this.node, GTE.MODES.PLAYER_ASSIGNMENT, this.to, this.from); changes.queue.push(change); break; + case GTE.UNDO.INITIALIZEISETS: + var change = new GTE.TREE.Change(null, GTE.UNDO.DEINITIALIZEISETS); + changes.queue.push(change); + break; + case GTE.UNDO.DEINITIALIZEISETS: + var change = new GTE.TREE.Change(null, GTE.UNDO.INITIALIZEISETS); + changes.queue.push(change); + break; } } From 1005044f4ca5ce95333e74856d129296f62cf14f Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Sun, 24 Jul 2016 01:02:33 +0530 Subject: [PATCH 39/57] Added redo feature while selecting isets --- html/js/structure.js | 3 ++- html/js/undoredo/Change.js | 16 ++++++++++++++++ html/js/undoredo/Changes.js | 18 ++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/html/js/structure.js b/html/js/structure.js index 1dda98b..1a34fea 100644 --- a/html/js/structure.js +++ b/html/js/structure.js @@ -101,7 +101,8 @@ var GTE = (function () { POPMOVES : 9, ASSIGNISET : 10, ADDISET : 11, - DEINITIALIZEISETS : 12 + DEINITIALIZEISETS : 12, + PUSHSELECTEDQUEUE : 13, }; GTE.UNDOQUEUE = []; diff --git a/html/js/undoredo/Change.js b/html/js/undoredo/Change.js index 859de0e..e312cbd 100644 --- a/html/js/undoredo/Change.js +++ b/html/js/undoredo/Change.js @@ -53,6 +53,9 @@ GTE.TREE = (function (parentModule) { case GTE.UNDO.POPSELECTEDQUEUE: GTE.tree.selected.pop(); break; + case GTE.UNDO.PUSHSELECTEDQUEUE: + GTE.tree.selected.push(this.node); + break; case GTE.UNDO.INITIALIZEISETS: GTE.tree.deinitializeISets(); this.isetToolsRan = false; @@ -101,6 +104,19 @@ GTE.TREE = (function (parentModule) { var change = new GTE.TREE.Change(this.node, GTE.MODES.PLAYER_ASSIGNMENT, this.to, this.from); changes.queue.push(change); break; + case GTE.MODES.MERGE: + if(this.selected) { + var change = new GTE.TREE.Change(this.node, GTE.MODES.MERGE); + change.selected = true; + changes.queue.push(change); + } + break; + case GTE.UNDO.POPSELECTEDQUEUE: + changes.queue.push(new GTE.TREE.Change(this.node, GTE.UNDO.PUSHSELECTEDQUEUE)); + break; + case GTE.UNDO.PUSHSELECTEDQUEUE: + changes.queue.push(new GTE.TREE.Change(this.node, GTE.UNDO.POPSELECTEDQUEUE)); + break; case GTE.UNDO.INITIALIZEISETS: var change = new GTE.TREE.Change(null, GTE.UNDO.DEINITIALIZEISETS); changes.queue.push(change); diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index 2227631..0d75ad4 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -24,6 +24,15 @@ GTE.TREE = (function (parentModule) { GTE.tree.draw(); if(this.select) { this.iset.select(); + } else if (GTE.tree.selected.length > 0) { + var iset = GTE.tree.selected[0]; + if (iset.shape !== null) { + iset.shape.toggleClass('selected'); + } + var nodes = iset.getNodes(); + for (var i = 0; i < nodes.length; i++) { + nodes[i].select(); + } } }; @@ -39,6 +48,15 @@ GTE.TREE = (function (parentModule) { GTE.tree.draw(); if(this.select) { this.iset.select(); + } else if (GTE.tree.selected.length > 0) { + var iset = GTE.tree.selected[0]; + if (iset.shape !== null) { + iset.shape.toggleClass('selected'); + } + var nodes = iset.getNodes(); + for (var i = 0; i < nodes.length; i++) { + nodes[i].select(); + } } }; From 24b0c4a5a1770bd01a3a799dd0470b04ab894c4e Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Tue, 26 Jul 2016 09:45:26 +0530 Subject: [PATCH 40/57] Removed current functionality of redoing, Reverting to onclick aproach --- html/js/structure.js | 1 + html/js/undoredo/Change.js | 40 ++----------------------------------- html/js/undoredo/Changes.js | 29 --------------------------- 3 files changed, 3 insertions(+), 67 deletions(-) diff --git a/html/js/structure.js b/html/js/structure.js index 1a34fea..ab91bea 100644 --- a/html/js/structure.js +++ b/html/js/structure.js @@ -103,6 +103,7 @@ var GTE = (function () { ADDISET : 11, DEINITIALIZEISETS : 12, PUSHSELECTEDQUEUE : 13, + PUSHISET : 14 }; GTE.UNDOQUEUE = []; diff --git a/html/js/undoredo/Change.js b/html/js/undoredo/Change.js index e312cbd..4174212 100644 --- a/html/js/undoredo/Change.js +++ b/html/js/undoredo/Change.js @@ -33,7 +33,7 @@ GTE.TREE = (function (parentModule) { case GTE.MODES.MERGE: if(this.selected) { if (this.node.shape !== null) { - this.node.shape.toggleClass('selected'); + // this.node.shape.toggleClass('selected'); } } else { this.node.changeISet(this.from); @@ -86,48 +86,12 @@ GTE.TREE = (function (parentModule) { break; case GTE.UNDO.ADDISET: GTE.tree.deleteNode(this.node.firstNode); - break; + break; default: break; } }; - Change.prototype.convertChangeToRedo = function(changes) { - switch (this.mode) { - case GTE.MODES.ADD: - changes.addChange(GTE.MODES.DELETE, this.node); - break; - case GTE.MODES.DELETE: - changes.addChange(GTE.MODES.ADD, this.node); - break; - case GTE.MODES.PLAYER_ASSIGNMENT: - var change = new GTE.TREE.Change(this.node, GTE.MODES.PLAYER_ASSIGNMENT, this.to, this.from); - changes.queue.push(change); - break; - case GTE.MODES.MERGE: - if(this.selected) { - var change = new GTE.TREE.Change(this.node, GTE.MODES.MERGE); - change.selected = true; - changes.queue.push(change); - } - break; - case GTE.UNDO.POPSELECTEDQUEUE: - changes.queue.push(new GTE.TREE.Change(this.node, GTE.UNDO.PUSHSELECTEDQUEUE)); - break; - case GTE.UNDO.PUSHSELECTEDQUEUE: - changes.queue.push(new GTE.TREE.Change(this.node, GTE.UNDO.POPSELECTEDQUEUE)); - break; - case GTE.UNDO.INITIALIZEISETS: - var change = new GTE.TREE.Change(null, GTE.UNDO.DEINITIALIZEISETS); - changes.queue.push(change); - break; - case GTE.UNDO.DEINITIALIZEISETS: - var change = new GTE.TREE.Change(null, GTE.UNDO.INITIALIZEISETS); - changes.queue.push(change); - break; - } - } - // Add class to parent module parentModule.Change = Change; diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index 0d75ad4..5e39b11 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -13,35 +13,6 @@ GTE.TREE = (function (parentModule) { } Changes.prototype.undo = function() { - var changes = new GTE.TREE.Changes(); - for(var i = this.queue.length-1; i>=0; i--) { - this.queue[i].convertChangeToRedo(changes); - } - GTE.REDOQUEUE.push(changes); - for(var i = this.queue.length-1; i>=0; i--) { - this.queue[i].execute(); - } - GTE.tree.draw(); - if(this.select) { - this.iset.select(); - } else if (GTE.tree.selected.length > 0) { - var iset = GTE.tree.selected[0]; - if (iset.shape !== null) { - iset.shape.toggleClass('selected'); - } - var nodes = iset.getNodes(); - for (var i = 0; i < nodes.length; i++) { - nodes[i].select(); - } - } - }; - - Changes.prototype.redo = function() { - var changes = new GTE.TREE.Changes(); - for(var i = this.queue.length-1; i>=0; i--) { - this.queue[i].convertChangeToRedo(changes); - } - GTE.UNDOQUEUE.push(changes); for(var i = this.queue.length-1; i>=0; i--) { this.queue[i].execute(); } From f161bd40979b9a574963b2eeb8c64d85d133bcd4 Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Tue, 26 Jul 2016 10:04:50 +0530 Subject: [PATCH 41/57] Started with event aproach for redoing events --- html/js/guiutils/MultiAction.js | 8 ++++---- html/js/guiutils/Tools.js | 2 +- html/js/tree/ISet.js | 12 ++++++------ html/js/tree/Node.js | 4 ++-- html/js/undoredo/Changes.js | 1 + 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/html/js/guiutils/MultiAction.js b/html/js/guiutils/MultiAction.js index facddfc..e988f25 100644 --- a/html/js/guiutils/MultiAction.js +++ b/html/js/guiutils/MultiAction.js @@ -56,7 +56,7 @@ GTE.TREE = (function(parentModule) { // for the nodes in the line var smallestAndLargest = this.findSmallestAndLargest(); // If S < L, add children to those nodes so that ALL nodes have L children now. - var changes = new GTE.TREE.Changes(); + var changes = new GTE.TREE.Changes(GTE.MODES.ADD, null, this); if (smallestAndLargest.smallest < smallestAndLargest.largest) { for (var i = 0; i < this.nodesInLine.length; i++) { while (this.nodesInLine[i].children.length < smallestAndLargest.largest) { @@ -85,7 +85,7 @@ GTE.TREE = (function(parentModule) { // of the tree (i.e. even if some nodes are leaves already, // do not delete them). otherwise (that is, ALL nodes in the // multiaction line are leaves), delete all these leaves. - var changes = new GTE.TREE.Changes(); + var changes = new GTE.TREE.Changes(GTE.MODES.DELETE, null, this); var allLeaves = true; for (var k = 0; k < this.nodesInLine.length; k++) { if (this.nodesInLine[k].children.length > 0) { @@ -110,7 +110,7 @@ GTE.TREE = (function(parentModule) { case GTE.MODES.PLAYER_ASSIGNMENT: // set all nodes on the multiaction line to belong to the // current player (which may be chance) - var changes = new GTE.TREE.Changes(); + var changes = new GTE.TREE.Changes(GTE.MODES.PLAYER_ASSIGNMENT, null, this); for (var l = 0; l < this.nodesInLine.length; l++) { changes.addChange(GTE.MODES.PLAYER_ASSIGNMENT, this.nodesInLine[l]); this.nodesInLine[l].onClick(false); @@ -131,7 +131,7 @@ GTE.TREE = (function(parentModule) { var playerInLoop = null; var numberOfChildrenInLoop = -1; var isetInLoop = null; - var changes = new GTE.TREE.Changes(); + var changes = new GTE.TREE.Changes(GTE.MODES.MERGE, null, this); for (var m = 0; m < this.nodesInLine.length; m++) { if (playerInLoop === this.nodesInLine[m].player && numberOfChildrenInLoop === this.nodesInLine[m].children.length) { diff --git a/html/js/guiutils/Tools.js b/html/js/guiutils/Tools.js index e1c4610..8ade0de 100644 --- a/html/js/guiutils/Tools.js +++ b/html/js/guiutils/Tools.js @@ -62,7 +62,7 @@ GTE.UI = (function (parentModule) { // If iset tools have never been chosen if (!this.isetToolsRan) { // Assign singleton isets to each node with no iset - var changes = new GTE.TREE.Changes(); + var changes = new GTE.TREE.Changes(GTE.MODES.INITIALIZEISETS); changes.pushSingletonChange(GTE.UNDO.INITIALIZEISETS); changes.endSetOfChanges(); GTE.tree.initializeISets(); diff --git a/html/js/tree/ISet.js b/html/js/tree/ISet.js index 476dd6d..2617daf 100644 --- a/html/js/tree/ISet.js +++ b/html/js/tree/ISet.js @@ -280,7 +280,7 @@ GTE.TREE = (function (parentModule) { ISet.prototype.onClick = function () { switch (GTE.MODE) { case GTE.MODES.ADD: - var changes = new GTE.TREE.Changes(); + var changes = new GTE.TREE.Changes(GTE.MODES.ADD, null, this); if (this.numberOfMoves() === 0) { // If no children, add two, since one child only doesn't // make sense @@ -299,7 +299,7 @@ GTE.TREE = (function (parentModule) { break; case GTE.MODES.DELETE: var children = this.getChildrenNodes(); - var changes = new GTE.TREE.Changes(); + var changes = new GTE.TREE.Changes(GTE.MODES.DELETE, null, this); if (children.length === 0) { // Delete node changes.assignSingletonIsetDeletion(this); @@ -321,7 +321,7 @@ GTE.TREE = (function (parentModule) { case GTE.MODES.PLAYER_ASSIGNMENT: // Change the player of every node in the iset var nodes = this.getNodes(); - var changes = new GTE.TREE.Changes(); + var changes = new GTE.TREE.Changes(GTE.MODES.PLAYER_ASSIGNMENT, null, this); for (var j = 0; j < nodes.length; j++) { changes.addChange(GTE.MODES.PLAYER_ASSIGNMENT, nodes[j]); GTE.tree.assignSelectedPlayerToNode(nodes[j]); @@ -335,8 +335,8 @@ GTE.TREE = (function (parentModule) { break; case GTE.MODES.MERGE: if (this.getPlayer().id !== 0) { - var changes = new GTE.TREE.Changes(); - changes.addChange(GTE.MODES.MERGE, null, this); + var changes = new GTE.TREE.Changes(GTE.MODES.MERGE, null, this); + changes.addChange(); if(GTE.tree.selected.length != 0) { changes.select = true; changes.iset = GTE.tree.selected[0]; @@ -346,7 +346,7 @@ GTE.TREE = (function (parentModule) { } break; case GTE.MODES.DISSOLVE: - var changes = new GTE.TREE.Changes(); + var changes = new GTE.TREE.Changes(GTE.MODES.DISSOLVE, null, this); if(changes.pushChangesBeforeDissolving(this)) changes.endSetOfChanges(); this.dissolve(); diff --git a/html/js/tree/Node.js b/html/js/tree/Node.js index 4278ff0..73b8826 100644 --- a/html/js/tree/Node.js +++ b/html/js/tree/Node.js @@ -173,7 +173,7 @@ GTE.TREE = (function (parentModule) { break; case GTE.MODES.DELETE: if (this.iset === null) { - var changes = new GTE.TREE.Changes(); + var changes = new GTE.TREE.Changes(this, null, GTE.MODES.DELETE); // If it is a leaf, delete itself, if not, delete all children if (this.isLeaf()) { if(undo) @@ -219,7 +219,7 @@ GTE.TREE = (function (parentModule) { this.iset.onClick(); } else { if(undo) { - var changes = new GTE.TREE.Changes(); + var changes = new GTE.TREE.Changes(GTE.MODES.PLAYER_ASSIGNMENT, null, this); changes.addChange(GTE.MODES.PLAYER_ASSIGNMENT, this); changes.endSetOfChanges(); } diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index 5e39b11..2d3a35f 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -10,6 +10,7 @@ GTE.TREE = (function (parentModule) { this.queue = []; this.select = select || null; this.toggleQueue = null; + this.event = new GTE.TREE.Event(unit, mode); } Changes.prototype.undo = function() { From 7aed392e8892b7b3802dd427ba7b0b55cb960e45 Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Wed, 27 Jul 2016 10:26:40 +0530 Subject: [PATCH 42/57] Added type variable to event class --- html/js/guiutils/MultiAction.js | 8 ++++---- html/js/structure.js | 5 +++++ html/js/tree/ISet.js | 10 +++++----- html/js/tree/Node.js | 6 +++--- html/js/undoredo/Changes.js | 6 ++---- html/js/undoredo/Event.js | 3 ++- 6 files changed, 21 insertions(+), 17 deletions(-) diff --git a/html/js/guiutils/MultiAction.js b/html/js/guiutils/MultiAction.js index e988f25..2ea3873 100644 --- a/html/js/guiutils/MultiAction.js +++ b/html/js/guiutils/MultiAction.js @@ -56,7 +56,7 @@ GTE.TREE = (function(parentModule) { // for the nodes in the line var smallestAndLargest = this.findSmallestAndLargest(); // If S < L, add children to those nodes so that ALL nodes have L children now. - var changes = new GTE.TREE.Changes(GTE.MODES.ADD, null, this); + var changes = new GTE.TREE.Changes(GTE.MODES.ADD, GTE.REDO.MULTIACTIONLINES, this); if (smallestAndLargest.smallest < smallestAndLargest.largest) { for (var i = 0; i < this.nodesInLine.length; i++) { while (this.nodesInLine[i].children.length < smallestAndLargest.largest) { @@ -85,7 +85,7 @@ GTE.TREE = (function(parentModule) { // of the tree (i.e. even if some nodes are leaves already, // do not delete them). otherwise (that is, ALL nodes in the // multiaction line are leaves), delete all these leaves. - var changes = new GTE.TREE.Changes(GTE.MODES.DELETE, null, this); + var changes = new GTE.TREE.Changes(GTE.MODES.DELETE, GTE.REDO.MULTIACTIONLINES, this); var allLeaves = true; for (var k = 0; k < this.nodesInLine.length; k++) { if (this.nodesInLine[k].children.length > 0) { @@ -110,7 +110,7 @@ GTE.TREE = (function(parentModule) { case GTE.MODES.PLAYER_ASSIGNMENT: // set all nodes on the multiaction line to belong to the // current player (which may be chance) - var changes = new GTE.TREE.Changes(GTE.MODES.PLAYER_ASSIGNMENT, null, this); + var changes = new GTE.TREE.Changes(GTE.MODES.PLAYER_ASSIGNMENT, GTE.REDO.MULTIACTIONLINES, this); for (var l = 0; l < this.nodesInLine.length; l++) { changes.addChange(GTE.MODES.PLAYER_ASSIGNMENT, this.nodesInLine[l]); this.nodesInLine[l].onClick(false); @@ -131,7 +131,7 @@ GTE.TREE = (function(parentModule) { var playerInLoop = null; var numberOfChildrenInLoop = -1; var isetInLoop = null; - var changes = new GTE.TREE.Changes(GTE.MODES.MERGE, null, this); + var changes = new GTE.TREE.Changes(GTE.MODES.MERGE, GTE.REDO.MULTIACTIONLINES, this); for (var m = 0; m < this.nodesInLine.length; m++) { if (playerInLoop === this.nodesInLine[m].player && numberOfChildrenInLoop === this.nodesInLine[m].children.length) { diff --git a/html/js/structure.js b/html/js/structure.js index ab91bea..cdcbe0e 100644 --- a/html/js/structure.js +++ b/html/js/structure.js @@ -106,6 +106,11 @@ var GTE = (function () { PUSHISET : 14 }; + GTE.REDO = { + NODE : 0, + ISET : 1, + MULTIACTIONLINE : 2 + } GTE.UNDOQUEUE = []; GTE.REDOQUEUE = []; return GTE; diff --git a/html/js/tree/ISet.js b/html/js/tree/ISet.js index 2617daf..e4512bc 100644 --- a/html/js/tree/ISet.js +++ b/html/js/tree/ISet.js @@ -280,7 +280,7 @@ GTE.TREE = (function (parentModule) { ISet.prototype.onClick = function () { switch (GTE.MODE) { case GTE.MODES.ADD: - var changes = new GTE.TREE.Changes(GTE.MODES.ADD, null, this); + var changes = new GTE.TREE.Changes(GTE.MODES.ADD, GTE.REDO.ISET, this); if (this.numberOfMoves() === 0) { // If no children, add two, since one child only doesn't // make sense @@ -299,7 +299,7 @@ GTE.TREE = (function (parentModule) { break; case GTE.MODES.DELETE: var children = this.getChildrenNodes(); - var changes = new GTE.TREE.Changes(GTE.MODES.DELETE, null, this); + var changes = new GTE.TREE.Changes(GTE.MODES.DELETE, GTE.REDO.ISET, this); if (children.length === 0) { // Delete node changes.assignSingletonIsetDeletion(this); @@ -321,7 +321,7 @@ GTE.TREE = (function (parentModule) { case GTE.MODES.PLAYER_ASSIGNMENT: // Change the player of every node in the iset var nodes = this.getNodes(); - var changes = new GTE.TREE.Changes(GTE.MODES.PLAYER_ASSIGNMENT, null, this); + var changes = new GTE.TREE.Changes(GTE.MODES.PLAYER_ASSIGNMENT, GTE.REDO.ISET, this); for (var j = 0; j < nodes.length; j++) { changes.addChange(GTE.MODES.PLAYER_ASSIGNMENT, nodes[j]); GTE.tree.assignSelectedPlayerToNode(nodes[j]); @@ -335,7 +335,7 @@ GTE.TREE = (function (parentModule) { break; case GTE.MODES.MERGE: if (this.getPlayer().id !== 0) { - var changes = new GTE.TREE.Changes(GTE.MODES.MERGE, null, this); + var changes = new GTE.TREE.Changes(GTE.MODES.MERGE, GTE.REDO.ISET, this); changes.addChange(); if(GTE.tree.selected.length != 0) { changes.select = true; @@ -346,7 +346,7 @@ GTE.TREE = (function (parentModule) { } break; case GTE.MODES.DISSOLVE: - var changes = new GTE.TREE.Changes(GTE.MODES.DISSOLVE, null, this); + var changes = new GTE.TREE.Changes(GTE.MODES.DISSOLVE, GTE.REDO.ISET, this); if(changes.pushChangesBeforeDissolving(this)) changes.endSetOfChanges(); this.dissolve(); diff --git a/html/js/tree/Node.js b/html/js/tree/Node.js index 73b8826..4e66de3 100644 --- a/html/js/tree/Node.js +++ b/html/js/tree/Node.js @@ -147,7 +147,7 @@ GTE.TREE = (function (parentModule) { // if (this.iset.numberOfNodes > 1) { // this.createSingletonISetWithNode(); // } - changes = new GTE.TREE.Changes(this, null, GTE.MODES.ADD); + changes = new GTE.TREE.Changes(this, GTE.REDO.NODE, GTE.MODES.ADD); var nodes = []; if (this.iset === null) { if (this.isLeaf()) { @@ -173,7 +173,7 @@ GTE.TREE = (function (parentModule) { break; case GTE.MODES.DELETE: if (this.iset === null) { - var changes = new GTE.TREE.Changes(this, null, GTE.MODES.DELETE); + var changes = new GTE.TREE.Changes(this, GTE.REDO.NODE, GTE.MODES.DELETE); // If it is a leaf, delete itself, if not, delete all children if (this.isLeaf()) { if(undo) @@ -219,7 +219,7 @@ GTE.TREE = (function (parentModule) { this.iset.onClick(); } else { if(undo) { - var changes = new GTE.TREE.Changes(GTE.MODES.PLAYER_ASSIGNMENT, null, this); + var changes = new GTE.TREE.Changes(GTE.GTE.REDO.NODE.PLAYER_ASSIGNMENT, null, this); changes.addChange(GTE.MODES.PLAYER_ASSIGNMENT, this); changes.endSetOfChanges(); } diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index 2d3a35f..9d77f6c 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -6,11 +6,9 @@ GTE.TREE = (function (parentModule) { * @class * @param {type} Represents the type of the changes. */ - function Changes(unit, select, mode) { + function Changes(unit, type, mode) { this.queue = []; - this.select = select || null; - this.toggleQueue = null; - this.event = new GTE.TREE.Event(unit, mode); + this.event = new GTE.TREE.Event(unit, mode, type); } Changes.prototype.undo = function() { diff --git a/html/js/undoredo/Event.js b/html/js/undoredo/Event.js index a9f305f..5c65f6a 100644 --- a/html/js/undoredo/Event.js +++ b/html/js/undoredo/Event.js @@ -5,9 +5,10 @@ GTE.TREE = (function (parentModule) { * Creates a new Event. * @class */ - function Event(unit, mode) { + function Event(unit, mode, type) { this.unit = unit; this.mode = mode; + this.type = type; } From d4f1132bcf8b35f1262a674cdf061253fccbae67 Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Wed, 27 Jul 2016 10:43:43 +0530 Subject: [PATCH 43/57] Added function to find coordinates of a node --- html/js/guiutils/MultiAction.js | 8 ++++---- html/js/guiutils/Tools.js | 4 +++- html/js/tree/Node.js | 6 +++--- html/js/undoredo/Changes.js | 2 +- html/js/undoredo/Event.js | 9 +++++++++ 5 files changed, 20 insertions(+), 9 deletions(-) diff --git a/html/js/guiutils/MultiAction.js b/html/js/guiutils/MultiAction.js index 2ea3873..62a95e9 100644 --- a/html/js/guiutils/MultiAction.js +++ b/html/js/guiutils/MultiAction.js @@ -56,7 +56,7 @@ GTE.TREE = (function(parentModule) { // for the nodes in the line var smallestAndLargest = this.findSmallestAndLargest(); // If S < L, add children to those nodes so that ALL nodes have L children now. - var changes = new GTE.TREE.Changes(GTE.MODES.ADD, GTE.REDO.MULTIACTIONLINES, this); + var changes = new GTE.TREE.Changes(GTE.MODES.ADD, GTE.REDO.MULTIACTIONLINE, this.nodesInLine[0]); if (smallestAndLargest.smallest < smallestAndLargest.largest) { for (var i = 0; i < this.nodesInLine.length; i++) { while (this.nodesInLine[i].children.length < smallestAndLargest.largest) { @@ -85,7 +85,7 @@ GTE.TREE = (function(parentModule) { // of the tree (i.e. even if some nodes are leaves already, // do not delete them). otherwise (that is, ALL nodes in the // multiaction line are leaves), delete all these leaves. - var changes = new GTE.TREE.Changes(GTE.MODES.DELETE, GTE.REDO.MULTIACTIONLINES, this); + var changes = new GTE.TREE.Changes(GTE.MODES.DELETE, GTE.REDO.MULTIACTIONLINE, this.nodesInLine[0]); var allLeaves = true; for (var k = 0; k < this.nodesInLine.length; k++) { if (this.nodesInLine[k].children.length > 0) { @@ -110,7 +110,7 @@ GTE.TREE = (function(parentModule) { case GTE.MODES.PLAYER_ASSIGNMENT: // set all nodes on the multiaction line to belong to the // current player (which may be chance) - var changes = new GTE.TREE.Changes(GTE.MODES.PLAYER_ASSIGNMENT, GTE.REDO.MULTIACTIONLINES, this); + var changes = new GTE.TREE.Changes(GTE.MODES.PLAYER_ASSIGNMENT, GTE.REDO.MULTIACTIONLINE, this.nodesInLine[0]); for (var l = 0; l < this.nodesInLine.length; l++) { changes.addChange(GTE.MODES.PLAYER_ASSIGNMENT, this.nodesInLine[l]); this.nodesInLine[l].onClick(false); @@ -131,7 +131,7 @@ GTE.TREE = (function(parentModule) { var playerInLoop = null; var numberOfChildrenInLoop = -1; var isetInLoop = null; - var changes = new GTE.TREE.Changes(GTE.MODES.MERGE, GTE.REDO.MULTIACTIONLINES, this); + var changes = new GTE.TREE.Changes(GTE.MODES.MERGE, GTE.REDO.MULTIACTIONLINE, this.nodesInLine[0]); for (var m = 0; m < this.nodesInLine.length; m++) { if (playerInLoop === this.nodesInLine[m].player && numberOfChildrenInLoop === this.nodesInLine[m].children.length) { diff --git a/html/js/guiutils/Tools.js b/html/js/guiutils/Tools.js index 8ade0de..e6ee0ba 100644 --- a/html/js/guiutils/Tools.js +++ b/html/js/guiutils/Tools.js @@ -194,7 +194,9 @@ GTE.UI = (function (parentModule) { Tools.prototype.undo = function() { if(GTE.UNDOQUEUE.length > 0) { - GTE.UNDOQUEUE.pop().undo(); + var evt = GTE.UNDOQUEUE.pop(); + GTE.REDOQUEUE.push(evt.event); + evt.undo(); } } diff --git a/html/js/tree/Node.js b/html/js/tree/Node.js index 4e66de3..00a658f 100644 --- a/html/js/tree/Node.js +++ b/html/js/tree/Node.js @@ -147,7 +147,7 @@ GTE.TREE = (function (parentModule) { // if (this.iset.numberOfNodes > 1) { // this.createSingletonISetWithNode(); // } - changes = new GTE.TREE.Changes(this, GTE.REDO.NODE, GTE.MODES.ADD); + changes = new GTE.TREE.Changes(GTE.MODES.ADD, GTE.REDO.NODE, this); var nodes = []; if (this.iset === null) { if (this.isLeaf()) { @@ -173,7 +173,7 @@ GTE.TREE = (function (parentModule) { break; case GTE.MODES.DELETE: if (this.iset === null) { - var changes = new GTE.TREE.Changes(this, GTE.REDO.NODE, GTE.MODES.DELETE); + var changes = new GTE.TREE.Changes(GTE.MODES.DELETE, GTE.REDO.NODE, this); // If it is a leaf, delete itself, if not, delete all children if (this.isLeaf()) { if(undo) @@ -219,7 +219,7 @@ GTE.TREE = (function (parentModule) { this.iset.onClick(); } else { if(undo) { - var changes = new GTE.TREE.Changes(GTE.GTE.REDO.NODE.PLAYER_ASSIGNMENT, null, this); + var changes = new GTE.TREE.Changes(GTE.MODES.PLAYER_ASSIGNMENT, GTE.REDO.NODE, this); changes.addChange(GTE.MODES.PLAYER_ASSIGNMENT, this); changes.endSetOfChanges(); } diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index 9d77f6c..c39409b 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -6,7 +6,7 @@ GTE.TREE = (function (parentModule) { * @class * @param {type} Represents the type of the changes. */ - function Changes(unit, type, mode) { + function Changes(mode, type, unit) { this.queue = []; this.event = new GTE.TREE.Event(unit, mode, type); } diff --git a/html/js/undoredo/Event.js b/html/js/undoredo/Event.js index 5c65f6a..ed6e1ff 100644 --- a/html/js/undoredo/Event.js +++ b/html/js/undoredo/Event.js @@ -9,6 +9,7 @@ GTE.TREE = (function (parentModule) { this.unit = unit; this.mode = mode; this.type = type; + this.coordinates = this.findCoordinates(unit); } @@ -19,6 +20,14 @@ GTE.TREE = (function (parentModule) { GTE.MODE = curMode; }; + Event.prototype.findCoordinates = function(node) { + var coordinates = []; + while(node.parent != null) { + coordinates.push(node.parent.children.indexOf(node)); + node = node.parent; + } + return coordinates.reverse(); + } // Add class to parent module parentModule.Event = Event; From 339a37ecdde3f56a5cb5db35a2b625c1a33bcc07 Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Wed, 27 Jul 2016 14:50:03 +0530 Subject: [PATCH 44/57] Added functions to event.js --- html/js/undoredo/Event.js | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/html/js/undoredo/Event.js b/html/js/undoredo/Event.js index ed6e1ff..0434d5b 100644 --- a/html/js/undoredo/Event.js +++ b/html/js/undoredo/Event.js @@ -13,10 +13,23 @@ GTE.TREE = (function (parentModule) { } - Event.prototype.execute = function() { + Event.prototype.redo = function() { var curMode = GTE.MODE; GTE.MODE = this.mode; - this.unit.onClick(); + var node = this.getNode(); + switch (this.type) { + case GTE.REDO.NODE: + node.onClick(); + break; + case GTE.REDO.ISET: + node.iset.onClick(); + break; + case GTE.REDO.MULTIACTIONLINE: + this.getMultiactionLine(node).onClick(); + break; + } + + GTE.MODE = curMode; }; @@ -28,6 +41,23 @@ GTE.TREE = (function (parentModule) { } return coordinates.reverse(); } + + Event.prototype.getNode = function() { + var node = GTE.tree.root; + for(var i = 0; i < this.coordinates.length; i++) { + node = node.children[this.coordinates[i]]; + } + return node; + } + + Event.prototype.getMultiactionLine = function(node) { + for(var i = 0; i Date: Wed, 27 Jul 2016 15:40:12 +0530 Subject: [PATCH 45/57] Fixed minor bugs --- html/js/guiutils/Tools.js | 2 +- html/js/tree/ISet.js | 12 ++++++------ html/js/undoredo/Event.js | 16 +++++++++++++--- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/html/js/guiutils/Tools.js b/html/js/guiutils/Tools.js index e6ee0ba..59b5962 100644 --- a/html/js/guiutils/Tools.js +++ b/html/js/guiutils/Tools.js @@ -62,7 +62,7 @@ GTE.UI = (function (parentModule) { // If iset tools have never been chosen if (!this.isetToolsRan) { // Assign singleton isets to each node with no iset - var changes = new GTE.TREE.Changes(GTE.MODES.INITIALIZEISETS); + var changes = new GTE.TREE.Changes(GTE.UNDO.INITIALIZEISETS); changes.pushSingletonChange(GTE.UNDO.INITIALIZEISETS); changes.endSetOfChanges(); GTE.tree.initializeISets(); diff --git a/html/js/tree/ISet.js b/html/js/tree/ISet.js index e4512bc..ab196f7 100644 --- a/html/js/tree/ISet.js +++ b/html/js/tree/ISet.js @@ -280,7 +280,7 @@ GTE.TREE = (function (parentModule) { ISet.prototype.onClick = function () { switch (GTE.MODE) { case GTE.MODES.ADD: - var changes = new GTE.TREE.Changes(GTE.MODES.ADD, GTE.REDO.ISET, this); + var changes = new GTE.TREE.Changes(GTE.MODES.ADD, GTE.REDO.ISET, this.firstNode); if (this.numberOfMoves() === 0) { // If no children, add two, since one child only doesn't // make sense @@ -299,7 +299,7 @@ GTE.TREE = (function (parentModule) { break; case GTE.MODES.DELETE: var children = this.getChildrenNodes(); - var changes = new GTE.TREE.Changes(GTE.MODES.DELETE, GTE.REDO.ISET, this); + var changes = new GTE.TREE.Changes(GTE.MODES.DELETE, GTE.REDO.ISET, this.firstNode); if (children.length === 0) { // Delete node changes.assignSingletonIsetDeletion(this); @@ -321,7 +321,7 @@ GTE.TREE = (function (parentModule) { case GTE.MODES.PLAYER_ASSIGNMENT: // Change the player of every node in the iset var nodes = this.getNodes(); - var changes = new GTE.TREE.Changes(GTE.MODES.PLAYER_ASSIGNMENT, GTE.REDO.ISET, this); + var changes = new GTE.TREE.Changes(GTE.MODES.PLAYER_ASSIGNMENT, GTE.REDO.ISET, this.firstNode); for (var j = 0; j < nodes.length; j++) { changes.addChange(GTE.MODES.PLAYER_ASSIGNMENT, nodes[j]); GTE.tree.assignSelectedPlayerToNode(nodes[j]); @@ -335,8 +335,8 @@ GTE.TREE = (function (parentModule) { break; case GTE.MODES.MERGE: if (this.getPlayer().id !== 0) { - var changes = new GTE.TREE.Changes(GTE.MODES.MERGE, GTE.REDO.ISET, this); - changes.addChange(); + var changes = new GTE.TREE.Changes(GTE.MODES.MERGE, GTE.REDO.ISET, this.firstNode); + changes.addChange(GTE.MODES.MERGE, null, this); if(GTE.tree.selected.length != 0) { changes.select = true; changes.iset = GTE.tree.selected[0]; @@ -346,7 +346,7 @@ GTE.TREE = (function (parentModule) { } break; case GTE.MODES.DISSOLVE: - var changes = new GTE.TREE.Changes(GTE.MODES.DISSOLVE, GTE.REDO.ISET, this); + var changes = new GTE.TREE.Changes(GTE.MODES.DISSOLVE, GTE.REDO.ISET, this.firstNode); if(changes.pushChangesBeforeDissolving(this)) changes.endSetOfChanges(); this.dissolve(); diff --git a/html/js/undoredo/Event.js b/html/js/undoredo/Event.js index 0434d5b..1dbaa30 100644 --- a/html/js/undoredo/Event.js +++ b/html/js/undoredo/Event.js @@ -9,12 +9,22 @@ GTE.TREE = (function (parentModule) { this.unit = unit; this.mode = mode; this.type = type; - this.coordinates = this.findCoordinates(unit); + if(this.mode != GTE.UNDO.INITIALIZEISETS) + this.coordinates = this.findCoordinates(unit); + if(this.mode == GTE.MODES.PLAYER_ASSIGNMENT) { + this.player = GTE.tools.activePlayer; + } } Event.prototype.redo = function() { + if(this.mode == GTE.UNDO.INITIALIZEISETS) { + GTE.tools.switchMode(GTE.MODES.MERGE); + return; + } var curMode = GTE.MODE; + var pl = GTE.tools.activePlayer; + GTE.tools.activePlayer = this.player; GTE.MODE = this.mode; var node = this.getNode(); switch (this.type) { @@ -28,9 +38,9 @@ GTE.TREE = (function (parentModule) { this.getMultiactionLine(node).onClick(); break; } - - + GTE.tools.activePlayer = pl; GTE.MODE = curMode; + GTE.tools.switchMode(GTE.MODE); }; Event.prototype.findCoordinates = function(node) { From 4f50ef148d06b6696dbce3e68d96e282e712051f Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Fri, 29 Jul 2016 11:01:32 +0530 Subject: [PATCH 46/57] Reinitialised redoqueue when an event is executed --- html/js/undoredo/Changes.js | 1 + 1 file changed, 1 insertion(+) diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index c39409b..27b3cad 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -205,6 +205,7 @@ GTE.TREE = (function (parentModule) { Changes.prototype.endSetOfChanges = function() { this.pushToQueue(); + GTE.REDOQUEUE = []; } // Add class to parent module parentModule.Changes = Changes; From e08340ff716918319f15aed43127e52676b58dbf Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Mon, 1 Aug 2016 12:18:38 +0530 Subject: [PATCH 47/57] Added key events for capturing undo and redo --- html/js/main.js | 12 ++++++++++++ html/js/tree/ISet.js | 5 +++-- html/js/tree/Node.js | 4 ++-- html/js/undoredo/Changes.js | 1 - 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/html/js/main.js b/html/js/main.js index 4b12b9f..fe75345 100644 --- a/html/js/main.js +++ b/html/js/main.js @@ -210,4 +210,16 @@ settings.style.left = left + 'px'; } + function KeyPress(e) { + var evtobj = window.event? event : e + if (evtobj.keyCode == 90 && evtobj.ctrlKey) { + GTE.tools.undo(); + } + if (evtobj.keyCode == 89 && evtobj.ctrlKey) { + GTE.tools.redo(); + } + } + + document.onkeydown = KeyPress; + }()); diff --git a/html/js/tree/ISet.js b/html/js/tree/ISet.js index ab196f7..753bb50 100644 --- a/html/js/tree/ISet.js +++ b/html/js/tree/ISet.js @@ -277,7 +277,7 @@ GTE.TREE = (function (parentModule) { /** * On click function for the information set */ - ISet.prototype.onClick = function () { + ISet.prototype.onClick = function (undo) { switch (GTE.MODE) { case GTE.MODES.ADD: var changes = new GTE.TREE.Changes(GTE.MODES.ADD, GTE.REDO.ISET, this.firstNode); @@ -293,7 +293,8 @@ GTE.TREE = (function (parentModule) { var isets = GTE.tree.addChildNodeToISet(this); changes.pushChangesAfterAddingIsetsToArray(isets); } - changes.endSetOfChanges(); + if(undo) + changes.endSetOfChanges(); // Tell the tree to redraw itself GTE.tree.draw(); break; diff --git a/html/js/tree/Node.js b/html/js/tree/Node.js index 00a658f..9fa52bf 100644 --- a/html/js/tree/Node.js +++ b/html/js/tree/Node.js @@ -167,7 +167,7 @@ GTE.TREE = (function (parentModule) { if(undo) changes.endSetOfChanges(); } else { - this.iset.onClick(); + this.iset.onClick(undo); } return nodes; break; @@ -192,7 +192,7 @@ GTE.TREE = (function (parentModule) { // Tell the tree to redraw itself GTE.tree.draw(); } else { - this.iset.onClick(); + this.iset.onClick(undo); } break; case GTE.MODES.MERGE: diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index 27b3cad..c39409b 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -205,7 +205,6 @@ GTE.TREE = (function (parentModule) { Changes.prototype.endSetOfChanges = function() { this.pushToQueue(); - GTE.REDOQUEUE = []; } // Add class to parent module parentModule.Changes = Changes; From 661bb6f243b1de6a8f9547b9a0c9e8dcf7e97932 Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Wed, 3 Aug 2016 15:13:08 +0530 Subject: [PATCH 48/57] Added documentation --- html/js/undoredo/Changes.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index c39409b..a6b101a 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -11,6 +11,10 @@ GTE.TREE = (function (parentModule) { this.event = new GTE.TREE.Event(unit, mode, type); } + /** + * Function that undos all the Change objects + * present in the queue. + */ Changes.prototype.undo = function() { for(var i = this.queue.length-1; i>=0; i--) { this.queue[i].execute(); @@ -30,6 +34,10 @@ GTE.TREE = (function (parentModule) { } }; + /** + * Function that adds a change to the queue according to the + * mode specified + */ Changes.prototype.addChange = function(mode, node, iset) { switch (mode) { case GTE.MODES.ADD: @@ -89,6 +97,9 @@ GTE.TREE = (function (parentModule) { } }; + /** + * Function that pushes all the deleted children of a particular node + */ Changes.prototype.pushChildrenDeleted = function(node) { for(var i = 0; i Date: Thu, 4 Aug 2016 10:55:53 +0530 Subject: [PATCH 49/57] Added Add, delete, merge and dissolve buttons to undoable events --- html/js/main.js | 8 ++++++++ html/js/structure.js | 3 ++- html/js/undoredo/Change.js | 23 +++++++++++++++++++++-- html/js/undoredo/Changes.js | 7 +++++++ html/js/undoredo/Event.js | 4 +++- 5 files changed, 41 insertions(+), 4 deletions(-) diff --git a/html/js/main.js b/html/js/main.js index fe75345..ed1f6b5 100644 --- a/html/js/main.js +++ b/html/js/main.js @@ -80,21 +80,29 @@ }); document.getElementById("button-add").addEventListener("click", function(){ + var changes = new GTE.TREE.Changes(GTE.UNDO.BUTTONSWITCH, null, document.getElementById("button-add")); + changes.pushButtonSwitchChange(GTE.MODES.ADD); GTE.tools.switchMode(GTE.MODES.ADD); return false; }); document.getElementById("button-remove").addEventListener("click", function(){ + var changes = new GTE.TREE.Changes(GTE.UNDO.BUTTONSWITCH, null, document.getElementById("button-remove")); + changes.pushButtonSwitchChange(GTE.MODES.DELETE); GTE.tools.switchMode(GTE.MODES.DELETE); return false; }); document.getElementById("button-merge").addEventListener("click", function(){ + var changes = new GTE.TREE.Changes(GTE.UNDO.BUTTONSWITCH, null, document.getElementById("button-merge")); + changes.pushButtonSwitchChange(GTE.MODES.MERGE); GTE.tools.switchMode(GTE.MODES.MERGE); return false; }); document.getElementById("button-dissolve").addEventListener("click", function(){ + var changes = new GTE.TREE.Changes(GTE.UNDO.BUTTONSWITCH, null, document.getElementById("button-dissolve")); + changes.pushButtonSwitchChange(GTE.MODES.DISSOLVE); GTE.tools.switchMode(GTE.MODES.DISSOLVE); return false; }); diff --git a/html/js/structure.js b/html/js/structure.js index cdcbe0e..844a0cf 100644 --- a/html/js/structure.js +++ b/html/js/structure.js @@ -103,7 +103,8 @@ var GTE = (function () { ADDISET : 11, DEINITIALIZEISETS : 12, PUSHSELECTEDQUEUE : 13, - PUSHISET : 14 + PUSHISET : 14, + BUTTONSWITCH : 15 }; GTE.REDO = { diff --git a/html/js/undoredo/Change.js b/html/js/undoredo/Change.js index 4174212..3d71675 100644 --- a/html/js/undoredo/Change.js +++ b/html/js/undoredo/Change.js @@ -9,8 +9,8 @@ GTE.TREE = (function (parentModule) { function Change(node, mode, from, to) { this.node = node; this.mode = mode; - this.from = from || null; - this.to = to || null; + this.from = from; + this.to = to; } Change.prototype.execute = function() { @@ -87,11 +87,30 @@ GTE.TREE = (function (parentModule) { case GTE.UNDO.ADDISET: GTE.tree.deleteNode(this.node.firstNode); break; + case GTE.UNDO.BUTTONSWITCH: + GTE.tools.switchMode(this.from); + break; default: break; } }; + Change.prototype.getButtonFromMode = function(mode) { + switch (mode) { + case GTE.MODES.ADD: + return document.getElementById("button-add"); + break; + case GTE.MODES.DELETE: + return document.getElementById("button-remove"); + break; + case GTE.MODES.MERGE: + return document.getElementById("button-merge"); + break; + case GTE.MODES.DISSOLVE: + return document.getElementById("button-dissolve"); + break; + } + } // Add class to parent module parentModule.Change = Change; diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index a6b101a..8ebbb72 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -225,6 +225,13 @@ GTE.TREE = (function (parentModule) { Changes.prototype.endSetOfChanges = function() { this.pushToQueue(); } + + Changes.prototype.pushButtonSwitchChange = function(mode) { + if(GTE.MODE != mode) { + this.queue.push(new GTE.TREE.Change(null, GTE.UNDO.BUTTONSWITCH, GTE.MODE)); + GTE.UNDOQUEUE.push(this); + } + } // Add class to parent module parentModule.Changes = Changes; diff --git a/html/js/undoredo/Event.js b/html/js/undoredo/Event.js index 1dbaa30..90e90ec 100644 --- a/html/js/undoredo/Event.js +++ b/html/js/undoredo/Event.js @@ -9,7 +9,7 @@ GTE.TREE = (function (parentModule) { this.unit = unit; this.mode = mode; this.type = type; - if(this.mode != GTE.UNDO.INITIALIZEISETS) + if(this.mode != GTE.UNDO.INITIALIZEISETS && this.mode != GTE.UNDO.BUTTONSWITCH) this.coordinates = this.findCoordinates(unit); if(this.mode == GTE.MODES.PLAYER_ASSIGNMENT) { this.player = GTE.tools.activePlayer; @@ -37,6 +37,8 @@ GTE.TREE = (function (parentModule) { case GTE.REDO.MULTIACTIONLINE: this.getMultiactionLine(node).onClick(); break; + case GTE.UNDO.BUTTONSWITCH: + this.unit.click(); } GTE.tools.activePlayer = pl; GTE.MODE = curMode; From 3298bbee587fcb29dda95c0d37e3e044cdcdf0e9 Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Fri, 5 Aug 2016 10:19:25 +0530 Subject: [PATCH 50/57] Shifted click function --- html/js/undoredo/Event.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/html/js/undoredo/Event.js b/html/js/undoredo/Event.js index 90e90ec..2c5d59a 100644 --- a/html/js/undoredo/Event.js +++ b/html/js/undoredo/Event.js @@ -22,6 +22,9 @@ GTE.TREE = (function (parentModule) { GTE.tools.switchMode(GTE.MODES.MERGE); return; } + if(this.mode == GTE.UNDO.BUTTONSWITCH) { + this.unit.click(); + } var curMode = GTE.MODE; var pl = GTE.tools.activePlayer; GTE.tools.activePlayer = this.player; @@ -37,8 +40,6 @@ GTE.TREE = (function (parentModule) { case GTE.REDO.MULTIACTIONLINE: this.getMultiactionLine(node).onClick(); break; - case GTE.UNDO.BUTTONSWITCH: - this.unit.click(); } GTE.tools.activePlayer = pl; GTE.MODE = curMode; From 75c701fc46eeb1eba572ac8a17f0d8632513c3d7 Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Fri, 5 Aug 2016 10:20:52 +0530 Subject: [PATCH 51/57] Added return at the end of the function --- html/js/undoredo/Event.js | 1 + 1 file changed, 1 insertion(+) diff --git a/html/js/undoredo/Event.js b/html/js/undoredo/Event.js index 2c5d59a..b863ec1 100644 --- a/html/js/undoredo/Event.js +++ b/html/js/undoredo/Event.js @@ -24,6 +24,7 @@ GTE.TREE = (function (parentModule) { } if(this.mode == GTE.UNDO.BUTTONSWITCH) { this.unit.click(); + return; } var curMode = GTE.MODE; var pl = GTE.tools.activePlayer; From 80680e7191bd7f1cd25070ecc5d0cbb3d7c49af8 Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Fri, 5 Aug 2016 10:33:38 +0530 Subject: [PATCH 52/57] Added undo to button-player-add and button-player-remove --- html/js/main.js | 6 ++++++ html/js/structure.js | 4 +++- html/js/undoredo/Change.js | 5 +++++ html/js/undoredo/Changes.js | 2 +- 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/html/js/main.js b/html/js/main.js index ed1f6b5..a45bf56 100644 --- a/html/js/main.js +++ b/html/js/main.js @@ -114,11 +114,17 @@ } document.getElementById("button-player-more").addEventListener("click", function(){ + var changes = new GTE.TREE.Changes(GTE.UNDO.BUTTONSWITCH, null, document.getElementById("button-player-more")); + changes.queue.push(new GTE.TREE.Change(null, GTE.UNDO.ADDPLAYER)); + changes.endSetOfChanges(); GTE.tools.addPlayer(); return false; }); document.getElementById("button-player-less").addEventListener("click", function(){ + var changes = new GTE.TREE.Changes(GTE.UNDO.BUTTONSWITCH, null, document.getElementById("button-player-less")); + changes.queue.push(new GTE.TREE.Change(null, GTE.UNDO.REMOVEPLAYER)); + changes.endSetOfChanges(); GTE.tools.removeLastPlayer(); return false; }); diff --git a/html/js/structure.js b/html/js/structure.js index 844a0cf..414c436 100644 --- a/html/js/structure.js +++ b/html/js/structure.js @@ -104,7 +104,9 @@ var GTE = (function () { DEINITIALIZEISETS : 12, PUSHSELECTEDQUEUE : 13, PUSHISET : 14, - BUTTONSWITCH : 15 + BUTTONSWITCH : 15, + ADDPLAYER : 16, + REMOVEPLAYER : 17 }; GTE.REDO = { diff --git a/html/js/undoredo/Change.js b/html/js/undoredo/Change.js index 3d71675..bf6beea 100644 --- a/html/js/undoredo/Change.js +++ b/html/js/undoredo/Change.js @@ -90,6 +90,11 @@ GTE.TREE = (function (parentModule) { case GTE.UNDO.BUTTONSWITCH: GTE.tools.switchMode(this.from); break; + case GTE.UNDO.ADDPLAYER: + GTE.tools.removeLastPlayer(); + break; + case GTE.UNDO.REMOVEPLAYER: + GTE.tools.addPlayer(); default: break; } diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index 8ebbb72..ba5575c 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -1,5 +1,5 @@ GTE.TREE = (function (parentModule) { - "use strict"; +"use strict"; /** * Creates a new Changes Object. From de8fd4ec532a8018e9883c009b4da8d227e68fdc Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Fri, 5 Aug 2016 22:03:45 +0530 Subject: [PATCH 53/57] Added undo/redo feature to buttons --- html/js/guiutils/Tools.js | 7 ++++++- html/js/main.js | 2 +- html/js/undoredo/Change.js | 6 +++++- html/js/undoredo/Changes.js | 6 +++++- 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/html/js/guiutils/Tools.js b/html/js/guiutils/Tools.js index 59b5962..976a40a 100644 --- a/html/js/guiutils/Tools.js +++ b/html/js/guiutils/Tools.js @@ -113,8 +113,13 @@ GTE.UI = (function (parentModule) { * Handles player buttons onclicks * @param {Number|String} playerId Player to be selected */ - Tools.prototype.buttonPlayerHandler = function(playerId) { + Tools.prototype.buttonPlayerHandler = function(playerIndex) { return function () { + var player = document.getElementsByClassName("button-player")[playerIndex]; + var changes = new GTE.TREE.Changes(GTE.UNDO.BUTTONSWITCH, null, player); + var playerId = player.getAttribute("player"); + if(GTE.tools.activePlayer != playerId) + changes.pushButtonSwitchChange(); GTE.tools.selectPlayer(parseInt(playerId)); }; }; diff --git a/html/js/main.js b/html/js/main.js index a45bf56..43bcef7 100644 --- a/html/js/main.js +++ b/html/js/main.js @@ -110,7 +110,7 @@ var playerButtons = document.getElementsByClassName("button-player"); for (var i = 0; i < playerButtons.length; i++) { playerButtons[i].addEventListener("click", - GTE.tools.buttonPlayerHandler(playerButtons[i].getAttribute("player"))); + GTE.tools.buttonPlayerHandler(i)); } document.getElementById("button-player-more").addEventListener("click", function(){ diff --git a/html/js/undoredo/Change.js b/html/js/undoredo/Change.js index bf6beea..04543ba 100644 --- a/html/js/undoredo/Change.js +++ b/html/js/undoredo/Change.js @@ -88,7 +88,11 @@ GTE.TREE = (function (parentModule) { GTE.tree.deleteNode(this.node.firstNode); break; case GTE.UNDO.BUTTONSWITCH: - GTE.tools.switchMode(this.from); + if(this.node) { + GTE.tools.selectPlayer(this.from); + } else { + GTE.tools.switchMode(this.from); + } break; case GTE.UNDO.ADDPLAYER: GTE.tools.removeLastPlayer(); diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index ba5575c..7bae8ca 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -228,7 +228,11 @@ GTE.TREE = (function (parentModule) { Changes.prototype.pushButtonSwitchChange = function(mode) { if(GTE.MODE != mode) { - this.queue.push(new GTE.TREE.Change(null, GTE.UNDO.BUTTONSWITCH, GTE.MODE)); + if(GTE.tools.activePlayer != -1) { + this.queue.push(new GTE.TREE.Change(true, GTE.UNDO.BUTTONSWITCH, GTE.tools.activePlayer)); + } else { + this.queue.push(new GTE.TREE.Change(null, GTE.UNDO.BUTTONSWITCH, GTE.MODE)); + } GTE.UNDOQUEUE.push(this); } } From 25781ecea59aa7535fe7ad799fbfc42e6e37eaba Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Sat, 6 Aug 2016 11:50:12 +0530 Subject: [PATCH 54/57] Added return value to fix undo feature while dissolving isets --- html/js/undoredo/Changes.js | 1 + 1 file changed, 1 insertion(+) diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index 7bae8ca..eb0b3db 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -206,6 +206,7 @@ GTE.TREE = (function (parentModule) { } this.assignMovesOnDeletingIset(iset); this.pushRemovedIset(iset); + return true; } Changes.prototype.pushChangesAfterAddingIsets = function(iset) { From 1a104368933be0ccb5cbd9b108ac600648d8f045 Mon Sep 17 00:00:00 2001 From: Harkirat Singh Date: Sat, 6 Aug 2016 15:11:31 +0530 Subject: [PATCH 55/57] Added docs --- html/js/undoredo/Changes.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index eb0b3db..f5fb079 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -132,18 +132,30 @@ GTE.TREE = (function (parentModule) { } } + /** + * Function that pushes singular node whose iset has been + * removed to the queue. + */ Changes.prototype.pushSingleNodeWithRemovedIset = function(node) { var change = new GTE.TREE.Change(node, GTE.MODES.MERGE, node.iset); change.from = node.iset; this.queue.push(change); } + /** + * Function that pushes a new change which represents the + * removal of an iset from GTE.tree.isets + */ Changes.prototype.pushRemovedIset = function(iset) { var change = new GTE.TREE.Change(iset, GTE.UNDO.POPISET); change.index = GTE.tree.isets.indexOf(iset); this.queue.push(change); } + /** + * Function that assigns all changes after an iset has + * been deleted to the queue. + */ Changes.prototype.assignChangesOnDeletingIset = function(iset) { var children = iset.getChildrenNodes(); for(var i = 0; i Date: Mon, 8 Aug 2016 00:07:19 +0530 Subject: [PATCH 56/57] Added docs --- html/js/undoredo/Changes.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index f5fb079..185ca24 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -196,6 +196,10 @@ GTE.TREE = (function (parentModule) { this.queue.push(new GTE.TREE.Change(node, GTE.UNDO.ASSIGNISET, node.iset)); } + /** + * Function that adds iset and node related changes to queue on + * deletion of an iset recursively. + */ Changes.prototype.assignMovesOnDeletingIset = function(iset) { var children = iset.getChildrenNodes(); for(var i = 0; i Date: Mon, 8 Aug 2016 21:32:49 +0530 Subject: [PATCH 57/57] Added docs and fixed typos --- html/js/undoredo/Changes.js | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/html/js/undoredo/Changes.js b/html/js/undoredo/Changes.js index 185ca24..60516da 100644 --- a/html/js/undoredo/Changes.js +++ b/html/js/undoredo/Changes.js @@ -213,6 +213,9 @@ GTE.TREE = (function (parentModule) { } } + /** + * Function that adds changes on deleting a single iset + */ Changes.prototype.assignSingletonIsetDeletion = function(iset) { this.queue.push(new GTE.TREE.Change(iset.firstNode, GTE.UNDO.ASSIGNISET, iset.firstNode.iset)); this.pushRemovedIset(iset); @@ -221,6 +224,10 @@ GTE.TREE = (function (parentModule) { this.addChange(GTE.MODES.DELETE, iset.firstNode); } + /** + * Function that pushes all the changes needed to undo the effect + * of dissolving an iset + */ Changes.prototype.pushChangesBeforeDissolving = function(iset) { var nodes = iset.getNodes(); if(nodes.length <= 1) @@ -233,10 +240,18 @@ GTE.TREE = (function (parentModule) { return true; } + /** + * Function that pushes all the changes after a new iset + * has been added. + */ Changes.prototype.pushChangesAfterAddingIsets = function(iset) { this.queue.push(new GTE.TREE.Change(iset, GTE.UNDO.ADDISET)); } + /** + * Function that pushes changes of all the isets that have been + * added in an event. + */ Changes.prototype.pushChangesAfterAddingIsetsToArray = function(isets) { for(var i = 0; i