/**
 * Copyright (c) 2011, 2017 - 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 
 * 
 *  Based on ideas from Xtext, Xtend, Xcore
 *   
 *  Contributors:  
 *  		Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
 *  
 */
package org.eclipse.osbp.xtext.statemachine;


/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Statemachine Action Peripheral Marquee Format</b></em>'.
 * <!-- end-user-doc -->
 *
 * <p>
 * The following features are supported:
 * <ul>
 *   <li>{@link org.eclipse.osbp.xtext.statemachine.StatemachineActionPeripheralMarqueeFormat#getDevice <em>Device</em>}</li>
 *   <li>{@link org.eclipse.osbp.xtext.statemachine.StatemachineActionPeripheralMarqueeFormat#getFormat <em>Format</em>}</li>
 * </ul>
 * </p>
 *
 * @see org.eclipse.osbp.xtext.statemachine.StatemachineDSLPackage#getStatemachineActionPeripheralMarqueeFormat()
 * @model
 * @generated
 */
public interface StatemachineActionPeripheralMarqueeFormat extends StatemachineAction {
	/**
	 * Returns the value of the '<em><b>Device</b></em>' reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Device</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Device</em>' reference.
	 * @see #setDevice(StatemachinePeripheralDeviceLineDisplay)
	 * @see org.eclipse.osbp.xtext.statemachine.StatemachineDSLPackage#getStatemachineActionPeripheralMarqueeFormat_Device()
	 * @model
	 * @generated
	 */
	StatemachinePeripheralDeviceLineDisplay getDevice();

	/**
	 * Sets the value of the '{@link org.eclipse.osbp.xtext.statemachine.StatemachineActionPeripheralMarqueeFormat#getDevice <em>Device</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Device</em>' reference.
	 * @see #getDevice()
	 * @generated
	 */
	void setDevice(StatemachinePeripheralDeviceLineDisplay value);

	/**
	 * Returns the value of the '<em><b>Format</b></em>' attribute.
	 * The literals are from the enumeration {@link org.eclipse.osbp.xtext.statemachine.StatemachineLineDisplayMarqueeFormat}.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Format</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Format</em>' attribute.
	 * @see org.eclipse.osbp.xtext.statemachine.StatemachineLineDisplayMarqueeFormat
	 * @see #setFormat(StatemachineLineDisplayMarqueeFormat)
	 * @see org.eclipse.osbp.xtext.statemachine.StatemachineDSLPackage#getStatemachineActionPeripheralMarqueeFormat_Format()
	 * @model unique="false"
	 * @generated
	 */
	StatemachineLineDisplayMarqueeFormat getFormat();

	/**
	 * Sets the value of the '{@link org.eclipse.osbp.xtext.statemachine.StatemachineActionPeripheralMarqueeFormat#getFormat <em>Format</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Format</em>' attribute.
	 * @see org.eclipse.osbp.xtext.statemachine.StatemachineLineDisplayMarqueeFormat
	 * @see #getFormat()
	 * @generated
	 */
	void setFormat(StatemachineLineDisplayMarqueeFormat value);

} // StatemachineActionPeripheralMarqueeFormat
