/**
 *                                                                            
 * Copyright (c) 2011, 2018 - 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 2.0        
 * which accompanies this distribution, and is available at                  
 * https://www.eclipse.org/legal/epl-2.0/                                 
 *                                 
 * SPDX-License-Identifier: EPL-2.0                                 
 *                                                                            
 * Contributors:   
 * Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation 
 * Ornel Franck Wora Yeno (Compex Systemhaus GmbH) - ongoing development 
 */

package org.eclipse.osbp.ui.api.customfields;

import com.vaadin.event.FieldEvents;

public interface ICustomComponentFocusable extends FieldEvents.BlurNotifier, FieldEvents.FocusNotifier {

	public boolean isFirstFocusable(Object element);
	public boolean isLastFocusable(Object element);
	
}
