/* ****************************************************************************** * Copyright (c) 2006-2012 XMind Ltd. and others. * * This file is a part of XMind 3. XMind releases 3 and * above are dual-licensed under the Eclipse Public License (EPL), * which is available at http://www.eclipse.org/legal/epl-v10.html * and the GNU Lesser General Public License (LGPL), * which is available at http://www.gnu.org/licenses/lgpl.html * See http://www.xmind.net/license.html for details. * * Contributors: * XMind Ltd. - initial API and implementation *******************************************************************************/ package org.xmind.ui.internal.editpolicies; import java.util.List; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.StructuredSelection; import org.xmind.gef.IViewer; import org.xmind.gef.Request; import org.xmind.gef.command.Command; import org.xmind.gef.part.IPart; import org.xmind.gef.policy.AbstractEditPolicy; import org.xmind.gef.service.IAnimationService; import org.xmind.ui.mindmap.MindMapUI; import org.xmind.ui.util.MindMapUtils; public abstract class MindMapPolicyBase extends AbstractEditPolicy { protected static final String EMPTY = ""; //$NON-NLS-1$ protected IAnimationService getAnimationService(IViewer viewer) { return (IAnimationService) viewer.getService(IAnimationService.class); } protected void select(Object element, IViewer viewer) { ISelection selection = element == null ? StructuredSelection.EMPTY : new StructuredSelection(element); viewer.setSelection(selection, true); } protected void select(List<?> elements, IViewer viewer) { viewer.setSelection(new StructuredSelection(elements), true); } protected void selectPart(IPart part, IViewer viewer) { select(MindMapUtils.getRealModel(part), viewer); } protected void selectParts(List<? extends IPart> parts, IViewer viewer) { select(MindMapUtils.getRealModels(parts), viewer); } protected boolean isAnimationRequired(Request req) { return req.isParameter(MindMapUI.PARAM_WITH_ANIMATION); } protected boolean isAnimationEnalbed(IViewer viewer) { return MindMapUI.isAnimationEnabled() && viewer.hasService(IAnimationService.class); } protected boolean animateCommand(Command cmd, IViewer viewer) { if (!isAnimationEnalbed(viewer)) return false; IAnimationService anim = getAnimationService(viewer); if (anim == null) return false; anim.stop(); doAnimateCommand(cmd, anim, viewer); return true; } protected void doAnimateCommand(final Command cmd, IAnimationService anim, final IViewer viewer) { Runnable job = new Runnable() { public void run() { createAnimation(cmd, viewer); } }; anim.start(job, createBeforeEffect(cmd, viewer), createAfterEffect(cmd, viewer)); } protected Runnable createBeforeEffect(Command cmd, IViewer viewer) { return null; } protected Runnable createAfterEffect(Command cmd, IViewer viewer) { return null; } protected void createAnimation(Command cmd, IViewer viewer) { saveAndRun(cmd, viewer.getEditDomain()); } }