/******************************************************************************* * 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: * Matthias Wienand (itemis AG) - initial API & implementation * *******************************************************************************/ package org.eclipse.gef.zest.fx; import org.eclipse.gef.common.adapt.AdapterKey; import org.eclipse.gef.common.adapt.inject.AdaptableScopes; import org.eclipse.gef.common.adapt.inject.AdapterMaps; import org.eclipse.gef.layout.LayoutContext; import org.eclipse.gef.mvc.fx.MvcFxModule; import org.eclipse.gef.mvc.fx.behaviors.ConnectionClickableAreaBehavior; import org.eclipse.gef.mvc.fx.behaviors.HoverIntentBehavior; import org.eclipse.gef.mvc.fx.behaviors.SelectionBehavior; import org.eclipse.gef.mvc.fx.domain.IDomain; 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.ResizeTranslateFirstAnchorageOnHandleDragHandler; import org.eclipse.gef.mvc.fx.handlers.RotateSelectedOnHandleDragHandler; import org.eclipse.gef.mvc.fx.handlers.SelectFocusedOnTypeHandler; import org.eclipse.gef.mvc.fx.handlers.TranslateSelectedOnDragHandler; import org.eclipse.gef.mvc.fx.handlers.TraverseFocusOnTypeHandler; 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.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.GeometricOutlineProvider; import org.eclipse.gef.mvc.fx.providers.ShapeBoundsProvider; import org.eclipse.gef.mvc.fx.viewer.IViewer; import org.eclipse.gef.zest.fx.behaviors.EdgeHidingBehavior; import org.eclipse.gef.zest.fx.behaviors.EdgeLabelHidingBehavior; import org.eclipse.gef.zest.fx.behaviors.EdgeLayoutBehavior; import org.eclipse.gef.zest.fx.behaviors.GraphLayoutBehavior; import org.eclipse.gef.zest.fx.behaviors.NodeHidingBehavior; import org.eclipse.gef.zest.fx.behaviors.NodeLayoutBehavior; import org.eclipse.gef.zest.fx.handlers.BendFirstAnchorageAndRelocateLabelsOnDragHandler; import org.eclipse.gef.zest.fx.handlers.HideFirstAnchorageOnClickHandler; import org.eclipse.gef.zest.fx.handlers.HideOnTypeHandler; import org.eclipse.gef.zest.fx.handlers.OpenNestedGraphOnDoubleClickHandler; import org.eclipse.gef.zest.fx.handlers.OpenParentGraphOnDoubleClickHandler; import org.eclipse.gef.zest.fx.handlers.ShowHiddenNeighborsOfFirstAnchorageOnClickHandler; import org.eclipse.gef.zest.fx.handlers.ShowHiddenNeighborsOnTypeHandler; import org.eclipse.gef.zest.fx.handlers.TranslateSelectedAndRelocateLabelsOnDragHandler; import org.eclipse.gef.zest.fx.models.HidingModel; import org.eclipse.gef.zest.fx.models.NavigationModel; import org.eclipse.gef.zest.fx.parts.EdgeLabelPart; import org.eclipse.gef.zest.fx.parts.EdgePart; import org.eclipse.gef.zest.fx.parts.GraphPart; import org.eclipse.gef.zest.fx.parts.HideHoverHandlePart; import org.eclipse.gef.zest.fx.parts.NodeLabelPart; import org.eclipse.gef.zest.fx.parts.NodePart; import org.eclipse.gef.zest.fx.parts.ShowHiddenNeighborsHoverHandlePart; import org.eclipse.gef.zest.fx.parts.ZestFxContentPartFactory; import org.eclipse.gef.zest.fx.parts.ZestFxHoverIntentHandlePartFactory; import org.eclipse.gef.zest.fx.parts.ZestFxRootPart; import org.eclipse.gef.zest.fx.parts.ZestFxSelectionFeedbackPartFactory; import org.eclipse.gef.zest.fx.parts.ZestFxSelectionHandlePartFactory; import org.eclipse.gef.zest.fx.policies.HidePolicy; import org.eclipse.gef.zest.fx.policies.SemanticZoomPolicy; import org.eclipse.gef.zest.fx.policies.ShowHiddenNeighborsPolicy; import org.eclipse.gef.zest.fx.policies.TransformLabelPolicy; import org.eclipse.gef.zest.fx.providers.NodePartAnchorProvider; import com.google.inject.Binder; import com.google.inject.Provider; import com.google.inject.multibindings.MapBinder; /** * The {@link ZestFxModule} defines Zest.FX specific bindings additional to the * bindings defined within {@link MvcFxModule}. * * @author mwienand * */ public class ZestFxModule extends MvcFxModule { @Override protected void bindAbstractContentPartAdapters(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { super.bindAbstractContentPartAdapters(adapterMapBinder); adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(FocusAndSelectOnClickHandler.class); adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(SelectFocusedOnTypeHandler.class); adapterMapBinder .addBinding(AdapterKey.role(DefaultHoverIntentHandlePartFactory.HOVER_INTENT_HANDLES_GEOMETRY_PROVIDER)) .to(ShapeBoundsProvider.class); } @Override protected void bindChangeViewportPolicyAsIRootPartAdapter(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { // overwrite default zoom policy to perform semantic zooming (navigating // nested graphs on zoom level changes) adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(SemanticZoomPolicy.class); } /** * Adds (default) adapter map bindings for {@link EdgeLabelPart} 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 EdgeLabelPart} as a key. * * @see AdapterMaps#getAdapterMapBinder(Binder, Class) */ protected void bindEdgeLabelPartAdapters(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { // selection link feedback provider adapterMapBinder .addBinding( AdapterKey.role(DefaultSelectionFeedbackPartFactory.SELECTION_LINK_FEEDBACK_GEOMETRY_PROVIDER)) .to(ShapeBoundsProvider.class); // selection feedback provider adapterMapBinder .addBinding(AdapterKey.role(DefaultSelectionFeedbackPartFactory.SELECTION_FEEDBACK_GEOMETRY_PROVIDER)) .to(ShapeBoundsProvider.class); // hover feedback provider adapterMapBinder.addBinding(AdapterKey.role(DefaultHoverFeedbackPartFactory.HOVER_FEEDBACK_GEOMETRY_PROVIDER)) .to(ShapeBoundsProvider.class); // transform policy adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(TransformLabelPolicy.class); // hiding behavior adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(EdgeLabelHidingBehavior.class); // hover on-hover policy adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(HoverOnHoverHandler.class); // translate on drag adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(TranslateSelectedOnDragHandler.class); } /** * Adds (default) adapter map bindings for {@link EdgePart} 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 EdgePart} as a key. * * @see AdapterMaps#getAdapterMapBinder(Binder, Class) */ protected void bindEdgePartAdapters(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { // layout behavior adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(EdgeLayoutBehavior.class); // hiding behavior adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(EdgeHidingBehavior.class); // selection link feedback provider adapterMapBinder .addBinding( AdapterKey.role(DefaultSelectionFeedbackPartFactory.SELECTION_LINK_FEEDBACK_GEOMETRY_PROVIDER)) .to(GeometricOutlineProvider.class); // selection feedback provider adapterMapBinder .addBinding(AdapterKey.role(DefaultSelectionFeedbackPartFactory.SELECTION_FEEDBACK_GEOMETRY_PROVIDER)) .to(GeometricOutlineProvider.class); // selection handles adapterMapBinder .addBinding(AdapterKey.role(DefaultSelectionHandlePartFactory.SELECTION_HANDLES_GEOMETRY_PROVIDER)) .to(GeometricOutlineProvider.class); // hover feedback provider 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); // clickable area behavior adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(ConnectionClickableAreaBehavior.class); // translate selected on-drag policy adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(TranslateSelectedAndRelocateLabelsOnDragHandler.class); // hover on-hover policy adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(HoverOnHoverHandler.class); adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(BendConnectionPolicy.class); } /** * Bind bend-on-drag policy to {@link CircleSegmentHandlePart}. * * @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 CircleSegmentHandlePart} as a key. */ protected void bindFXCircleSegmentHandlePartAdapters(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { AdapterMaps.getAdapterMapBinder(binder(), CircleSegmentHandlePart.class).addBinding(AdapterKey.defaultRole()) .to(BendFirstAnchorageAndRelocateLabelsOnDragHandler.class); } /** * Bind resize and rotate behavior to {@link SquareSegmentHandlePart}. * * @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 SquareSegmentHandlePart} as a key. */ protected void bindFXSquareSegmentHandlePartAdapters(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.role("resize-relocate-first-anchorage")) .to(ResizeTranslateFirstAnchorageOnHandleDragHandler.class); adapterMapBinder.addBinding(AdapterKey.role("rotate")).to(RotateSelectedOnHandleDragHandler.class); } /** * Adds (default) adapter map bindings for {@link GraphPart} 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 GraphPart} as a key. * * @see AdapterMaps#getAdapterMapBinder(Binder, Class) */ protected void bindGraphPartAdapters(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(LayoutContext.class); adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(GraphLayoutBehavior.class); } /** * Adds (default) adapter map bindings for {@link HideHoverHandlePart} 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 HideHoverHandlePart} as a key. * * @see AdapterMaps#getAdapterMapBinder(Binder, Class) */ protected void bindHidingHoverHandlePartAdapters(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.role("hide")).to(HideFirstAnchorageOnClickHandler.class); } @Override protected void bindHoverHandlePartFactoryAsContentViewerAdapter(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.role(HoverIntentBehavior.HOVER_INTENT_HANDLE_PART_FACTORY)) .to(ZestFxHoverIntentHandlePartFactory.class); } /** * Binds {@link IContentPartFactory} to {@link ZestFxContentPartFactory}. */ protected void bindIContentPartFactory() { binder().bind(IContentPartFactory.class).to(ZestFxContentPartFactory.class) .in(AdaptableScopes.typed(IViewer.class)); } @Override protected void bindIRootPartAdaptersForContentViewer(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { super.bindIRootPartAdaptersForContentViewer(adapterMapBinder); adapterMapBinder.addBinding(AdapterKey.role("open-parent-graph")).to(OpenParentGraphOnDoubleClickHandler.class); // keyboard focus traversal adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(TraverseFocusOnTypeHandler.class); // select focused on type adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(SelectFocusedOnTypeHandler.class); } @Override protected void bindIViewerAdaptersForContentViewer(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { super.bindIViewerAdaptersForContentViewer(adapterMapBinder); bindNavigationModelAsContentViewerAdapter(adapterMapBinder); adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(HidingModel.class); } /** * Adds a binding for {@link NavigationModel} to the given adapter map * binder that will insert the bindings into {@link IViewer}s. * * @param adapterMapBinder * The adapter map binder to which the binding is added. */ protected void bindNavigationModelAsContentViewerAdapter(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(NavigationModel.class); } /** * Adds (default) adapter map bindings for {@link NodeLabelPart} 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 NodeLabelPart} as a key. * * @see AdapterMaps#getAdapterMapBinder(Binder, Class) */ protected void bindNodeLabelPartAdapters(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { // selection link feedback provider adapterMapBinder .addBinding( AdapterKey.role(DefaultSelectionFeedbackPartFactory.SELECTION_LINK_FEEDBACK_GEOMETRY_PROVIDER)) .to(ShapeBoundsProvider.class); // selection feedback provider adapterMapBinder .addBinding(AdapterKey.role(DefaultSelectionFeedbackPartFactory.SELECTION_FEEDBACK_GEOMETRY_PROVIDER)) .to(ShapeBoundsProvider.class); // hover feedback provider adapterMapBinder.addBinding(AdapterKey.role(DefaultHoverFeedbackPartFactory.HOVER_FEEDBACK_GEOMETRY_PROVIDER)) .to(ShapeBoundsProvider.class); // transform policy adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(TransformLabelPolicy.class); // hover on-hover policy adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(HoverOnHoverHandler.class); // translate on drag adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(TranslateSelectedOnDragHandler.class); } /** * Adds (default) adapter map bindings for {@link NodePart} 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 NodePart} as a key. * * @see AdapterMaps#getAdapterMapBinder(Binder, Class) */ protected void bindNodePartAdapters(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { // layout adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(NodeLayoutBehavior.class); // pruning adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(HidePolicy.class); adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(ShowHiddenNeighborsPolicy.class); adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(NodeHidingBehavior.class); // translate on-drag adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(TranslateSelectedAndRelocateLabelsOnDragHandler.class); // show hidden neighbors on-type adapterMapBinder.addBinding(AdapterKey.role("show-hidden-neighbors")) .to(ShowHiddenNeighborsOnTypeHandler.class); // hide on-type adapterMapBinder.addBinding(AdapterKey.role("hide")).to(HideOnTypeHandler.class); adapterMapBinder.addBinding(AdapterKey.role("open-nested-graph")).to(OpenNestedGraphOnDoubleClickHandler.class); // transform policy for relocation adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(TransformPolicy.class); // resize policy to resize nesting nodes adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(ResizePolicy.class); // anchor provider adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(NodePartAnchorProvider.class); // feedback and handles adapterMapBinder .addBinding(AdapterKey.role(DefaultSelectionHandlePartFactory.SELECTION_HANDLES_GEOMETRY_PROVIDER)) .toProvider(new Provider<ShapeBoundsProvider>() { @Override public ShapeBoundsProvider get() { return new ShapeBoundsProvider(1); } }); // selection feedback provider adapterMapBinder .addBinding(AdapterKey.role(DefaultSelectionFeedbackPartFactory.SELECTION_FEEDBACK_GEOMETRY_PROVIDER)) .toProvider(new Provider<ShapeBoundsProvider>() { @Override public ShapeBoundsProvider get() { return new ShapeBoundsProvider(0.5); } }); // selection link feedback provider adapterMapBinder .addBinding( AdapterKey.role(DefaultSelectionFeedbackPartFactory.SELECTION_LINK_FEEDBACK_GEOMETRY_PROVIDER)) .toProvider(new Provider<ShapeBoundsProvider>() { @Override public ShapeBoundsProvider get() { return new ShapeBoundsProvider(0.5); } }); // hover feedback provider adapterMapBinder.addBinding(AdapterKey.role(DefaultHoverFeedbackPartFactory.HOVER_FEEDBACK_GEOMETRY_PROVIDER)) .to(ShapeBoundsProvider.class); // focus feedback provider adapterMapBinder.addBinding(AdapterKey.role(DefaultFocusFeedbackPartFactory.FOCUS_FEEDBACK_GEOMETRY_PROVIDER)) .toProvider(new Provider<ShapeBoundsProvider>() { @Override public ShapeBoundsProvider get() { return new ShapeBoundsProvider(0.5); } }); // hover on-hover adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(HoverOnHoverHandler.class); // normalize on drag adapterMapBinder.addBinding(AdapterKey.defaultRole()).to(NormalizeConnectedOnDragHandler.class); } @Override protected void bindRootPartAsContentViewerAdapter(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.role(IDomain.CONTENT_VIEWER_ROLE)).to(ZestFxRootPart.class) .in(AdaptableScopes.typed(IViewer.class)); } @Override protected void bindSelectionFeedbackPartFactoryAsContentViewerAdapter( MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.role(SelectionBehavior.SELECTION_FEEDBACK_PART_FACTORY)) .to(ZestFxSelectionFeedbackPartFactory.class); } @Override protected void bindSelectionHandlePartFactoryAsContentViewerAdapter( MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.role(SelectionBehavior.SELECTION_HANDLE_PART_FACTORY)) .to(ZestFxSelectionHandlePartFactory.class); } /** * Adds (default) adapter map bindings for * {@link ShowHiddenNeighborsHoverHandlePart} 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 ShowHiddenNeighborsHoverHandlePart} as a key. * * @see AdapterMaps#getAdapterMapBinder(Binder, Class) */ protected void bindShowHiddenNeighborsHoverHandlePartAdapters(MapBinder<AdapterKey<?>, Object> adapterMapBinder) { bindShowHiddenNeighborsOfFirstAnchorageOnClickHandlerAsShowHiddenNeighborsHoverHandlePartAdapter( adapterMapBinder); } /** * Adds a binding for * {@link ShowHiddenNeighborsOfFirstAnchorageOnClickHandler} to the given * adapter map binder that will insert the bindings into * {@link ShowHiddenNeighborsHoverHandlePart}s. * * @param adapterMapBinder * The adapter map binder to which the binding is added. */ protected void bindShowHiddenNeighborsOfFirstAnchorageOnClickHandlerAsShowHiddenNeighborsHoverHandlePartAdapter( MapBinder<AdapterKey<?>, Object> adapterMapBinder) { adapterMapBinder.addBinding(AdapterKey.role("showHiddenNeighbors")) .to(ShowHiddenNeighborsOfFirstAnchorageOnClickHandler.class); } @Override protected void configure() { super.configure(); bindIContentPartFactory(); bindGraphPartAdapters(AdapterMaps.getAdapterMapBinder(binder(), GraphPart.class)); bindNodePartAdapters(AdapterMaps.getAdapterMapBinder(binder(), NodePart.class)); bindEdgePartAdapters(AdapterMaps.getAdapterMapBinder(binder(), EdgePart.class)); bindEdgeLabelPartAdapters(AdapterMaps.getAdapterMapBinder(binder(), EdgeLabelPart.class)); bindNodeLabelPartAdapters(AdapterMaps.getAdapterMapBinder(binder(), NodeLabelPart.class)); bindFXSquareSegmentHandlePartAdapters(AdapterMaps.getAdapterMapBinder(binder(), SquareSegmentHandlePart.class)); bindFXCircleSegmentHandlePartAdapters(AdapterMaps.getAdapterMapBinder(binder(), CircleSegmentHandlePart.class)); bindHidingHoverHandlePartAdapters(AdapterMaps.getAdapterMapBinder(binder(), HideHoverHandlePart.class)); bindShowHiddenNeighborsHoverHandlePartAdapters( AdapterMaps.getAdapterMapBinder(binder(), ShowHiddenNeighborsHoverHandlePart.class)); } }