Enum контрола по диапазонам

Добрый день

Имеющийся способ у контрола преобразовать число в некое человеческое название требует перечисления всех вариантов, а не перечисленное значение выводится как есть.

        "enum": [
          0,
          1,
          2
        ],
        "enum_titles": [
          "Адын",
          "Дыва",
          "Тры"
        ]

Это самый ходовой случай, он решает самую частую задачу без привлечения скриптов.

У меня менее распространённый случай который, пока, решу скриптом (ну или enum на 360 элементов), но хотелось бы “из коробки”.

Моя задача - направление ветра в градусах преобразовать в человеческое “северный”, “юго-западный” и так далее. Возможно, и в других предметных областях найдётся похожее.

Предлагаю enum-range - описываются диапазоны значений.

И новый не обязательный параметр enum-outer - для отображения величины меньше минимального в перечислении у enum-range и для любой не перечисленной величины для обычного enum.

Искуственный пример - мапинг величины от 0 до 99:

        "enum-range": [
          0,
          1,
          20,
          40,
          60,
          80,
          99,
          100
        ],

       "enum_outer":  "Ошибка",

       "enum_titles": [
           "Нет (0)",
           "Мало (1-19)",
           "Немножко (20-39)",
           "Нормально (40-59)",
           "Много (60-79)",
           "До фига (80-98)",
           "Мы все умрём (99)",
           "Ошибка"
        ]

Принцип работы:

  • в перечислении чисел enum-range ищётся максимальное которое меньше или равно значению и выводится его enum_titles
  • если значение меньше минимально - используется enum-outer (при наличии) иначе выводится как есть.

В примере:

  • для 25 это будет 20 - “Немножко”
  • для 60 - 60 - “Много”
  • для -40 - “Ошибка” из enum-outer
  • для 100500 - “Ошибка” от затычки 100

А для направления ветра примерно вот так:

        "enum-range": [
          0,
          22,
          67,
          112,
          157,
          202,
          247,
          292,
          337,
          360
        ],

       "enum_outer":  "Ошибка",

        "enum_titles": [
          "Северный",
          "Северо-восточный",
          "Восточный",
          "Юго-восточный",
          "Южный",
          "Юго-западный",
          "Западный",
          "Северо-западный",
          "Cеверный",
          "Ошибка",
        ]

Добрый день.
Добавлю (запишу) в пожелания.