Skip to content
This repository has been archived by the owner on Jun 14, 2021. It is now read-only.

Implement "Add layer here" context menu #199

Merged
merged 2 commits into from Jan 13, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 3 additions & 1 deletion packages/delir-core/src/Entity/Composition.ts
Expand Up @@ -58,7 +58,9 @@ class Composition implements CompositionProps {
return
}

this.layers = [...this.layers].splice(index, 0, layer)
const layers = [...this.layers]
layers.splice(index, 0, layer)
this.layers = layers
}

public removeLayer(layerId: string): boolean {
Expand Down
4 changes: 4 additions & 0 deletions packages/delir/domain/Editor/EditorStore.ts
Expand Up @@ -204,6 +204,10 @@ export default class EditorStore extends Store<EditorState> {
return this.state.activeParam
}

public getActiveComposition() {
return this.state.activeComp
}

public getClipboardEntry() {
return this.state.clipboard
}
Expand Down
3 changes: 2 additions & 1 deletion packages/delir/domain/Project/Commands/AddLayerCommand.ts
Expand Up @@ -6,7 +6,7 @@ import { Command } from '../../History/HistoryStore'
import { ProjectActions } from '../actions'

export class AddLayerCommand implements Command {
constructor(private targetCompositionId: string, private addedLayer: Delir.Entity.Layer) {}
constructor(private targetCompositionId: string, private addedLayer: Delir.Entity.Layer, private index: number) {}

public undo(context: OperationContext<any>) {
this.focusToParentComposition(context)
Expand All @@ -22,6 +22,7 @@ export class AddLayerCommand implements Command {
context.dispatch(ProjectActions.addLayerAction, {
targetCompositionId: this.targetCompositionId,
layer: this.addedLayer,
index: this.index,
})
}

Expand Down
4 changes: 2 additions & 2 deletions packages/delir/domain/Project/ProjectStore.ts
Expand Up @@ -31,9 +31,9 @@ export default class ProjectStore extends Store<ProjectStoreState> {
this.updateLastModified()
})

private handleAddLayer = listen(ProjectActions.addLayerAction, ({ targetCompositionId, layer }) => {
private handleAddLayer = listen(ProjectActions.addLayerAction, ({ targetCompositionId, layer, index }) => {
const { project } = this.state
project!.findComposition(targetCompositionId)!.addLayer(layer)
project!.findComposition(targetCompositionId)!.addLayer(layer, index)
this.updateLastModified()
})

Expand Down
1 change: 1 addition & 0 deletions packages/delir/domain/Project/actions.ts
Expand Up @@ -12,6 +12,7 @@ export const ProjectActions = actions('Project', {
addLayerAction: action<{
targetCompositionId: string
layer: Delir.Entity.Layer
index: number
}>(),
addLayerWithAssetAction: action<{
targetComposition: Delir.Entity.Composition
Expand Down
7 changes: 6 additions & 1 deletion packages/delir/domain/Project/operations.ts
Expand Up @@ -71,19 +71,24 @@ export const addLayer = operation(
context,
{
targetCompositionId,
index = 0,
patch = {},
}: {
targetCompositionId: string
index?: number
patch?: Partial<Delir.Entity.Layer>
},
) => {
const layer = new Delir.Entity.Layer({ name: patch.name || '' })

await context.executeOperation(HistoryOps.pushHistory, {
command: new AddLayerCommand(targetCompositionId, layer),
command: new AddLayerCommand(targetCompositionId, layer, index),
})

context.dispatch(ProjectActions.addLayerAction, {
targetCompositionId: targetCompositionId,
layer,
index,
})
},
)
Expand Down
2 changes: 1 addition & 1 deletion packages/delir/views/AssetsView/style.styl
Expand Up @@ -65,7 +65,7 @@
border-top 1px solid rgba(255, 255, 255, 0.2)

.addAssetPlusSign
margin-left 8px
margin-left 4px
margin-bottom -1px
filter invert(100%)
cursor pointer
Expand Down
2 changes: 1 addition & 1 deletion packages/delir/views/PreviewView/PreviewView.tsx
Expand Up @@ -75,7 +75,7 @@ export default withComponentContext(
</div>
<div className={s.Preview_Footer}>
<label className={s.FooterItem} onClick={this.toggleScaleList}>
<i className="fa fa-search" />
<i className="fa fa-search-plus" />
<span className={s.currentScale}>{currentScale}%</span>
<DropDown
ref={this.scaleListRef}
Expand Down
8 changes: 4 additions & 4 deletions packages/delir/views/Timeline/Clip.i18n.ts
Expand Up @@ -3,8 +3,8 @@ import I18n from '../../utils/I18n'
export default I18n({
ja: {
contextMenu: {
seekToHeadOfClip: 'クリップの先頭にシーク',
effect: 'エフェクト',
seekToHeadOfClip: 'クリップの先頭にシーク',
effect: 'エフェクト',
remove: '🚯 削除',
pluginUnavailable: '利用可能なポストエフェクトがありません',
},
Expand All @@ -19,8 +19,8 @@ export default I18n({
},
en: {
contextMenu: {
seekToHeadOfClip: 'クリップの先頭にシーク',
effect: 'Effect',
seekToHeadOfClip: '⏪Seek to clip head',
effect: 'Effect',
remove: '🚯 Remove',
pluginUnavailable: 'No available post-effect',
},
Expand Down
102 changes: 0 additions & 102 deletions packages/delir/views/Timeline/LaneLabel.tsx

This file was deleted.

2 changes: 2 additions & 0 deletions packages/delir/views/Timeline/Layer.i18n.ts
Expand Up @@ -4,6 +4,7 @@ export default I18n({
ja: {
contextMenu: {
createClip: 'クリップを作成',
addLayerHere: '➕ ここにレイヤーを追加',
},
renderers: {
audio: '🔊 オーディオ',
Expand All @@ -17,6 +18,7 @@ export default I18n({
en: {
contextMenu: {
createClip: 'Create clip',
addLayerHere: '➕ Add layer here',
},
renderers: {
audio: '🔊 Audio',
Expand Down
23 changes: 19 additions & 4 deletions packages/delir/views/Timeline/Layer.tsx
Expand Up @@ -21,6 +21,7 @@ import * as s from './Layer.styl'

interface OwnProps {
layer: Delir.Entity.Layer
layerIndex: number
activeClip: Delir.Entity.Clip | null
framerate: number
pxPerSec: number
Expand Down Expand Up @@ -90,11 +91,12 @@ export default withComponentContext(
key={idx}
label={t(['renderers', renderer.rendererId])}
data-renderer-id={renderer.rendererId}
onClick={this.addNewClip}
onClick={this.handleAddNewClip}
/>
))}
</MenuItem>
<MenuItem type="separator" />
<MenuItem label={t('contextMenu.addLayerHere')} onClick={this.handleAddLayer} />
</ContextMenu>

<div className={s.clipsContainer}>
Expand All @@ -121,7 +123,7 @@ export default withComponentContext(
postEffectPlugins={postEffectPlugins}
hasError={hasError}
onChangePlace={this.handleChangeClipPlace}
onChangeDuration={this.changeClipDuration}
onChangeDuration={this.handleChangeClipDuration}
/>
)
})}
Expand Down Expand Up @@ -204,7 +206,7 @@ export default withComponentContext(
})
}

private changeClipDuration = (clipId: string, newWidth: number) => {
private handleChangeClipDuration = (clipId: string, newWidth: number) => {
const newDurationFrames = TimePixelConversion.pixelToFrames({
pxPerSec: this.props.pxPerSec,
framerate: this.props.framerate,
Expand All @@ -218,7 +220,7 @@ export default withComponentContext(
})
}

private addNewClip = ({ dataset }: MenuItemOption<{ rendererId: string }>) => {
private handleAddNewClip = ({ dataset }: MenuItemOption<{ rendererId: string }>) => {
this.props.context.executeOperation(ProjectOps.addClip, {
layerId: this.props.layer.id!,
clipRendererId: dataset.rendererId,
Expand All @@ -227,6 +229,19 @@ export default withComponentContext(
})
}

private handleAddLayer = () => {
const {
editor: { activeComp },
layerIndex,
} = this.props
if (!activeComp) return

this.props.context.executeOperation(ProjectOps.addLayer, {
targetCompositionId: activeComp.id,
index: layerIndex,
})
}

private handleGlobalPaste = () => {
this.props.context.executeOperation(ProjectOps.pasteClipEntityIntoLayer, {
layerId: this.props.layer.id,
Expand Down
Expand Up @@ -3,14 +3,14 @@ import I18n from '../../utils/I18n'
export default I18n({
ja: {
contextMenu: {
createLayer: '➕ レイヤーを追加',
addLayerHere: '➕ ここにレイヤーを追加',
removeLayer: '🚯 レイヤーを削除',
renameLayer: '✏️ レイヤー名を変更 (Enter)',
},
},
en: {
contextMenu: {
createLayer: '➕ Add layer',
addLayerHere: '➕ Add layer here',
removeLayer: '🚯 Remove layer',
renameLayer: '✏️ Rename layer (Enter)',
},
Expand Down