From f9769e87a268feadc317a9de44310c736e8badd6 Mon Sep 17 00:00:00 2001 From: "jinwooim.bae" Date: Sun, 11 May 2014 19:30:43 +0900 Subject: [PATCH] ANIMATOR : ADD copy,cut and paste in timeline This is copy, cut and paste fuction in timeline. Change-Id: I456c525afdb615b432f5d65f8a9a2d58feae5ec3 Signed-off-by: jinwooim.bae --- .../ui/views/timeline/TimelineClipboard.java | 70 ++++++++++++++ .../animator/ui/views/timeline/TimelinePage.java | 24 ++++- .../views/timeline/action/AddKeyFrameAction.java | 21 +++++ .../action/AddPredefinedKeyFrameAction.java | 37 ++++++-- .../views/timeline/action/CopyKeyFrameAction.java | 48 +++++++++- .../views/timeline/action/CutKeyFrameAction.java | 50 +++++++++- .../timeline/action/DeleteKeyFrameAction.java | 21 +++++ .../views/timeline/action/PasteKeyFrameAction.java | 102 +++++++++++++++++++-- 8 files changed, 350 insertions(+), 23 deletions(-) create mode 100644 org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/TimelineClipboard.java diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/TimelineClipboard.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/TimelineClipboard.java new file mode 100644 index 0000000..c813b1f --- /dev/null +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/TimelineClipboard.java @@ -0,0 +1,70 @@ + + +package org.tizen.webuibuilder.animator.ui.views.timeline; + +import org.eclipse.gef.dnd.SimpleObjectTransfer; +import org.eclipse.swt.dnd.Clipboard; +import org.eclipse.swt.dnd.Transfer; +import org.eclipse.swt.widgets.Display; + + +/** + * This class is Clipboard in Timeline. + */ +public class TimelineClipboard { + + private Clipboard clipboard = null; + private static final SimpleObjectTransfer timelineTransper = new SimpleObjectTransfer() { + private final String TYPE_NAME = + "org.tizen.webuibuilder.animator.ui.views.timeline.clipboard.transfer"; //$NON-NLS-1$ + private final int TYPE_ID = registerType(TYPE_NAME); + + protected int[] getTypeIds() { + return new int[] { TYPE_ID }; + } + + protected String[] getTypeNames() { + return new String[] { TYPE_NAME }; + } + }; + + /** + * Construct + * + * @param display + * {@link Display} + */ + public TimelineClipboard(Display display) { + clipboard = new Clipboard(display); + } + + /** + * Get Clipboard + */ + public Clipboard getClipboard() { + return clipboard; + } + + /** + * Get Object + */ + public Object getContents() { + org.eclipse.swt.dnd.Clipboard cb = new org.eclipse.swt.dnd.Clipboard(null); + Object contents = cb.getContents(timelineTransper); + cb.dispose(); + return contents; + } + + /** + * Set Contents + * + * @param contents + * {@link Object} + */ + public void setContents(Object contents) { + org.eclipse.swt.dnd.Clipboard cb = new org.eclipse.swt.dnd.Clipboard(null); + cb.setContents(new Object[] { contents }, new Transfer[] { timelineTransper }); + cb.dispose(); + } + +} diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/TimelinePage.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/TimelinePage.java index 9c8c705..30f07fc 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/TimelinePage.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/TimelinePage.java @@ -31,6 +31,7 @@ import org.eclipse.gef.ui.parts.ContentOutlinePage; import org.eclipse.gef.ui.parts.SelectionSynchronizer; import org.eclipse.jface.action.IAction; import org.eclipse.swt.SWT; +import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; @@ -80,6 +81,8 @@ public class TimelinePage extends ContentOutlinePage { private ActionRegistry actionRegistry = null; private ActionRegistry timelineActionRegistry = null; + private TimelineClipboard clipboard = null; + /** * Construct * @@ -118,6 +121,8 @@ public class TimelinePage extends ContentOutlinePage { public void init(IPageSite pageSite) { super.init(pageSite); + clipboard = new TimelineClipboard(pageSite.getShell().getDisplay()); + String id = ActionFactory.UNDO.getId(); timelineActionRegistry.registerAction(getActionRegistry().getAction(id)); @@ -235,10 +240,10 @@ public class TimelinePage extends ContentOutlinePage { */ public void initPage() { AppManager appManager = (AppManager) AnimatorUtils.getAppManager(); - if(appManager != null) { + if (appManager != null) { AnimatorModelManager modelManager = appManager.getAnimatorModelManager(); - if(modelManager != null) { - pagePart = (AnimatorPagePart) modelManager.getPagePart(); + if (modelManager != null) { + pagePart = (AnimatorPagePart) modelManager.getPagePart(); } } refreshPage(pagePart); @@ -445,8 +450,21 @@ public class TimelinePage extends ContentOutlinePage { this.actionRegistry = actionRegistry; } + /** + * Get TimelineActionRegistry + * + * @return + */ public ActionRegistry getTimelineActionRegistry() { return timelineActionRegistry; } + /** + * Get Clipboard + * + * @return + */ + public TimelineClipboard getClipboard() { + return clipboard; + } } diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/action/AddKeyFrameAction.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/action/AddKeyFrameAction.java index 6f73e77..c1ae374 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/action/AddKeyFrameAction.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/action/AddKeyFrameAction.java @@ -18,10 +18,21 @@ import org.tizen.webuibuilder.animator.ui.views.timeline.tree.TimelineOutlineEle import org.tizen.webuibuilder.animator.utils.AnimatorUtils; +/** + * This class is Action for adding KeyFrame. + */ public class AddKeyFrameAction extends SelectionAction { EditPartViewer editPartViewer = null; + /** + * Construct + * + * @param text + * {@link String} + * @param editPartViewer + * {@link EditPartViewer} + */ public AddKeyFrameAction(String text, EditPartViewer editPartViewer) { super(null); @@ -32,6 +43,11 @@ public class AddKeyFrameAction extends SelectionAction { this.editPartViewer = editPartViewer; } + /* + * (non-Javadoc) + * + * @see org.eclipse.gef.ui.actions.WorkbenchPartAction#calculateEnabled() + */ @Override protected boolean calculateEnabled() { if (editPartViewer == null) { @@ -40,6 +56,11 @@ public class AddKeyFrameAction extends SelectionAction { return true; } + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.action.Action#run() + */ @Override public void run() { TimelineViewer viewer = (TimelineViewer) editPartViewer; diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/action/AddPredefinedKeyFrameAction.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/action/AddPredefinedKeyFrameAction.java index 6489e9a..3b28c71 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/action/AddPredefinedKeyFrameAction.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/action/AddPredefinedKeyFrameAction.java @@ -25,11 +25,25 @@ import org.tizen.webuibuilder.model.app.AppManager; import org.tizen.webuibuilder.utility.ResourceManager; +/** + * This class is Action for adding predefined keyframe. + * + * @author jinwoo + * + */ public class AddPredefinedKeyFrameAction extends SelectionAction { private EditPartViewer editPartViewer = null; private CssAnimationDescriptor cssAnimation = null; + /** + * Construct + * + * @param cssAnimation + * {@link CssAnimationDescriptor} + * @param editPartViewer + * {@link EditPartViewer} + */ public AddPredefinedKeyFrameAction(final CssAnimationDescriptor cssAnimation, EditPartViewer editPartViewer) { super(null); @@ -53,10 +67,18 @@ public class AddPredefinedKeyFrameAction extends SelectionAction { } + /** + * Set DisplayName + */ private void setDisplayName(String text) { setText(text); } + /* + * (non-Javadoc) + * + * @see org.eclipse.gef.ui.actions.WorkbenchPartAction#calculateEnabled() + */ @Override protected boolean calculateEnabled() { if (editPartViewer == null) { @@ -65,6 +87,11 @@ public class AddPredefinedKeyFrameAction extends SelectionAction { return true; } + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.action.Action#run() + */ @Override public void run() { TimelineViewer viewer = (TimelineViewer) editPartViewer; @@ -78,15 +105,13 @@ public class AddPredefinedKeyFrameAction extends SelectionAction { Part partModel = model.getPartLink(); String animationGroupId = - viewer.getMainContainer().getContentContainer().getContentHeaderContainer() - .getOutlineHeader().getSelectedAnimationGroupId(); - double pointTime = - viewer.getMainContainer().getContentContainer().getContentHeaderContainer() - .getKeyframeHeader().getTimeBar().getPlayHeader().getCurrentPointTime(); + AnimatorUtils.getActiveAnimatorBrowserViewer().getCurrentAnimationGroupId(); + double pointTime = AnimatorUtils.getActiveAnimatorBrowserViewer().getPointTime(); + AppManager appManager = AnimatorUtils.getAppManager(); Command command = new AnimationCreateCommand(animationGroupId, cssAnimation, appManager, - AnimatorModelEvent.Origin.EDITOR, partModel, + AnimatorModelEvent.Origin.TIMELINE, partModel, partModel.getUiSelector(), pointTime); viewer.getEditDomain().getCommandStack().execute(command); diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/action/CopyKeyFrameAction.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/action/CopyKeyFrameAction.java index a940bef..ce6af4e 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/action/CopyKeyFrameAction.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/action/CopyKeyFrameAction.java @@ -2,18 +2,34 @@ package org.tizen.webuibuilder.animator.ui.views.timeline.action; +import java.util.ArrayList; import java.util.List; import org.eclipse.gef.EditPartViewer; import org.eclipse.gef.ui.actions.SelectionAction; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; +import org.tizen.webuibuilder.animator.model.AnimatorModel; +import org.tizen.webuibuilder.animator.ui.views.timeline.TimelineClipboard; +import org.tizen.webuibuilder.animator.ui.views.timeline.TimelinePage; +import org.tizen.webuibuilder.animator.ui.views.timeline.TimelineViewer; +/** + * This class is Action for coping KeyFrame. + */ public class CopyKeyFrameAction extends SelectionAction { private EditPartViewer editPartViewer = null; + /** + * Construct + * + * @param text + * {@link String} + * @param editPartViewer + * {@link EditPartViewer} + */ public CopyKeyFrameAction(String text, EditPartViewer editPartViewer) { super(null); setId(text); @@ -24,24 +40,48 @@ public class CopyKeyFrameAction extends SelectionAction { this.editPartViewer = editPartViewer; } + /* + * (non-Javadoc) + * + * @see org.eclipse.gef.ui.actions.WorkbenchPartAction#calculateEnabled() + */ @Override protected boolean calculateEnabled() { if (editPartViewer == null) { return false; } - List selectedList = getSelectedObjects(); int size = selectedList.size(); - if (size > 0) { - return true; + if (size <= 0) { + return false; + } + TimelinePage page = ((TimelineViewer) editPartViewer).getPage(); + TimelineClipboard clipboard = page.getClipboard(); + if (clipboard == null) { + return false; } - return false; + return true; } + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.action.Action#run() + */ @Override public void run() { + List selectedList = getSelectedObjects(); + + // Animator model clone + List cloneModels = new ArrayList(); + + // + TimelinePage page = ((TimelineViewer) editPartViewer).getPage(); + TimelineClipboard clipboard = page.getClipboard(); + clipboard.setContents(cloneModels); + } } diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/action/CutKeyFrameAction.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/action/CutKeyFrameAction.java index c313274..b813dd7 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/action/CutKeyFrameAction.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/action/CutKeyFrameAction.java @@ -2,18 +2,34 @@ package org.tizen.webuibuilder.animator.ui.views.timeline.action; +import java.util.ArrayList; import java.util.List; import org.eclipse.gef.EditPartViewer; import org.eclipse.gef.ui.actions.SelectionAction; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; +import org.tizen.webuibuilder.animator.model.AnimatorModel; +import org.tizen.webuibuilder.animator.ui.views.timeline.TimelineClipboard; +import org.tizen.webuibuilder.animator.ui.views.timeline.TimelinePage; +import org.tizen.webuibuilder.animator.ui.views.timeline.TimelineViewer; +/** + * This class is Action for cutting KeyFrame. + */ public class CutKeyFrameAction extends SelectionAction { EditPartViewer editPartViewer = null; + /** + * Construct + * + * @param text + * {@link String} + * @param editPartViewer + * {@link EditPartViewer} + */ public CutKeyFrameAction(String text, EditPartViewer editPartViewer) { super(null); setId(text); @@ -25,24 +41,50 @@ public class CutKeyFrameAction extends SelectionAction { this.editPartViewer = editPartViewer; } + /* + * (non-Javadoc) + * + * @see org.eclipse.gef.ui.actions.WorkbenchPartAction#calculateEnabled() + */ @Override protected boolean calculateEnabled() { if (editPartViewer == null) { return false; } - List selectedList = getSelectedObjects(); int size = selectedList.size(); - if (size > 0) { - return true; + if (size <= 0) { + return false; + } + TimelinePage page = ((TimelineViewer) editPartViewer).getPage(); + TimelineClipboard clipboard = page.getClipboard(); + if (clipboard == null) { + return false; } - return false; + return true; } + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.action.Action#run() + */ @Override public void run() { + List selectedList = getSelectedObjects(); + + // Animator model clone + List cloneModels = new ArrayList(); + + // delete realModels + + TimelinePage page = ((TimelineViewer) editPartViewer).getPage(); + TimelineClipboard clipboard = page.getClipboard(); + + clipboard.setContents(cloneModels); + } } diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/action/DeleteKeyFrameAction.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/action/DeleteKeyFrameAction.java index 4150094..ab26ef2 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/action/DeleteKeyFrameAction.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/action/DeleteKeyFrameAction.java @@ -20,10 +20,21 @@ import org.tizen.webuibuilder.animator.ui.views.timeline.widget.KeyFrameComponen import org.tizen.webuibuilder.animator.ui.views.timeline.widget.KeyFrameUnit; +/** + * This class is Action for deleting KeyFrame. + */ public class DeleteKeyFrameAction extends SelectionAction { private EditPartViewer editPartViewer = null; + /** + * Construct + * + * @param text + * {@link String} + * @param editPartViewer + * {@link EditPartViewer} + */ public DeleteKeyFrameAction(String text, EditPartViewer editPartViewer) { super(null); setId(text); @@ -34,6 +45,11 @@ public class DeleteKeyFrameAction extends SelectionAction { this.editPartViewer = editPartViewer; } + /* + * (non-Javadoc) + * + * @see org.eclipse.gef.ui.actions.WorkbenchPartAction#calculateEnabled() + */ @Override protected boolean calculateEnabled() { if (editPartViewer == null) { @@ -49,6 +65,11 @@ public class DeleteKeyFrameAction extends SelectionAction { return false; } + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.action.Action#run() + */ @Override public void run() { List selectedList = getSelectedObjects(); diff --git a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/action/PasteKeyFrameAction.java b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/action/PasteKeyFrameAction.java index 39aa2f7..e125640 100644 --- a/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/action/PasteKeyFrameAction.java +++ b/org.tizen.webuibuilder/src/org/tizen/webuibuilder/animator/ui/views/timeline/action/PasteKeyFrameAction.java @@ -2,16 +2,37 @@ package org.tizen.webuibuilder.animator.ui.views.timeline.action; +import java.util.ArrayList; +import java.util.List; + import org.eclipse.gef.EditPartViewer; import org.eclipse.gef.ui.actions.SelectionAction; +import org.eclipse.swt.custom.TreeEditor; +import org.eclipse.swt.widgets.TreeItem; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; +import org.tizen.webuibuilder.animator.model.AnimatorModel; +import org.tizen.webuibuilder.animator.ui.views.timeline.TimelineClipboard; +import org.tizen.webuibuilder.animator.ui.views.timeline.TimelinePage; +import org.tizen.webuibuilder.animator.ui.views.timeline.TimelineViewer; +import org.tizen.webuibuilder.animator.ui.views.timeline.tree.TimelineOutlineElement; +/** + * This class is Action for pasting KeyFrame. + */ public class PasteKeyFrameAction extends SelectionAction { private EditPartViewer editPartViewer = null; + /** + * Construct + * + * @param text + * {@link String} + * @param editPartViewer + * {@link EditPartViewer} + */ public PasteKeyFrameAction(String text, EditPartViewer editPartViewer) { super(null); setId(text); @@ -23,23 +44,92 @@ public class PasteKeyFrameAction extends SelectionAction { this.editPartViewer = editPartViewer; } + /* + * (non-Javadoc) + * + * @see org.eclipse.gef.ui.actions.WorkbenchPartAction#calculateEnabled() + */ @Override protected boolean calculateEnabled() { if (editPartViewer == null) { return false; } - /* - * List selectedList = getSelectedObjects(); int size = selectedList.size(); if - * (size > 0) { return true; } - */ + if (((TimelineViewer) editPartViewer).getLastSelectedTreeItem() == null) { + return false; + } + + TimelinePage page = ((TimelineViewer) editPartViewer).getPage(); + TimelineClipboard clipboard = page.getClipboard(); + if (clipboard == null) { + return false; + } + Object contents = clipboard.getContents(); + if (contents == null) { + return false; + } + + List parts = null; + if (!(contents instanceof List)) { + return false; + } else { + parts = (List) contents; + } + + if (parts == null || parts.size() == 0) { + return false; + } + + return true; - return false; } + /* + * (non-Javadoc) + * + * @see org.eclipse.jface.action.Action#run() + */ @Override public void run() { + TimelineViewer viewer = (TimelineViewer) editPartViewer; + TimelinePage page = viewer.getPage(); + TimelineClipboard clipboard = page.getClipboard(); + Object contents = clipboard.getContents(); - } + // clone models for paste + List cloneModels = (List) contents; + + TreeItem treeItem = viewer.getLastSelectedTreeItem(); + TreeEditor outlineEditor = (TreeEditor) treeItem.getData("OutlineTreeEditor"); + TimelineOutlineElement outlineElement = (TimelineOutlineElement) outlineEditor.getEditor(); + + TreeItem parentItem = treeItem.getParentItem(); + + List children = null; // selectors + if (parentItem == null) { + children = ((AnimatorModel) outlineElement.getModel()).getChildren(); + } else { + children = new ArrayList(); + children.add((AnimatorModel) outlineElement.getModel()); + } + // Add KeyFrame or KeyFrame + // Predefined animation + // keyframe + // frame + /* + * Command command = new TimelineFrameCreateCommand(children, AnimatorUtils + * .getActiveAnimatorBrowserViewer().getPointTime()); + * editPartViewer.getEditDomain().getCommandStack().execute(command); + */ + + /* + * viewer.getControl().getDisplay().syncExec(new Runnable() { + * + * @Override public void run() { + * viewer.setLastSelectedKeyframeComponent(lastSelectedKeyframeComponent); + * viewer.setLastSelectedTreeItem(lastSelectedTreeItem); } }); } + */ + + } } -- 2.7.4