/******************************************************************************* * Copyright (c) 2014, 2016 itemis AG and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Alexander Nyßen (itemis AG) - initial API and implementation * *******************************************************************************/ package org.eclipse.gef.mvc.examples.logo; import org.eclipse.gef.common.adapt.AdapterKey; import org.eclipse.gef.common.adapt.inject.AdaptableScopes; import org.eclipse.gef.common.adapt.inject.AdapterInjectionSupport; import org.eclipse.gef.common.adapt.inject.AdapterInjectionSupport.LoggingMode; import org.eclipse.gef.common.adapt.inject.AdapterMaps; import org.eclipse.gef.mvc.examples.logo.behaviors.PaletteFocusBehavior; import org.eclipse.gef.mvc.examples.logo.handlers.CloneCurveSupport; import org.eclipse.gef.mvc.examples.logo.handlers.CloneOnClickHandler; import org.eclipse.gef.mvc.examples.logo.handlers.CloneShapeSupport; import org.eclipse.gef.mvc.examples.logo.handlers.CreateAndTranslateShapeOnDragHandler; import org.eclipse.gef.mvc.examples.logo.handlers.CreateCurveOnDragHandler; import org.eclipse.gef.mvc.examples.logo.handlers.CreationMenuItemProvider; import org.eclipse.gef.mvc.examples.logo.handlers.CreationMenuOnClickHandler; import org.eclipse.gef.mvc.examples.logo.handlers.DeleteFirstAnchorageOnClickHandler; import org.eclipse.gef.mvc.examples.logo.handlers.RelocateLinkedOnDragHandler; import org.eclipse.gef.mvc.examples.logo.parts.GeometricCurveCreationHoverHandlePart; import org.eclipse.gef.mvc.examples.logo.parts.GeometricCurvePart; import org.eclipse.gef.mvc.examples.logo.parts.GeometricElementDeletionHandlePart; import org.eclipse.gef.mvc.examples.logo.parts.GeometricShapePart; import org.eclipse.gef.mvc.examples.logo.parts.MvcLogoExampleContentPartFactory; import org.eclipse.gef.mvc.examples.logo.parts.MvcLogoExampleHoverHandlePartFactory; import org.eclipse.gef.mvc.examples.logo.parts.MvcLogoExampleSelectionHandlePartFactory; import org.eclipse.gef.mvc.examples.logo.parts.PaletteRootPart; import org.eclipse.gef.mvc.examples.logo.policies.ContentRestrictedChangeViewportPolicy; import org.eclipse.gef.mvc.fx.MvcFxModule; import org.eclipse.gef.mvc.fx.behaviors.ConnectionClickableAreaBehavior; import org.eclipse.gef.mvc.fx.behaviors.ContentPartPool; import org.eclipse.gef.mvc.fx.behaviors.FocusBehavior; import org.eclipse.gef.mvc.fx.behaviors.HoverBehavior; import org.eclipse.gef.mvc.fx.behaviors.HoverIntentBehavior; import org.eclipse.gef.mvc.fx.behaviors.SelectionBehavior; import org.eclipse.gef.mvc.fx.behaviors.SnappingBehavior; import org.eclipse.gef.mvc.fx.domain.IDomain; import org.eclipse.gef.mvc.fx.handlers.BendFirstAnchorageOnSegmentHandleDragHandler; import org.eclipse.gef.mvc.fx.handlers.BendOnSegmentDragHandler; import org.eclipse.gef.mvc.fx.handlers.DeleteSelectedOnTypeHandler; import org.eclipse.gef.mvc.fx.handlers.FocusAndSelectOnClickHandler; import org.eclipse.gef.mvc.fx.handlers.HoverOnHoverHandler; import org.eclipse.gef.mvc.fx.handlers.NormalizeConnectedOnDragHandler; import org.eclipse.gef.mvc.fx.handlers.ResizeTransformSelectedOnHandleDragHandler; import org.eclipse.gef.mvc.fx.handlers.ResizeTranslateFirstAnchorageOnHandleDragHandler; import org.eclipse.gef.mvc.fx.handlers.RotateSelectedOnHandleDragHandler; import org.eclipse.gef.mvc.fx.handlers.RotateSelectedOnRotateHandler; import org.eclipse.gef.mvc.fx.handlers.SelectAllOnTypeHandler; import org.eclipse.gef.mvc.fx.handlers.SelectFocusedOnTypeHandler; import org.eclipse.gef.mvc.fx.handlers.SnapToGeometrySupport; import org.eclipse.gef.mvc.fx.handlers.TranslateSelectedOnDragHandler; import org.eclipse.gef.mvc.fx.handlers.TraverseFocusOnTypeHandler; import org.eclipse.gef.mvc.fx.models.FocusModel; import org.eclipse.gef.mvc.fx.models.HoverModel; import org.eclipse.gef.mvc.fx.models.SelectionModel; import org.eclipse.gef.mvc.fx.models.SnappingModel; import org.eclipse.gef.mvc.fx.parts.CircleSegmentHandlePart; import org.eclipse.gef.mvc.fx.parts.DefaultFocusFeedbackPartFactory; import org.eclipse.gef.mvc.fx.parts.DefaultHoverFeedbackPartFactory; import org.eclipse.gef.mvc.fx.parts.DefaultHoverIntentHandlePartFactory; import org.eclipse.gef.mvc.fx.parts.DefaultSelectionFeedbackPartFactory; import org.eclipse.gef.mvc.fx.parts.DefaultSelectionHandlePartFactory; import org.eclipse.gef.mvc.fx.parts.IContentPartFactory; import org.eclipse.gef.mvc.fx.parts.IRootPart; import org.eclipse.gef.mvc.fx.parts.RectangleSegmentHandlePart; import org.eclipse.gef.mvc.fx.parts.SnappingFeedbackPartFactory; import org.eclipse.gef.mvc.fx.parts.SquareSegmentHandlePart; import org.eclipse.gef.mvc.fx.policies.BendConnectionPolicy; import org.eclipse.gef.mvc.fx.policies.ResizePolicy; import org.eclipse.gef.mvc.fx.policies.TransformPolicy; import org.eclipse.gef.mvc.fx.providers.DefaultAnchorProvider; import org.eclipse.gef.mvc.fx.providers.GeometricOutlineProvider; import org.eclipse.gef.mvc.fx.providers.ShapeBoundsProvider; import org.eclipse.gef.mvc.fx.viewer.IViewer; import com.google.inject.Binder; import com.google.inject.Provider; import com.google.inject.multibindings.MapBinder; import javafx.scene.paint.Color; public class MvcLogoExampleModule extends MvcFxModule { public static final String PALETTE_VIEWER_ROLE = "paletteViewer"; @Override protected void bindAbstractContentPartAdapters(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { super.bindAbstractContentPartAdapters(adapterMapBinder); // select on click adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(FocusAndSelectOnClickHandler.class); // select on type adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(SelectFocusedOnTypeHandler.class); } protected void bindCircleSegmentHandlePartAdapters(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(BendFirstAnchorageOnSegmentHandleDragHandler.class); } protected void bindContentPartPoolAsPaletteViewerAdapter(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(ContentPartPool.class); } /** * Registers the {@link ContentRestrictedChangeViewportPolicy} as an adapter * at the given {@link MapBinder}. * * @param adapterMapBinder * The {@link MapBinder} where the * {@link ContentRestrictedChangeViewportPolicy} is registered. */ protected void bindContentRestrictedChangeViewportPolicyAsFXRootPartAdapter( MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(ContentRestrictedChangeViewportPolicy.class); } protected void bindCreateCurveHandlePartAdapters(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(CreateCurveOnDragHandler.class); } protected void bindDeleteHandlePartAdapters(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(DeleteFirstAnchorageOnClickHandler.class); } protected void bindFocusFeedbackFactoryAsPaletteViewerAdapter(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.role(FocusBehavior.FOCUS_FEEDBACK_PART_FACTORY)) .to(DefaultFocusFeedbackPartFactory.class); } protected void bindFocusModelAsPaletteViewerAdapter(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(FocusModel.class); } /** * Adds a binding for {@link FXPaletteViewer} to the {@link AdapterMap} * binder for {@link IDomain}. * * @param adapterMapBinder * The {@link MapBinder} to be used for the binding registration. * In this case, will be obtained from * {@link AdapterMaps#getAdapterMapBinder(Binder, Class)} using * {@link IDomain} as a key. * * @see AdapterMaps#getAdapterMapBinder(Binder, Class) */ protected void bindFXPaletteViewerAsFXDomainAdapter(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.role(PALETTE_VIEWER_ROLE)).to(IViewer.class); } protected void bindFXRectangleSegmentHandlePartAdapters(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(BendFirstAnchorageOnSegmentHandleDragHandler.class); } protected void bindFXSquareSegmentHandlePartAdapters(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { // single selection: resize relocate on handle drag without modifier adapterMapBinder.addBinding(AdapterKey.defaultRole()) .to(ResizeTranslateFirstAnchorageOnHandleDragHandler.class); // rotate on drag + control adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(RotateSelectedOnHandleDragHandler.class); // multi selection: scale relocate on handle drag without modifier adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(ResizeTransformSelectedOnHandleDragHandler.class); } protected void bindGeometricCurvePartAdaptersInContentViewerContext( MapBinder<AdapterKey<?>, Object> adapterMapBinder) { // hover on hover adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(HoverOnHoverHandler.class); // geometry provider for selection feedback adapterMapBinder .addBinding(AdapterKey.role(DefaultSelectionFeedbackPartFactory.SELECTION_FEEDBACK_GEOMETRY_PROVIDER)) .to(GeometricOutlineProvider.class); // geometry provider for selection handles adapterMapBinder .addBinding(AdapterKey.role(DefaultSelectionHandlePartFactory.SELECTION_HANDLES_GEOMETRY_PROVIDER)) .to(GeometricOutlineProvider.class); adapterMapBinder .addBinding( AdapterKey.role(DefaultSelectionFeedbackPartFactory.SELECTION_LINK_FEEDBACK_GEOMETRY_PROVIDER)) .to(GeometricOutlineProvider.class); // geometry provider for hover feedback adapterMapBinder.addBinding(AdapterKey.role(DefaultHoverFeedbackPartFactory.HOVER_FEEDBACK_GEOMETRY_PROVIDER)) .to(GeometricOutlineProvider.class); // geometry provider for focus feedback adapterMapBinder.addBinding(AdapterKey.role(DefaultFocusFeedbackPartFactory.FOCUS_FEEDBACK_GEOMETRY_PROVIDER)) .to(GeometricOutlineProvider.class); // transaction policy for resize + transform adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(ResizePolicy.class); adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(BendConnectionPolicy.class); // interaction handler to relocate on drag adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(TranslateSelectedOnDragHandler.class); // drag individual segments adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(BendOnSegmentDragHandler.class); adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(TransformPolicy.class); // cloning adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(CloneCurveSupport.class); // clickable area resizing adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(ConnectionClickableAreaBehavior.class); // clone on shift+click adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(CloneOnClickHandler.class); } protected void bindGeometricShapePartAdapterInPaletteViewerContext( MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(HoverOnHoverHandler.class); adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(CreateAndTranslateShapeOnDragHandler.class); adapterMapBinder.addBinding(AdapterKey.role(DefaultHoverFeedbackPartFactory.HOVER_FEEDBACK_GEOMETRY_PROVIDER)) .to(GeometricOutlineProvider.class); } protected void bindGeometricShapePartAdaptersInContentViewerContext( MapBinder<AdapterKey<?>, Object> adapterMapBinder) { // hover on hover adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(HoverOnHoverHandler.class); // geometry provider for selection feedback adapterMapBinder .addBinding(AdapterKey.role(DefaultSelectionFeedbackPartFactory.SELECTION_FEEDBACK_GEOMETRY_PROVIDER)) .toProvider(new Provider<ShapeBoundsProvider>() { @Override public ShapeBoundsProvider get() { return new ShapeBoundsProvider(0.5); } }); // geometry provider for selection handles adapterMapBinder .addBinding(AdapterKey.role(DefaultSelectionHandlePartFactory.SELECTION_HANDLES_GEOMETRY_PROVIDER)) .toProvider(new Provider<ShapeBoundsProvider>() { @Override public ShapeBoundsProvider get() { return new ShapeBoundsProvider(0.5); } }); adapterMapBinder .addBinding( AdapterKey.role(DefaultSelectionFeedbackPartFactory.SELECTION_LINK_FEEDBACK_GEOMETRY_PROVIDER)) .to(GeometricOutlineProvider.class); // geometry provider for hover feedback adapterMapBinder.addBinding(AdapterKey.role(DefaultHoverFeedbackPartFactory.HOVER_FEEDBACK_GEOMETRY_PROVIDER)) .to(ShapeBoundsProvider.class); // geometry provider for hover handles adapterMapBinder .addBinding(AdapterKey.role(DefaultHoverIntentHandlePartFactory.HOVER_INTENT_HANDLES_GEOMETRY_PROVIDER)) .to(ShapeBoundsProvider.class); // geometry provider for focus feedback adapterMapBinder.addBinding(AdapterKey.role(DefaultFocusFeedbackPartFactory.FOCUS_FEEDBACK_GEOMETRY_PROVIDER)) .toProvider(new Provider<ShapeBoundsProvider>() { @Override public ShapeBoundsProvider get() { return new ShapeBoundsProvider(0.5); } }); // register resize/transform policies (writing changes also to model) adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(TransformPolicy.class); adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(ResizePolicy.class); // relocate on drag (including anchored elements, which are linked) // adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(TranslateSelectedOnDragHandler.class); adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(RelocateLinkedOnDragHandler.class); // clone adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(CloneShapeSupport.class); // bind dynamic anchor provider adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(DefaultAnchorProvider.class); // clone on shift+click adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(CloneOnClickHandler.class); // normalize connected on drag adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(NormalizeConnectedOnDragHandler.class); } protected void bindHoverFeedbackFactoryAsPaletteViewerAdapter(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.role(HoverBehavior.HOVER_FEEDBACK_PART_FACTORY)) .to(DefaultHoverFeedbackPartFactory.class); } protected void bindHoverHandleFactoryAsPaletteViewerAdapter(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.role(HoverIntentBehavior.HOVER_INTENT_HANDLE_PART_FACTORY)) .to(DefaultHoverIntentHandlePartFactory.class); } @Override protected void bindHoverHandlePartFactoryAsContentViewerAdapter(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.role(HoverIntentBehavior.HOVER_INTENT_HANDLE_PART_FACTORY)) .to(MvcLogoExampleHoverHandlePartFactory.class); } protected void bindHoverModelAsPaletteViewerAdapter(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(HoverModel.class); } protected void bindIContentPartFactory() { binder().bind(IContentPartFactory.class).toInstance(new MvcLogoExampleContentPartFactory()); } protected void bindIContentPartFactoryAsPaletteViewerAdapter(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(IContentPartFactory.class); } @Override protected void bindIDomainAdapters(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { super.bindIDomainAdapters(adapterMapBinder); bindPaletteViewerAsDomainAdapter(adapterMapBinder); } @Override protected void bindIRootPartAdaptersForContentViewer(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { super.bindIRootPartAdaptersForContentViewer(adapterMapBinder); adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(CreationMenuOnClickHandler.class); adapterMapBinder.addBinding(AdapterKey.role(CreationMenuOnClickHandler.MENU_ITEM_PROVIDER_ROLE)) .to(CreationMenuItemProvider.class); // interaction handler to delete on key type adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(DeleteSelectedOnTypeHandler.class); // interaction handler to rotate selected through rotate gesture adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(RotateSelectedOnRotateHandler.class); // keyboard focus traversal through key navigation adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(TraverseFocusOnTypeHandler.class); // select on type adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(SelectFocusedOnTypeHandler.class); // select-all on type bindSelectAllOnTypeHandlerAsContentViewerRootPartAdapter(adapterMapBinder); adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(SnapToGeometrySupport.class); adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(SnappingBehavior.class); } @Override protected void bindIViewerAdaptersForContentViewer(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { super.bindIViewerAdaptersForContentViewer(adapterMapBinder); adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(SnappingModel.class); adapterMapBinder.addBinding(AdapterKey.role(SnappingBehavior.SNAPPING_FEEDBACK_PART_FACTORY)) .to(SnappingFeedbackPartFactory.class); } protected void bindPaletteFocusBehaviorAsFXRootPartAdapter(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(PaletteFocusBehavior.class); } protected void bindPaletteRootPartAdaptersInPaletteViewerContext( MapBinder<AdapterKey<?>, Object> adapterMapBinder) { // register (default) interaction policies (which are based on viewer // models and do not depend on transaction policies) bindHoverOnHoverHandlerAsIRootPartAdapter(adapterMapBinder); bindPanOrZoomOnScrollHandlerAsIRootPartAdapter(adapterMapBinder); bindPanOnTypeHandlerAsIRootPartAdapter(adapterMapBinder); // register change viewport policy bindContentRestrictedChangeViewportPolicyAsFXRootPartAdapter(adapterMapBinder); // register default behaviors bindContentBehaviorAsIRootPartAdapter(adapterMapBinder); bindHoverBehaviorAsIRootPartAdapter(adapterMapBinder); // XXX: PaletteFocusBehavior only changes the viewer focus and default // styles. bindPaletteFocusBehaviorAsFXRootPartAdapter(adapterMapBinder); // bind focus traversal policy bindFocusTraversalPolicyAsIRootPartAdapter(adapterMapBinder); // hover behavior } protected void bindPaletteRootPartAsPaletteViewerAdapter(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.role(PALETTE_VIEWER_ROLE)).to(PaletteRootPart.class) .in(AdaptableScopes.typed(IViewer.class)); } /** * Adds (default) {@link AdapterMap} bindings for {@link IViewer} and all * sub-classes. May be overwritten by sub-classes to change the default * bindings. * * @param adapterMapBinder * The {@link MapBinder} to be used for the binding registration. * In this case, will be obtained from * {@link AdapterMaps#getAdapterMapBinder(Binder, Class)} using * {@link IViewer} as a key. * * @see AdapterMaps#getAdapterMapBinder(Binder, Class) */ protected void bindPaletteViewerAdapters(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { // viewer models bindFocusModelAsPaletteViewerAdapter(adapterMapBinder); bindHoverModelAsPaletteViewerAdapter(adapterMapBinder); bindSelectionModelAsPaletteViewerAdapter(adapterMapBinder); // root part bindPaletteRootPartAsPaletteViewerAdapter(adapterMapBinder); // feedback and handles factories bindSelectionFeedbackFactoryAsPaletteViewerAdapter(adapterMapBinder); bindFocusFeedbackFactoryAsPaletteViewerAdapter(adapterMapBinder); bindHoverFeedbackFactoryAsPaletteViewerAdapter(adapterMapBinder); bindSelectionHandleFactoryAsPaletteViewerAdapter(adapterMapBinder); bindHoverHandleFactoryAsPaletteViewerAdapter(adapterMapBinder); // content part factory and content part pool bindContentPartPoolAsPaletteViewerAdapter(adapterMapBinder); bindIContentPartFactoryAsPaletteViewerAdapter(adapterMapBinder); // change hover feedback color by binding a respective provider adapterMapBinder.addBinding(AdapterKey.role(DefaultHoverFeedbackPartFactory.HOVER_FEEDBACK_COLOR_PROVIDER)) .toInstance(new Provider<Color>() { @Override public Color get() { return Color.WHITE; } }); } /** * Adds a binding for {@link FXPaletteViewer} to the {@link AdapterMap} * binder for {@link IDomain}. * * @param adapterMapBinder * The {@link MapBinder} to be used for the binding registration. * In this case, will be obtained from * {@link AdapterMaps#getAdapterMapBinder(Binder, Class)} using * {@link IDomain} as a key. * * @see AdapterMaps#getAdapterMapBinder(Binder, Class) */ protected void bindPaletteViewerAsDomainAdapter(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.role(PALETTE_VIEWER_ROLE)).to(IViewer.class); } protected void bindRectangleSegmentHandlePartAdapters(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(BendFirstAnchorageOnSegmentHandleDragHandler.class); } protected void bindSelectAllOnTypeHandlerAsContentViewerRootPartAdapter( MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(SelectAllOnTypeHandler.class); } protected void bindSelectionFeedbackFactoryAsPaletteViewerAdapter( MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.role(SelectionBehavior.SELECTION_FEEDBACK_PART_FACTORY)) .to(DefaultSelectionFeedbackPartFactory.class); } protected void bindSelectionHandleFactoryAsPaletteViewerAdapter(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.role(SelectionBehavior.SELECTION_HANDLE_PART_FACTORY)) .to(DefaultSelectionHandlePartFactory.class); } @Override protected void bindSelectionHandlePartFactoryAsContentViewerAdapter( MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.role(SelectionBehavior.SELECTION_HANDLE_PART_FACTORY)) .to(MvcLogoExampleSelectionHandlePartFactory.class); } protected void bindSelectionModelAsPaletteViewerAdapter(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(SelectionModel.class); } protected void bindSquareSegmentHandlePartAdapters(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { // single selection: resize relocate on handle drag without modifier adapterMapBinder.addBinding(AdapterKey.defaultRole()) .to(ResizeTranslateFirstAnchorageOnHandleDragHandler.class); // rotate on drag + control adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(RotateSelectedOnHandleDragHandler.class); // multi selection: scale relocate on handle drag without modifier adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(ResizeTransformSelectedOnHandleDragHandler.class); } @Override protected void configure() { super.configure(); bindIContentPartFactory(); // content viewer bindGeometricShapePartAdaptersInContentViewerContext(AdapterMaps.getAdapterMapBinder(binder(), GeometricShapePart.class, AdapterKey.get(IViewer.class, IDomain.CONTENT_VIEWER_ROLE))); bindGeometricCurvePartAdaptersInContentViewerContext(AdapterMaps.getAdapterMapBinder(binder(), GeometricCurvePart.class, AdapterKey.get(IViewer.class, IDomain.CONTENT_VIEWER_ROLE))); // node selection handles and multi selection handles bindSquareSegmentHandlePartAdapters(AdapterMaps.getAdapterMapBinder(binder(), SquareSegmentHandlePart.class)); // curve selection handles bindCircleSegmentHandlePartAdapters(AdapterMaps.getAdapterMapBinder(binder(), CircleSegmentHandlePart.class)); bindRectangleSegmentHandlePartAdapters( AdapterMaps.getAdapterMapBinder(binder(), RectangleSegmentHandlePart.class)); // hover handles bindDeleteHandlePartAdapters( AdapterMaps.getAdapterMapBinder(binder(), GeometricElementDeletionHandlePart.class)); bindCreateCurveHandlePartAdapters( AdapterMaps.getAdapterMapBinder(binder(), GeometricCurveCreationHoverHandlePart.class)); // palette bindPaletteViewerAdapters(AdapterMaps.getAdapterMapBinder(binder(), IViewer.class, AdapterKey.get(IViewer.class, PALETTE_VIEWER_ROLE))); bindPaletteRootPartAdaptersInPaletteViewerContext(AdapterMaps.getAdapterMapBinder(binder(), IRootPart.class, AdapterKey.get(IViewer.class, PALETTE_VIEWER_ROLE))); bindGeometricShapePartAdapterInPaletteViewerContext(AdapterMaps.getAdapterMapBinder(binder(), GeometricShapePart.class, AdapterKey.get(IViewer.class, PALETTE_VIEWER_ROLE))); } @Override protected void enableAdapterMapInjection() { install(new AdapterInjectionSupport(LoggingMode.PRODUCTION)); } }