<beginfold id='1'>/**</beginfold id='1'>
 * module
 <endfold id='1'>*/</endfold id='1'>
@config_simulator: { defaultServerMode: "gui" }
@config_server_qtro: { useGeneratedMain: true }
module org.example.echomodule 1.0

<beginfold id='1'>/**</beginfold id='1'>
 * \brief the brief
 * the description
 * continues \l http://qt.io
 <endfold id='1'>*/</endfold id='1'>
@config: {id: "org.foo.id.1.0", qml_class_name: "UiEcho"}
interface Echo <beginfold id='2'>{</beginfold id='2'>
    <beginfold id='1'>/**</beginfold id='1'>
     * \brief brief message
     *
     * Some more documentation
     <endfold id='1'>*/</endfold id='1'>
    readonly string lastMessage;
    int intValue;
    var varValue;
    @config: { getter_name: "isEchoEnabled" }
    bool echoEnabled;
    @config_simulator: {minimum: 10.}
    real floatValue1;
    @config_simulator: {maximum: 10.}
    real floatValue2;
    string stringValue;
    model<Contact> contactList;
    Contact contact;
    Combo combo;
    list<int> intList;
    list<Combo> comboList;
    WeekDay weekDay;
    TestEnum testEnum;
    real UPPERCASEPROPERTY;
    <beginfold id='3'>/*</beginfold id='3'> TODO comment <endfold id='3'>*/</endfold id='3'>
    @config_simulator: { default: ["Hello Qt"] }
    OnlyAStringInAStruct stringInAStructProperty;

    // single line comment
    string echo(string msg);
    string id() const;
    Combo getCombo();
    void voidSlot();
    void voidSlot2(int param);
    void timer(int interval);
    AirflowDirection flagMethod(AirflowDirection direction);
    TestEnum enumMethod(TestEnum testEnum);

    signal anotherChanged(AnotherStruct another);
    signal foobar(string foo);
    signal somethingHappened();
    signal newValueAvailable(var newValue);
<endfold id='2'>}</endfold id='2'>

@config: {id: "org.foo.idz.1.0", zoned: true}
interface EchoZoned <beginfold id='2'>{</beginfold id='2'>

    <beginfold id='1'>/**</beginfold id='1'>
     * \brief brief message
     *
     * Some more documentation
     <endfold id='1'>*/</endfold id='1'>
    readonly string lastMessage;
    int intValue;
    var varValue;
    @config_simulator: {domain: ["one", "two", "three"]}
    string stringValue;
    string unsupportedValue;
    bool zonedValue;
    bool valueWithDefault;
    @config: { getter_name: "isEchoEnabled" }
    bool echoEnabled;
    AirflowDirection airflowDirection;
    @config_simulator: {minimum: 10., maximum: 15.}
    int rangedValue;
    int rangedValueWithDefault;
    Contact contact;
    Combo combo;
    list<int> intList;
    list<Combo> comboList;
    WeekDay weekDay;
    TestEnum testEnum;
    real UPPERCASEPROPERTY;

    string echo(string msg);
    string id();
    var varMethod();
    Combo getCombo();
    string timer(int interval);
    AirflowDirection flagMethod(AirflowDirection direction);
    TestEnum enumMethod(TestEnum testEnum);

    signal anotherChanged(AnotherStruct another);
    signal foobar(string foo);
    signal somethingHappened();
    signal newValueAvailable(var newValue);
<endfold id='2'>}</endfold id='2'>

<beginfold id='1'>/**</beginfold id='1'>
 * \brief Control where the airflow goes
 <endfold id='1'>*/</endfold id='1'>
flag AirflowDirection <beginfold id='2'>{</beginfold id='2'>
    <beginfold id='1'>/**</beginfold id='1'>
     * \brief Airflow to the windshield
     <endfold id='1'>*/</endfold id='1'>
    Windshield = 1,
    <beginfold id='1'>/**</beginfold id='1'>
     * \brief Airflow to the dashboard
     <endfold id='1'>*/</endfold id='1'>
    Dashboard = 2,
    <beginfold id='1'>/**</beginfold id='1'>
     * \brief Airflow to the floor
     <endfold id='1'>*/</endfold id='1'>
    Floor = 4
<endfold id='2'>}</endfold id='2'>

@config: { type: "DaysOfTheWeek" }
flag WeekDay <beginfold id='2'>{</beginfold id='2'>
    Monday = 1,
    Tuesday = 2,
    Wednesday = 3,
    Thursday = 4,
    Friday = 5
<endfold id='2'>}</endfold id='2'>

enum TestEnum <beginfold id='2'>{</beginfold id='2'>
    FirstEnumValue = 1,
    SecondEnumValue = 2
<endfold id='2'>}</endfold id='2'>

<beginfold id='1'>/**</beginfold id='1'>
 * The contact information
 <endfold id='1'>*/</endfold id='1'>
struct Contact <beginfold id='2'>{</beginfold id='2'>
    string name;
    int age;
    bool isMarried;
    var additionalData;
<endfold id='2'>}</endfold id='2'>

struct Combo <beginfold id='2'>{</beginfold id='2'>
    Contact contactInfo;
    WeekDay day;
<endfold id='2'>}</endfold id='2'>

struct AnotherStruct <beginfold id='2'>{</beginfold id='2'>
    int justANumber;
<endfold id='2'>}</endfold id='2'>

<beginfold id='3'>/*</beginfold id='3'> AUTOSUITE-1340 <endfold id='3'>*/</endfold id='3'>
struct OnlyAStringInAStruct <beginfold id='2'>{</beginfold id='2'>
    string myString;
<endfold id='2'>}</endfold id='2'>
