/**
 *                                                                            
 *  Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) 
 *                                                                            
 *  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:                                                      
 * 	   Florian Pirchner - Initial implementation
 * 
 */
package org.eclipse.osbp.ecview.extension.editparts.emf.enhancer;

import org.eclipse.osbp.ecview.extension.api.IFocusingEnhancer;
import org.eclipse.osbp.ecview.extension.model.YDelegatingFocusingStrategy;
import org.eclipse.osbp.ecview.extension.model.YECviewFactory;
import org.eclipse.osbp.ecview.extension.model.YStrategyLayout;
import org.osgi.service.component.annotations.Component;

/**
 * The Class EnterTabFocusingEnhancer.
 */
@Component(property = {
		"ecview.focusing.enhancer.id=EnterTabFocusingEnhancer"})
public class EnterTabFocusingEnhancer implements IFocusingEnhancer {

	/* (non-Javadoc)
	 * @see org.eclipse.osbp.ecview.extension.api.IFocusingEnhancer#enhanceFocusing(org.eclipse.osbp.ecview.extension.model.YStrategyLayout)
	 */
	@Override
	public void enhanceFocusing(YStrategyLayout cxLayout) {
		cxLayout.getFocusingStrategies().clear();

		YDelegatingFocusingStrategy yStgy1 = YECviewFactory.eINSTANCE
				.createYDelegatingFocusingStrategy();
		yStgy1.setDelegateStrategyId("cx.enter.forward");
		cxLayout.getFocusingStrategies().add(yStgy1);

		YDelegatingFocusingStrategy yStgy2 = YECviewFactory.eINSTANCE
				.createYDelegatingFocusingStrategy();
		yStgy2.setDelegateStrategyId("cx.tab.backward");
		cxLayout.getFocusingStrategies().add(yStgy2);

	}

}
