From 21cc58ad14e61922af2c919a5bbd6098b3ce0a89 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?=
Date: Fri, 20 Oct 2017 19:34:39 +0200
Subject: [PATCH] GCO viewer: Persist options to localStorage
See #443
---
.../static/js/app/viewmodels/gcode.js | 109 +++++++++++++++---
.../templates/tabs/gcodeviewer.jinja2 | 3 +
2 files changed, 97 insertions(+), 15 deletions(-)
diff --git a/src/octoprint/static/js/app/viewmodels/gcode.js b/src/octoprint/static/js/app/viewmodels/gcode.js
index 5ddced87..e5836799 100644
--- a/src/octoprint/static/js/app/viewmodels/gcode.js
+++ b/src/octoprint/static/js/app/viewmodels/gcode.js
@@ -100,22 +100,32 @@ $(function() {
});
};
- // subscribe to update Gcode view on updates...
- self.renderer_centerModel.subscribe(self.synchronizeOptions);
- self.renderer_centerViewport.subscribe(self.synchronizeOptions);
- self.renderer_zoomOnModel.subscribe(self.synchronizeOptions);
- self.renderer_showMoves.subscribe(self.synchronizeOptions);
- self.renderer_showRetracts.subscribe(self.synchronizeOptions);
- self.renderer_showBoundingBox.subscribe(self.synchronizeOptions);
- self.renderer_showFullSize.subscribe(self.synchronizeOptions);
- self.renderer_extrusionWidthEnabled.subscribe(self.synchronizeOptions);
- self.renderer_extrusionWidth.subscribe(self.synchronizeOptions);
- self.renderer_showNext.subscribe(self.synchronizeOptions);
- self.renderer_showPrevious.subscribe(self.synchronizeOptions);
+ self.rendererOptionUpdated = function() {
+ self.synchronizeOptions();
+ self._toLocalStorage();
+ };
- self.reader_sortLayers.subscribe(self.synchronizeOptionsAndReload);
- self.reader_hideEmptyLayers.subscribe(self.synchronizeOptionsAndReload);
- self.reader_ignoreOutsideBed.subscribe(self.synchronizeOptionsAndReload);
+ self.readerOptionUpdated = function() {
+ self.synchronizeOptionsAndReload();
+ self._toLocalStorage();
+ };
+
+ // subscribe to update Gcode view on updates...
+ self.renderer_centerModel.subscribe(self.rendererOptionUpdated);
+ self.renderer_centerViewport.subscribe(self.rendererOptionUpdated);
+ self.renderer_zoomOnModel.subscribe(self.rendererOptionUpdated);
+ self.renderer_showMoves.subscribe(self.rendererOptionUpdated);
+ self.renderer_showRetracts.subscribe(self.rendererOptionUpdated);
+ self.renderer_showBoundingBox.subscribe(self.rendererOptionUpdated);
+ self.renderer_showFullSize.subscribe(self.rendererOptionUpdated);
+ self.renderer_extrusionWidthEnabled.subscribe(self.rendererOptionUpdated);
+ self.renderer_extrusionWidth.subscribe(self.rendererOptionUpdated);
+ self.renderer_showNext.subscribe(self.rendererOptionUpdated);
+ self.renderer_showPrevious.subscribe(self.rendererOptionUpdated);
+
+ self.reader_sortLayers.subscribe(self.readerOptionUpdated);
+ self.reader_hideEmptyLayers.subscribe(self.readerOptionUpdated);
+ self.reader_ignoreOutsideBed.subscribe(self.readerOptionUpdated);
self._printerProfileUpdated = function() {
if (!self.enabled) return;
@@ -305,6 +315,7 @@ $(function() {
self.synchronizeOptions();
self.enabled = true;
+ self._fromLocalStorage();
});
};
@@ -315,6 +326,25 @@ $(function() {
self.clear();
};
+ self.resetOptions = function() {
+ self.renderer_centerModel(false);
+ self.renderer_centerViewport(false);
+ self.renderer_zoomOnModel(false);
+ self.renderer_showMoves(true);
+ self.renderer_showRetracts(true);
+ self.renderer_showBoundingBox(false);
+ self.renderer_showFullSize(false);
+ self.renderer_extrusionWidthEnabled(false);
+ self.renderer_extrusionWidth(2);
+ self.renderer_showNext(false);
+ self.renderer_showPrevious(false);
+ self.renderer_syncProgress(true);
+
+ self.reader_sortLayers(true);
+ self.reader_hideEmptyLayers(true);
+ self.reader_ignoreOutsideBed(true);
+ };
+
self.clear = function() {
GCODE.ui.clear();
};
@@ -661,6 +691,55 @@ $(function() {
var value = self.layerSlider.slider('getValue') - 1;
self.shiftLayer(value);
};
+
+ var optionsLocalStorageKey = "core.gcodeviewer.options";
+ self._toLocalStorage = function() {
+ if (!Modernizr.localstorage)
+ return;
+
+ var current = {};
+ current["centerViewport"] = self.renderer_centerViewport();
+ current["zoomOnModel"] = self.renderer_zoomOnModel();
+ current["showMoves"] = self.renderer_showMoves();
+ current["showRetracts"] = self.renderer_showRetracts();
+ current["showPrevious"] = self.renderer_showPrevious();
+ current["showNext"] = self.renderer_showNext();
+ current["showFullsize"] = self.renderer_showFullSize();
+ current["showBoundingBox"] = self.renderer_showBoundingBox();
+ current["hideEmptyLayers"] = self.reader_hideEmptyLayers();
+ current["sortLayers"] = self.reader_sortLayers();
+
+ localStorage[optionsLocalStorageKey] = JSON.stringify(current);
+ };
+ self._fromLocalStorage = function() {
+ self.resetOptions();
+
+ if (!Modernizr.localstorage)
+ return;
+
+ var currentString = localStorage[optionsLocalStorageKey];
+ var current;
+ if (currentString === undefined) {
+ current = {};
+ } else {
+ try {
+ current = JSON.parse(currentString);
+ } catch (ex) {
+ current = {};
+ }
+ }
+
+ if (current["centerViewport"] !== undefined) self.renderer_centerViewport(current["centerViewport"]) ;
+ if (current["zoomOnModel"] !== undefined) self.renderer_zoomOnModel(current["zoomOnModel"]) ;
+ if (current["showMoves"] !== undefined) self.renderer_showMoves(current["showMoves"]) ;
+ if (current["showRetracts"] !== undefined) self.renderer_showRetracts(current["showRetracts"]) ;
+ if (current["showPrevious"] !== undefined) self.renderer_showPrevious(current["showPrevious"]) ;
+ if (current["showNext"] !== undefined) self.renderer_showNext(current["showNext"]) ;
+ if (current["showFullsize"] !== undefined) self.renderer_showFullSize(current["showFullsize"]) ;
+ if (current["showBoundingBox"] !== undefined) self.renderer_showBoundingBox(current["showBoundingBox"]) ;
+ if (current["hideEmptyLayers"] !== undefined) self.reader_hideEmptyLayers(current["hideEmptyLayers"]) ;
+ if (current["sortLayers"] !== undefined) self.reader_sortLayers(current["sortLayers"]) ;
+ };
}
OCTOPRINT_VIEWMODELS.push([
diff --git a/src/octoprint/templates/tabs/gcodeviewer.jinja2 b/src/octoprint/templates/tabs/gcodeviewer.jinja2
index 7b3d09a6..bb3ca4c1 100644
--- a/src/octoprint/templates/tabs/gcodeviewer.jinja2
+++ b/src/octoprint/templates/tabs/gcodeviewer.jinja2
@@ -89,6 +89,9 @@
{{ _('Sort layers') }}
+
+
+