/**
 */
package org.eclipse.osbp.ecview.core.common.model.core;

import org.eclipse.emf.ecore.EObject;

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>YFocus Notifier</b></em>'.
 * <!-- end-user-doc -->
 *
 * <p>
 * The following features are supported:
 * </p>
 * <ul>
 *   <li>{@link org.eclipse.osbp.ecview.core.common.model.core.YFocusNotifier#getLastFocusEvent <em>Last Focus Event</em>}</li>
 * </ul>
 *
 * @see org.eclipse.osbp.ecview.core.common.model.core.CoreModelPackage#getYFocusNotifier()
 * @model interface="true" abstract="true"
 * @generated
 */
public interface YFocusNotifier extends EObject {
	/**
	 * Returns the value of the '<em><b>Last Focus Event</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Last Focus Event</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Last Focus Event</em>' reference.
	 * @see #setLastFocusEvent(YEmbeddableEvent)
	 * @see org.eclipse.osbp.ecview.core.common.model.core.CoreModelPackage#getYFocusNotifier_LastFocusEvent()
	 * @model
	 * @generated
	 */
	YEmbeddableEvent getLastFocusEvent();

	/**
	 * Sets the value of the '{@link org.eclipse.osbp.ecview.core.common.model.core.YFocusNotifier#getLastFocusEvent <em>Last Focus Event</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Last Focus Event</em>' reference.
	 * @see #getLastFocusEvent()
	 * @generated
	 */
	void setLastFocusEvent(YEmbeddableEvent value);

} // YFocusNotifier
