# `enum` (parameter type)

Enumerations are specified with `type="enum"` in the parameter definition and the possible values are specified as a list of strings, `values={...}`:

>         {name="Color", type="enum", values={"Red", "Green", "Blue"}, default="Red"}

An enum parameter will have a single value from the list of values at a time. The parameter choice is presented as a drop down menu:

The displayed text for the `values` can be controlled in language resource files files, by specifying translations for the keys of the enum values (“Red”, “Green” and “Blue” in the example).

The current value of an enum-parameter is accessed via `self.parameters` in `execute`, which provides a `string` of one of the the defined `values`:

>       local color = self.parameters.Color
>       if color == "Red" then
>         print("Red color is selected.")
>       end

## Enumeration with result references

An enumeration can include result references in its values. This allows specifying named alternatives other than the “None” option of `ResultReference`, and having specific behavior for the non-reference entries:

>         {name='MyEnumReference',
>          type="enum",
>          values={"TopLeft", -- regular enum value
>                  "BottomRight", -- regular enum value
>                  Tool.reference("Point")}, -- result reference
>          default="TopLeft"}

The drop-down in this case includes the regular values and a list of all results of the referenced types from the tools in the configuration:

The current value of an enum parameter with references should be compared with the statically defined enum values in `execute`:

> - If the value matches a statically defined value, that case should be handled as appropriate.

> - If the value doesn’t match any of the statically defined values, a referenced item has been selected and the result reference can be passed to `input:getResult`.

>       local referencedPoint
>       if self.parameters.MyEnumReference == "TopLeft" then
>         referencedPoint = Point.create(0, 0)
>       elseif self.parameters.MyEnumReference == "BottomRight" then
>         referencedPoint = Point.create(640, 480)
>       else
>         -- Retrieve referenced point
>         referencedPoint = input:getResult(self.parameters.MyEnumReference)
>       end