ShadowEditor/editor/js/Sidebar.History.js
2018-06-07 19:50:07 +08:00

130 lines
2.8 KiB
JavaScript

/**
* @author dforrer / https://github.com/dforrer
* Developed as part of a project at University of Applied Sciences and Arts Northwestern Switzerland (www.fhnw.ch)
*/
Sidebar.History = function (editor) {
var signals = editor.signals;
var config = editor.config;
var history = editor.history;
var container = new UI.Panel();
container.add(new UI.Text('历史记录'));
//
var persistent = new UI.THREE.Boolean(config.getKey('settings/history'), '永久');
persistent.setPosition('absolute').setRight('8px');
persistent.onChange(function () {
var value = this.getValue();
config.setKey('settings/history', value);
if (value) {
alert('历史记录将被保存在会话中。\n这会对使用材质的性能产生影响。');
var lastUndoCmd = history.undos[history.undos.length - 1];
var lastUndoId = (lastUndoCmd !== undefined) ? lastUndoCmd.id : 0;
editor.history.enableSerialization(lastUndoId);
} else {
signals.historyChanged.dispatch();
}
});
container.add(persistent);
container.add(new UI.Break(), new UI.Break());
var ignoreObjectSelectedSignal = false;
var outliner = new UI.Outliner(editor);
outliner.onChange(function () {
ignoreObjectSelectedSignal = true;
editor.history.goToState(parseInt(outliner.getValue()));
ignoreObjectSelectedSignal = false;
});
container.add(outliner);
//
var refreshUI = function () {
var options = [];
var enumerator = 1;
function buildOption(object) {
var option = document.createElement('div');
option.value = object.id;
return option;
}
(function addObjects(objects) {
for (var i = 0, l = objects.length; i < l; i++) {
var object = objects[i];
var option = buildOption(object);
option.innerHTML = '&nbsp;' + object.name;
options.push(option);
}
})(history.undos);
(function addObjects(objects, pad) {
for (var i = objects.length - 1; i >= 0; i--) {
var object = objects[i];
var option = buildOption(object);
option.innerHTML = '&nbsp;' + object.name;
option.style.opacity = 0.3;
options.push(option);
}
})(history.redos, '&nbsp;');
outliner.setOptions(options);
};
refreshUI();
// events
signals.editorCleared.add(refreshUI);
signals.historyChanged.add(refreshUI);
signals.historyChanged.add(function (cmd) {
outliner.setValue(cmd !== undefined ? cmd.id : null);
});
return container;
};