Skip to content

Commit 1d22f99

Browse files
committed
various functional improvements & fixes
1 parent 3eed092 commit 1d22f99

File tree

7 files changed

+65
-16
lines changed

7 files changed

+65
-16
lines changed

model/blockStateService.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,14 @@ import {
1616
} from "./elementService.js";
1717
import { resetCanvas } from "../view/services/core/canvasService.js";
1818
import { resetElementRenderingService } from "../view/services/core/elementRenderingService.js";
19-
import { resetLineRenderingService } from "../view/services/core/lineRenderingService.js";
19+
import {
20+
getLineViewsNumber,
21+
resetLineRenderingService,
22+
} from "../view/services/core/lineRenderingService.js";
23+
24+
const optimizeTopologyButton = document.getElementById(
25+
"optimize-topology-button"
26+
);
2027

2128
/**
2229
* Clear current block state
@@ -54,6 +61,8 @@ export const setBlockState = function (state) {
5461
getElementFromElementId(x[1])
5562
);
5663
});
64+
65+
optimizeTopologyButton.disabled = getLineViewsNumber() === 0 ? true : false;
5766
};
5867

5968
/**

model/elementService.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,13 @@ export const setElementIdForElement = function (elementId, element) {
4343
elementsMap.set(elementId, element);
4444
};
4545

46+
/**
47+
* Remove element
48+
*/
49+
export const removeElementWithElementId = function (elementId) {
50+
elementsMap.delete(elementId);
51+
};
52+
4653
/**
4754
* Reset the elementMap and elementId
4855
*/
@@ -54,7 +61,7 @@ export const resetElementService = () => {
5461
/**
5562
* Delete element from block
5663
*/
57-
export const deleteElement = function (element) {
64+
export const deleteElement = function (element, doNotStoreNewState) {
5865
disableHistoricalStateStorage();
5966
const block = element.getBlock();
6067
if (element.hasInput()) {
@@ -89,5 +96,7 @@ export const deleteElement = function (element) {
8996
}
9097

9198
enableHistoricalStateStorage();
92-
block.storeNewHistoricalState();
99+
if (!doNotStoreNewState) {
100+
block.storeNewHistoricalState();
101+
}
93102
};

model/elements/block.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {
1919
storeNewHistoricalBlockState,
2020
clearBlockStateHistory,
2121
} from "../blockStateService.js";
22+
import { removeElementWithElementId } from "../elementService.js";
2223

2324
/**
2425
* Circuit elements (tfs, adders and blocks) are implemented as objects, using the message-passing style
@@ -90,6 +91,7 @@ export class Block {
9091
this._iAmSimplified = false;
9192
this._blocks = this._blocks.filter((y) => y !== x);
9293
removeRenderedElement(x.getElementId());
94+
removeElementWithElementId(x.getElementId());
9395
storeNewHistoricalBlockState.call(this);
9496
};
9597

@@ -107,6 +109,7 @@ export class Block {
107109
this._iAmSimplified = false;
108110
this._tfs = this._tfs.filter((y) => y !== x);
109111
removeRenderedElement(x.getElementId());
112+
removeElementWithElementId(x.getElementId());
110113
storeNewHistoricalBlockState.call(this);
111114
};
112115

@@ -124,6 +127,7 @@ export class Block {
124127
this._iAmSimplified = false;
125128
this._adders = this._adders.filter((y) => y !== x);
126129
removeRenderedElement(x.getElementId());
130+
removeElementWithElementId(x.getElementId());
127131
storeNewHistoricalBlockState.call(this);
128132
};
129133

model/simplificationAlgorithms/mergeFeedbackLoop.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -193,15 +193,15 @@ const checkTfOutput = async function (tf, outputs) {
193193
// tf step 2 - remove output to feedbackTf:
194194
tf.removeOutput(feedbackTf);
195195

196+
// adder step 1 - remove feedbackTf input:
197+
firstAdder.removeInput(feedbackTf);
198+
196199
// remove feedbackTf from tfs:
197200
// this._internalRemoveFromTfs(feedbackTf);
198201
feedbackTf.isBlock()
199202
? getBlock(feedbackTf).removeFromBlocks(feedbackTf)
200203
: this._internalRemoveFromTfs(feedbackTf);
201204

202-
// adder step 1 - remove feedbackTf input:
203-
firstAdder.removeInput(feedbackTf);
204-
205205
// adder step 2 - remove adder from adders, since it has no input or only one input left:
206206
const previousBlock = firstAdder.getInput()[0];
207207
// remove output from previous block to adder:
@@ -218,14 +218,14 @@ const checkTfOutput = async function (tf, outputs) {
218218
// tf step 2 - remove output to feedbackTf:
219219
tf.removeOutput(feedbackTf);
220220

221+
// adder step 1 - remove feedbackTf input:
222+
firstAdder.removeInput(feedbackTf);
223+
221224
// remove feedbackTf from tfs:
222225
// this._internalRemoveFromTfs(feedbackTf);
223226
feedbackTf.isBlock()
224227
? getBlock(feedbackTf).removeFromBlocks(feedbackTf)
225228
: this._internalRemoveFromTfs(feedbackTf);
226-
227-
// adder step 1 - remove feedbackTf input:
228-
firstAdder.removeInput(feedbackTf);
229229
}
230230
} else {
231231
//case: has only one input
@@ -235,15 +235,15 @@ const checkTfOutput = async function (tf, outputs) {
235235
// tf step 2 - remove output to feedbackTf:
236236
tf.removeOutput(feedbackTf);
237237

238+
// adder step 1 - remove feedbackTf input:
239+
firstAdder.removeInput(feedbackTf);
240+
238241
// remove feedbackTf from tfs:
239242
// this._internalRemoveFromTfs(feedbackTf);
240243
feedbackTf.isBlock()
241244
? getBlock(feedbackTf).removeFromBlocks(feedbackTf)
242245
: this._internalRemoveFromTfs(feedbackTf);
243246

244-
// adder step 1 - remove feedbackTf input:
245-
firstAdder.removeInput(feedbackTf);
246-
247247
// tf step 2 - remove output to adder:
248248
tf.setInput(null);
249249

view/navbarView.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ import {
1818
deleteExpandedOrSelectedElements,
1919
toggleNewConnectionMode,
2020
} from "./services/core/elementSelectingAndDraggingService.js";
21-
import { renderAllLines } from "./services/core/lineRenderingService.js";
21+
import {
22+
getLineViewsNumber,
23+
renderAllLines,
24+
} from "./services/core/lineRenderingService.js";
2225
import { resetCanvas } from "./services/core/canvasService.js";
2326
import { closeElementAnalysisWindow } from "./elementAnalysisWindowView.js";
2427
import { openNewReadyMadeTfPopupWindow } from "./services/feature/readyMadeTfCreationService.js";
@@ -234,7 +237,9 @@ simplifyButton.addEventListener("click", async function (e) {
234237

235238
simplificationStarted = false;
236239
simplifyButton.innerHTML = runButtonMarkup;
237-
optimizeTopologyButton.disabled = false;
240+
if (getLineViewsNumber() > 0) {
241+
optimizeTopologyButton.disabled = false;
242+
}
238243
previousButton.disabled = false;
239244
pauseButtonDisplayed = false;
240245
pauseButtonClicked = false;

view/services/core/elementSelectingAndDraggingService.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,16 +97,20 @@ export const resetExpandedOrSelectedElements = function () {
9797

9898
export const deleteExpandedOrSelectedElements = function () {
9999
if (expandedElement) {
100-
closeElementAnalysisWindow();
101100
const element = getElementFromElementId(+expandedElement.dataset.elementId);
101+
closeElementAnalysisWindow();
102102
deleteElement(element);
103103
expandedElement = null;
104104
deleteButton.disabled = true;
105105
} else if (selectedElements.length !== 0) {
106+
const block = getElementFromElementId(
107+
+selectedElements[0].dataset.elementId
108+
).getBlock();
106109
selectedElements.forEach((x) => {
107110
const element = getElementFromElementId(+x.dataset.elementId);
108-
deleteElement(element);
111+
deleteElement(element, true);
109112
});
113+
block.storeNewHistoricalState();
110114
selectedElements = [];
111115
deleteButton.disabled = true;
112116
}

view/services/core/lineRenderingService.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,22 @@ import {
1414
enableLineDrawingStyle,
1515
} from "./canvasService.js";
1616

17+
const optimizeTopologyButton = document.getElementById(
18+
"optimize-topology-button"
19+
);
20+
21+
/**
22+
* Array storing all the lineViews
23+
*/
1724
let lineViews = [];
1825

26+
export const getLineViewsNumber = () => lineViews.length;
27+
1928
export const registerLineView = function (lineView) {
2029
lineViews.push(lineView);
30+
if (lineViews.length === 1) {
31+
optimizeTopologyButton.disabled = false;
32+
}
2133
};
2234

2335
export const resetLineRenderingService = function () {
@@ -39,6 +51,12 @@ export const removeLineRender = function (element1Id, element2Id) {
3951
lineViews = lineViews.filter(
4052
(x) => !x.isLineConnectingElements(element1Id, element2Id)
4153
);
54+
55+
//disable optimize topology button if there are no lines left
56+
if (lineViews.length === 0) {
57+
optimizeTopologyButton.disabled = true;
58+
}
59+
4260
renderAllLines();
4361
};
4462

0 commit comments

Comments
 (0)