Skip to content
Snippets Groups Projects
Commit 6240b9bd authored by Paul Kaplan's avatar Paul Kaplan Committed by GitHub
Browse files

Merge pull request #675 from paulkaplan/duplicate

Add duplicate option for sprite selector menu
parents 992bdcec 2f8115a5
No related branches found
No related tags found
No related merge requests found
...@@ -39,6 +39,15 @@ const SpriteSelectorItem = props => ( ...@@ -39,6 +39,15 @@ const SpriteSelectorItem = props => (
) : null} ) : null}
<div className={styles.spriteName}>{props.name}</div> <div className={styles.spriteName}>{props.name}</div>
<ContextMenu id={`${props.name}-${contextMenuId++}`}> <ContextMenu id={`${props.name}-${contextMenuId++}`}>
{props.onDuplicateButtonClick ? (
<MenuItem onClick={props.onDuplicateButtonClick}>
<FormattedMessage
defaultMessage="duplicate"
description="Menu item to duplicate in the right click menu"
id="contextMenu.duplicate"
/>
</MenuItem>
) : null}
<MenuItem onClick={props.onDeleteButtonClick}> <MenuItem onClick={props.onDeleteButtonClick}>
<FormattedMessage <FormattedMessage
defaultMessage="delete" defaultMessage="delete"
...@@ -55,7 +64,8 @@ SpriteSelectorItem.propTypes = { ...@@ -55,7 +64,8 @@ SpriteSelectorItem.propTypes = {
costumeURL: PropTypes.string, costumeURL: PropTypes.string,
name: PropTypes.string.isRequired, name: PropTypes.string.isRequired,
onClick: PropTypes.func, onClick: PropTypes.func,
onDeleteButtonClick: PropTypes.func, onDeleteButtonClick: PropTypes.func.isRequired,
onDuplicateButtonClick: PropTypes.func,
selected: PropTypes.bool.isRequired selected: PropTypes.bool.isRequired
}; };
......
...@@ -27,6 +27,7 @@ const SpriteSelectorComponent = function (props) { ...@@ -27,6 +27,7 @@ const SpriteSelectorComponent = function (props) {
onChangeSpriteX, onChangeSpriteX,
onChangeSpriteY, onChangeSpriteY,
onDeleteSprite, onDeleteSprite,
onDuplicateSprite,
onNewSpriteClick, onNewSpriteClick,
onSelectSprite, onSelectSprite,
selectedId, selectedId,
...@@ -77,6 +78,7 @@ const SpriteSelectorComponent = function (props) { ...@@ -77,6 +78,7 @@ const SpriteSelectorComponent = function (props) {
selected={sprite.id === selectedId} selected={sprite.id === selectedId}
onClick={onSelectSprite} onClick={onSelectSprite}
onDeleteButtonClick={onDeleteSprite} onDeleteButtonClick={onDeleteSprite}
onDuplicateButtonClick={onDuplicateSprite}
/> />
)) ))
} }
...@@ -100,6 +102,7 @@ SpriteSelectorComponent.propTypes = { ...@@ -100,6 +102,7 @@ SpriteSelectorComponent.propTypes = {
onChangeSpriteX: PropTypes.func, onChangeSpriteX: PropTypes.func,
onChangeSpriteY: PropTypes.func, onChangeSpriteY: PropTypes.func,
onDeleteSprite: PropTypes.func, onDeleteSprite: PropTypes.func,
onDuplicateSprite: PropTypes.func,
onNewSpriteClick: PropTypes.func, onNewSpriteClick: PropTypes.func,
onSelectSprite: PropTypes.func, onSelectSprite: PropTypes.func,
selectedId: PropTypes.string, selectedId: PropTypes.string,
......
...@@ -34,6 +34,7 @@ const TargetPane = ({ ...@@ -34,6 +34,7 @@ const TargetPane = ({
onChangeSpriteX, onChangeSpriteX,
onChangeSpriteY, onChangeSpriteY,
onDeleteSprite, onDeleteSprite,
onDuplicateSprite,
onNewSpriteClick, onNewSpriteClick,
onRequestCloseBackdropLibrary, onRequestCloseBackdropLibrary,
onRequestCloseCostumeLibrary, onRequestCloseCostumeLibrary,
...@@ -61,6 +62,7 @@ const TargetPane = ({ ...@@ -61,6 +62,7 @@ const TargetPane = ({
onChangeSpriteX={onChangeSpriteX} onChangeSpriteX={onChangeSpriteX}
onChangeSpriteY={onChangeSpriteY} onChangeSpriteY={onChangeSpriteY}
onDeleteSprite={onDeleteSprite} onDeleteSprite={onDeleteSprite}
onDuplicateSprite={onDuplicateSprite}
onNewSpriteClick={onNewSpriteClick} onNewSpriteClick={onNewSpriteClick}
onSelectSprite={onSelectSprite} onSelectSprite={onSelectSprite}
/> />
...@@ -141,6 +143,7 @@ TargetPane.propTypes = { ...@@ -141,6 +143,7 @@ TargetPane.propTypes = {
onChangeSpriteX: PropTypes.func, onChangeSpriteX: PropTypes.func,
onChangeSpriteY: PropTypes.func, onChangeSpriteY: PropTypes.func,
onDeleteSprite: PropTypes.func, onDeleteSprite: PropTypes.func,
onDuplicateSprite: PropTypes.func,
onNewSpriteClick: PropTypes.func, onNewSpriteClick: PropTypes.func,
onRequestCloseBackdropLibrary: PropTypes.func, onRequestCloseBackdropLibrary: PropTypes.func,
onRequestCloseCostumeLibrary: PropTypes.func, onRequestCloseCostumeLibrary: PropTypes.func,
......
...@@ -11,7 +11,8 @@ class SpriteSelectorItem extends React.Component { ...@@ -11,7 +11,8 @@ class SpriteSelectorItem extends React.Component {
super(props); super(props);
bindAll(this, [ bindAll(this, [
'handleClick', 'handleClick',
'handleDelete' 'handleDelete',
'handleDuplicate'
]); ]);
} }
handleClick (e) { handleClick (e) {
...@@ -24,6 +25,10 @@ class SpriteSelectorItem extends React.Component { ...@@ -24,6 +25,10 @@ class SpriteSelectorItem extends React.Component {
this.props.onDeleteButtonClick(this.props.id); this.props.onDeleteButtonClick(this.props.id);
} }
} }
handleDuplicate (e) {
e.stopPropagation(); // To prevent from bubbling back to handleClick
this.props.onDuplicateButtonClick(this.props.id);
}
render () { render () {
const { const {
/* eslint-disable no-unused-vars */ /* eslint-disable no-unused-vars */
...@@ -31,6 +36,7 @@ class SpriteSelectorItem extends React.Component { ...@@ -31,6 +36,7 @@ class SpriteSelectorItem extends React.Component {
id, id,
onClick, onClick,
onDeleteButtonClick, onDeleteButtonClick,
onDuplicateButtonClick,
/* eslint-enable no-unused-vars */ /* eslint-enable no-unused-vars */
...props ...props
} = this.props; } = this.props;
...@@ -38,6 +44,7 @@ class SpriteSelectorItem extends React.Component { ...@@ -38,6 +44,7 @@ class SpriteSelectorItem extends React.Component {
<SpriteSelectorItemComponent <SpriteSelectorItemComponent
onClick={this.handleClick} onClick={this.handleClick}
onDeleteButtonClick={this.handleDelete} onDeleteButtonClick={this.handleDelete}
onDuplicateButtonClick={onDuplicateButtonClick ? this.handleDuplicate : null}
{...props} {...props}
/> />
); );
...@@ -50,7 +57,8 @@ SpriteSelectorItem.propTypes = { ...@@ -50,7 +57,8 @@ SpriteSelectorItem.propTypes = {
id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
name: PropTypes.string, name: PropTypes.string,
onClick: PropTypes.func, onClick: PropTypes.func,
onDeleteButtonClick: PropTypes.func, onDeleteButtonClick: PropTypes.func.isRequired,
onDuplicateButtonClick: PropTypes.func,
selected: PropTypes.bool selected: PropTypes.bool
}; };
......
...@@ -25,6 +25,7 @@ class TargetPane extends React.Component { ...@@ -25,6 +25,7 @@ class TargetPane extends React.Component {
'handleChangeSpriteX', 'handleChangeSpriteX',
'handleChangeSpriteY', 'handleChangeSpriteY',
'handleDeleteSprite', 'handleDeleteSprite',
'handleDuplicateSprite',
'handleSelectSprite' 'handleSelectSprite'
]); ]);
} }
...@@ -49,6 +50,9 @@ class TargetPane extends React.Component { ...@@ -49,6 +50,9 @@ class TargetPane extends React.Component {
handleDeleteSprite (id) { handleDeleteSprite (id) {
this.props.vm.deleteSprite(id); this.props.vm.deleteSprite(id);
} }
handleDuplicateSprite (id) {
this.props.vm.duplicateSprite(id);
}
handleSelectSprite (id) { handleSelectSprite (id) {
this.props.vm.setEditingTarget(id); this.props.vm.setEditingTarget(id);
} }
...@@ -63,6 +67,7 @@ class TargetPane extends React.Component { ...@@ -63,6 +67,7 @@ class TargetPane extends React.Component {
onChangeSpriteX={this.handleChangeSpriteX} onChangeSpriteX={this.handleChangeSpriteX}
onChangeSpriteY={this.handleChangeSpriteY} onChangeSpriteY={this.handleChangeSpriteY}
onDeleteSprite={this.handleDeleteSprite} onDeleteSprite={this.handleDeleteSprite}
onDuplicateSprite={this.handleDuplicateSprite}
onSelectSprite={this.handleSelectSprite} onSelectSprite={this.handleSelectSprite}
/> />
); );
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment