Skip to content

Commit

Permalink
Refactor CircuitApplication constr. to use attach helper function
Browse files Browse the repository at this point in the history
  • Loading branch information
Aerlinger committed Mar 10, 2017
1 parent 8bb02ae commit 2cd975f
Show file tree
Hide file tree
Showing 13 changed files with 49 additions and 31 deletions.
44 changes: 29 additions & 15 deletions src/CircuitApplication.js
Expand Up @@ -19,18 +19,9 @@ if (typeof window !== 'undefined') {
}

class CircuitApplication extends Observer {
constructor(Circuit, canvas, {xMargin=200, yMargin= 64} = {}) {
constructor(Circuit, canvas) {
super();

// A Circuit is already loaded on this canvas so we need to garbage collect it to prevent a memory leak
if (canvas.__circuit_application) {
let previous_application = canvas.__circuit_application;

previous_application.reset();

previous_application = null;
}

this.Circuit = Circuit;
this.Config = Config;
this.HistoryStack = new HistoryStack();
Expand All @@ -46,14 +37,29 @@ class CircuitApplication extends Observer {

this.running = false;

let renderer = new RenderStrategy(canvas.getContext('2d'), this.Config, Circuit.Params.voltageRange);
if(canvas) {
this.attach(canvas)
}
}

attach(canvas, {xMargin=200, yMargin= 64} = {}) {
// A Circuit is already loaded on this canvas so we need to garbage collect it to prevent a memory leak
if (canvas.__circuit_application) {
let previous_application = canvas.__circuit_application;

previous_application.reset();

previous_application = null;
}

let renderer = new RenderStrategy(canvas.getContext('2d'), this.Config, this.Circuit.Params.voltageRange);

this.draw = this.draw.bind(this, renderer, xMargin, yMargin);
MouseEvents.bind(this)(Circuit, canvas, {xMargin, yMargin});
MouseEvents.bind(this)(this.Circuit, canvas, {xMargin, yMargin});

if (typeof window !== 'undefined') {
// this.setupScopes(canvas.parentNode);
this.createPerformanceMeter();
this.createPerformanceMeter(canvas);

canvas.__circuit_application = this;
}
Expand Down Expand Up @@ -165,7 +171,7 @@ class CircuitApplication extends Observer {
return scopeWrapper;
}

createPerformanceMeter() {
createPerformanceMeter(canvasElm) {
this.performanceMeter = new TimeSeries();

this.chart = new SmoothieChart({
Expand All @@ -174,8 +180,16 @@ class CircuitApplication extends Observer {
labels: {fillStyle: '#000', precision: 0}
});

let performanceMeter = document.createElement("canvas");
performanceMeter.className = 'performance-sparkline';
performanceMeter.width = 200;
performanceMeter.height = 40;

canvasElm.parentNode.insertBefore(performanceMeter, canvasElm)


this.chart.addTimeSeries(this.performanceMeter, {strokeStyle: 'rgba(255, 0, 200, 1)', lineWidth: 1});
this.chart.streamTo(document.getElementById('performance_sparkline'), 500);
this.chart.streamTo(performanceMeter, 500);
}

draw(renderer, xMargin, yMargin) {
Expand Down
12 changes: 8 additions & 4 deletions src/Maxwell.js
Expand Up @@ -7,8 +7,8 @@ let SampleCircuits = require(__dirname + "/../circuits/index.json");
class Maxwell {
static createContext(circuitName, circuitData, context, onComplete) {
if (circuitName) {
let circuit = CircuitLoader.createCircuitFromJsonData(circuitData, circuitName);
this.Circuits[circuitName] = circuit;
let circuit = CircuitLoader.createCircuitFromJsonData(circuitName, circuitData);
// this.Circuits[circuitName] = circuit;

let CircuitApp = new CircuitApplication(circuit, context);

Expand All @@ -20,8 +20,8 @@ class Maxwell {

static createBlankCircuit(circuitName, context, onComplete) {
if (circuitName) {
let circuit = new Circuit(circuit_name);
this.Circuits[circuitName] = circuit;
let circuit = new Circuit(circuitName);
// this.Circuits[circuitName] = circuit;

let CircuitApp = new CircuitApplication(circuit, context);

Expand All @@ -32,6 +32,10 @@ class Maxwell {
}
}

Maxwell.Circuit = Circuit;
Maxwell.CircuitApplication = CircuitApplication;
Maxwell.CircuitLoader = CircuitLoader;

Maxwell.Circuits = {};

Maxwell.SampleCircuits = SampleCircuits;
Expand Down
2 changes: 1 addition & 1 deletion src/io/CircuitLoader.js
Expand Up @@ -5,7 +5,7 @@ let Hint = require('../engine/Hint');
let Components = require('../components');

class CircuitLoader {
static createCircuitFromJsonData(jsonData, circuit_name) {
static createCircuitFromJsonData(circuit_name, jsonData) {

// Create a defensive copy of jsonData
jsonData = JSON.parse(JSON.stringify(jsonData));
Expand Down
2 changes: 1 addition & 1 deletion test/circuit/BasicTransLineTest.coffee
Expand Up @@ -70,7 +70,7 @@ describe "Basic TL", ->
]
}

@circuit = CircuitLoader.createCircuitFromJsonData(@tlCircuit)
@circuit = CircuitLoader.createCircuitFromJsonData("Transline", @tlCircuit)
@circuit.updateCircuit()

done()
Expand Down
2 changes: 1 addition & 1 deletion test/circuit/cc2CircuitTest.coffee
Expand Up @@ -76,7 +76,7 @@ describe "CC2", ->

@canvas = new Canvas(600, 500)

@circuit = CircuitLoader.createCircuitFromJsonData(@circuitJson)
@circuit = CircuitLoader.createCircuitFromJsonData("CC2 Circuit", @circuitJson)

@circuit.updateCircuit()

Expand Down
2 changes: 1 addition & 1 deletion test/circuit/cloneTest.coffee
@@ -1,7 +1,7 @@
describe "Cloning a circuit", ->
it "deep copies original circuit", ->
voltdividesimple = JSON.parse(fs.readFileSync("./circuits/v5/voltdividesimple.json"))
@Circuit = CircuitLoader.createCircuitFromJsonData(voltdividesimple)
@Circuit = CircuitLoader.createCircuitFromJsonData("Simple Voltage Divider", voltdividesimple)

@CircuitCopy = @Circuit.copy()

Expand Down
2 changes: 1 addition & 1 deletion test/circuit/simpleAcResistorTest.coffee
Expand Up @@ -3,7 +3,7 @@ describe "Simple 5Vp-p AC Voltage source connected to a 500ohm resistor", ->
ac_ohm = JSON.parse(fs.readFileSync("./circuits/v5/ac-resistor.json"))


@circuit = CircuitLoader.createCircuitFromJsonData(ac_ohm)
@circuit = CircuitLoader.createCircuitFromJsonData("AC Resistor", ac_ohm)

# CircuitLoader.createCircuitFromJsonFile "../../circuits/voltdividesimple.json", (circuit) =>
# @circuit = circuit
Expand Down
2 changes: 1 addition & 1 deletion test/circuit/simpleDiodeTest.coffee
Expand Up @@ -48,7 +48,7 @@ describe "Simple single diode circuit", ->
]
}

@Circuit = CircuitLoader.createCircuitFromJsonData(@json)
@Circuit = CircuitLoader.createCircuitFromJsonData("Simple Diode Circuit", @json)

done()

Expand Down
2 changes: 1 addition & 1 deletion test/circuit/simpleResistorTest.coffee
Expand Up @@ -49,7 +49,7 @@ describe "Simple single resistor circuit", ->
]
}

@Circuit = CircuitLoader.createCircuitFromJsonData(@json)
@Circuit = CircuitLoader.createCircuitFromJsonData('Simple resistor test', @json)


it "has 3 elements", ->
Expand Down
2 changes: 1 addition & 1 deletion test/circuit/voltDivideTest.coffee
@@ -1,7 +1,7 @@
describe "Voltage Divider", ->
before (done) ->
voltdivide = JSON.parse(fs.readFileSync("./circuits/v5/ohms.json"))
@circuit = CircuitLoader.createCircuitFromJsonData(voltdivide)
@circuit = CircuitLoader.createCircuitFromJsonData("Voltage divider", voltdivide)

done()

Expand Down
2 changes: 1 addition & 1 deletion test/circuit/voltdividesimpleTest.coffee
@@ -1,7 +1,7 @@
describe "Simple Voltage Divider", ->
before ->
voltdividesimple = JSON.parse(fs.readFileSync("./circuits/v5/voltdividesimple.json"))
@circuit = CircuitLoader.createCircuitFromJsonData(voltdividesimple)
@circuit = CircuitLoader.createCircuitFromJsonData("Simple voltage divider", voltdividesimple)

# CircuitLoader.createCircuitFromJsonFile "../../circuits/voltdividesimple.json", (circuit) =>
# @circuit = circuit
Expand Down
4 changes: 2 additions & 2 deletions test/io/loadCircuitTest.coffee
Expand Up @@ -3,7 +3,7 @@ describe "CircuitLoader", ->
before ->
voltdividesimple = JSON.parse(fs.readFileSync("./circuits/v5/voltdividesimple.json"))

@circuit = CircuitLoader.createCircuitFromJsonData(voltdividesimple)
@circuit = CircuitLoader.createCircuitFromJsonData("Simple voltage divider", voltdividesimple)

it "have only 7 elements", ->
expect(@circuit.numElements()).to.equal 7
Expand All @@ -20,7 +20,7 @@ describe "CircuitLoader", ->

it "has correct unique name", ->
console.log @circuit.Params.name
expect(@circuit.name).to.equal "untitled"
expect(@circuit.name).to.equal "Simple voltage divider"

it "has correct power range", ->
expect(@circuit.Params.powerRange).to.equal 62.0
Expand Down
2 changes: 1 addition & 1 deletion test/ui/scopeLoadTest.coffee
Expand Up @@ -12,7 +12,7 @@ describe.skip "Loading Scope from Legacy", ->

jsonData = JSON.parse(circuitJson);

@circuit = CircuitLoader.createCircuitFromJsonData(jsonData)
@circuit = CircuitLoader.createCircuitFromJsonData("Scope load", jsonData)

inputData = circuitData.toString().split("\n")
for line in inputData
Expand Down

0 comments on commit 2cd975f

Please sign in to comment.