import './css/ScriptPanel.css';
import { Button, Icon, Tree, IconButton } from '../../ui/index';
import ScriptWindow from './window/ScriptWindow.jsx';
/**
* 历史面板
* @author tengge / https://github.com/tengge1
*/
class ScriptPanel extends React.Component {
constructor(props) {
super(props);
this.expanded = {};
this.state = {
scripts: {},
selected: null
};
this.handleAddFolder = this.handleAddFolder.bind(this);
this.handleCommitAddFolder = this.handleCommitAddFolder.bind(this);
this.handleAddScript = this.handleAddScript.bind(this);
this.handleSelect = this.handleSelect.bind(this);
this.handleClickIcon = this.handleClickIcon.bind(this);
this.handleExpand = this.handleExpand.bind(this);
this.handleEditScript = this.handleEditScript.bind(this);
this.handleSaveScript = this.handleSaveScript.bind(this);
this.handleRemoveScript = this.handleRemoveScript.bind(this);
this.update = this.update.bind(this);
}
render() {
const { scripts, selected } = this.state;
const data = Object.entries(scripts || []).map(n => {
if (n[1].type === 'folder') { // 文件夹
return {
value: n[0],
text: `${n[1].name}.${this.getExtension(n[1].type)}`,
leaf: false,
expanded: true
};
} else { // 脚本
return {
value: n[0],
text: `${n[1].name}.${this.getExtension(n[1].type)}`,
leaf: true,
icons: [{
name: 'edit',
value: n[0],
icon: 'edit',
title: _t('Edit Script')
}, {
name: 'delete',
value: n[0],
icon: 'delete',
title: _t('Delete Script')
}]
};
}
});
return
;
}
getExtension(type) {
let extension = '';
switch (type) {
case 'javascript':
extension = 'js';
break;
case 'vertexShader':
extension = 'glsl';
break;
case 'fragmentShader':
extension = 'glsl';
break;
case 'json':
extension = 'json';
break;
}
return extension;
}
componentDidMount() {
app.on(`scriptChanged.ScriptPanel`, this.update);
}
update() {
this.setState({
scripts: app.editor.scripts
});
}
handleAddFolder() {
app.prompt({
title: _t('Input Folder Name'),
content: _t('Folder Name'),
value: _t('New folder'),
onOK: this.handleCommitAddFolder
});
}
handleCommitAddFolder(value) {
const uuid = THREE.Math.generateUUID();
app.editor.scripts[uuid] = {
id: null,
pid: null,
name: value,
type: 'folder',
uuid,
sort: 0
};
app.call(`scriptChanged`, this);
}
handleAddScript() {
const window = app.createElement(ScriptWindow);
app.addElement(window);
}
handleSelect(value, event) {
}
handleClickIcon(value, name) {
if (name === 'edit') {
this.handleEditScript(value);
} else if (name === 'delete') {
this.handleRemoveScript(value);
}
}
handleExpand(value, event) {
}
handleEditScript(uuid) {
var script = app.editor.scripts[uuid];
if (script) {
app.call(`editScript`, this, uuid, script.name, script.type, script.source, this.handleSaveScript);
}
}
handleSaveScript(uuid, name, type, source) {
app.editor.scripts[uuid] = {
id: null,
uuid,
name,
type,
source
};
app.call(`scriptChanged`, this);
}
handleRemoveScript(uuid) {
const script = app.editor.scripts[uuid];
app.confirm({
title: _t('Confirm'),
content: `${_t('Delete')} ${script.name}.${this.getExtension(script.type)}?`,
onOK: () => {
delete app.editor.scripts[uuid];
app.call('scriptChanged', this);
}
});
}
}
export default ScriptPanel;