Skip to content

Commit c5aba3d

Browse files
committed
fiks: reset algo + kombinert knapp + frontend klar til visning + hastigheter
1 parent d5e663a commit c5aba3d

File tree

16 files changed

+659
-358
lines changed

16 files changed

+659
-358
lines changed

.idea/dictionaries/kenap.xml

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/workspace.xml

Lines changed: 446 additions & 260 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Kruskal/css/style.css

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ body {
1212
overflow: hidden;
1313
}
1414

15+
h1#headerText {
16+
display: table;
17+
}
18+
1519
div#graphUI.kruskal {
1620
width: 50%;
1721
border: solid 3px #b6b6b6;
@@ -27,16 +31,17 @@ div#queueUI {
2731
}
2832

2933
div#edgeTitle {
30-
position: relative;
31-
box-sizing: border-box;
32-
border: 10px;
34+
text-align: center;
35+
margin-top: -30px;
36+
margin-left: 320px;
3337
}
3438

3539
div#edgeTable {
3640
white-space: pre;
3741
list-style-type: none;
3842
position: relative;
39-
height: 10%;
43+
height: 100%;
44+
margin-top: -11px;
4045

4146
}
4247

Kruskal/index.html

Lines changed: 36 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -17,39 +17,43 @@
1717
</head>
1818

1919
<body>
20-
<h1 id="headerText">Kruskal's Algorithm</h1>
21-
<script src="js/graphUI.js"></script>
22-
23-
24-
<div id="graphUI" class="main-container kruskal">
25-
<svg id="edgeSvg" height="100%" width="100%"></svg>
26-
</div>
27-
<div id="edgeTitle"><h3>Nodes:</h3></div>
28-
<div id="edgeTable" class="main-container edgeText-container"></div>
29-
<div id="totalWeight" class="main-container totalWeight-container">
30-
<p>Total weight: 0</p>
31-
</div>
32-
<script>graph3();</script>
33-
34-
<div id="buttonDiv" class="bottom-container left-bottom">
35-
<!-- Testing: Creating a already defined graph -->
36-
<button id="start" class="my-button"
37-
onclick="startKruskal(); manager.start();">Start</button>
38-
<button id="togglePause" class="my-button" onclick="viewer.pause()">Pause</button>
39-
<button id="prev" class="my-button" onclick="viewer.backward();">Previous</button>
40-
<button id="next" class="my-button" onclick="viewer.forward();">Next</button>
41-
<select id="nodes" onchange="numberOfNodes(value)">
42-
<option value="3">3</option>
43-
<option value="4">4</option>
44-
<option value="5">5</option>
45-
<option value="6">6</option>
46-
<option value="7">7</option>
47-
<option value="8">8</option>
48-
<option value="9">9</option>
49-
<option value="10">10</option>
50-
</select>
51-
</div>
20+
<h1 id="headerText">Kruskal's Algorithm</h1>
21+
<script src="js/graphUI.js"></script>
5222

5323

24+
<div id="graphUI" class="main-container kruskal">
25+
<svg id="edgeSvg" height="100%" width="100%"></svg>
26+
</div>
27+
28+
<div id="edgeTitle"><h3>Nodes:</h3></div>
29+
<div id="edgeTable" class="main-container edgeText-container"></div>
30+
<div id="totalWeight" class="main-container totalWeight-container">
31+
<p>Total weight: 0</p>
32+
</div>
33+
34+
35+
<div id="buttonDiv" class="bottom-container left-bottom">
36+
<button id="togglePause" class="my-button" onclick="viewer.pause()">Play</button>
37+
<button id="backward" class="my-button" onclick="viewer.backward()">Previous</button>
38+
<button id="forward" class="my-button" onclick="viewer.forward()">Forward</button>
39+
<select id="nodes" onchange="numberOfNodes(value)">
40+
<option value="3">3</option>
41+
<option value="4">4</option>
42+
<option value="5">5</option>
43+
<option value="6">6</option>
44+
<option value="7">7</option>
45+
<option value="8">8</option>
46+
<option value="9">9</option>
47+
<option value="10">10</option>
48+
</select>
49+
<br>
50+
<br>
51+
<button id="slow" class="my-button" onclick="viewer.slow();">Slow</button>
52+
<button id="medium" class="my-button" onclick="viewer.medium();">Medium</button>
53+
<button id="fast" class="my-button" onclick="viewer.fast();">Fast</button>
54+
55+
</div>
56+
<script>numberOfNodes(3);</script>
57+
5458
</body>
5559
</html>

