More work on the printer profiles, connection dialog and Settings dialog are now working. GCODE viewer makes trouble
This commit is contained in:
parent
93a852e6ea
commit
0203e6da31
9 changed files with 144 additions and 152 deletions
File diff suppressed because one or more lines are too long
|
|
@ -236,7 +236,11 @@ function DataUpdater(allViewModels) {
|
|||
gcodeUploadProgress.removeClass("progress-striped").removeClass("active");
|
||||
gcodeUploadProgressBar.css("width", "0%");
|
||||
gcodeUploadProgressBar.text("");
|
||||
new PNotify({title: gettext("Streaming done"), text: _.sprintf(gettext("Streamed %(local)s to %(remote)s on SD, took %(time).2f seconds"), payload), type: "success"});
|
||||
new PNotify({
|
||||
title: gettext("Streaming done"),
|
||||
text: _.sprintf(gettext("Streamed %(local)s to %(remote)s on SD, took %(time).2f seconds"), payload),
|
||||
type: "success"
|
||||
});
|
||||
gcodeFilesViewModel.requestData(payload.remote, "sdcard");
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -69,11 +69,11 @@ $(function() {
|
|||
var loginStateViewModel = new LoginStateViewModel();
|
||||
var printerProfilesViewModel = new PrinterProfilesViewModel();
|
||||
var usersViewModel = new UsersViewModel(loginStateViewModel);
|
||||
var settingsViewModel = new SettingsViewModel(loginStateViewModel, usersViewModel, printerProfilesViewModel);
|
||||
var connectionViewModel = new ConnectionViewModel(loginStateViewModel, settingsViewModel, printerProfilesViewModel);
|
||||
var timelapseViewModel = new TimelapseViewModel(loginStateViewModel);
|
||||
var printerStateViewModel = new PrinterStateViewModel(loginStateViewModel, timelapseViewModel);
|
||||
var appearanceViewModel = new AppearanceViewModel(settingsViewModel);
|
||||
var settingsViewModel = new SettingsViewModel(loginStateViewModel, usersViewModel, printerProfilesViewModel);
|
||||
var connectionViewModel = new ConnectionViewModel(loginStateViewModel, settingsViewModel, printerProfilesViewModel);
|
||||
var appearanceViewModel = new AppearanceViewModel(settingsViewModel, printerStateViewModel);
|
||||
var temperatureViewModel = new TemperatureViewModel(loginStateViewModel, settingsViewModel);
|
||||
var controlViewModel = new ControlViewModel(loginStateViewModel, settingsViewModel);
|
||||
var terminalViewModel = new TerminalViewModel(loginStateViewModel, settingsViewModel);
|
||||
|
|
|
|||
|
|
@ -1,24 +1,31 @@
|
|||
function AppearanceViewModel(settingsViewModel) {
|
||||
function AppearanceViewModel(settingsViewModel, printerStateViewModel) {
|
||||
var self = this;
|
||||
|
||||
self.settings = settingsViewModel;
|
||||
self.printerState = printerStateViewModel;
|
||||
|
||||
self.connected = ko.observable(false);
|
||||
|
||||
self.printerState.isErrorOrClosed.subscribe(function() {
|
||||
self.connected(!self.printerState.isErrorOrClosed());
|
||||
});
|
||||
|
||||
self.brand = ko.computed(function() {
|
||||
if (self.settings.printerProfiles.currentProfileData().name())
|
||||
if (self.settings.printerProfiles.currentProfileData().name() && self.connected())
|
||||
return gettext("OctoPrint") + ": " + self.settings.printerProfiles.currentProfileData().name();
|
||||
else
|
||||
return gettext("OctoPrint");
|
||||
});
|
||||
|
||||
self.title = ko.computed(function() {
|
||||
if (self.settings.printerProfiles.currentProfileData().name())
|
||||
if (self.settings.printerProfiles.currentProfileData().name() && self.connected())
|
||||
return self.settings.printerProfiles.currentProfileData().name() + " [" + gettext("OctoPrint") + "]";
|
||||
else
|
||||
return gettext("OctoPrint");
|
||||
});
|
||||
|
||||
self.color = ko.computed(function() {
|
||||
if (self.settings.printerProfiles.currentProfileData().color())
|
||||
if (self.settings.printerProfiles.currentProfileData().color() && self.connected())
|
||||
return self.settings.printerProfiles.currentProfileData().color();
|
||||
else
|
||||
return "default";
|
||||
|
|
|
|||
|
|
@ -1,8 +1,23 @@
|
|||
function ConnectionViewModel(loginStateViewModel, settingsViewModel) {
|
||||
function ConnectionViewModel(loginStateViewModel, settingsViewModel, printerProfilesViewModel) {
|
||||
var self = this;
|
||||
|
||||
self.loginState = loginStateViewModel;
|
||||
self.settings = settingsViewModel;
|
||||
self.printerProfiles = printerProfilesViewModel;
|
||||
|
||||
self.printerProfiles.profiles.items.subscribe(function() {
|
||||
var allProfiles = self.printerProfiles.profiles.items();
|
||||
|
||||
var printerOptions = [];
|
||||
_.each(allProfiles, function(profile) {
|
||||
printerOptions.push({id: profile.id, name: profile.name});
|
||||
});
|
||||
self.printerOptions(printerOptions);
|
||||
});
|
||||
|
||||
self.printerProfiles.currentProfile.subscribe(function() {
|
||||
self.selectedPrinter(self.printerProfiles.currentProfile());
|
||||
});
|
||||
|
||||
self.portOptions = ko.observableArray(undefined);
|
||||
self.baudrateOptions = ko.observableArray(undefined);
|
||||
|
|
@ -44,14 +59,12 @@ function ConnectionViewModel(loginStateViewModel, settingsViewModel) {
|
|||
self.fromResponse = function(response) {
|
||||
var ports = response.options.ports;
|
||||
var baudrates = response.options.baudrates;
|
||||
var printerProfiles = response.options.printerProfiles;
|
||||
var portPreference = response.options.portPreference;
|
||||
var baudratePreference = response.options.baudratePreference;
|
||||
var printerPreference = response.options.printerProfilePreference;
|
||||
|
||||
self.portOptions(ports);
|
||||
self.baudrateOptions(baudrates);
|
||||
self.printerOptions(printerProfiles);
|
||||
|
||||
if (!self.selectedPort() && ports && ports.indexOf(portPreference) >= 0)
|
||||
self.selectedPort(portPreference);
|
||||
|
|
|
|||
|
|
@ -101,54 +101,98 @@ function GcodeViewModel(loginStateViewModel, settingsViewModel) {
|
|||
var currentProfileData = self.settings.printerProfiles.currentProfileData();
|
||||
if (!currentProfileData) return;
|
||||
|
||||
if (currentProfileData.extruder() && currentProfileData.extruder().extruderOffsets()) {
|
||||
var toolOffsets = self._retrieveToolOffsets(currentProfileData);
|
||||
if (toolOffsets) {
|
||||
GCODE.ui.updateOptions({
|
||||
reader: {
|
||||
toolOffsets: self.settings.printer_extruderOffsets()
|
||||
toolOffsets: toolOffsets
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
if (currentProfileData.volume() && currentProfileData.volume().width() && currentProfileData.volume().depth()) {
|
||||
}
|
||||
|
||||
var bedDimensions = self._retrieveBedDimensions(currentProfileData);
|
||||
if (toolOffsets) {
|
||||
GCODE.ui.updateOptions({
|
||||
renderer: {
|
||||
bed: bedDimensions
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
if (currentProfileData.axes()) {
|
||||
var invertX = false, invertY = false;
|
||||
if (currentProfileData.axes().x()) {
|
||||
invertX = currentProfileData.axes().x().inverted();
|
||||
}
|
||||
if (currentProfileData.axes().y()) {
|
||||
invertY = currentProfileData.axes().y().inverted();
|
||||
}
|
||||
}
|
||||
|
||||
var axesConfiguration = self._retrieveAxesConfiguration(currentProfileData);
|
||||
if (axesConfiguration) {
|
||||
GCODE.ui.updateOptions({
|
||||
renderer: {
|
||||
invertAxes: {
|
||||
x: invertX,
|
||||
y: invertY
|
||||
}
|
||||
invertAxes: axesConfiguration
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
self.settings.printer_invertAxes.subscribe(function() {
|
||||
if (!self.enabled) return;
|
||||
if (!self.settings.printer_invertAxes()) return;
|
||||
|
||||
GCODE.ui.updateOptions({
|
||||
renderer: {
|
||||
invertAxes: {
|
||||
x: self.settings.printer_invertX(),
|
||||
y: self.settings.printer_invertY()
|
||||
}
|
||||
self._retrieveBedDimensions = function(currentProfileData) {
|
||||
if (currentProfileData == undefined) {
|
||||
currentProfileData = self.settings.printerProfiles.currentProfileData();
|
||||
}
|
||||
|
||||
if (currentProfileData && currentProfileData.volume && currentProfileData.volume.formFactor() && currentProfileData.volume.width() && currentProfileData.volume.depth()) {
|
||||
var x = undefined, y = undefined, r = undefined, circular = false;
|
||||
|
||||
var formFactor = currentProfileData.volume.formFactor();
|
||||
if (formFactor == "circular") {
|
||||
r = currentProfileData.volume.width() / 2;
|
||||
circular = true;
|
||||
} else {
|
||||
x = currentProfileData.volume.width();
|
||||
y = currentProfileData.volume.depth();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
return {
|
||||
x: x,
|
||||
y: y,
|
||||
r: r,
|
||||
circular: circular
|
||||
};
|
||||
} else {
|
||||
return undefined;
|
||||
}
|
||||
};
|
||||
|
||||
self._retrieveToolOffsets = function(currentProfileData) {
|
||||
if (currentProfileData == undefined) {
|
||||
currentProfileData = self.settings.printerProfiles.currentProfileData();
|
||||
}
|
||||
|
||||
if (currentProfileData && currentProfileData.extruder && currentProfileData.extruder.offsets()) {
|
||||
return currentProfileData.extruder.offsets();
|
||||
} else {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
self._retrieveAxesConfiguration = function(currentProfileData) {
|
||||
if (currentProfileData == undefined) {
|
||||
currentProfileData = self.settings.printerProfiles.currentProfileData();
|
||||
}
|
||||
|
||||
if (currentProfileData && currentProfileData.axes) {
|
||||
var invertX = false, invertY = false;
|
||||
if (currentProfileData.axes.x) {
|
||||
invertX = currentProfileData.axes.x.inverted();
|
||||
}
|
||||
if (currentProfileData.axes.y) {
|
||||
invertY = currentProfileData.axes.y.inverted();
|
||||
}
|
||||
|
||||
return {
|
||||
x: invertX,
|
||||
y: invertY
|
||||
}
|
||||
} else {
|
||||
return undefined;
|
||||
}
|
||||
};
|
||||
|
||||
self.loadedFilename = undefined;
|
||||
self.loadedFileDate = undefined;
|
||||
|
|
@ -175,8 +219,9 @@ function GcodeViewModel(loginStateViewModel, settingsViewModel) {
|
|||
onProgress: self._onProgress,
|
||||
onModelLoaded: self._onModelLoaded,
|
||||
onLayerSelected: self._onLayerSelected,
|
||||
bed: self.settings.printer_bedDimensions(),
|
||||
toolOffsets: self.settings.printer_extruderOffsets()
|
||||
bed: self._retrieveBedDimensions(),
|
||||
toolOffsets: self._retrieveToolOffsets(),
|
||||
invertAxes: self._retrieveAxesConfiguration()
|
||||
});
|
||||
self.synchronizeOptions();
|
||||
self.enabled = true;
|
||||
|
|
|
|||
|
|
@ -201,6 +201,8 @@ function PrinterProfilesViewModel() {
|
|||
add = true;
|
||||
}
|
||||
|
||||
self.editorNew(add);
|
||||
|
||||
self.editorIdentifier(data.id);
|
||||
self.editorName(data.name);
|
||||
self.editorColor(data.color);
|
||||
|
|
|
|||
|
|
@ -305,6 +305,32 @@ table {
|
|||
}
|
||||
}
|
||||
|
||||
// Printer profiles
|
||||
&.settings_printerProfiles_profiles_name {
|
||||
text-overflow: ellipsis;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
&.settings_printerProfiles_profiles_model {
|
||||
text-align: left;
|
||||
width: 250px;
|
||||
}
|
||||
|
||||
&.settings_printerProfiles_profiles_action {
|
||||
text-align: center;
|
||||
width: 80px;
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: #000;
|
||||
|
||||
&.disabled {
|
||||
color: #ccc;
|
||||
cursor: default;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@
|
|||
<ul class="nav nav-list span4" id="settingsTabs">
|
||||
<li class="nav-header">{{ _('Printer') }}</li>
|
||||
<li class="active"><a href="#settings_serialConnection" data-toggle="tab">{{ _('Serial Connection') }}</a></li>
|
||||
<li><a href="#settings_printerParameters" data-toggle="tab">{{ _('Printer Parameters') }}</a></li>
|
||||
<li><a href="#settings_printerProfiles" data-toggle="tab">{{ _('Printer Profiles') }}</a></li>
|
||||
<li><a href="#settings_temperature" data-toggle="tab">{{ _('Temperatures') }}</a></li>
|
||||
<li><a href="#settings_terminalFilters" data-toggle="tab">{{ _('Terminal filters') }}</a></li>
|
||||
|
|
@ -108,9 +107,7 @@
|
|||
</form>
|
||||
</div>
|
||||
<div class="tab-pane" id="settings_printerProfiles">
|
||||
|
||||
<h3>{{ _('Printer Profiles') }}</h3>
|
||||
|
||||
<table class="table table-striped table-hover table-condensed table-hover" id="settings_printerProfiles_profiles">
|
||||
<thead>
|
||||
<tr>
|
||||
|
|
@ -124,7 +121,7 @@
|
|||
<td class="settings_printerProfiles_profiles_name"><span class="icon-star" data-bind="invisible: !isdefault()"></span> <span data-bind="text: name"></span></td>
|
||||
<td class="settings_printerProfiles_profiles_model" data-bind="text: model"></td>
|
||||
<td class="settings_printerProfiles_profiles_action">
|
||||
<a href="#" class="icon-pencil" title="{{ _('Edit Profile') }}" data-bind="click: function() { $root.printerProfiles.showEditProfileDialog($data); }"></a> | <a href="#" class="icon-trash" title="{{ _('Delete Profile') }}" data-bind="click: function() { $root.printerProfiles.removeProfile($data); }"></a>
|
||||
<a href="#" class="icon-star" title="{{ _('Set as default profile') }}" data-bind="click: function() { $root.printerProfiles.makeDefault($data); }"></a> | <a href="#" class="icon-pencil" title="{{ _('Edit Profile') }}" data-bind="click: function() { $root.printerProfiles.showEditProfileDialog($data); }"></a> | <a href="#" class="icon-trash" title="{{ _('Delete Profile') }}" data-bind="click: function() { $root.printerProfiles.removeProfile($data); }"></a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
|
@ -142,13 +139,13 @@
|
|||
<div class="control-group">
|
||||
<label class="control-label">{{ _('Name') }}</label>
|
||||
<div class="controls">
|
||||
<input type="text" class="disabled" data-bind="value: printerProfiles.editorIdentifier">
|
||||
<input type="text" data-bind="value: printerProfiles.editorName">
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">{{ _('Name') }}</label>
|
||||
<label class="control-label">{{ _('Identifier') }}</label>
|
||||
<div class="controls">
|
||||
<input type="text" data-bind="value: printerProfiles.editorName">
|
||||
<input type="text" data-bind="value: printerProfiles.editorIdentifier, enable: $root.printerProfiles.editorNew, css: {disabled: !$root.printerProfiles.editorNew()}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
|
|
@ -273,108 +270,6 @@
|
|||
<button class="btn btn-primary btn-confirm">{{ _('Confirm') }}</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="tab-pane" id="settings_printerParameters">
|
||||
<form class="form-horizontal">
|
||||
<div class="control-group">
|
||||
<label class="control-label">{{ _('Axis') }}</label>
|
||||
<div class="controls form-inline">
|
||||
<label>{{ _('X') }}:</label>
|
||||
<div class="input-append">
|
||||
<input type="number" class="input-mini text-right" data-bind="value: printer_movementSpeedX" id="settings-movementSpeedX">
|
||||
<span class="add-on">mm/min</span>
|
||||
</div>
|
||||
<label class="checkbox">
|
||||
<input type="checkbox" data-bind="checked: printer_invertX" id="settings-printerInvertX"> {{ _('Invert control') }}
|
||||
</label>
|
||||
</div>
|
||||
<div class="controls form-inline">
|
||||
<label>{{ _('Y') }}:</label>
|
||||
<div class="input-append">
|
||||
<input type="number" class="input-mini text-right" data-bind="value: printer_movementSpeedY" id="settings-movementSpeedY">
|
||||
<span class="add-on">mm/min</span>
|
||||
</div>
|
||||
<label class="checkbox">
|
||||
<input type="checkbox" data-bind="checked: printer_invertY" id="settings-printerInvertY"> {{ _('Invert control') }}
|
||||
</label>
|
||||
</div>
|
||||
<div class="controls form-inline">
|
||||
<label>{{ _('Z') }}:</label>
|
||||
<div class="input-append">
|
||||
<input type="number" class="input-mini text-right" data-bind="value: printer_movementSpeedZ" id="settings-movementSpeedZ">
|
||||
<span class="add-on">mm/min</span>
|
||||
</div>
|
||||
<label class="checkbox">
|
||||
<input type="checkbox" data-bind="checked: printer_invertZ" id="settings-printerInvertZ"> {{ _('Invert control') }}
|
||||
</label>
|
||||
</div>
|
||||
<div class="controls form-inline">
|
||||
<label>{{ _('E') }}:</label>
|
||||
<div class="input-append">
|
||||
<input type="number" class="input-mini text-right" data-bind="value: printer_movementSpeedE" id="settings-movementSpeedE">
|
||||
<span class="add-on">mm/min</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="settings-defaultExtrusionLength">{{ _('Default extrusion length') }}</label>
|
||||
<div class="controls">
|
||||
<input type="number" class="input-mini text-right" min="1" data-bind="value: printer_defaultExtrusionLength" id="settings-defaultExtrusionLength">
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="settings-numExtruders">{{ _('Number of Extruders') }}</label>
|
||||
<div class="controls">
|
||||
<input type="number" class="input-mini text-right" min="1" max="5" data-bind="value: printer_numExtruders" id="settings-numExtruders">
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="settings-extruderOffsets">{{ _('Extruder Offsets') }}</label>
|
||||
<!-- ko foreach: ko_printer_extruderOffsets -->
|
||||
<div class="controls form-inline">
|
||||
<label>X:</label>
|
||||
<div class="input-append">
|
||||
<input type="number" step="0.01" class="input-mini text-right" data-bind="value: x">
|
||||
<span class="add-on">mm</span>
|
||||
</div>
|
||||
<label>Y:</label>
|
||||
<div class="input-append">
|
||||
<input type="number" step="0.01" class="input-mini text-right" data-bind="value: y">
|
||||
<span class="add-on">mm</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label" for="settings-bedSize">{{ _('Bed Size') }}</label>
|
||||
<div class="controls form-inline" data-bind="ifnot: printer_bedCircular">
|
||||
<label>{{ _('X') }}:</label>
|
||||
<div class="input-append">
|
||||
<input type="number" step="0.01" class="input-mini text-right" data-bind="value: printer_bedDimensionX" id="settings-bedX">
|
||||
<span class="add-on">mm</span>
|
||||
</div>
|
||||
<label>{{ _('Y') }}:</label>
|
||||
<div class="input-append">
|
||||
<input type="number" step="0.01" class="input-mini text-right" data-bind="value: printer_bedDimensionY" id="settings-bedY">
|
||||
<span class="add-on">mm</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="controls form-inline" data-bind="if: printer_bedCircular">
|
||||
<label>{{ _('Radius') }}:</label>
|
||||
<div class="input-append">
|
||||
<input type="number" step="0.01" class="input-mini text-right" data-bind="value: printer_bedDimensionR" id="settings-bedR">
|
||||
<span class="add-on">mm</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="controls form-inline">
|
||||
<label class="checkbox">
|
||||
<input type="checkbox" data-bind="checked: printer_bedCircular" id="settings-bedCircular"> {{ _('Circular') }}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="tab-pane" id="settings_webcam">
|
||||
<form class="form-horizontal">
|
||||
|
|
|
|||
Loading…
Reference in a new issue