scratch-gui
Version:
GraphicaL User Interface for creating and running Scratch 3.0 projects
80 lines (75 loc) • 2.28 kB
JSX
import bindAll from 'lodash.bindall';
import PropTypes from 'prop-types';
import React from 'react';
import VM from 'scratch-vm';
import analytics from '../lib/analytics';
import ControlsComponent from '../components/controls/controls.jsx';
class Controls extends React.Component {
constructor (props) {
super(props);
bindAll(this, [
'handleGreenFlagClick',
'handleStopAllClick',
'onProjectRunStart',
'onProjectRunStop'
]);
this.state = {
projectRunning: false,
turbo: false
};
}
componentDidMount () {
this.props.vm.addListener('PROJECT_RUN_START', this.onProjectRunStart);
this.props.vm.addListener('PROJECT_RUN_STOP', this.onProjectRunStop);
}
componentWillUnmount () {
this.props.vm.removeListener('PROJECT_RUN_START', this.onProjectRunStart);
this.props.vm.removeListener('PROJECT_RUN_STOP', this.onProjectRunStop);
}
onProjectRunStart () {
this.setState({projectRunning: true});
}
onProjectRunStop () {
this.setState({projectRunning: false});
}
handleGreenFlagClick (e) {
e.preventDefault();
if (e.shiftKey) {
this.setState({turbo: !this.state.turbo});
this.props.vm.setTurboMode(!this.state.turbo);
} else {
this.props.vm.greenFlag();
analytics.event({
category: 'general',
action: 'Green Flag'
});
}
}
handleStopAllClick (e) {
e.preventDefault();
this.props.vm.stopAll();
analytics.event({
category: 'general',
action: 'Stop Button'
});
}
render () {
const {
vm, // eslint-disable-line no-unused-vars
...props
} = this.props;
return (
<ControlsComponent
{...props}
active={this.state.projectRunning}
turbo={this.state.turbo}
onGreenFlagClick={this.handleGreenFlagClick}
onStopAllClick={this.handleStopAllClick}
/>
);
}
}
Controls.propTypes = {
vm: PropTypes.instanceOf(VM)
};
export default Controls;