Доброго времени суток!
Я сейчас пишу достаточно большой для себя проект и у меня не получается должным образом формализовать одно требование из технического задания, поэтому обращаюсь за помощью.
Итак, что мне нужно сделать — небольшое введение. У меня есть приложение, которое отвечает за мониторинг определенного технического объекта. Другими словами, приложение отображает состояние диагностируемого объекта в графической форме на экране компьютера. Контрольно-измерительная аппаратура на объекте отправляет данные в виде UDP-пакетов, мое приложение обрабатывает эти пакеты. К приложению подключаются специальные модули, которые определяют какой-нибудь элемент на объекте — датчик давления, температуры, высоты. В этом модуле хранится следующая информация:
1. Как датчик должен выглядеть на экране (т.е. набор графических примитивов);
1а. Как датчик должен выглядеть в случае, если измеряемый параметр корректен;
1б. Как датчик должен выглядеть в случае, если измеряемый параметр некорректен;
1в. Как датчик должен выглядеть в случае, если нет сигнала с контрольно-измерительной аппаратуры.
Небольшой пример, рассмотрим самый примитивный элемент — датчик давления.
Аппаратура на объекте отправляет для датчика давления число 0, на экране отображается белый квадрат с черным контуром. Число 1 — белый квадрат с зеленым контуром, число 2 — зеленый квадрат с зеленым контуром, 3 — зеленый квадрат с зеленым контуром и буквой «К» в центре, и.т.д. — всего 16 вариантов.
Проблема в том, что вся информация о цветах, фигурах должна храниться в модулях. А датчики могут быть не только квадратные, но и вращающиеся, просто заполняющиеся (по типу Progress Bar) и просто цифровые. И это все нужно унифицировать.
Я сейчас пришел к следующей схеме: у меня есть набор графических примитивов, из которых строится графическое представление элемента. В случае с датчиком давления — контур, заливка, и текст. И есть еще объек, который ставит в соответствии с каждым значением от аппаратуры — соответствующую фигуру и соответствующие цвета. Получается приведенный пример можно представить следующим образом:
Запись №1. Значение от сервера - 0. Фигура 1 (контур) - черный тонкий контур. Фигура 2 (заливка) - белая.
Запись №2. Значение от сервера - 1. Фигура 1 (контур) - зеленый толстый контур. Фигура 2 (заливка) - белая.
Запись №4. Значение от сервера - 3. Фигура 1 (контур) - зеленый толстый контур. Фигура 2 (заливка) - зеленая. Фигура 3 (текст) - черный, фиксированный текст.
Приведенная схема хоть и объемная, но работает. Но вот как добавлять еще и анимацию вроде вращения или заполнения (progress bar) — вообще непонятно.
Ну вот и получается следующий вопрос — на правильном ли я пути, или делаю свой велосипед? Может быть есть какой способ попроще представить подобный модуль? Или кто-то занимался подобными проектами и поделится опытом?