mirror of
https://github.com/tengge1/ShadowEditor.git
synced 2026-01-25 15:08:11 +00:00
130 lines
2.8 KiB
JavaScript
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 = ' ' + 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 = ' ' + object.name;
|
|
option.style.opacity = 0.3;
|
|
|
|
options.push(option);
|
|
|
|
}
|
|
|
|
})(history.redos, ' ');
|
|
|
|
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;
|
|
|
|
};
|