Kruskal/js/Controller.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ var Controller = /** @class */ (function () {
1717
viewer.connectTheseNodes(node1, node2);
1818
};
1919
Controller.prototype.resetGraph = function () {
20-
viewer.resetAll();
20+
viewer.resetMyAll();
2121
};
2222
Controller.prototype.highlightMyEdge = function (edgeId) {
2323
viewer.setHighlightEdge(edgeId);

Kruskal/js/Controller.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class Controller {
1919
}
2020

2121
resetGraph() {
22-
viewer.resetAll();
22+
viewer.resetMyAll();
2323
}
2424

2525
highlightMyEdge(edgeId: number) {
@@ -75,5 +75,5 @@ class Controller {
7575
}
7676
}
7777

78-
var controller: Controller = new Controller();
78+
let controller: Controller = new Controller();
7979

Kruskal/js/EventManager.js

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@
55
/** Manager for events stored in queue. Manager is also responsible for executing events automatically */
66
var EventManager = /** @class */ (function () {
77
function EventManager() {
8-
this.delayTime = 450; // Original value
8+
this.delayTime = 1000; // Original value
99
this.nextEvents = [];
1010
this.previousEvents = [];
11+
this.paused = true;
1112
}
1213
// Executing the next event in the queue, adding it to 'previous'
1314
EventManager.prototype.next = function () {
@@ -22,6 +23,7 @@ var EventManager = /** @class */ (function () {
2223
};
2324
// Executing the previous event
2425
EventManager.prototype.previous = function () {
26+
this.pause();
2527
if (this.previousEvents.length == 0)
2628
return;
2729
var event = this.previousEvents.pop();
@@ -32,14 +34,45 @@ var EventManager = /** @class */ (function () {
3234
this.nextEvents.push(event);
3335
};
3436
EventManager.prototype.start = function () {
35-
clearInterval(this.eventThread);
3637
var manager = this; // Anonymous functions cannot access this...
38+
this.paused = false;
3739
this.eventThread = setInterval(function () {
3840
manager.next();
3941
}, manager.delayTime);
4042
};
4143
EventManager.prototype.pause = function () {
44+
this.paused = true;
45+
clearInterval(this.eventThread);
46+
};
47+
EventManager.prototype.unpause = function () {
48+
var manager = this;
49+
this.paused = false;
50+
this.eventThread = setInterval(function () {
51+
manager.next();
52+
}, manager.delayTime);
53+
};
54+
EventManager.prototype.clear = function () {
4255
clearInterval(this.eventThread);
56+
this.nextEvents = [];
57+
this.previousEvents = [];
58+
};
59+
EventManager.prototype.slow = function () {
60+
this.delayTime = 1500;
61+
this.helpSetInterval();
62+
};
63+
EventManager.prototype.medium = function () {
64+
this.delayTime = 1000;
65+
this.helpSetInterval();
66+
};
67+
EventManager.prototype.fast = function () {
68+
this.delayTime = 500;
69+
this.helpSetInterval();
70+
};
71+
EventManager.prototype.helpSetInterval = function () {
72+
if (!this.paused) {
73+
this.pause();
74+
this.start();
75+
}
4376
};
4477
return EventManager;
4578
}());

Kruskal/js/EventManager.ts

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,18 @@ declare var $: any;
77

88
/** Manager for events stored in queue. Manager is also responsible for executing events automatically */
99
class EventManager {
10-
delayTime: number = 450; // Original value
10+
delayTime: number = 1000; // Original value
1111
nextEvents: FrontendEvent[] = [];
1212
previousEvents: FrontendEvent[] = [];
1313
eventThread: number;
14+
paused: boolean = true;
1415

1516
// Executing the next event in the queue, adding it to 'previous'
1617
next() {
1718
if (this.nextEvents.length == 0) {
1819
return;
1920
}
20-
var event = (<FrontendEvent>this.nextEvents.shift());
21+
let event: FrontendEvent = (<FrontendEvent> this.nextEvents.shift());
2122
event.next();
2223
this.previousEvents.push(event);
2324
if (event.duration == 0)
@@ -26,9 +27,10 @@ class EventManager {
2627

2728
// Executing the previous event
2829
previous() {
30+
this.pause();
2931
if (this.previousEvents.length == 0)
3032
return;
31-
var event: FrontendEvent = (<FrontendEvent>this.previousEvents.pop());
33+
let event: FrontendEvent = (<FrontendEvent> this.previousEvents.pop());
3234
event.previous();
3335
this.nextEvents.unshift(event);
3436
}
@@ -38,15 +40,52 @@ class EventManager {
3840
}
3941

4042
start() {
41-
clearInterval(this.eventThread);
42-
var manager = this; // Anonymous functions cannot access this...
43+
let manager = this; // Anonymous functions cannot access this...
44+
this.paused = false;
4345
this.eventThread = setInterval(function () {
4446
manager.next();
4547
}, manager.delayTime);
4648
}
4749

4850
pause() {
51+
this.paused = true;
52+
clearInterval(this.eventThread);
53+
}
54+
55+
unpause() {
56+
let manager = this;
57+
this.paused = false;
58+
this.eventThread = setInterval(function () {
59+
manager.next();
60+
}, manager.delayTime);
61+
}
62+
63+
clear() {
4964
clearInterval(this.eventThread);
65+
this.nextEvents = [];
66+
this.previousEvents = [];
67+
}
68+
69+
slow() {
70+
this.delayTime = 1500;
71+
this.helpSetInterval();
72+
}
73+
74+
medium() {
75+
this.delayTime = 1000;
76+
this.helpSetInterval();
77+
}
78+
79+
fast() {
80+
this.delayTime = 500;
81+
this.helpSetInterval();
82+
}
83+
84+
helpSetInterval() {
85+
if (!this.paused) {
86+
this.pause();
87+
this.start();
88+
}
5089
}
5190
}
5291

Kruskal/js/KruskalAlgorithm.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ var arr = [];
1010
var queue = [];
1111
var currentEdge = 0;
1212
function startKruskal() {
13-
controller.disableStartButton();
1413
var edgeList = sortEdges();
1514
for (var i = 0; i < edgeList.length; i++) {
1615
arr[i] = i;
@@ -45,7 +44,6 @@ function startKruskal() {
4544
arr = [];
4645
queue = [];
4746
currentEdge = 0;
48-
controller.enableStartButtion();
4947
}
5048
function find(index) {
5149
var root = index;

Kruskal/js/KruskalAlgorithm.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ let queue: number[] = [];
1313
let currentEdge: number = 0;
1414

1515
function startKruskal() {
16-
controller.disableStartButton();
1716
let edgeList = sortEdges();
1817

1918
for (let i = 0; i < edgeList.length; i++) {
@@ -55,8 +54,6 @@ function startKruskal() {
5554
arr = [];
5655
queue = [];
5756
currentEdge = 0;
58-
59-
controller.enableStartButtion();
6057
}
6158

6259
function find(index: number) {

Kruskal/js/Methods.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,12 @@ function enableButton() {
6161
$("#start").css({ "opacity": 1 });
6262
}
6363
function numberOfNodes(value) {
64-
viewer.resetAll();
64+
viewer.resetMyAll();
6565
drawGraph(value);
66+
startKruskal();
6667
}
6768
function drawGraph(n) {
6869
$("#edgeTable").empty();
69-
viewer.resetAll(); //Not working, button must reset
7070
switch (+n) {
7171
case 3:
7272
graph3();

Kruskal/js/Methods.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,13 @@ function enableButton() {
7676
}
7777

7878
function numberOfNodes(value: number) {
79-
viewer.resetAll();
79+
viewer.resetMyAll();
8080
drawGraph(value);
81+
startKruskal();
8182
}
8283

8384
function drawGraph(n: number) {
8485
$("#edgeTable").empty();
85-
viewer.resetAll(); //Not working, button must reset
8686

8787
switch (+n) {
8888
case 3:

0 commit comments

Comments
 (0)