metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2015-08-07 12:46 pm

Автоматический layout гуя типичной опердени

Как известно, в оперденях большое количество кода реализует один типичный класс операций - ввод первичных данных.
Безотносительно к тому, что оно все херово обобщаемое даже на уровне работы с сугубо данными (нетривиальные зависимости, которые без sum types плохо моделировать, валидация из разряда "юзеры, умершие 15 нисана получают дополнительную жизнь, если в поле father написано God" и прочее такое) есть еще одна проблема, решения которой, отличного от "специально назначенные женщины-программисты рисуют гуй руками" я не видел.

А именно - layout интерфейса. Обычно оные окна ввода выглядят как 10-20-50 контролов вида "имя поля, данные поля, дополнительные данные вычисляемые из поля (подпись из справочника), кнопочька для вызова справочника или календаря". И если это чюдо не выровнять аккуратно - интерфейс начинает выглядеть как говно. При этом, если интерфейс используется для разных языков - то оно должно быть выравнено еще и для разных длин строк. А еще, желательно, чтобы окно можно было ресайзить и чтобы поля интерфейса ресайзились соответственно, да еще и с учетом допустимых значений (например, целочисленное поле нету смысла ресайзить больше чем 11 символов*ширину символа+хрен пойми какой отступ, зависящий от темы, версии ос, DPI и хрен знает чего, аналогично для дат и прочего).
В итоге, получается, что даже в простейшем случае "вертикально расположены 10 полей ввода" - нужно выровнять их подписи согласно их реальному размеру, учесть идиотизм с отступами, ClientSize, Margin, Padding и прочей чернью, затем выровнять сами поля ввода, выровнять зависимые поля, выровнять кнопочьки справочников и прочую чернягу, сделать минимальный размер окна таким, чтобы это все влазило и было читабельным, проверить на разных dpi, языках, темах UI и версиях виндов, включая модифицированные zvercd-cool-fucked-up-ui-edition и все это очень сильно огорчает.
Простейшие случаи я как-то автоматизировал, но радости все равно не возникает, малейшее дополнение в требованиях, типа "вместо одной кнопки справочника - две для разных действий" и вся генерация гуя ломается. А писать/рисовать гуй вручную, особенно в проклятых дизайнерах - это унижение для разумных существ.

[identity profile] inconceivable2.livejournal.com 2015-08-07 10:03 am (UTC)(link)
А этот есть же, какой-то специальный constraint solver для гуя, вот например (https://en.wikipedia.org/wiki/Cassowary_%28software%29).

[identity profile] gineer.livejournal.com 2015-08-07 10:03 am (UTC)(link)
Вот, да. +++
wizzard: (Default)

[personal profile] wizzard 2015-08-07 10:29 am (UTC)(link)
насыпать эвристик в констрейнт солвер и/или повыводить из типичных шаблонов, да.

[identity profile] hshhhhh.livejournal.com 2015-08-07 10:56 am (UTC)(link)
прозвучит, конечно, смешно, но HTML же просто идеален для таких интерфейсов.

[identity profile] cross-join.livejournal.com 2015-08-07 11:02 am (UTC)(link)
Массовое овладение разработкой формочек сделало ручной расклад неунизительным и дешевым занятием.

[identity profile] swizard.livejournal.com 2015-08-07 11:08 am (UTC)(link)
Когда я приду к власти — все опердени в стране будут работать на базе емакса.
ext_659950: (normal)

[identity profile] perplexed-bear.livejournal.com 2015-08-07 11:16 am (UTC)(link)
Гм. А нейронную сеть обучить строить интерфейс?

[identity profile] justy-tylor.livejournal.com 2015-08-07 01:17 pm (UTC)(link)
Проблемы "как это будет таким-то шрифтом в таком-то контроле с такой-то темой в завтрашней операционке" решаемы, просто нужен опыт и время, желательно в образе отдельного спеца, который будет заниматься исключительно GUI. Фактически, это написание и поддержка своего грида, только с более хитрыми условиями.

А если ресурсов нет, то используется какой-нибудь готовый грид типа "простыня". Ибо нефиг.

[identity profile] osdm.livejournal.com 2015-08-07 03:22 pm (UTC)(link)
XAML и его потомки не подходят?

[identity profile] clayrat.livejournal.com 2015-08-07 03:37 pm (UTC)(link)
вот тут что-то с FRP мутят http://www.vpri.org/pdf/m2013003_ksapps.pdf

[identity profile] berezovsky.livejournal.com 2015-08-07 03:55 pm (UTC)(link)
рисовать и придерживаться рекомендаций MS по рисованию интерфейов, сколько между чем чего должно быть

[identity profile] binf.livejournal.com 2015-08-07 04:04 pm (UTC)(link)
1) Чтобы гуй не выглядел колхозно-уёбищно, надо взять какую нить Metro UI либу. Я пользуюсь опенсорцной Mahapps Metro, но щас есть много качественных с платным саппортом, для опердней там расценки смешные вообще. тогда можно делать Гуй без проф.дизайнеров и UXнутой хуеты

2) Надо, чтобы бизнесс-лоджик вызывал гуй, а не наоборот. Чтобы гуй можно было делать из repl. Тогда проще писать тесты, лучше модульность, все дела

3) Я обычно делаю маленькие вьюшки на жутком Хамле без С# или с минимумом C#. MVC-биндинг (или SmartUI обвеска в зависимости от задачи) и вся логика Гуя - на F#, так проще жить
Edited 2015-08-07 16:06 (UTC)

[identity profile] lekard.livejournal.com 2015-08-08 10:11 am (UTC)(link)
property grid по-умолчанию + дать пользователю в руки простой инструмент чтобы он сам себе формочки рисовал если ему где потребуется. С простым генератором "рыбы" формы на основе данных, но чтобы пользователь сам потом уточнял расположение, размеры и т.д. контролов.