aboutsummaryrefslogtreecommitdiff
path: root/src/controllers/timer_view.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/controllers/timer_view.cpp')
-rw-r--r--src/controllers/timer_view.cpp195
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
);
}