From 8dcbb620bb1edc2405cd21b8bc62f5727fa68c84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Sun, 7 Jul 2013 23:27:22 +0200 Subject: [PATCH] Highlight currently selected file, disable deletion and load/loadAndPrint for it Fixed #182 --- octoprint/printer.py | 4 +++ octoprint/server.py | 12 ++++++-- octoprint/static/js/ui.js | 47 ++++++++++++++++++++++++++++++-- octoprint/templates/index.jinja2 | 4 +-- 4 files changed, 60 insertions(+), 7 deletions(-) diff --git a/octoprint/printer.py b/octoprint/printer.py index 5cee964..160a650 100644 --- a/octoprint/printer.py +++ b/octoprint/printer.py @@ -477,6 +477,10 @@ class Printer(): def getCurrentData(self): return self._stateMonitor.getCurrentData() + def getCurrentJob(self): + currentData = self._stateMonitor.getCurrentData() + return currentData["job"] + def getCurrentTemperatures(self): return { "extruder": { diff --git a/octoprint/server.py b/octoprint/server.py index c98bb98..81962d9 100644 --- a/octoprint/server.py +++ b/octoprint/server.py @@ -345,9 +345,17 @@ def loadGcodeFile(): def deleteGcodeFile(): if "filename" in request.values.keys(): filename = request.values["filename"] - if "target" in request.values.keys() and request.values["target"] == "sd": + currentJob = printer.getCurrentJob() + + currentFilename = None + currentSd = None + if currentJob is not None and "filename" in currentJob.keys() and "sd" in currentJob.keys(): + currentFilename = currentJob["filename"] + currentSd = currentJob["sd"] + + if "target" in request.values.keys() and request.values["target"] == "sd" and not (currentFilename == filename and currentSd is True): printer.deleteSdFile(filename) - else: + elif not (currentFilename == filename and currentSd is False): gcodeManager.removeFile(filename) return readGcodeFiles() diff --git a/octoprint/static/js/ui.js b/octoprint/static/js/ui.js index f589f02..b1403c8 100644 --- a/octoprint/static/js/ui.js +++ b/octoprint/static/js/ui.js @@ -769,9 +769,10 @@ function TerminalViewModel(loginStateViewModel) { } } -function GcodeFilesViewModel(loginStateViewModel) { +function GcodeFilesViewModel(printerStateViewModel, loginStateViewModel) { var self = this; + self.printerState = printerStateViewModel; self.loginState = loginStateViewModel; self.isErrorOrClosed = ko.observable(undefined); @@ -831,6 +832,20 @@ function GcodeFilesViewModel(loginStateViewModel) { return self.loginState.isUser() && self.isOperational() && self.isLoadActionPossible(); }); + self.printerState.filename.subscribe(function(newValue) { + self.highlightFilename(newValue); + }); + + self.highlightFilename = function(filename) { + if (filename == undefined) { + self.listHelper.selectNone(); + } else { + self.listHelper.selectItem(function(item) { + return item.name == filename; + }) + } + } + self.fromCurrentData = function(data) { self._processStateData(data.state); } @@ -868,6 +883,8 @@ function GcodeFilesViewModel(loginStateViewModel) { // got a file to scroll to self.listHelper.switchToItem(function(item) {return item.name == response.filename}); } + + self.highlightFilename(self.printerState.filename()); } self.loadFile = function(filename, printAfterLoad) { @@ -1626,11 +1643,13 @@ function ItemListHelper(listType, supportedSorting, supportedFilters, defaultSor self.exclusiveFilters = exclusiveFilters; self.allItems = []; + self.items = ko.observableArray([]); self.pageSize = ko.observable(filesPerPage); self.currentPage = ko.observable(0); self.currentSorting = ko.observable(self.defaultSorting); self.currentFilters = ko.observableArray(self.defaultFilters); + self.selectedItem = ko.observable(undefined); //~~ item handling @@ -1639,6 +1658,28 @@ function ItemListHelper(listType, supportedSorting, supportedFilters, defaultSor self._updateItems(); } + self.selectItem = function(matcher) { + var itemList = self.items(); + for (var i = 0; i < itemList.length; i++) { + if (matcher(itemList[i])) { + self.selectedItem(itemList[i]); + break; + } + } + } + + self.selectNone = function() { + self.selectedItem(undefined); + } + + self.isSelected = function(data) { + return self.selectedItem() == data; + } + + self.isSelectedByMatcher = function(matcher) { + return matcher(self.selectedItem()); + } + //~~ pagination self.paginatedItems = ko.dependentObservable(function() { @@ -1852,7 +1893,7 @@ function ItemListHelper(listType, supportedSorting, supportedFilters, defaultSor self._initializeLocalStorage = function() { if (!Modernizr.localstorage) - return false; + return false; if (localStorage[self.listType + "." + "currentSorting"] !== undefined && localStorage[self.listType + "." + "currentFilters"] !== undefined && JSON.parse(localStorage[self.listType + "." + "currentFilters"]) instanceof Array) return true; @@ -1900,7 +1941,7 @@ $(function() { var temperatureViewModel = new TemperatureViewModel(loginStateViewModel, settingsViewModel); var controlViewModel = new ControlViewModel(loginStateViewModel, settingsViewModel); var terminalViewModel = new TerminalViewModel(loginStateViewModel); - var gcodeFilesViewModel = new GcodeFilesViewModel(loginStateViewModel); + var gcodeFilesViewModel = new GcodeFilesViewModel(printerStateViewModel, loginStateViewModel); var timelapseViewModel = new TimelapseViewModel(loginStateViewModel); var gcodeViewModel = new GcodeViewModel(loginStateViewModel); var navigationViewModel = new NavigationViewModel(loginStateViewModel, appearanceViewModel, settingsViewModel, usersViewModel); diff --git a/octoprint/templates/index.jinja2 b/octoprint/templates/index.jinja2 index 898ae8f..db7562d 100644 --- a/octoprint/templates/index.jinja2 +++ b/octoprint/templates/index.jinja2 @@ -177,11 +177,11 @@ - + -  |  |  +  |  |