Короче у меня есть какой-то обьект, допустим окно с текстом. У него есть несколько параметров, такие например как цвет фона, цвет текста, параметры шрифта, фоновая картинка и т.п. (как наверно уже догадались речь идет о скинабельности). Все параметры описываются ну например в xml.
Кроме параметров у обьекта есть ещё и состояния. Самые основные это выбран обект или нет. Кроме основных могут быть ещё и неограниченное количество лубых состояний которые нужны этому обьекту. Ну там например если это окно предназначенно для вывода текущего дня недели, у него дополнительно есть 2 состояния - выходные и будни например, в выходные надо писать текст одним цветом в будни другим.
Теперь как это описывается. В для любого из состояний можно задать специфические для этого состояния параметры. Ну например для состояния когда окно выделено можно задать другой цвет фона, или болдовый шрифт для надписи. Так же как и для состояния выходных можно изменить цвер текста.
Проблема в том, как описать эти состояния в самом обьекте. Я сперва сделал структуру в которой отбьявил все параметры состояния. И создал два экземпляра этой структуры для выделенного и не выделенного состояния. Сначала записал туда все дефолтовые значения а потом поверх специфические для этих состояний значения. И при отрисовке выбирается одно из состояний и берутся его параметры. Тут все нормально.
Но когда появляются другие перекрывающиеся состояния возникает большая проблема. Т.е. если обект например выделен и сейчас выходной день, он должен кроме дефолтовых значений учесть специфические значения для как для выделенного состояния так и для состояния выходных. Если взять структуру в которой хранится состояние выделенного и скопировать туда структуру выходного, то она перепишет все её не нужные параметры. Ну т.е.
Код: Выделить всё
состояние: номальное
{
цвет фона - белый // дефолтовое
цвет текста - черный // дефолтовое
}
состояние: выделенное
{
цвет фона - синий //специфическое
цвет текста - черный //дефолтовое
}
состояние: будни
{
цвет фона - белый // дефолтовое
цвет текста - черный // дефолтовое
}
состояние: выходные
{
цвет фона - белый // дефолтовое
цвет текста - красный //специфическое
}
состояние: выделенное + выходные //которое болжно быть по логике
{
цвет фона - синий //специфическое
цвет текста - красный //специфическое
}
Я вот подумал ещё, что можно сразу на стадии создания структур создать по структуре для всех комбинаций состояний. Т.е. номальное+будни, нормальное+выходные, выделенное+будни и выделенное+выходные, но в этом случае если будет расти количество перекрестных состояний, может получиться очень приличный обьем этих структур