UNPKG

scratch-gui

Version:

GraphicaL User Interface for creating and running Scratch 3.0 projects

80 lines (75 loc) 2.28 kB
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;