//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, vJAXB 2.1.10 in JDK 6 
// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
// Any modifications to this file will be lost upon recompilation of the source schema. 
// Generated on: 2011.02.15 at 04:31:32 PM CET 
//


package org.eclipse.ptp.rm.lml.internal.core.elements;

import java.io.Serializable;


import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;


/**
 * Settings will not be inherited through hierarchy, but default layout will be set for all scheme-elements, which are not defined
 * 
 * <p>Java class for nodedisplaylayout_type complex type.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * 
 * <pre>
 * &lt;complexType name="nodedisplaylayout_type">
 *   &lt;complexContent>
 *     &lt;extension base="{http://www.llview.de}componentlayout_type">
 *       &lt;sequence>
 *         &lt;element name="el0" type="{http://www.llview.de}nodedisplayelement0"/>
 *       &lt;/sequence>
 *     &lt;/extension>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * </pre>
 * 
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "nodedisplaylayout_type", propOrder = {
    "el0"
})
public class NodedisplaylayoutType
    extends ComponentlayoutType
 implements Serializable {

    @XmlElement(required = true)
    protected Nodedisplayelement0 el0;

    /**
     * Gets the value of the el0 property.
     * 
     * @return
     *     possible object is
     *     {@link Nodedisplayelement0 }
     *     
     */
    public Nodedisplayelement0 getEl0() {
        return el0;
    }

    /**
     * Sets the value of the el0 property.
     * 
     * @param value
     *     allowed object is
     *     {@link Nodedisplayelement0 }
     *     
     */
    public void setEl0(Nodedisplayelement0 value) {
        this.el0 = value;
    }

}
