From 8d828030cff85c7da77a1d55f871b474becc513f Mon Sep 17 00:00:00 2001 From: Jon Ziebell Date: Sat, 17 Sep 2022 12:16:34 -0400 Subject: [PATCH] Fixed visualizer settings not saving when changing time period --- js/beestat/setting.js | 4 ++- js/component/card/three_d.js | 62 +++++++++++++++++++++--------------- js/component/scene.js | 4 +-- 3 files changed, 42 insertions(+), 28 deletions(-) diff --git a/js/beestat/setting.js b/js/beestat/setting.js index 5815bc2..01fa6ff 100644 --- a/js/beestat/setting.js +++ b/js/beestat/setting.js @@ -79,7 +79,9 @@ beestat.setting = function(argument_1, opt_value, opt_callback) { 'visualize.heat_map_absolute.temperature.max': 80, 'visualize.heat_map_absolute.occupancy.min': 0, 'visualize.heat_map_absolute.occupancy.max': 100, - 'visualize.hide_affiliate': false + 'visualize.hide_affiliate': false, + 'visualize.three_d.show_labels': false, + 'visualize.three_d.auto_rotate': false }; // Figure out what we're trying to do. diff --git a/js/component/card/three_d.js b/js/component/card/three_d.js index 4e23d9a..a920ec0 100644 --- a/js/component/card/three_d.js +++ b/js/component/card/three_d.js @@ -383,7 +383,17 @@ beestat.component.card.three_d.prototype.decorate_drawing_pane_ = function(paren ); } + // Set some defaults on the scene. this.scene_.set_date(this.date_m_); + this.scene_.set_labels(beestat.setting('visualize.three_d.show_labels')); + this.scene_.set_auto_rotate(beestat.setting('visualize.three_d.auto_rotate')); + + const floor_plan = beestat.cache.floor_plan[this.floor_plan_id_]; + const groups = Object.values(floor_plan.data.groups); + groups.forEach(function(group) { + const setting_key = 'visualize.three_d.show_group.' + group.group_id; + self.scene_.set_layer_visible(group.group_id, beestat.setting(setting_key) !== false); + }); // Manage width of the scene. if (this.state_.width === undefined) { @@ -702,41 +712,43 @@ beestat.component.card.three_d.prototype.decorate_toolbar_ = function(parent) { .set_text_color(beestat.style.color.lightblue.base) ); - let labels = false; - // Add room tile_group.add_tile(new beestat.component.tile() - .set_icon('label_off') + .set_icon(beestat.setting('visualize.three_d.show_labels') === false ? 'label_off' : 'label') .set_title('Toggle Labels') .set_text_color(beestat.style.color.gray.light) .set_background_color(beestat.style.color.bluegray.base) .set_background_hover_color(beestat.style.color.bluegray.light) .addEventListener('click', function(e) { e.stopPropagation(); - labels = !labels; - this.set_icon( - 'label' + (labels === false ? '_off' : '') + beestat.setting( + 'visualize.three_d.show_labels', + !beestat.setting('visualize.three_d.show_labels') ); - self.scene_.set_labels(labels); + this.set_icon( + 'label' + (beestat.setting('visualize.three_d.show_labels') === false ? '_off' : '') + ); + self.scene_.set_labels(beestat.setting('visualize.three_d.show_labels')); }) ); - let auto_rotate = false; - // Add room tile_group.add_tile(new beestat.component.tile() - .set_icon('restart_off') + .set_icon(beestat.setting('visualize.three_d.auto_rotate') === false ? 'restart_off' : 'restart') .set_title('Toggle Auto-Rotate') .set_text_color(beestat.style.color.gray.light) .set_background_color(beestat.style.color.bluegray.base) .set_background_hover_color(beestat.style.color.bluegray.light) .addEventListener('click', function(e) { e.stopPropagation(); - auto_rotate = !auto_rotate; - this.set_icon( - 'restart' + (auto_rotate === false ? '_off' : '') + beestat.setting( + 'visualize.three_d.auto_rotate', + !beestat.setting('visualize.three_d.auto_rotate') ); - self.scene_.set_auto_rotate(auto_rotate); + this.set_icon( + 'restart' + (beestat.setting('visualize.three_d.auto_rotate') === false ? '_off' : '') + ); + self.scene_.set_auto_rotate(beestat.setting('visualize.three_d.auto_rotate')); }) ); @@ -761,7 +773,7 @@ beestat.component.card.three_d.prototype.decorate_floors_ = function(parent) { }); let icon_number = 1; - sorted_groups.forEach(function(group, i) { + sorted_groups.forEach(function(group) { const button = new beestat.component.tile() .set_title(group.name) .set_shadow(false) @@ -775,18 +787,18 @@ beestat.component.card.three_d.prototype.decorate_floors_ = function(parent) { icon = 'numeric_' + icon_number++; } - let layer_visible = true; + const setting_key = 'visualize.three_d.show_group.' + group.group_id; button - .set_icon(icon + '_box') + .set_icon(icon + (beestat.setting(setting_key) === false ? '' : '_box')) .addEventListener('click', function() { - if (layer_visible === true) { - self.scene_.set_layer_visible('group_' + i, false); - button.set_icon(icon); - } else { - self.scene_.set_layer_visible('group_' + i, true); - button.set_icon(icon + '_box'); - } - layer_visible = !layer_visible; + beestat.setting( + setting_key, + beestat.setting(setting_key) === false + ); + self.scene_.set_layer_visible(group.group_id, beestat.setting(setting_key)); + this.set_icon( + icon + (beestat.setting(setting_key) === false ? '' : '_box') + ); }); tile_group.add_tile(button); diff --git a/js/component/scene.js b/js/component/scene.js index 0819bbb..a821d60 100644 --- a/js/component/scene.js +++ b/js/component/scene.js @@ -709,10 +709,10 @@ beestat.component.scene.prototype.add_floor_plan_ = function() { const floor_plan = beestat.cache.floor_plan[this.floor_plan_id_]; this.layers_ = {}; - floor_plan.data.groups.forEach(function(group, i) { + floor_plan.data.groups.forEach(function(group) { const layer = new THREE.Group(); self.main_group_.add(layer); - self.layers_['group_' + i] = layer; + self.layers_[group.group_id] = layer; group.rooms.forEach(function(room) { self.add_room_(layer, group, room); });