diff options
Diffstat (limited to 'src/controllers')
| -rw-r--r-- | src/controllers/timer_view.cpp | 195 | 
1 files changed, 93 insertions, 102 deletions
diff --git a/src/controllers/timer_view.cpp b/src/controllers/timer_view.cpp index 841d7f7..03e8bb5 100644 --- a/src/controllers/timer_view.cpp +++ b/src/controllers/timer_view.cpp @@ -19,11 +19,6 @@ class TimerView {  	public: -	TimerView() -		: _counters { FreqCounter(_timer), FreqCounter(_timer) } -		, _alarm_sound_triggered(false) -	{ } -  	/*  	 * Timer  	 */ @@ -44,20 +39,76 @@ class TimerView {  		set_inner_text_by_id("clear-reset-btn", text);  	} +	/* +	 * Counter +	 */ + +	void counter_display_text(uint32_t counter_num, std::string const & counter_text, std::string const & rate_text) { +		std::string counter_id = "counter-"; +		counter_id.append(std::to_string(counter_num)); + +		std::string rate_id = "rate-"; +		rate_id.append(std::to_string(counter_num)); + +		set_inner_text_by_id(counter_id, counter_text); +		set_inner_text_by_id(rate_id, rate_text); +	} + + +	void set_clear_reset_button_disabled(bool disabled) { +		set_button_disabled("clear-reset-btn", disabled); +	} + +	void play_alarm() { + +		EM_ASM({ +			const handle = document.getElementById("sound-handle"); + +			const duration = Math.round(handle.duration * 1000.0); + +			handle.currentTime = 0; +			handle.play().then(() => { +				setTimeout(() => { +					handle.pause(); +				}, duration); +			}); +		}); + +	} + +	private: + +	static void set_inner_text_by_id(std::string const & id, std::string const & text) { +		emval timer_display = document.call<emval>("getElementById", emval(id.c_str())); +		timer_display.set("innerText", text.c_str()); +	} + +	static void set_button_disabled(std::string const & id, bool disabled) { +		emval timer_display = document.call<emval>("getElementById", emval(id.c_str())); +		timer_display.set("disabled", disabled); +	} + +}; + +class TimerController { + +	public: + +	TimerController() +		: _counters { FreqCounter(_timer), FreqCounter(_timer) } +		, _alarm_sound_triggered(false) +	{ } +  	void handle_inc_time(uint32_t amount) {  		_timer.increment_preset_ms(amount * 1000); -		_update_start_stop_label(); -		_update_clear_reset_btn_label(); -		_update_clear_reset_btn(); +		_update_labels();  	}  	void handle_start_stop() {  		_timer.toggleStart(); -		_update_start_stop_label(); -		_update_clear_reset_btn_label(); -		_update_clear_reset_btn(); +		_update_labels();  	}  	void handle_clear_reset() { @@ -67,58 +118,32 @@ class TimerView {  			reset();  		} -		_update_clear_reset_btn_label(); -		_update_clear_reset_btn(); +		_update_labels();  	}  	/*  	 * Counter  	 */ -	void counter_display_text(uint32_t counter_num, std::string const & counter_text, std::string const & rate_text) { -		std::string counter_id = "counter-"; -		counter_id.append(std::to_string(counter_num)); - -		std::string rate_id = "rate-"; -		rate_id.append(std::to_string(counter_num)); - -		set_inner_text_by_id(counter_id, counter_text); -		set_inner_text_by_id(rate_id, rate_text); -	} -  	void handle_inc_counter(uint32_t counter_num) {  		_counters[counter_num].inc(); +		// Effects +		_update_labels();  		_update_counter(counter_num); - -		_update_clear_reset_btn_label();  	}  	void handle_timer_update() { -		std::string value = _timer.counter_display_value(); - -		timer_display_text(value); - -		double record_floor = _timer.record_floor(); - -		std::string rec_floor_text; -		format_rate(rec_floor_text, record_floor); - -		if(_timer.overtime()) { -			std::string rec_floor_overtime; -			format_rate(rec_floor_overtime, _timer.overtime_record_floor()); -			rec_floor_text.append(", "); -			rec_floor_text.append(rec_floor_overtime); -		} +		_view.timer_display_text(_timer.counter_display_value()); -		timer_record_floor(rec_floor_text); +		_view.timer_record_floor(_timer.record_floor_display());  		for(size_t i = 0; i < _counters.size(); i++)  			_update_counter(i);  		if(_timer.overtime() && !_alarm_sound_triggered) { -			_play_alarm(); +			_view.play_alarm();  			_alarm_sound_triggered = true;  		}  	} @@ -126,77 +151,43 @@ class TimerView {  	private:  	FreqTimer _timer; +	TimerView _view;  	std::array<FreqCounter, 2> _counters;  	bool _alarm_sound_triggered; -	static void set_inner_text_by_id(std::string const & id, std::string const & text) { -		emval timer_display = document.call<emval>("getElementById", emval(id.c_str())); -		timer_display.set("innerText", text.c_str()); -	} - -	static void set_button_disabled(std::string const & id, bool disabled) { -		emval timer_display = document.call<emval>("getElementById", emval(id.c_str())); -		timer_display.set("disabled", disabled); -	} -  	void _update_counter(uint32_t counter_num) {  		FreqCounter & counter = _counters[counter_num]; -		std::string text = counter.display_value(); -		double rate = counter.rate(); - -		std::string rate_val; -		format_rate(rate_val, rate); +		std::string count = counter.display_value(); +		std::string rate = counter.rate_display(); -		if(_timer.overtime()) { -			std::string rate_overtime; -			format_rate(rate_overtime, counter.overtime_rate()); -			rate_val.append(", "); -			rate_val.append(rate_overtime); -		} - -		counter_display_text(counter_num, text, rate_val); +		_view.counter_display_text(counter_num, count, rate);  	} -	static void _play_alarm() { - -		EM_ASM({ -			const handle = document.getElementById("sound-handle"); - -			const duration = Math.round(handle.duration * 1000.0); - -			handle.currentTime = 0; -			handle.play().then(() => { -				setTimeout(() => { -					handle.pause(); -				}, duration); -			}); -		}); - +	bool _clear_reset_btn_clears() const { +		return ( +			_timer.has_preset() and !_timer.started() and +			(_counters[0].cnt() == 0 && _counters[1].cnt() == 0) +		);  	} -	void _update_start_stop_label() { +	void _update_labels() { +		// Start / Stop Label  		if(_timer.running()) { -			timer_start_stop_button_label("Stop"); +			_view.timer_start_stop_button_label("Stop");  		} else { -			timer_start_stop_button_label("Start"); +			_view.timer_start_stop_button_label("Start");  		} -	} - -	bool _clear_reset_btn_clears() const { -		return _timer.has_preset() and !_timer.started() and (_counters[0].cnt() == 0 && _counters[1].cnt() == 0); -	} -	void _update_clear_reset_btn_label() { +		// Clear / Reset Button Label  		if(_clear_reset_btn_clears()) { -			timer_clear_reset_button_label("Clear"); +			_view.timer_clear_reset_button_label("Clear");  		} else { -			timer_clear_reset_button_label("Reset"); +			_view.timer_clear_reset_button_label("Reset");  		} -	} -	void _update_clear_reset_btn() { -		set_button_disabled("clear-reset-btn", _timer.running()); +		// Disable the clear / reset button when the timer is running +		_view.set_clear_reset_button_disabled(_timer.running());  	}  	void clear() { @@ -220,22 +211,22 @@ class TimerView {  }; -EMSCRIPTEN_BINDINGS(timer_view) { -	emscripten::class_<TimerView>("TimerView") +EMSCRIPTEN_BINDINGS(timer_controller) { +	emscripten::class_<TimerController>("TimerController")  		.constructor()  		.function("handle_start_stop", -			&TimerView::handle_start_stop +			&TimerController::handle_start_stop  		)  		.function("handle_clear_reset", -			&TimerView::handle_clear_reset +			&TimerController::handle_clear_reset  		)  		.function("handle_inc_counter", -			&TimerView::handle_inc_counter +			&TimerController::handle_inc_counter  		)  		.function("handle_inc_time", -			&TimerView::handle_inc_time +			&TimerController::handle_inc_time  		)  		.function("handle_timer_update", -			&TimerView::handle_timer_update +			&TimerController::handle_timer_update  		);  }  | 
