123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- /* Generated by Statechart compiler by Glenn De Jonghe, Joeri Exelmans, Simon Van Mierlo, and Yentl Van Tendeloo (for the inspiration)
- Date: Fri Aug 05 16:08:36 2016
- Model author: Simon Van Mierlo
- Model name: Timer
- */
- // package "Timer"
- var Timer = {};
- (function() {
- var MainApp = function(controller) {
- RuntimeClassBase.call(this, controller);
-
- this.semantics.big_step_maximality = StatechartSemantics.TakeMany;
- this.semantics.internal_event_lifeline = StatechartSemantics.Queue;
- this.semantics.input_event_lifeline = StatechartSemantics.FirstComboStep;
- this.semantics.priority = StatechartSemantics.SourceParent;
- this.semantics.concurrency = StatechartSemantics.Single;
-
- // build Statechart structure
- this.build_statechart_structure();
-
- // call user defined constructor
- MainApp.prototype.user_defined_constructor.call(this);
- };
- MainApp.prototype = new Object();
- (function() {
- var proto = new RuntimeClassBase();
- for (prop in proto) {
- MainApp.prototype[prop] = proto[prop];
- }
- })();
- MainApp.prototype.user_defined_constructor = function() {
- this.canvas = ui.append_canvas(ui.window,400,150,{'background':'#eee'})
- this.clock_text = this.canvas.add_text(25,25,'0.0')
- this.actual_clock_text = this.canvas.add_text(25,50,'0.0')
- var interrupt_button = ui.append_button(ui.window, 'INTERRUPT');
- var continue_button = ui.append_button(ui.window, 'CONTINUE');
- ui.bind_event(interrupt_button.element, ui.EVENTS.MOUSE_CLICK, this.controller, 'interrupt_clicked');
- ui.bind_event(continue_button.element, ui.EVENTS.MOUSE_CLICK, this.controller, 'continue_clicked');
- };
- MainApp.prototype.user_defined_destructor = function() {
- };
- // user defined method
- MainApp.prototype.update_timers = function() {
- this.clock_text.set_text(get_simulated_time().toFixed(2));
- this.actual_clock_text.set_text(time().toFixed(2));
- };
- // builds Statechart structure
- MainApp.prototype.build_statechart_structure = function() {
-
- // state <root>
- this.states[""] = new State(0, this);
-
- // state /running
- this.states["/running"] = new State(1, this);
- this.states["/running"].setEnter(this._running_enter);
- this.states["/running"].setExit(this._running_exit);
-
- // state /interrupted
- this.states["/interrupted"] = new State(2, this);
- this.states["/interrupted"].setEnter(this._interrupted_enter);
- this.states["/interrupted"].setExit(this._interrupted_exit);
-
- // add children
- this.states[""].addChild(this.states["/running"]);
- this.states[""].addChild(this.states["/interrupted"]);
- this.states[""].fixTree();
- this.states[""].default_state = this.states["/running"];
-
- // transition /running
- var _running_0 = new Transition(this, this.states["/running"], [this.states["/running"]]);
- _running_0.setAction(this._running_0_exec);
- _running_0.setTrigger(new Event("_0after"));
- this.states["/running"].addTransition(_running_0);
- var _running_1 = new Transition(this, this.states["/running"], [this.states["/interrupted"]]);
- _running_1.setAction(this._running_1_exec);
- _running_1.setTrigger(new Event("interrupt_clicked", "ui"));
- this.states["/running"].addTransition(_running_1);
-
- // transition /interrupted
- var _interrupted_0 = new Transition(this, this.states["/interrupted"], [this.states["/interrupted"]]);
- _interrupted_0.setAction(this._interrupted_0_exec);
- _interrupted_0.setTrigger(new Event("interrupt_clicked", "ui"));
- this.states["/interrupted"].addTransition(_interrupted_0);
- var _interrupted_1 = new Transition(this, this.states["/interrupted"], [this.states["/running"]]);
- _interrupted_1.setAction(this._interrupted_1_exec);
- _interrupted_1.setTrigger(new Event("continue_clicked", "ui"));
- this.states["/interrupted"].addTransition(_interrupted_1);
- };
- MainApp.prototype._running_enter = function() {
- this.addTimer(0, 0.05);
- };
- MainApp.prototype._running_exit = function() {
- this.removeTimer(0);
- };
- MainApp.prototype._interrupted_enter = function() {
- console.log("entering interrupted");
- };
- MainApp.prototype._interrupted_exit = function() {
- console.log("entering interrupted");
- };
- MainApp.prototype._running_0_exec = function(parameters) {
- this.update_timers();
- };
- MainApp.prototype._running_1_exec = function(parameters) {
- this.update_timers();
- };
- MainApp.prototype._interrupted_0_exec = function(parameters) {
- this.update_timers();
- };
- MainApp.prototype._interrupted_1_exec = function(parameters) {
- this.update_timers();
- };
- MainApp.prototype.initializeStatechart = function() {
- // enter default state
- var states = this.states["/running"].getEffectiveTargetStates();
- this.updateConfiguration(states);
- for (var state_idx in states) {
- if (!states.hasOwnProperty(state_idx)) continue;
- var state = states[state_idx]
- if (state.enter) {
- state.enter();
- }
- }
- };
- // add symbol 'MainApp' to package 'Timer'
- Timer.MainApp = MainApp;
- var ObjectManager = function(controller) {
- ObjectManagerBase.call(this, controller);
- };
- ObjectManager.prototype = new Object();
- (function() {
- var proto = new ObjectManagerBase();
- for (prop in proto) {
- ObjectManager.prototype[prop] = proto[prop];
- }
- })();
- ObjectManager.prototype.instantiate = function(class_name, construct_params) {
- if (class_name === "MainApp") {
- var instance = new MainApp(this.controller);
- instance.associations = new Object();
- } else {
- throw new Error("Cannot instantiate class " + class_name);
- }
- return instance;
- };
- // add symbol 'ObjectManager' to package 'Timer'
- Timer.ObjectManager = ObjectManager;
- var Controller = function(event_loop_callbacks, finished_callback, behind_schedule_callback) {
- if (finished_callback === undefined) finished_callback = null;
- if (behind_schedule_callback === undefined) behind_schedule_callback = null;
- EventLoopControllerBase.call(this, new ObjectManager(this), event_loop_callbacks, finished_callback, behind_schedule_callback);
- this.addInputPort("ui");
- this.object_manager.createInstance("MainApp", new Array());
- };
- Controller.prototype = new Object();
- (function() {
- var proto = new EventLoopControllerBase();
- for (prop in proto) {
- Controller.prototype[prop] = proto[prop];
- }
- })();
- // add symbol 'Controller' to package 'Timer'
- Timer.Controller = Controller;
- })();
|